Beispiel #1
0
        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);
            }
        }
Beispiel #2
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;
                    }
                }
            }
        }