public static void AddFrame(StandardFrame frame) { // ProcessFrame(frame); Monitor.Enter(_bufforLock); try { _frameBuffor.Add(frame); Monitor.Pulse(_bufforLock); } finally { Monitor.Exit(_bufforLock); } }
private static void ProcessFrame(StandardFrame frame) { Logger.Log(frame.Type.ToString() + " " + counter++); switch (frame.Type) { case FrameType.CLICK: _command.LeftClick(); break; case FrameType.MOVE: //_mouseController.Move(ConvertBytes(frame.Argument,0),ConvertBytes(frame.Argument,4)); _command.MoveCursor(ConvertBytes(frame.Argument, 0), ConvertBytes(frame.Argument, 4)); break; case FrameType.SCROLL: _command.Scroll(ConvertBytes(frame.Argument, 0)); break; case FrameType.MUTE: _command.Mute(); break; case FrameType.VOLUME_DOWN: _command.VolumeDown(); break; case FrameType.VOLUME_UP: _command.VolumeUp(); break; case FrameType.ZOOM: _command.Zoom(ConvertBytes(frame.Argument, 0)); break; case FrameType.CLOSE: _command.CloseWindow(); break; case FrameType.SWITCH: _command.Switch(ConvertBytes(frame.Argument, 0)); break; } }
private void readCallback(IAsyncResult ar) { var state = (SocketClient) ar.AsyncState; Socket handler = state.WorkSocket; int read = 0; try { read = handler.EndReceive(ar); } catch (SocketException) { allDone.Set(); clients--; Logger.Log("Zamknieto połączenie"); MainWindow.ClientsNumber(clients); handler.Close(); } // Data was read from the client socket. if (read > 0) { int startIndex = 0; if (state.BrokenFrame != null && state.BrokenFrame.Length > 0) { var type = (FrameType) (state.BrokenFrame[0]); var tmp = new byte[type.GetSize() - 1]; for (int i = 0; i < state.BrokenFrame.Length - 1; i++) { tmp[i] = state.BrokenFrame[i + 1]; } for (int i = 0, j = state.BrokenFrame.Length - 1; j < type.GetSize() - 1; i++,j++,startIndex++) { tmp[j] = state.Buffer[i]; } state.BrokenFrame = null; FrameInterpreter.AddFrame(new StandardFrame(type, tmp)); } for (int i = startIndex; i < read;) { //Logger.Log((string)read.ToString("G")); StandardFrame frame = null; var type = (FrameType) (state.Buffer[i]); if (type.GetSize() - 1 > 0) { if (i + type.GetSize() > read) { var tmp = new byte[read - i]; Array.Copy(state.Buffer, i, tmp, 0, read - i); state.BrokenFrame = tmp; } else { var tmp = new byte[type.GetSize() - 1]; Array.Copy(state.Buffer, i + 1, tmp, 0, type.GetSize() - 1); frame = new StandardFrame(type, tmp); FrameInterpreter.AddFrame(frame); } } else { frame = new StandardFrame(type, null); FrameInterpreter.AddFrame(frame); } i += type.GetSize(); } // state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, read)); handler.BeginReceive(state.Buffer, 0, SocketClient.BufferSize, 0, readCallback, state); } else { Logger.Log("Zamknieto połączenie"); /* if (state.sb.Length > 1) { // All the data has been read from the client; // display it on the console. string content = state.sb.ToString(); Console.WriteLine("Read {0} bytes from socket.\n Data : {1}", content.Length, content); }*/ handler.Close(); } }