Exemplo n.º 1
0
        private static async Task SendFrame(byte[] encodedImageBytes, Rectangle diffArea, long sequence, Viewer viewer)
        {
            if (encodedImageBytes.Length == 0)
            {
                return;
            }

            await viewer.SendScreenCapture(new CaptureFrame()
            {
                EncodedImageBytes = encodedImageBytes,
                Top      = diffArea.Top,
                Left     = diffArea.Left,
                Width    = diffArea.Width,
                Height   = diffArea.Height,
                Sequence = sequence
            });
        }
Exemplo n.º 2
0
        public async Task ParseMessage(Viewer viewer, byte[] message)
        {
            try
            {
                var baseDto = MessagePackSerializer.Deserialize <BaseDto>(message);

                switch (baseDto.DtoType)
                {
                case BaseDtoType.MouseMove:
                case BaseDtoType.MouseDown:
                case BaseDtoType.MouseUp:
                case BaseDtoType.Tap:
                case BaseDtoType.MouseWheel:
                case BaseDtoType.KeyDown:
                case BaseDtoType.KeyUp:
                case BaseDtoType.CtrlAltDel:
                case BaseDtoType.ToggleBlockInput:
                case BaseDtoType.ClipboardTransfer:
                case BaseDtoType.KeyPress:
                case BaseDtoType.SetKeyStatesUp:
                {
                    if (!viewer.HasControl)
                    {
                        return;
                    }
                }
                break;

                default:
                    break;
                }

                switch (baseDto.DtoType)
                {
                case BaseDtoType.SelectScreen:
                    SelectScreen(message, viewer);
                    break;

                case BaseDtoType.MouseMove:
                    MouseMove(message, viewer);
                    break;

                case BaseDtoType.MouseDown:
                    MouseDown(message, viewer);
                    break;

                case BaseDtoType.MouseUp:
                    MouseUp(message, viewer);
                    break;

                case BaseDtoType.Tap:
                    Tap(message, viewer);
                    break;

                case BaseDtoType.MouseWheel:
                    MouseWheel(message);
                    break;

                case BaseDtoType.KeyDown:
                    KeyDown(message);
                    break;

                case BaseDtoType.KeyUp:
                    KeyUp(message);
                    break;

                case BaseDtoType.CtrlAltDel:
                    await viewer.SendCtrlAltDel();

                    break;

                case BaseDtoType.ToggleAudio:
                    ToggleAudio(message);
                    break;

                case BaseDtoType.ToggleBlockInput:
                    ToggleBlockInput(message);
                    break;

                case BaseDtoType.ToggleWebRtcVideo:
                    ToggleWebRtcVideo(message, viewer);
                    break;

                case BaseDtoType.ClipboardTransfer:
                    await ClipboardTransfer(message);

                    break;

                case BaseDtoType.KeyPress:
                    await KeyPress(message);

                    break;

                case BaseDtoType.File:
                    await DownloadFile(message);

                    break;

                case BaseDtoType.WindowsSessions:
                    await GetWindowsSessions(viewer);

                    break;

                case BaseDtoType.SetKeyStatesUp:
                    SetKeyStatesUp();
                    break;

                case BaseDtoType.FrameReceived:
                    HandleFrameReceived(viewer);
                    break;

                case BaseDtoType.OpenFileTransferWindow:
                    OpenFileTransferWindow(viewer);
                    break;

                default:
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Write(ex);
            }
        }
Exemplo n.º 3
0
 public async Task DisconnectViewer(Viewer viewer, bool notifyViewer)
 {
     viewer.DisconnectRequested = true;
     viewer.Dispose();
     await Connection.SendAsync("DisconnectViewer", viewer.ViewerConnectionID, notifyViewer);
 }
Exemplo n.º 4
0
        private void SelectScreen(byte[] message, Viewer viewer)
        {
            var dto = MessagePackSerializer.Deserialize <SelectScreenDto>(message);

            viewer.Capturer.SetSelectedScreen(dto.DisplayName);
        }
Exemplo n.º 5
0
        private void ToggleWebRtcVideo(byte[] message, Viewer viewer)
        {
            var dto = MessagePackSerializer.Deserialize <ToggleWebRtcVideoDto>(message);

            viewer.ToggleWebRtcVideo(dto.ToggleOn);
        }
Exemplo n.º 6
0
        private void MouseUp(byte[] message, Viewer viewer)
        {
            var dto = MessagePackSerializer.Deserialize <MouseUpDto>(message);

            KeyboardMouseInput.SendMouseButtonAction(dto.Button, ButtonAction.Up, dto.PercentX, dto.PercentY, viewer);
        }
Exemplo n.º 7
0
 private void OpenFileTransferWindow(Viewer viewer)
 {
     FileTransferService.OpenFileTransferWindow(viewer);
 }
Exemplo n.º 8
0
 private void HandleFrameReceived(Viewer viewer)
 {
     viewer.DequeuePendingFrame();
 }
Exemplo n.º 9
0
        private void MouseMove(byte[] message, Viewer viewer)
        {
            var dto = MessagePackSerializer.Deserialize <MouseMoveDto>(message);

            KeyboardMouseInput.SendMouseMove(dto.PercentX, dto.PercentY, viewer);
        }
Exemplo n.º 10
0
 private async Task GetWindowsSessions(Viewer viewer)
 {
     await viewer.SendWindowsSessions();
 }
Exemplo n.º 11
0
 public void InvokeViewerAdded(Services.Viewer viewer)
 {
     ViewerAdded?.Invoke(null, viewer);
 }
Exemplo n.º 12
0
        private void ToggleAutoQuality(byte[] message, Viewer viewer)
        {
            var dto = MessagePackSerializer.Deserialize <ToggleAutoQualityDto>(message);

            viewer.AutoQuality = dto.ToggleOn;
        }
Exemplo n.º 13
0
 public WebRtcSession(Viewer viewer, IRtcMessageHandler rtcMessageHandler)
 {
     Viewer            = viewer;
     RtcMessageHandler = rtcMessageHandler;
 }
Exemplo n.º 14
0
        private static void SendFrames(Bitmap currentFrame, ICollection <Rectangle> diffAreas, Viewer viewer, SemaphoreSlim sendFramesLock)
        {
            _ = Task.Run(async() =>
            {
                try
                {
                    var frames = new List <CaptureFrame>();

                    foreach (var diffArea in diffAreas)
                    {
                        using var newImage = currentFrame.Clone(diffArea, PixelFormat.Format32bppArgb);

                        var encodedImageBytes = ImageUtils.EncodeBitmap(newImage, viewer.EncoderParams);

                        if (encodedImageBytes?.Length > 0)
                        {
                            frames.Add(new CaptureFrame()
                            {
                                EncodedImageBytes = encodedImageBytes,
                                Top    = diffArea.Top,
                                Left   = diffArea.Left,
                                Width  = diffArea.Width,
                                Height = diffArea.Height,
                            });
                        }
                    }
                    ;
                    await viewer.SendScreenCapture(frames);
                }
                finally
                {
                    sendFramesLock.Release();
                    currentFrame.Dispose();
                }
            });
        }