void RemoveScreen(CheckOutMessage checkOut) { ScreenConfiguration screenConfiguration = _screen.ScreenConfiguration; if (screenConfiguration.Remove(checkOut.ClientName)) { if (screenConfiguration.ValidVirtualCoordinate(state.VirtualX, state.VirtualY) != null) { return; } //coordinates are invalid, grab a screen var s = screenConfiguration.GetFurthestLeft(); state.VirtualX = s.X; state.VirtualY = s.Y; if (s.Client != state.ClientName) { return; } //set this local client to have 0,0 coords. then update the other clients with the new virtual position. state.LastPositionX = 0; state.LastPositionY = 0; _hook.SetMousePos(0, 0); } }
void ProcessClient(ISocketClient client) { var stream = client.GetStream(); while (isRunning) { var buffer = new byte[Message.HeaderSize]; if (stream.Read(buffer, 0, Message.HeaderSize) > 0 && isRunning) { switch ((MessageType)(buffer[0] & Message.TypeMask)) { case MessageType.MoveScreen: break; case MessageType.MouseWheel: OnMouseWheelFromServer(buffer); break; case MessageType.MouseButton: OnMouseButtonFromServer(buffer); break; case MessageType.MouseMove: OnMouseMoveFromServer(buffer); break; case MessageType.KeyPress: OnKeyPressFromServer(buffer); break; case MessageType.Clipboard: OnClipboardFromServer(new ClipboardMessage(MessagePacket.Parse(new MessageInfo(buffer), stream))); break; case MessageType.CheckIn: CheckInMessage checkIn = new CheckInMessage(MessagePacket.Parse(new MessageInfo(buffer), stream)); // Config OnScreenConfig(checkIn.Screens); ScreenConfig(stream); break; case MessageType.CheckOut: RemoveScreen(CheckOutMessage.Parse(new MessageInfo(buffer), stream)); client.Dispose(); return; } } } }