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 }); }
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); } }
public async Task DisconnectViewer(Viewer viewer, bool notifyViewer) { viewer.DisconnectRequested = true; viewer.Dispose(); await Connection.SendAsync("DisconnectViewer", viewer.ViewerConnectionID, notifyViewer); }
private void SelectScreen(byte[] message, Viewer viewer) { var dto = MessagePackSerializer.Deserialize <SelectScreenDto>(message); viewer.Capturer.SetSelectedScreen(dto.DisplayName); }
private void ToggleWebRtcVideo(byte[] message, Viewer viewer) { var dto = MessagePackSerializer.Deserialize <ToggleWebRtcVideoDto>(message); viewer.ToggleWebRtcVideo(dto.ToggleOn); }
private void MouseUp(byte[] message, Viewer viewer) { var dto = MessagePackSerializer.Deserialize <MouseUpDto>(message); KeyboardMouseInput.SendMouseButtonAction(dto.Button, ButtonAction.Up, dto.PercentX, dto.PercentY, viewer); }
private void OpenFileTransferWindow(Viewer viewer) { FileTransferService.OpenFileTransferWindow(viewer); }
private void HandleFrameReceived(Viewer viewer) { viewer.DequeuePendingFrame(); }
private void MouseMove(byte[] message, Viewer viewer) { var dto = MessagePackSerializer.Deserialize <MouseMoveDto>(message); KeyboardMouseInput.SendMouseMove(dto.PercentX, dto.PercentY, viewer); }
private async Task GetWindowsSessions(Viewer viewer) { await viewer.SendWindowsSessions(); }
public void InvokeViewerAdded(Services.Viewer viewer) { ViewerAdded?.Invoke(null, viewer); }
private void ToggleAutoQuality(byte[] message, Viewer viewer) { var dto = MessagePackSerializer.Deserialize <ToggleAutoQualityDto>(message); viewer.AutoQuality = dto.ToggleOn; }
public WebRtcSession(Viewer viewer, IRtcMessageHandler rtcMessageHandler) { Viewer = viewer; RtcMessageHandler = rtcMessageHandler; }
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(); } }); }