From ec2ae45e88413179a9417d37968aa3fab5f20ede Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sat, 7 Aug 2021 17:53:14 +0000 Subject: [PATCH] Merged PR 9: Auto-quality tweaks. Auto-quality updates. --- .editorconfig | 5 +- Desktop.Core/Conductor.cs | 7 - Desktop.Core/Models/CaptureFrame.cs | 1 + Desktop.Core/Services/CasterSocket.cs | 61 ++++---- Desktop.Core/Services/DtoMessageHandler.cs | 10 +- Desktop.Core/Services/ScreenCaster.cs | 35 +++-- Desktop.Core/Services/Viewer.cs | 139 +++++++++++++----- Desktop.Core/Utilities/ImageUtils.cs | 8 +- Desktop.Win/Models/DirectXOutput.cs | 3 +- .../PublishProfiles/install-folder.pubxml | 18 +++ Desktop.Win/Services/ScreenCapturerWin.cs | 40 +++-- Desktop.Win/ViewModels/MainWindowViewModel.cs | 49 +++--- Desktop.Win/Views/MainWindow.xaml | 2 +- .../ViewModels/MainWindowViewModel.cs | 59 ++++---- Desktop.XPlat/Views/MainWindow.axaml | 2 +- Server/Hubs/CasterHub.cs | 4 +- Server/Startup.cs | 15 -- Server/wwwroot/src/RemoteControl/App.js | 3 +- Server/wwwroot/src/RemoteControl/App.js.map | 2 +- Server/wwwroot/src/RemoteControl/App.ts | 3 +- .../src/RemoteControl/CaptureProcessor.js | 76 ++++++++++ .../src/RemoteControl/CaptureProcessor.js.map | 1 + .../src/RemoteControl/CaptureProcessor.ts | 97 ++++++++++++ .../src/RemoteControl/ClipboardWatcher.js | 18 +-- .../src/RemoteControl/ClipboardWatcher.js.map | 2 +- .../src/RemoteControl/ClipboardWatcher.ts | 21 +-- .../src/RemoteControl/DtoMessageHandler.js | 43 +----- .../RemoteControl/DtoMessageHandler.js.map | 2 +- .../src/RemoteControl/DtoMessageHandler.ts | 53 +------ .../src/RemoteControl/Enums/BaseDtoType.js | 1 - .../RemoteControl/Enums/BaseDtoType.js.map | 2 +- .../src/RemoteControl/Enums/BaseDtoType.ts | 1 - .../src/RemoteControl/InputEventHandlers.js | 5 - .../RemoteControl/InputEventHandlers.js.map | 2 +- .../src/RemoteControl/InputEventHandlers.ts | 5 - .../src/RemoteControl/Interfaces/Dtos.js.map | 2 +- .../src/RemoteControl/Interfaces/Dtos.ts | 11 +- .../RemoteControl/Models/CompletedFrame.js | 3 + .../Models/CompletedFrame.js.map | 1 + .../RemoteControl/Models/CompletedFrame.ts | 6 + .../src/RemoteControl/ViewerHubConnection.js | 1 - .../RemoteControl/ViewerHubConnection.js.map | 2 +- .../src/RemoteControl/ViewerHubConnection.ts | 1 - Shared/Enums/BaseDtoType.cs | 2 - .../RemoteControlDtos/CaptureFrameDto.cs | 18 +-- .../RemoteControlDtos/MachineNameDto.cs | 20 --- .../Models/RemoteControlDtos/ScreenDataDto.cs | 22 +-- Shared/Models/SentFrame.cs | 7 +- Shared/Utilities/Logger.cs | 6 +- 49 files changed, 532 insertions(+), 365 deletions(-) create mode 100644 Desktop.Win/Properties/PublishProfiles/install-folder.pubxml create mode 100644 Server/wwwroot/src/RemoteControl/CaptureProcessor.js create mode 100644 Server/wwwroot/src/RemoteControl/CaptureProcessor.js.map create mode 100644 Server/wwwroot/src/RemoteControl/CaptureProcessor.ts create mode 100644 Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js create mode 100644 Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js.map create mode 100644 Server/wwwroot/src/RemoteControl/Models/CompletedFrame.ts delete mode 100644 Shared/Models/RemoteControlDtos/MachineNameDto.cs diff --git a/.editorconfig b/.editorconfig index 066d40e3..a78c12e3 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,4 +4,7 @@ dotnet_diagnostic.CA1416.severity = none # CS1591: Missing XML comment for publicly visible type or member -dotnet_diagnostic.CS1591.severity = none \ No newline at end of file +dotnet_diagnostic.CS1591.severity = none +csharp_style_var_for_built_in_types=true:silent +csharp_style_var_when_type_is_apparent=true:silent +csharp_style_var_elsewhere=true:silent \ No newline at end of file diff --git a/Desktop.Core/Conductor.cs b/Desktop.Core/Conductor.cs index 687d8ed8..d0612954 100644 --- a/Desktop.Core/Conductor.cs +++ b/Desktop.Core/Conductor.cs @@ -11,8 +11,6 @@ namespace Remotely.Desktop.Core { public event EventHandler ScreenCastRequested; - public event EventHandler SessionIDChanged; - public event EventHandler ViewerAdded; public event EventHandler ViewerRemoved; @@ -32,11 +30,6 @@ namespace Remotely.Desktop.Core ScreenCastRequested?.Invoke(null, viewerIdAndRequesterName); } - public void InvokeSessionIDChanged(string sessionID) - { - SessionIDChanged?.Invoke(null, sessionID); - } - public void InvokeViewerAdded(Services.Viewer viewer) { ViewerAdded?.Invoke(null, viewer); diff --git a/Desktop.Core/Models/CaptureFrame.cs b/Desktop.Core/Models/CaptureFrame.cs index fe997ef1..00288b8c 100644 --- a/Desktop.Core/Models/CaptureFrame.cs +++ b/Desktop.Core/Models/CaptureFrame.cs @@ -14,5 +14,6 @@ namespace Remotely.Desktop.Core.Models public int Left { get; init; } public int Height { get; init; } public int Width { get; init; } + public long Sequence { get; init; } } } diff --git a/Desktop.Core/Services/CasterSocket.cs b/Desktop.Core/Services/CasterSocket.cs index d0eb4d02..18f41934 100644 --- a/Desktop.Core/Services/CasterSocket.cs +++ b/Desktop.Core/Services/CasterSocket.cs @@ -20,14 +20,14 @@ namespace Remotely.Desktop.Core.Services Task DisconnectAllViewers(); Task DisconnectViewer(Viewer viewer, bool notifyViewer); Task GetIceServers(); - Task GetSessionID(); + Task GetSessionID(); Task NotifyRequesterUnattendedReady(string requesterID); Task NotifyViewersRelaunchedScreenCasterReady(string[] viewerIDs); Task SendConnectionFailedToViewers(List viewerIDs); Task SendConnectionRequestDenied(string viewerID); Task SendCtrlAltDelToAgent(); Task SendDeviceInfo(string serviceID, string machineName, string deviceID); - Task SendDtoToViewer(T baseDto, string viewerId); + Task SendDtoToViewer(T dto, string viewerId); Task SendIceCandidateToBrowser(string candidate, int sdpMlineIndex, string sdpMid, string viewerConnectionID); Task SendMessageToViewer(string viewerID, string message); Task SendRtcOfferToBrowser(string sdp, string viewerID, IceServerModel[] iceServers); @@ -108,11 +108,11 @@ namespace Remotely.Desktop.Core.Services } } - public async Task DisconnectViewer(Viewer viewer, bool notifyViewer) + public Task DisconnectViewer(Viewer viewer, bool notifyViewer) { viewer.DisconnectRequested = true; viewer.Dispose(); - await Connection.SendAsync("DisconnectViewer", viewer.ViewerConnectionID, notifyViewer); + return Connection.SendAsync("DisconnectViewer", viewer.ViewerConnectionID, notifyViewer); } public async Task GetIceServers() @@ -120,62 +120,62 @@ namespace Remotely.Desktop.Core.Services return await Connection.InvokeAsync("GetIceServers"); } - public async Task GetSessionID() + public async Task GetSessionID() { - await Connection.SendAsync("GetSessionID"); + return await Connection.InvokeAsync("GetSessionID"); } - public async Task NotifyRequesterUnattendedReady(string requesterID) + public Task NotifyRequesterUnattendedReady(string requesterID) { - await Connection.SendAsync("NotifyRequesterUnattendedReady", requesterID); + return Connection.SendAsync("NotifyRequesterUnattendedReady", requesterID); } - public async Task NotifyViewersRelaunchedScreenCasterReady(string[] viewerIDs) + public Task NotifyViewersRelaunchedScreenCasterReady(string[] viewerIDs) { - await Connection.SendAsync("NotifyViewersRelaunchedScreenCasterReady", viewerIDs); + return Connection.SendAsync("NotifyViewersRelaunchedScreenCasterReady", viewerIDs); } - public async Task SendConnectionFailedToViewers(List viewerIDs) + public Task SendConnectionFailedToViewers(List viewerIDs) { - await Connection.SendAsync("SendConnectionFailedToViewers", viewerIDs); + return Connection.SendAsync("SendConnectionFailedToViewers", viewerIDs); } - public async Task SendConnectionRequestDenied(string viewerID) + public Task SendConnectionRequestDenied(string viewerID) { - await Connection.SendAsync("SendConnectionRequestDenied", viewerID); + return Connection.SendAsync("SendConnectionRequestDenied", viewerID); } - public async Task SendMessageToViewer(string viewerID, string message) + public Task SendMessageToViewer(string viewerID, string message) { - await Connection.SendAsync("SendMessageToViewer", viewerID, message); + return Connection.SendAsync("SendMessageToViewer", viewerID, message); } - public async Task SendCtrlAltDelToAgent() + public Task SendCtrlAltDelToAgent() { - await Connection.SendAsync("SendCtrlAltDelToAgent"); + return Connection.SendAsync("SendCtrlAltDelToAgent"); } - public async Task SendDeviceInfo(string serviceID, string machineName, string deviceID) + public Task SendDeviceInfo(string serviceID, string machineName, string deviceID) { - await Connection.SendAsync("ReceiveDeviceInfo", serviceID, machineName, deviceID); + return Connection.SendAsync("ReceiveDeviceInfo", serviceID, machineName, deviceID); } - public Task SendDtoToViewer(T baseDto, string viewerId) + public Task SendDtoToViewer(T dto, string viewerId) { - var serializedDto = MessagePack.MessagePackSerializer.Serialize(baseDto); + var serializedDto = MessagePack.MessagePackSerializer.Serialize(dto); return Connection.SendAsync("SendDtoToBrowser", serializedDto, viewerId); } - public async Task SendIceCandidateToBrowser(string candidate, int sdpMlineIndex, string sdpMid, string viewerConnectionID) + public Task SendIceCandidateToBrowser(string candidate, int sdpMlineIndex, string sdpMid, string viewerConnectionID) { - await Connection.SendAsync("SendIceCandidateToBrowser", candidate, sdpMlineIndex, sdpMid, viewerConnectionID); + return Connection.SendAsync("SendIceCandidateToBrowser", candidate, sdpMlineIndex, sdpMid, viewerConnectionID); } - public async Task SendRtcOfferToBrowser(string sdp, string viewerID, IceServerModel[] iceServers) + public Task SendRtcOfferToBrowser(string sdp, string viewerID, IceServerModel[] iceServers) { - await Connection.SendAsync("SendRtcOfferToBrowser", sdp, viewerID, iceServers); + return Connection.SendAsync("SendRtcOfferToBrowser", sdp, viewerID, iceServers); } - public async Task SendViewerConnected(string viewerConnectionId) + public Task SendViewerConnected(string viewerConnectionId) { - await Connection.SendAsync("ViewerConnected", viewerConnectionId); + return Connection.SendAsync("ViewerConnected", viewerConnectionId); } private void ApplyConnectionHandlers() @@ -287,11 +287,6 @@ namespace Remotely.Desktop.Core.Services } }); - Connection.On("SessionID", (string sessionID) => - { - conductor.InvokeSessionIDChanged(sessionID); - }); - Connection.On("ViewerDisconnected", async (string viewerID) => { await Connection.SendAsync("DisconnectViewer", viewerID, false); diff --git a/Desktop.Core/Services/DtoMessageHandler.cs b/Desktop.Core/Services/DtoMessageHandler.cs index d6ebcf8c..f7ade9ee 100644 --- a/Desktop.Core/Services/DtoMessageHandler.cs +++ b/Desktop.Core/Services/DtoMessageHandler.cs @@ -161,15 +161,7 @@ namespace Remotely.Desktop.Core.Services private void HandleFrameReceived(Viewer viewer) { - while (viewer.PendingSentFrames.Count > 0 && - !viewer.IsStalled && - viewer.IsConnected) - { - if (viewer.PendingSentFrames.TryDequeue(out _)) - { - break; - } - } + viewer.DequeuePendingFrame(); } private void KeyDown(byte[] message) diff --git a/Desktop.Core/Services/ScreenCaster.cs b/Desktop.Core/Services/ScreenCaster.cs index 3adc1f61..d9b3c03e 100644 --- a/Desktop.Core/Services/ScreenCaster.cs +++ b/Desktop.Core/Services/ScreenCaster.cs @@ -42,6 +42,7 @@ namespace Remotely.Desktop.Core.Services { Bitmap currentFrame = null; Bitmap previousFrame = null; + long sequence = 0; var viewer = ServiceContainer.Instance.GetRequiredService(); viewer.Name = screenCastRequest.RequesterName; @@ -66,11 +67,11 @@ namespace Remotely.Desktop.Core.Services await viewer.SendViewerConnected(); - await viewer.SendMachineName(Environment.MachineName); - await viewer.SendScreenData( - viewer.Capturer.SelectedScreen, - viewer.Capturer.GetDisplayNames().ToArray()); + viewer.Capturer.SelectedScreen, + viewer.Capturer.GetDisplayNames(), + screenBounds.Width, + screenBounds.Height); await viewer.SendScreenSize(screenBounds.Width, screenBounds.Height); @@ -93,7 +94,8 @@ namespace Remotely.Desktop.Core.Services Left = screenBounds.Left, Top = screenBounds.Top, Width = screenBounds.Width, - Height = screenBounds.Height + Height = screenBounds.Height, + Sequence = sequence++ }); } } @@ -116,6 +118,7 @@ namespace Remotely.Desktop.Core.Services Thread.Sleep(100); continue; } + if (viewer.IsStalled) { // Viewer isn't responding. Abort sending. @@ -123,8 +126,6 @@ namespace Remotely.Desktop.Core.Services break; } - viewer.ThrottleIfNeeded(); - if (currentFrame != null) { previousFrame?.Dispose(); @@ -149,8 +150,21 @@ namespace Remotely.Desktop.Core.Services viewer.Capturer.CaptureFullscreen = false; using var croppedFrame = currentFrame.Clone(diffArea, currentFrame.PixelFormat); - var encodedImageBytes = ImageUtils.EncodeJpeg(croppedFrame); - await SendFrame(encodedImageBytes, diffArea, viewer); + + byte[] encodedImageBytes; + + if (viewer.ImageQuality == Viewer.DefaultQuality) + { + encodedImageBytes = ImageUtils.EncodeJpeg(croppedFrame); + } + else + { + encodedImageBytes = ImageUtils.EncodeJpeg(croppedFrame, viewer.ImageQuality); + } + + await SendFrame(encodedImageBytes, diffArea, sequence++, viewer); + + viewer.ApplyAutoQuality(); } catch (Exception ex) @@ -184,7 +198,7 @@ namespace Remotely.Desktop.Core.Services } } - private static async Task SendFrame(byte[] encodedImageBytes, Rectangle diffArea, Viewer viewer) + private static async Task SendFrame(byte[] encodedImageBytes, Rectangle diffArea, long sequence, Viewer viewer) { if (encodedImageBytes.Length == 0) { @@ -198,6 +212,7 @@ namespace Remotely.Desktop.Core.Services Left = diffArea.Left, Width = diffArea.Width, Height = diffArea.Height, + Sequence = sequence }); } } diff --git a/Desktop.Core/Services/Viewer.cs b/Desktop.Core/Services/Viewer.cs index cc582591..26e606d6 100644 --- a/Desktop.Core/Services/Viewer.cs +++ b/Desktop.Core/Services/Viewer.cs @@ -14,13 +14,23 @@ using System.Threading.Tasks; using System.Text.Json; using System.Threading; using System.Diagnostics; +using System.Collections; +using System.Collections.Generic; namespace Remotely.Desktop.Core.Services { public class Viewer : IDisposable { + public const int DefaultQuality = 75; + private const double MaxLatency = 300; + private const double MaxMbps = 9; + private const int MinQuality = 20; + private readonly ConcurrentQueue _sentMegabits = new(); + + private readonly ConcurrentQueue _sentTimestamps = new(); + public Viewer(ICasterSocket casterSocket, - IScreenCapturer screenCapturer, + IScreenCapturer screenCapturer, IClipboardService clipboardService, IWebRtcSessionFactory webRtcSessionFactory, IAudioCapturer audioCapturer) @@ -33,12 +43,12 @@ namespace Remotely.Desktop.Core.Services AudioCapturer = audioCapturer; AudioCapturer.AudioSampleReady += AudioCapturer_AudioSampleReady; } - public IScreenCapturer Capturer { get; } - + public double CurrentMbps { get; private set; } public bool DisconnectRequested { get; set; } public EncoderParameters EncoderParams { get; private set; } public bool HasControl { get; set; } = true; + public int ImageQuality { get; private set; } = DefaultQuality; public bool IsConnected => CasterSocket.IsConnected; public bool IsStalled @@ -66,9 +76,8 @@ namespace Remotely.Desktop.Core.Services } public string Name { get; set; } - public ConcurrentQueue PendingSentFrames { get; } = new(); - + public TimeSpan RoundTripLatency { get; private set; } public WebRtcSession RtcSession { get; set; } public string ViewerConnectionID { get; set; } @@ -80,6 +89,46 @@ namespace Remotely.Desktop.Core.Services private IClipboardService ClipboardService { get; } private IWebRtcSessionFactory WebRtcSessionFactory { get; } + public void ApplyAutoQuality() + { + if (ImageQuality < DefaultQuality) + { + ImageQuality = Math.Min(DefaultQuality, ImageQuality + 2); + } + + // Limit to 20 FPS. + _ = TaskHelper.DelayUntil(() => + !PendingSentFrames.TryPeek(out var result) || DateTimeOffset.Now - result.Timestamp > TimeSpan.FromMilliseconds(50), + TimeSpan.FromSeconds(5)); + + // Wait for pending frames to be received. + _ = TaskHelper.DelayUntil(() => + !PendingSentFrames.TryPeek(out var result) || DateTimeOffset.Now - result.Timestamp < TimeSpan.FromSeconds(1), + TimeSpan.FromSeconds(5)); + + // Limit max number of pending frames. + _ = TaskHelper.DelayUntil(() => PendingSentFrames.Count < 5, TimeSpan.FromSeconds(5)); + + if (RoundTripLatency.TotalMilliseconds > MaxLatency) + { + ImageQuality = Math.Max(MinQuality, (int)(MaxLatency / RoundTripLatency.TotalMilliseconds * ImageQuality)); + } + + if (CurrentMbps > MaxMbps) + { + var targetPercent = MaxMbps / CurrentMbps; + ImageQuality = Math.Max(MinQuality, (int)(ImageQuality * targetPercent)); + Debug.WriteLine($"Current Mbps: {CurrentMbps}. Setting quality to {ImageQuality}"); + } + } + + public void DequeuePendingFrame() + { + if (PendingSentFrames.TryDequeue(out var frame)) + { + RoundTripLatency = Time.Now - frame.Timestamp; + } + } public void Dispose() { @@ -148,7 +197,6 @@ namespace Remotely.Desktop.Core.Services await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } - public async Task SendFile(FileUpload fileUpload, CancellationToken cancelToken, Action progressUpdateCallback) { try @@ -207,16 +255,10 @@ namespace Remotely.Desktop.Core.Services } } - public async Task SendMachineName(string machineName) - { - var dto = new MachineNameDto(machineName); - await SendToViewer(() => RtcSession.SendDto(dto), - () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); - } - public async Task SendScreenCapture(CaptureFrame screenFrame) { - PendingSentFrames.Enqueue(new SentFrame(DateTimeOffset.Now, screenFrame.EncodedImageBytes.Length)); + + PendingSentFrames.Enqueue(new SentFrame(screenFrame.EncodedImageBytes.Length)); var left = screenFrame.Left; var top = screenFrame.Top; @@ -227,37 +269,51 @@ namespace Remotely.Desktop.Core.Services { var dto = new CaptureFrameDto() { - Id = screenFrame.Id, Left = left, Top = top, Width = width, Height = height, EndOfFrame = false, + Sequence = screenFrame.Sequence, ImageBytes = screenFrame.EncodedImageBytes.Skip(i).Take(50_000).ToArray() }; - await SendToViewer(() => RtcSession.SendDto(dto), - () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); + await SendToViewer( + () => RtcSession.SendDto(dto), + () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } var endOfFrameDto = new CaptureFrameDto() { - Id = screenFrame.Id, Left = left, Top = top, Width = width, Height = height, - EndOfFrame = true + EndOfFrame = true, + Sequence = screenFrame.Sequence, }; await SendToViewer( - () => RtcSession.SendDto(endOfFrameDto), - () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID)); + () => RtcSession.SendDto(endOfFrameDto), + () => CasterSocket.SendDtoToViewer(endOfFrameDto, ViewerConnectionID)); + + UpdateMbps(screenFrame.EncodedImageBytes.Length); } - public async Task SendScreenData(string selectedScreen, string[] displayNames) + public async Task SendScreenData( + string selectedDisplay, + IEnumerable displayNames, + int screenWidth, + int screenHeight) { - var dto = new ScreenDataDto(selectedScreen, displayNames); + var dto = new ScreenDataDto() + { + MachineName = Environment.MachineName, + DisplayNames = displayNames, + SelectedDisplay = selectedDisplay, + ScreenWidth = screenWidth, + ScreenHeight = screenHeight + }; await SendToViewer(() => RtcSession.SendDto(dto), () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } @@ -273,6 +329,7 @@ namespace Remotely.Desktop.Core.Services { await CasterSocket.SendViewerConnected(ViewerConnectionID); } + public async Task SendWindowsSessions() { if (EnvironmentHelper.IsWindows) @@ -282,20 +339,6 @@ namespace Remotely.Desktop.Core.Services () => CasterSocket.SendDtoToViewer(dto, ViewerConnectionID)); } } - - public void ThrottleIfNeeded() - { - // Limit to 20 FPS. - TaskHelper.DelayUntil(() => - !PendingSentFrames.TryPeek(out var result) || DateTimeOffset.Now - result.Timestamp > TimeSpan.FromMilliseconds(50), - TimeSpan.FromSeconds(5)); - - // Wait for pending frames to be received. - TaskHelper.DelayUntil(() => - !PendingSentFrames.TryPeek(out var result) || DateTimeOffset.Now - result.Timestamp < TimeSpan.FromSeconds(1), - TimeSpan.FromSeconds(5)); - } - public void ToggleWebRtcVideo(bool toggleOn) { RtcSession.ToggleWebRtcVideo(toggleOn); @@ -330,5 +373,27 @@ namespace Remotely.Desktop.Core.Services return Task.CompletedTask; } } + + private void UpdateMbps(int frameSize) + { + while (_sentMegabits.Count > 10) + { + _sentMegabits.TryDequeue(out _); + } + while (_sentTimestamps.Count > 10) + { + _sentTimestamps.TryDequeue(out _); + } + var mb = (double)frameSize / 1024 / 1024 * 8; + _sentMegabits.Enqueue(mb); + _sentTimestamps.Enqueue(Time.Now); + // Don't calculate Mbps until we have a decent sample size. + if (_sentMegabits.Count < 5) + { + return; + } + _sentTimestamps.TryPeek(out var oldestTime); + CurrentMbps = _sentMegabits.Sum() / (Time.Now - oldestTime).TotalSeconds; + } } } diff --git a/Desktop.Core/Utilities/ImageUtils.cs b/Desktop.Core/Utilities/ImageUtils.cs index d1f6b6fa..c7692d6f 100644 --- a/Desktop.Core/Utilities/ImageUtils.cs +++ b/Desktop.Core/Utilities/ImageUtils.cs @@ -128,10 +128,10 @@ namespace Remotely.Desktop.Core.Utilities { // Bounding box is valid. Padding is necessary to prevent artifacts from // moving windows. - left = Math.Max(left - 5, 0); - top = Math.Max(top - 5, 0); - right = Math.Min(right + 5, width); - bottom = Math.Min(bottom + 5, height); + left = Math.Max(left - 2, 0); + top = Math.Max(top - 2, 0); + right = Math.Min(right + 2, width); + bottom = Math.Min(bottom + 2, height); return new Rectangle(left, top, right - left, bottom - top); } diff --git a/Desktop.Win/Models/DirectXOutput.cs b/Desktop.Win/Models/DirectXOutput.cs index 4896a25c..97b8b7d7 100644 --- a/Desktop.Win/Models/DirectXOutput.cs +++ b/Desktop.Win/Models/DirectXOutput.cs @@ -28,7 +28,8 @@ namespace Remotely.Desktop.Win.Models public void Dispose() { - Disposer.TryDisposeAll(Adapter, Device, OutputDuplication, Texture2D); + OutputDuplication.ReleaseFrame(); + Disposer.TryDisposeAll(OutputDuplication, Texture2D, Adapter, Device); GC.SuppressFinalize(this); } } diff --git a/Desktop.Win/Properties/PublishProfiles/install-folder.pubxml b/Desktop.Win/Properties/PublishProfiles/install-folder.pubxml new file mode 100644 index 00000000..5f5b4ee5 --- /dev/null +++ b/Desktop.Win/Properties/PublishProfiles/install-folder.pubxml @@ -0,0 +1,18 @@ + + + + + Release + x64 + C:\Program Files\Remotely\Desktop + FileSystem + net5.0-windows + win-x64 + true + False + False + False + + \ No newline at end of file diff --git a/Desktop.Win/Services/ScreenCapturerWin.cs b/Desktop.Win/Services/ScreenCapturerWin.cs index 68ba467d..e124c3ac 100644 --- a/Desktop.Win/Services/ScreenCapturerWin.cs +++ b/Desktop.Win/Services/ScreenCapturerWin.cs @@ -84,13 +84,17 @@ namespace Remotely.Desktop.Win.Services { try { + if (!Win32Interop.SwitchToInputDesktop()) + { + Logger.Write("SwitchToInputDesktop failed.", Shared.Enums.EventType.Warning); + } - Win32Interop.SwitchToInputDesktop(); if (NeedsInit) { Logger.Write("Init needed in GetNextFrame."); Init(); + NeedsInit = false; } // Sometimes DX will result in a timeout, even when there are changes @@ -142,7 +146,10 @@ namespace Remotely.Desktop.Win.Services public void Init() { - Win32Interop.SwitchToInputDesktop(); + if (!Win32Interop.SwitchToInputDesktop()) + { + Logger.Write("SwitchToInputDesktop failed.", Shared.Enums.EventType.Warning); + } CaptureFullscreen = true; InitBitBlt(); @@ -280,22 +287,32 @@ namespace Remotely.Desktop.Win.Services } catch (SharpDXException e) { - if (e.ResultCode.Code != SharpDX.DXGI.ResultCode.WaitTimeout.Result.Code) + if (e.ResultCode.Code == SharpDX.DXGI.ResultCode.WaitTimeout.Code) { - Logger.Write(e); - NeedsInit = true; - return (GetDirectXFrameResult.Failure, null); + return (GetDirectXFrameResult.Timeout, null); } - return (GetDirectXFrameResult.Timeout, null); + Logger.Write(e, "SharpDXException error."); } + catch (Exception ex) + { + Logger.Write(ex); + } + return (GetDirectXFrameResult.Failure, null); } private void InitBitBlt() { - _bitBltScreens.Clear(); - for (var i = 0; i < Screen.AllScreens.Length; i++) + try { - _bitBltScreens.Add(Screen.AllScreens[i].DeviceName, i); + _bitBltScreens.Clear(); + for (var i = 0; i < Screen.AllScreens.Length; i++) + { + _bitBltScreens.Add(Screen.AllScreens[i].DeviceName, i); + } + } + catch (Exception ex) + { + Logger.Write(ex); } } @@ -352,9 +369,6 @@ namespace Remotely.Desktop.Win.Services } } } - - - NeedsInit = false; } catch (Exception ex) { diff --git a/Desktop.Win/ViewModels/MainWindowViewModel.cs b/Desktop.Win/ViewModels/MainWindowViewModel.cs index fd6e70fd..3b2560fc 100644 --- a/Desktop.Win/ViewModels/MainWindowViewModel.cs +++ b/Desktop.Win/ViewModels/MainWindowViewModel.cs @@ -26,7 +26,8 @@ namespace Remotely.Desktop.Win.ViewModels private readonly IConfigService _configService; private readonly ICursorIconWatcher _cursorIconWatcher; private string _host; - private string _sessionID; + private string _sessionId; + private string _statusMessage; public MainWindowViewModel() { @@ -47,7 +48,6 @@ namespace Remotely.Desktop.Win.ViewModels Services.GetRequiredService().BeginWatching(); Services.GetRequiredService().Init(); - _conductor.SessionIDChanged += SessionIDChanged; _conductor.ViewerRemoved += ViewerRemoved; _conductor.ViewerAdded += ViewerAdded; _conductor.ScreenCastRequested += ScreenCastRequested; @@ -166,13 +166,12 @@ namespace Remotely.Desktop.Win.ViewModels } } - - public string SessionID + public string StatusMessage { - get => _sessionID; + get => _statusMessage; set { - _sessionID = value; + _statusMessage = value; FirePropertyChanged(); } } @@ -181,18 +180,30 @@ namespace Remotely.Desktop.Win.ViewModels public void CopyLink() { - Clipboard.SetText($"{Host}/RemoteControl?sessionID={SessionID?.Replace(" ", "")}"); + Clipboard.SetText($"{Host}/RemoteControl?sessionID={StatusMessage?.Replace(" ", "")}"); } public async Task GetSessionID() { await _casterSocket.SendDeviceInfo(_conductor.ServiceID, Environment.MachineName, _conductor.DeviceID); - await _casterSocket.GetSessionID(); + var sessionId = await _casterSocket.GetSessionID(); + + var formattedSessionID = ""; + for (var i = 0; i < sessionId.Length; i += 3) + { + formattedSessionID += sessionId.Substring(i, 3) + " "; + } + + App.Current?.Dispatcher?.Invoke(() => + { + _sessionId = formattedSessionID.Trim(); + StatusMessage = _sessionId; + }); } public async Task Init() { - SessionID = "Retrieving..."; + StatusMessage = "Retrieving..."; Host = _configService.GetConfig().Host; @@ -215,7 +226,7 @@ namespace Remotely.Desktop.Win.ViewModels App.Current?.Dispatcher?.Invoke(() => { Viewers.Clear(); - SessionID = "Disconnected"; + StatusMessage = "Disconnected"; }); return Task.CompletedTask; }; @@ -225,14 +236,15 @@ namespace Remotely.Desktop.Win.ViewModels App.Current?.Dispatcher?.Invoke(() => { Viewers.Clear(); - SessionID = "Reconnecting"; + StatusMessage = "Reconnecting"; }); return Task.CompletedTask; }; - _casterSocket.Connection.Reconnected += async (arg) => + _casterSocket.Connection.Reconnected += (id) => { - await GetSessionID(); + StatusMessage = _sessionId; + return Task.CompletedTask; }; await DeviceInitService.GetInitParams(); @@ -249,7 +261,7 @@ namespace Remotely.Desktop.Win.ViewModels } // If we got here, something went wrong. - SessionID = "Failed"; + StatusMessage = "Failed"; MessageBox.Show(Application.Current.MainWindow, "Failed to connect to server.", "Connection Failed", MessageBoxButton.OK, MessageBoxImage.Warning); } @@ -326,15 +338,6 @@ namespace Remotely.Desktop.Win.ViewModels } }); } - private void SessionIDChanged(object sender, string sessionID) - { - var formattedSessionID = ""; - for (var i = 0; i < sessionID.Length; i += 3) - { - formattedSessionID += sessionID.Substring(i, 3) + " "; - } - SessionID = formattedSessionID.Trim(); - } private void ViewerAdded(object sender, Viewer viewer) { diff --git a/Desktop.Win/Views/MainWindow.xaml b/Desktop.Win/Views/MainWindow.xaml index 244e841f..ae1b146d 100644 --- a/Desktop.Win/Views/MainWindow.xaml +++ b/Desktop.Win/Views/MainWindow.xaml @@ -55,7 +55,7 @@ - + Invite Link: diff --git a/Desktop.XPlat/ViewModels/MainWindowViewModel.cs b/Desktop.XPlat/ViewModels/MainWindowViewModel.cs index aa0224f6..8709a5ed 100644 --- a/Desktop.XPlat/ViewModels/MainWindowViewModel.cs +++ b/Desktop.XPlat/ViewModels/MainWindowViewModel.cs @@ -29,7 +29,8 @@ namespace Remotely.Desktop.XPlat.ViewModels private double _copyMessageOpacity; private string _host; private bool _isCopyMessageVisible; - private string _sessionID; + private string _sessionId; + private string _statusMessage; public MainWindowViewModel() { @@ -39,7 +40,6 @@ namespace Remotely.Desktop.XPlat.ViewModels _conductor = Services.GetRequiredService(); _casterSocket = Services.GetRequiredService(); - _conductor.SessionIDChanged += SessionIDChanged; _conductor.ViewerRemoved += ViewerRemoved; _conductor.ViewerAdded += ViewerAdded; _conductor.ScreenCastRequested += ScreenCastRequested; @@ -70,7 +70,7 @@ namespace Remotely.Desktop.XPlat.ViewModels public ICommand CopyLinkCommand => new Executor(async (param) => { - await App.Current.Clipboard.SetTextAsync($"{Host}/RemoteControl?sessionID={SessionID.Replace(" ", "")}"); + await App.Current.Clipboard.SetTextAsync($"{Host}/RemoteControl?sessionID={StatusMessage.Replace(" ", "")}"); CopyMessageOpacity = 1; IsCopyMessageVisible = true; @@ -122,19 +122,31 @@ namespace Remotely.Desktop.XPlat.ViewModels await _casterSocket.DisconnectViewer(viewer, true); } }); - - public string SessionID + public string StatusMessage { - get => _sessionID; - set => this.RaiseAndSetIfChanged(ref _sessionID, value); + get => _statusMessage; + set => this.RaiseAndSetIfChanged(ref _statusMessage, value); } public ObservableCollection Viewers { get; } = new ObservableCollection(); private static IServiceProvider Services => ServiceContainer.Instance; + public async Task GetSessionID() { await _casterSocket.SendDeviceInfo(_conductor.ServiceID, Environment.MachineName, _conductor.DeviceID); - await _casterSocket.GetSessionID(); + var sessionId = await _casterSocket.GetSessionID(); + + var formattedSessionID = ""; + for (var i = 0; i < sessionId.Length; i += 3) + { + formattedSessionID += sessionId.Substring(i, 3) + " "; + } + + await Dispatcher.UIThread.InvokeAsync(() => + { + _sessionId = formattedSessionID.Trim(); + StatusMessage = _sessionId; + }); } public async Task Init() @@ -147,11 +159,11 @@ namespace Remotely.Desktop.XPlat.ViewModels Environment.Exit(0); } - SessionID = "Initializing..."; + StatusMessage = "Initializing..."; await InstallDependencies(); - SessionID = "Retrieving..."; + StatusMessage = "Retrieving..."; Host = _configService.GetConfig().Host; @@ -176,7 +188,7 @@ namespace Remotely.Desktop.XPlat.ViewModels { await Dispatcher.UIThread.InvokeAsync(() => { - SessionID = "Disconnected"; + StatusMessage = "Disconnected"; }); }; @@ -184,21 +196,20 @@ namespace Remotely.Desktop.XPlat.ViewModels { await Dispatcher.UIThread.InvokeAsync(() => { - SessionID = "Reconnecting"; + StatusMessage = "Reconnecting"; }); }; - _casterSocket.Connection.Reconnected += async (arg) => + _casterSocket.Connection.Reconnected += (id) => { - await GetSessionID(); + StatusMessage = _sessionId; + return Task.CompletedTask; }; await DeviceInitService.GetInitParams(); - ApplyBranding(); - await _casterSocket.SendDeviceInfo(_conductor.ServiceID, Environment.MachineName, _conductor.DeviceID); - await _casterSocket.GetSessionID(); + await GetSessionID(); return; } @@ -210,7 +221,7 @@ namespace Remotely.Desktop.XPlat.ViewModels } // If we got here, something went wrong. - _sessionID = "Failed"; + _statusMessage = "Failed"; await MessageBox.Show("Failed to connect to server.", "Connection Failed", MessageBoxType.OK); } @@ -280,18 +291,6 @@ namespace Remotely.Desktop.XPlat.ViewModels } }); } - private async void SessionIDChanged(object sender, string sessionID) - { - await Dispatcher.UIThread.InvokeAsync(() => - { - var formattedSessionID = ""; - for (var i = 0; i < sessionID.Length; i += 3) - { - formattedSessionID += sessionID.Substring(i, 3) + " "; - } - SessionID = formattedSessionID.Trim(); - }); - } private void ViewerAdded(object sender, Viewer viewer) { diff --git a/Desktop.XPlat/Views/MainWindow.axaml b/Desktop.XPlat/Views/MainWindow.axaml index d7df046b..22d86e21 100644 --- a/Desktop.XPlat/Views/MainWindow.axaml +++ b/Desktop.XPlat/Views/MainWindow.axaml @@ -35,7 +35,7 @@ Share Screen Your Session ID: - + Invite Link: diff --git a/Server/Hubs/CasterHub.cs b/Server/Hubs/CasterHub.cs index e720e3a6..67fd5897 100644 --- a/Server/Hubs/CasterHub.cs +++ b/Server/Hubs/CasterHub.cs @@ -61,7 +61,7 @@ namespace Remotely.Server.Hubs return _appConfig.IceServers; } - public Task GetSessionID() + public string GetSessionID() { var random = new Random(); var sessionId = ""; @@ -79,7 +79,7 @@ namespace Remotely.Server.Hubs SessionInfoList[Context.ConnectionId].AttendedSessionID = sessionId; - return Clients.Caller.SendAsync("SessionID", sessionId); + return sessionId; } public Task NotifyRequesterUnattendedReady(string browserHubConnectionID) diff --git a/Server/Startup.cs b/Server/Startup.cs index 769d21a9..4e7a2ac3 100644 --- a/Server/Startup.cs +++ b/Server/Startup.cs @@ -264,21 +264,6 @@ namespace Remotely.Server private static void ConfigureStaticFiles(IApplicationBuilder app, IWebHostEnvironment env) { - // TODO: This redirects downloads from the old location to the new one. - // Remove after a few releases. - app.Use(async (context, next) => - { - if (context.Request.Path.HasValue && - context.Request.Path.Value.Contains("/Downloads/", StringComparison.OrdinalIgnoreCase) && - !context.Request.Path.Value.TrimEnd('/').EndsWith("downloads", StringComparison.OrdinalIgnoreCase)) - { - var redirectUrl = context.Request.GetDisplayUrl().Replace("/Downloads/", "/Content/"); - context.Response.Redirect(redirectUrl); - return; - } - await next(); - }); - var provider = new FileExtensionContentTypeProvider(); // Add new mappings provider.Mappings[".ps1"] = "application/octet-stream"; diff --git a/Server/wwwroot/src/RemoteControl/App.js b/Server/wwwroot/src/RemoteControl/App.js index caff60bf..ac322416 100644 --- a/Server/wwwroot/src/RemoteControl/App.js +++ b/Server/wwwroot/src/RemoteControl/App.js @@ -41,6 +41,7 @@ export const ViewerApp = { if (ViewerApp.CasterID) { ViewerApp.Mode = RemoteControlMode.Unattended; ViewerApp.ViewerHubConnection.Connect(); + UI.StatusMessage.innerHTML = "Connecting to remote device..."; } else { UI.ConnectBox.style.removeProperty("display"); @@ -59,7 +60,7 @@ export const ViewerApp = { ViewerApp.RequesterName = UI.RequesterNameInput.value; ViewerApp.Mode = RemoteControlMode.Normal; ViewerApp.ViewerHubConnection.Connect(); - UI.StatusMessage.innerHTML = "Sending connection request..."; + UI.StatusMessage.innerHTML = "Request access on remote device..."; ViewerApp.Settings.displayName = ViewerApp.RequesterName; SetSettings(ViewerApp.Settings); } diff --git a/Server/wwwroot/src/RemoteControl/App.js.map b/Server/wwwroot/src/RemoteControl/App.js.map index a6513661..b69c4cff 100644 --- a/Server/wwwroot/src/RemoteControl/App.js.map +++ b/Server/wwwroot/src/RemoteControl/App.js.map @@ -1 +1 @@ -{"version":3,"file":"App.js","sourceRoot":"","sources":["App.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"App.js","sourceRoot":"","sources":["App.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/App.ts b/Server/wwwroot/src/RemoteControl/App.ts index cc6b763f..07d3b32b 100644 --- a/Server/wwwroot/src/RemoteControl/App.ts +++ b/Server/wwwroot/src/RemoteControl/App.ts @@ -48,6 +48,7 @@ export const ViewerApp = { if (ViewerApp.CasterID) { ViewerApp.Mode = RemoteControlMode.Unattended; ViewerApp.ViewerHubConnection.Connect(); + UI.StatusMessage.innerHTML = "Connecting to remote device..."; } else { UI.ConnectBox.style.removeProperty("display"); @@ -67,7 +68,7 @@ export const ViewerApp = { ViewerApp.RequesterName = UI.RequesterNameInput.value; ViewerApp.Mode = RemoteControlMode.Normal; ViewerApp.ViewerHubConnection.Connect(); - UI.StatusMessage.innerHTML = "Sending connection request..."; + UI.StatusMessage.innerHTML = "Request access on remote device..."; ViewerApp.Settings.displayName = ViewerApp.RequesterName; SetSettings(ViewerApp.Settings); diff --git a/Server/wwwroot/src/RemoteControl/CaptureProcessor.js b/Server/wwwroot/src/RemoteControl/CaptureProcessor.js new file mode 100644 index 00000000..9295d415 --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/CaptureProcessor.js @@ -0,0 +1,76 @@ +import { ViewerApp } from "./App.js"; +import { Screen2DContext } from "./UI.js"; +const BitmapQueue = []; +const ImagePartials = {}; +let CanvasLock = 1; +let NextSequence = 0; +export function HandleCaptureReceived(captureFrame) { + // TODO: Move to OffscreenCanvas after it's fully supported. + if (captureFrame.EndOfFrame) { + var partials = ImagePartials[captureFrame.Sequence]; + let completedFrame = new Blob(partials); + delete ImagePartials[captureFrame.Sequence]; + createImageBitmap(completedFrame).then(bitmap => { + BitmapQueue.push({ + ImageContent: bitmap, + FrameData: captureFrame + }); + if (CanvasLock < 1) { + return; + } + CanvasLock--; + processQueue(); + }); + //let url = window.URL.createObjectURL(completedFrame); + //let img = new Image(captureFrame.Width, captureFrame.Height); + //img.onload = () => { + // UI.Screen2DContext.drawImage(img, + // captureFrame.Left, + // captureFrame.Top, + // captureFrame.Width, + // captureFrame.Height); + // window.URL.revokeObjectURL(url); + //}; + } + else { + if (!ImagePartials[captureFrame.Sequence]) { + ImagePartials[captureFrame.Sequence] = []; + } + ImagePartials[captureFrame.Sequence].push(captureFrame.ImageBytes); + } +} +function processQueue() { + try { + if (BitmapQueue.length > 0) { + let completedFrame = BitmapQueue.shift(); + let content = completedFrame.ImageContent; + let data = completedFrame.FrameData; + if (data.Sequence == 0) { + NextSequence = 0; + BitmapQueue.splice(0); + } + if (data.Sequence != NextSequence) { + console.debug("Frame out of sequence. Putting it back in queue."); + BitmapQueue.push(completedFrame); + BitmapQueue.sort((a, b) => a.FrameData.Sequence - b.FrameData.Sequence); + window.setTimeout(() => processQueue(), 1); + return; + } + createImageBitmap(content).then(bitmap => { + Screen2DContext.drawImage(bitmap, data.Left, data.Top, data.Width, data.Height); + bitmap.close(); + ViewerApp.MessageSender.SendFrameReceived(); + NextSequence = data.Sequence + 1; + window.setTimeout(() => processQueue(), 1); + }); + } + else { + CanvasLock++; + } + } + catch (ex) { + CanvasLock = 1; + console.error(ex); + } +} +//# sourceMappingURL=CaptureProcessor.js.map \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/CaptureProcessor.js.map b/Server/wwwroot/src/RemoteControl/CaptureProcessor.js.map new file mode 100644 index 00000000..df417437 --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/CaptureProcessor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CaptureProcessor.js","sourceRoot":"","sources":["CaptureProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,MAAM,WAAW,GAA0B,EAAE,CAAC;AAC9C,MAAM,aAAa,GAAuC,EAAG,CAAC;AAC9D,IAAI,UAAU,GAAW,CAAC,CAAC;AAC3B,IAAI,YAAY,GAAW,CAAC,CAAC;AAE7B,MAAM,UAAU,qBAAqB,CAAC,YAA6B;IAC/D,4DAA4D;IAC5D,IAAI,YAAY,CAAC,UAAU,EAAE;QAEzB,IAAI,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,cAAc,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,OAAO,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE5C,iBAAiB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC5C,WAAW,CAAC,IAAI,CAAC;gBACb,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,YAAY;aAC1B,CAAC,CAAC;YAEH,IAAI,UAAU,GAAG,CAAC,EAAE;gBAChB,OAAO;aACV;YAED,UAAU,EAAE,CAAC;YAEb,YAAY,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,uDAAuD;QACvD,+DAA+D;QAC/D,sBAAsB;QACtB,uCAAuC;QACvC,4BAA4B;QAC5B,2BAA2B;QAC3B,6BAA6B;QAC7B,+BAA+B;QAC/B,sCAAsC;QACtC,IAAI;KACP;SACI;QACD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACvC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SAC7C;QACD,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;KACtE;AACL,CAAC;AAGD,SAAS,YAAY;IACjB,IAAI;QACA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC;YAC1C,IAAI,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC;YAEpC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE;gBACpB,YAAY,GAAG,CAAC,CAAC;gBACjB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACzB;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,YAAY,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;gBAClE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACjC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACxE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,iBAAiB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACrC,eAAe,CAAC,SAAS,CAAC,MAAM,EAC5B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEjB,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEf,SAAS,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;gBAC5C,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACjC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAA;SACL;aACI;YACD,UAAU,EAAE,CAAC;SAChB;KACJ;IACD,OAAO,EAAE,EAAE;QACP,UAAU,GAAG,CAAC,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACrB;AACL,CAAC"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/CaptureProcessor.ts b/Server/wwwroot/src/RemoteControl/CaptureProcessor.ts new file mode 100644 index 00000000..c08ce74a --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/CaptureProcessor.ts @@ -0,0 +1,97 @@ +import { ViewerApp } from "./App.js"; +import { CaptureFrameDto } from "./Interfaces/Dtos.js"; +import { CompletedFrame } from "./Models/CompletedFrame.js"; +import { Screen2DContext } from "./UI.js"; + + +const BitmapQueue: Array =[]; +const ImagePartials: Record > = { }; +let CanvasLock: number = 1; +let NextSequence: number = 0; + +export function HandleCaptureReceived(captureFrame: CaptureFrameDto) { + // TODO: Move to OffscreenCanvas after it's fully supported. + if (captureFrame.EndOfFrame) { + + var partials = ImagePartials[captureFrame.Sequence]; + let completedFrame = new Blob(partials); + delete ImagePartials[captureFrame.Sequence]; + + createImageBitmap(completedFrame).then(bitmap => { + BitmapQueue.push({ + ImageContent: bitmap, + FrameData: captureFrame + }); + + if (CanvasLock < 1) { + return; + } + + CanvasLock--; + + processQueue(); + }); + + //let url = window.URL.createObjectURL(completedFrame); + //let img = new Image(captureFrame.Width, captureFrame.Height); + //img.onload = () => { + // UI.Screen2DContext.drawImage(img, + // captureFrame.Left, + // captureFrame.Top, + // captureFrame.Width, + // captureFrame.Height); + // window.URL.revokeObjectURL(url); + //}; + } + else { + if (!ImagePartials[captureFrame.Sequence]) { + ImagePartials[captureFrame.Sequence] = []; + } + ImagePartials[captureFrame.Sequence].push(captureFrame.ImageBytes); + } +} + + +function processQueue() { + try { + if (BitmapQueue.length > 0) { + let completedFrame = BitmapQueue.shift(); + let content = completedFrame.ImageContent; + let data = completedFrame.FrameData; + + if (data.Sequence == 0) { + NextSequence = 0; + BitmapQueue.splice(0); + } + + if (data.Sequence != NextSequence) { + console.debug("Frame out of sequence. Putting it back in queue.") + BitmapQueue.push(completedFrame); + BitmapQueue.sort((a, b) => a.FrameData.Sequence - b.FrameData.Sequence); + window.setTimeout(() => processQueue(), 1); + return; + } + + createImageBitmap(content).then(bitmap => { + Screen2DContext.drawImage(bitmap, + data.Left, + data.Top, + data.Width, + data.Height); + + bitmap.close(); + + ViewerApp.MessageSender.SendFrameReceived(); + NextSequence = data.Sequence + 1; + window.setTimeout(() => processQueue(), 1); + }) + } + else { + CanvasLock++; + } + } + catch (ex) { + CanvasLock = 1; + console.error(ex); + } +} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js index f90895cf..6bd74e8c 100644 --- a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js +++ b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js @@ -1,12 +1,17 @@ import { ViewerApp } from "./App.js"; +import { ShowMessage } from "./UI.js"; export class ClipboardWatcher { WatchClipboard() { if (navigator.clipboard.readText) { this.ClipboardTimer = setInterval(() => { - if (this.PauseMonitoring) { + if (!document.hasFocus()) { return; } - if (!document.hasFocus()) { + if (this.NewClipboardText && navigator.clipboard.writeText) { + navigator.clipboard.writeText(this.NewClipboardText); + this.LastClipboardText = this.NewClipboardText; + this.NewClipboardText = null; + ShowMessage("Clipboard updated."); return; } navigator.clipboard.readText().then(newText => { @@ -15,19 +20,14 @@ export class ClipboardWatcher { ViewerApp.MessageSender.SendClipboardTransfer(newText, false); } }); - }, 100); + }, 500); } } SetClipboardText(text) { if (text == this.LastClipboardText) { return; } - if (navigator.clipboard.writeText) { - this.PauseMonitoring = true; - this.LastClipboardText = text; - navigator.clipboard.writeText(text); - this.PauseMonitoring = false; - } + this.NewClipboardText = text; } } //# sourceMappingURL=ClipboardWatcher.js.map \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js.map b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js.map index 6d1d4a43..020204b6 100644 --- a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js.map +++ b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.js.map @@ -1 +1 @@ -{"version":3,"file":"ClipboardWatcher.js","sourceRoot":"","sources":["ClipboardWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,OAAO,gBAAgB;IAKzB,cAAc;QACV,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;YAE9B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;gBACnC,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,OAAO;iBACV;gBACD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;oBACtB,OAAO;iBACV;gBAED,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC1C,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,EAAE;wBACnC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;wBACjC,SAAS,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBACjE;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,EAAE,GAAG,CAAC,CAAC;SACX;IACL,CAAC;IAED,gBAAgB,CAAC,IAAY;QACzB,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO;SACV;QAED,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAChC;IACL,CAAC;CACJ"} \ No newline at end of file +{"version":3,"file":"ClipboardWatcher.js","sourceRoot":"","sources":["ClipboardWatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,OAAO,gBAAgB;IAKzB,cAAc;QACV,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE;YAE9B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE;oBACtB,OAAO;iBACV;gBAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE;oBACxD,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACrD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC;oBAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;oBAC7B,WAAW,CAAC,oBAAoB,CAAC,CAAC;oBAClC,OAAO;iBACV;gBAED,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC1C,IAAI,IAAI,CAAC,iBAAiB,IAAI,OAAO,EAAE;wBACnC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;wBACjC,SAAS,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBACjE;gBACL,CAAC,CAAC,CAAA;YACN,CAAC,EAAE,GAAG,CAAC,CAAC;SACX;IACL,CAAC;IAED,gBAAgB,CAAC,IAAY;QACzB,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAChC,OAAO;SACV;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACjC,CAAC;CACJ"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.ts b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.ts index 1d55e24c..ea38c4b5 100644 --- a/Server/wwwroot/src/RemoteControl/ClipboardWatcher.ts +++ b/Server/wwwroot/src/RemoteControl/ClipboardWatcher.ts @@ -1,18 +1,24 @@ import { ViewerApp } from "./App.js"; +import { ShowMessage } from "./UI.js"; export class ClipboardWatcher { ClipboardTimer: number; LastClipboardText: string; - PauseMonitoring: boolean; + NewClipboardText: string; WatchClipboard() { if (navigator.clipboard.readText) { this.ClipboardTimer = setInterval(() => { - if (this.PauseMonitoring) { + if (!document.hasFocus()) { return; } - if (!document.hasFocus()) { + + if (this.NewClipboardText && navigator.clipboard.writeText) { + navigator.clipboard.writeText(this.NewClipboardText); + this.LastClipboardText = this.NewClipboardText; + this.NewClipboardText = null; + ShowMessage("Clipboard updated."); return; } @@ -22,7 +28,7 @@ export class ClipboardWatcher { ViewerApp.MessageSender.SendClipboardTransfer(newText, false); } }) - }, 100); + }, 500); } } @@ -31,11 +37,6 @@ export class ClipboardWatcher { return; } - if (navigator.clipboard.writeText) { - this.PauseMonitoring = true; - this.LastClipboardText = text; - navigator.clipboard.writeText(text); - this.PauseMonitoring = false; - } + this.NewClipboardText = text; } } \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js index a32efd72..71e5d38a 100644 --- a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js +++ b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js @@ -1,13 +1,12 @@ import * as UI from "./UI.js"; import { BaseDtoType } from "./Enums/BaseDtoType.js"; import { ViewerApp } from "./App.js"; -import { ShowMessage } from "./UI.js"; import { Sound } from "./Sound.js"; import { ReceiveFile } from "./FileTransferService.js"; +import { HandleCaptureReceived } from "./CaptureProcessor.js"; export class DtoMessageHandler { constructor() { this.MessagePack = window['msgpack5'](); - this.ImagePartials = {}; } ParseBinaryMessage(data) { var model = this.MessagePack.decode(data); @@ -24,9 +23,6 @@ export class DtoMessageHandler { case BaseDtoType.CursorChange: this.HandleCursorChange(model); break; - case BaseDtoType.MachineName: - this.HandleMachineName(model); - break; case BaseDtoType.ScreenData: this.HandleScreenData(model); break; @@ -46,37 +42,10 @@ export class DtoMessageHandler { Sound.Play(audioSample.Buffer); } HandleCaptureFrame(captureFrame) { - if (captureFrame.EndOfFrame) { - var partials = this.ImagePartials[captureFrame.Id]; - let completedFrame = new Blob(partials); - this.ImagePartials[captureFrame.Id] = []; - let url = window.URL.createObjectURL(completedFrame); - let img = new Image(captureFrame.Width, captureFrame.Height); - img.onload = () => { - UI.Screen2DContext.drawImage(img, captureFrame.Left, captureFrame.Top, captureFrame.Width, captureFrame.Height); - window.URL.revokeObjectURL(url); - }; - img.src = url; - //createImageBitmap(completedFrame).then(bitmap => { - // UI.Screen2DContext.drawImage(bitmap, - // captureFrame.Left, - // captureFrame.Top, - // captureFrame.Width, - // captureFrame.Height); - // bitmap.close(); - //}) - ViewerApp.MessageSender.SendFrameReceived(); - } - else { - if (!this.ImagePartials[captureFrame.Id]) { - this.ImagePartials[captureFrame.Id] = []; - } - this.ImagePartials[captureFrame.Id].push(captureFrame.ImageBytes); - } + HandleCaptureReceived(captureFrame); } HandleClipboardText(clipboardText) { ViewerApp.ClipboardWatcher.SetClipboardText(clipboardText.ClipboardText); - ShowMessage("Clipboard updated."); } HandleCursorChange(cursorChange) { UI.UpdateCursor(cursorChange.ImageBytes, cursorChange.HotSpotX, cursorChange.HotSpotY, cursorChange.CssOverride); @@ -84,11 +53,11 @@ export class DtoMessageHandler { HandleFile(file) { ReceiveFile(file); } - HandleMachineName(machineNameDto) { - document.title = `${machineNameDto.MachineName} - Remotely Session`; - } HandleScreenData(screenDataDto) { - UI.UpdateDisplays(screenDataDto.SelectedScreen, screenDataDto.DisplayNames); + document.title = `${screenDataDto.MachineName} - Remotely Session`; + UI.ToggleConnectUI(false); + UI.SetScreenSize(screenDataDto.ScreenWidth, screenDataDto.ScreenHeight); + UI.UpdateDisplays(screenDataDto.SelectedDisplay, screenDataDto.DisplayNames); } HandleScreenSize(screenSizeDto) { UI.SetScreenSize(screenSizeDto.Width, screenSizeDto.Height); diff --git a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js.map b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js.map index e1a8a36f..241ed4bc 100644 --- a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js.map +++ b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.js.map @@ -1 +1 @@ -{"version":3,"file":"DtoMessageHandler.js","sourceRoot":"","sources":["DtoMessageHandler.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DtoMessageHandler.js","sourceRoot":"","sources":["DtoMessageHandler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.ts b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.ts index c72284cf..1da2de8f 100644 --- a/Server/wwwroot/src/RemoteControl/DtoMessageHandler.ts +++ b/Server/wwwroot/src/RemoteControl/DtoMessageHandler.ts @@ -9,17 +9,16 @@ import { CaptureFrameDto, ClipboardTextDto, CursorChangeDto, - MachineNameDto, ScreenDataDto, ScreenSizeDto, FileDto, WindowsSessionsDto } from "./Interfaces/Dtos.js"; import { ReceiveFile } from "./FileTransferService.js"; +import { HandleCaptureReceived } from "./CaptureProcessor.js"; export class DtoMessageHandler { MessagePack: any = window['msgpack5'](); - ImagePartials: Record> = {}; ParseBinaryMessage(data: ArrayBuffer) { var model = this.MessagePack.decode(data) as BaseDto; @@ -36,9 +35,6 @@ export class DtoMessageHandler { case BaseDtoType.CursorChange: this.HandleCursorChange(model as unknown as CursorChangeDto); break; - case BaseDtoType.MachineName: - this.HandleMachineName(model as unknown as MachineNameDto); - break; case BaseDtoType.ScreenData: this.HandleScreenData(model as unknown as ScreenDataDto); break; @@ -60,48 +56,11 @@ export class DtoMessageHandler { } HandleCaptureFrame(captureFrame: CaptureFrameDto) { - - if (captureFrame.EndOfFrame) { - - var partials = this.ImagePartials[captureFrame.Id]; - let completedFrame = new Blob(partials); - this.ImagePartials[captureFrame.Id] = []; - - let url = window.URL.createObjectURL(completedFrame); - let img = new Image(captureFrame.Width, captureFrame.Height); - img.onload = () => { - UI.Screen2DContext.drawImage(img, - captureFrame.Left, - captureFrame.Top, - captureFrame.Width, - captureFrame.Height); - window.URL.revokeObjectURL(url); - }; - img.src = url; - - //createImageBitmap(completedFrame).then(bitmap => { - // UI.Screen2DContext.drawImage(bitmap, - // captureFrame.Left, - // captureFrame.Top, - // captureFrame.Width, - // captureFrame.Height); - - // bitmap.close(); - //}) - - ViewerApp.MessageSender.SendFrameReceived(); - } - else { - if (!this.ImagePartials[captureFrame.Id]) { - this.ImagePartials[captureFrame.Id] = []; - } - this.ImagePartials[captureFrame.Id].push(captureFrame.ImageBytes); - } + HandleCaptureReceived(captureFrame); } HandleClipboardText(clipboardText: ClipboardTextDto) { ViewerApp.ClipboardWatcher.SetClipboardText(clipboardText.ClipboardText); - ShowMessage("Clipboard updated."); } HandleCursorChange(cursorChange: CursorChangeDto) { UI.UpdateCursor(cursorChange.ImageBytes, cursorChange.HotSpotX, cursorChange.HotSpotY, cursorChange.CssOverride); @@ -109,11 +68,11 @@ export class DtoMessageHandler { HandleFile(file: FileDto) { ReceiveFile(file); } - HandleMachineName(machineNameDto: MachineNameDto) { - document.title = `${machineNameDto.MachineName} - Remotely Session`; - } HandleScreenData(screenDataDto: ScreenDataDto) { - UI.UpdateDisplays(screenDataDto.SelectedScreen, screenDataDto.DisplayNames); + document.title = `${screenDataDto.MachineName} - Remotely Session`; + UI.ToggleConnectUI(false); + UI.SetScreenSize(screenDataDto.ScreenWidth, screenDataDto.ScreenHeight); + UI.UpdateDisplays(screenDataDto.SelectedDisplay, screenDataDto.DisplayNames); } HandleScreenSize(screenSizeDto: ScreenSizeDto) { diff --git a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js index 2fdfb570..fa6c74e3 100644 --- a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js +++ b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js @@ -3,7 +3,6 @@ export var BaseDtoType; BaseDtoType[BaseDtoType["CaptureFrame"] = 0] = "CaptureFrame"; BaseDtoType[BaseDtoType["ScreenData"] = 1] = "ScreenData"; BaseDtoType[BaseDtoType["ScreenSize"] = 2] = "ScreenSize"; - BaseDtoType[BaseDtoType["MachineName"] = 3] = "MachineName"; BaseDtoType[BaseDtoType["ClipboardText"] = 4] = "ClipboardText"; BaseDtoType[BaseDtoType["AudioSample"] = 5] = "AudioSample"; BaseDtoType[BaseDtoType["CursorChange"] = 6] = "CursorChange"; diff --git a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js.map b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js.map index c7076b1e..5977a69b 100644 --- a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js.map +++ b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.js.map @@ -1 +1 @@ -{"version":3,"file":"BaseDtoType.js","sourceRoot":"","sources":["BaseDtoType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WA2BX;AA3BD,WAAY,WAAW;IACnB,6DAAgB,CAAA;IAChB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,2DAAe,CAAA;IACf,+DAAiB,CAAA;IACjB,2DAAe,CAAA;IACf,6DAAgB,CAAA;IAChB,6DAAgB,CAAA;IAChB,uDAAa,CAAA;IACb,uDAAa,CAAA;IACb,oDAAY,CAAA;IACZ,4CAAQ,CAAA;IACR,0DAAe,CAAA;IACf,oDAAY,CAAA;IACZ,gDAAU,CAAA;IACV,0DAAe,CAAA;IACf,4DAAgB,CAAA;IAChB,sEAAqB,CAAA;IACrB,wEAAsB,CAAA;IACtB,sDAAa,CAAA;IACb,8CAAS,CAAA;IACT,oEAAoB,CAAA;IACpB,kEAAmB,CAAA;IACnB,gEAAkB,CAAA;IAClB,wEAAsB,CAAA;IACtB,kFAA2B,CAAA;AAC/B,CAAC,EA3BW,WAAW,KAAX,WAAW,QA2BtB"} \ No newline at end of file +{"version":3,"file":"BaseDtoType.js","sourceRoot":"","sources":["BaseDtoType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WA0BX;AA1BD,WAAY,WAAW;IACnB,6DAAgB,CAAA;IAChB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,+DAAiB,CAAA;IACjB,2DAAe,CAAA;IACf,6DAAgB,CAAA;IAChB,6DAAgB,CAAA;IAChB,uDAAa,CAAA;IACb,uDAAa,CAAA;IACb,oDAAY,CAAA;IACZ,4CAAQ,CAAA;IACR,0DAAe,CAAA;IACf,oDAAY,CAAA;IACZ,gDAAU,CAAA;IACV,0DAAe,CAAA;IACf,4DAAgB,CAAA;IAChB,sEAAqB,CAAA;IACrB,wEAAsB,CAAA;IACtB,sDAAa,CAAA;IACb,8CAAS,CAAA;IACT,oEAAoB,CAAA;IACpB,kEAAmB,CAAA;IACnB,gEAAkB,CAAA;IAClB,wEAAsB,CAAA;IACtB,kFAA2B,CAAA;AAC/B,CAAC,EA1BW,WAAW,KAAX,WAAW,QA0BtB"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.ts b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.ts index 808911ce..36d80317 100644 --- a/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.ts +++ b/Server/wwwroot/src/RemoteControl/Enums/BaseDtoType.ts @@ -2,7 +2,6 @@ CaptureFrame = 0, ScreenData = 1, ScreenSize = 2, - MachineName = 3, ClipboardText = 4, AudioSample = 5, CursorChange = 6, diff --git a/Server/wwwroot/src/RemoteControl/InputEventHandlers.js b/Server/wwwroot/src/RemoteControl/InputEventHandlers.js index 8d18b157..09574d3c 100644 --- a/Server/wwwroot/src/RemoteControl/InputEventHandlers.js +++ b/Server/wwwroot/src/RemoteControl/InputEventHandlers.js @@ -6,7 +6,6 @@ import { RemoteControlMode } from "./Enums/RemoteControlMode.js"; import { GetDistanceBetween } from "./Utilities.js"; import { ShowMessage } from "./UI.js"; import { SetSettings } from "./SettingsService.js"; -var lastPointerMove = Date.now(); var isDragging; var currentPointerDevice; var currentTouchCount; @@ -196,10 +195,6 @@ export function ApplyInputHandlers() { if (ViewerApp.ViewOnlyMode) { return; } - if (Date.now() - lastPointerMove < 25) { - return; - } - lastPointerMove = Date.now(); var percentX = e.offsetX / viewer.clientWidth; var percentY = e.offsetY / viewer.clientHeight; ViewerApp.MessageSender.SendMouseMove(percentX, percentY); diff --git a/Server/wwwroot/src/RemoteControl/InputEventHandlers.js.map b/Server/wwwroot/src/RemoteControl/InputEventHandlers.js.map index dddeb8c6..480c68e7 100644 --- a/Server/wwwroot/src/RemoteControl/InputEventHandlers.js.map +++ b/Server/wwwroot/src/RemoteControl/InputEventHandlers.js.map @@ -1 +1 @@ -{"version":3,"file":"InputEventHandlers.js","sourceRoot":"","sources":["InputEventHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"InputEventHandlers.js","sourceRoot":"","sources":["InputEventHandlers.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/InputEventHandlers.ts b/Server/wwwroot/src/RemoteControl/InputEventHandlers.ts index be101416..2d9d3d40 100644 --- a/Server/wwwroot/src/RemoteControl/InputEventHandlers.ts +++ b/Server/wwwroot/src/RemoteControl/InputEventHandlers.ts @@ -41,7 +41,6 @@ import { GetDistanceBetween } from "./Utilities.js"; import { ShowMessage } from "./UI.js"; import { SetSettings } from "./SettingsService.js"; -var lastPointerMove = Date.now(); var isDragging: boolean; var currentPointerDevice: string; var currentTouchCount: number; @@ -245,10 +244,6 @@ export function ApplyInputHandlers() { return; } - if (Date.now() - lastPointerMove < 25) { - return; - } - lastPointerMove = Date.now(); var percentX = e.offsetX / viewer.clientWidth; var percentY = e.offsetY / viewer.clientHeight; ViewerApp.MessageSender.SendMouseMove(percentX, percentY); diff --git a/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.js.map b/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.js.map index 6308248f..08b4e29c 100644 --- a/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.js.map +++ b/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.js.map @@ -1 +1 @@ -{"version":3,"file":"Dtos.js","sourceRoot":"","sources":["Dtos.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Dtos.js","sourceRoot":"","sources":["Dtos.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.ts b/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.ts index b13b1b2c..ba5951eb 100644 --- a/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.ts +++ b/Server/wwwroot/src/RemoteControl/Interfaces/Dtos.ts @@ -8,13 +8,13 @@ export interface AudioSampleDto extends BaseDto { } export interface CaptureFrameDto extends BaseDto { - Id: string; EndOfFrame: boolean; Left: number; Top: number; Width: number; Height: number; ImageBytes: Uint8Array; + Sequence: number; } export interface ClipboardTextDto extends BaseDto { @@ -102,10 +102,6 @@ export class KeyUpDto implements BaseDto { DtoType: BaseDtoType = BaseDtoType.KeyUp; } -export interface MachineNameDto extends BaseDto { - MachineName: string; -} - export class MouseDownDto implements BaseDto { constructor(button: number, percentX: number, percentY: number) { this.Button = button; @@ -156,7 +152,10 @@ export class MouseWheelDto implements BaseDto { export interface ScreenDataDto extends BaseDto { DisplayNames: string[]; - SelectedScreen: string; + SelectedDisplay: string; + MachineName: string; + ScreenWidth: number; + ScreenHeight: number; } export interface ScreenSizeDto extends BaseDto { diff --git a/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js new file mode 100644 index 00000000..9ad5ae53 --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js @@ -0,0 +1,3 @@ +export class CompletedFrame { +} +//# sourceMappingURL=CompletedFrame.js.map \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js.map b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js.map new file mode 100644 index 00000000..501b1a45 --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CompletedFrame.js","sourceRoot":"","sources":["CompletedFrame.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;CAG1B"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.ts b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.ts new file mode 100644 index 00000000..54a43f69 --- /dev/null +++ b/Server/wwwroot/src/RemoteControl/Models/CompletedFrame.ts @@ -0,0 +1,6 @@ +import { CaptureFrameDto } from "../Interfaces/Dtos.js"; + +export class CompletedFrame { + ImageContent: ImageBitmap; + FrameData: CaptureFrameDto; +} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js index fe48c54d..1f845e8b 100644 --- a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js +++ b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js @@ -17,7 +17,6 @@ export class ViewerHubConnection { this.ApplyMessageHandlers(this.Connection); this.Connection.start().then(() => { this.SendScreenCastRequestToDevice(); - UI.ToggleConnectUI(false); }).catch(err => { console.error(err.toString()); console.log("Connection closed."); diff --git a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js.map b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js.map index c42690ed..6d4fbd80 100644 --- a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js.map +++ b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.js.map @@ -1 +1 @@ -{"version":3,"file":"ViewerHubConnection.js","sourceRoot":"","sources":["ViewerHubConnection.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ViewerHubConnection.js","sourceRoot":"","sources":["ViewerHubConnection.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.ts b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.ts index 3221e2fe..c86b28f2 100644 --- a/Server/wwwroot/src/RemoteControl/ViewerHubConnection.ts +++ b/Server/wwwroot/src/RemoteControl/ViewerHubConnection.ts @@ -29,7 +29,6 @@ export class ViewerHubConnection { this.Connection.start().then(() => { this.SendScreenCastRequestToDevice(); - UI.ToggleConnectUI(false); }).catch(err => { console.error(err.toString()); console.log("Connection closed."); diff --git a/Shared/Enums/BaseDtoType.cs b/Shared/Enums/BaseDtoType.cs index 5ecbab68..29aa70da 100644 --- a/Shared/Enums/BaseDtoType.cs +++ b/Shared/Enums/BaseDtoType.cs @@ -11,8 +11,6 @@ namespace Remotely.Shared.Enums ScreenData = 1, [EnumMember(Value = "ScreenSize")] ScreenSize = 2, - [EnumMember(Value = "MachineName")] - MachineName = 3, [EnumMember(Value = "ClipboardText")] ClipboardText = 4, [EnumMember(Value = "AudioSample")] diff --git a/Shared/Models/RemoteControlDtos/CaptureFrameDto.cs b/Shared/Models/RemoteControlDtos/CaptureFrameDto.cs index 5bc0381c..288e0396 100644 --- a/Shared/Models/RemoteControlDtos/CaptureFrameDto.cs +++ b/Shared/Models/RemoteControlDtos/CaptureFrameDto.cs @@ -11,22 +11,22 @@ namespace Remotely.Shared.Models.RemoteControlDtos public new BaseDtoType DtoType { get; } = BaseDtoType.CaptureFrame; [DataMember(Name = "EndOfFrame")] - public bool EndOfFrame { get; set; } + public bool EndOfFrame { get; init; } [DataMember(Name = "Height")] - public int Height { get; set; } - - [DataMember(Name = "Id")] - public Guid Id { get; set; } + public int Height { get; init; } [DataMember(Name = "ImageBytes")] - public byte[] ImageBytes { get; set; } + public byte[] ImageBytes { get; init; } [DataMember(Name = "Left")] - public int Left { get; set; } + public int Left { get; init; } [DataMember(Name = "Top")] - public int Top { get; set; } + public int Top { get; init; } [DataMember(Name = "Width")] - public int Width { get; set; } + public int Width { get; init; } + + [DataMember(Name = "Sequence")] + public long Sequence { get; init; } } } diff --git a/Shared/Models/RemoteControlDtos/MachineNameDto.cs b/Shared/Models/RemoteControlDtos/MachineNameDto.cs deleted file mode 100644 index 0670d60e..00000000 --- a/Shared/Models/RemoteControlDtos/MachineNameDto.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Remotely.Shared.Enums; -using System.Runtime.Serialization; - -namespace Remotely.Shared.Models.RemoteControlDtos -{ - [DataContract] - public class MachineNameDto : BaseDto - { - public MachineNameDto(string machineName) - { - MachineName = machineName; - } - - [DataMember(Name = "DtoType")] - public new BaseDtoType DtoType { get; } = BaseDtoType.MachineName; - - [DataMember(Name = "MachineName")] - public string MachineName { get; } - } -} diff --git a/Shared/Models/RemoteControlDtos/ScreenDataDto.cs b/Shared/Models/RemoteControlDtos/ScreenDataDto.cs index 8a00a04b..6ff4796a 100644 --- a/Shared/Models/RemoteControlDtos/ScreenDataDto.cs +++ b/Shared/Models/RemoteControlDtos/ScreenDataDto.cs @@ -1,4 +1,5 @@ using Remotely.Shared.Enums; +using System.Collections.Generic; using System.Runtime.Serialization; namespace Remotely.Shared.Models.RemoteControlDtos @@ -6,20 +7,23 @@ namespace Remotely.Shared.Models.RemoteControlDtos [DataContract] public class ScreenDataDto : BaseDto { - public ScreenDataDto(string selectedScreen, string[] displayNames) - { - SelectedScreen = selectedScreen; - DisplayNames = displayNames; - } - [DataMember(Name = "DisplayNames")] - public string[] DisplayNames { get; } + public IEnumerable DisplayNames { get; init; } [DataMember(Name = "DtoType")] public new BaseDtoType DtoType { get; } = BaseDtoType.ScreenData; - [DataMember(Name = "SelectedScreen")] - public string SelectedScreen { get; } + [DataMember(Name = "SelectedDisplay")] + public string SelectedDisplay { get; init; } + + [DataMember(Name = "MachineName")] + public string MachineName { get; init; } + + [DataMember(Name = "ScreenWidth")] + public int ScreenWidth { get; init; } + + [DataMember(Name = "ScreenHeight")] + public int ScreenHeight { get; init; } } } diff --git a/Shared/Models/SentFrame.cs b/Shared/Models/SentFrame.cs index 7cb44808..c174b126 100644 --- a/Shared/Models/SentFrame.cs +++ b/Shared/Models/SentFrame.cs @@ -1,4 +1,5 @@ -using System; +using Remotely.Shared.Utilities; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -8,9 +9,9 @@ namespace Remotely.Shared.Models { public struct SentFrame { - public SentFrame(DateTimeOffset timestamp, int frameSize) + public SentFrame(int frameSize) { - Timestamp = timestamp; + Timestamp = Time.Now; FrameSize = frameSize; } diff --git a/Shared/Utilities/Logger.cs b/Shared/Utilities/Logger.cs index 1bfdad05..99b74811 100644 --- a/Shared/Utilities/Logger.cs +++ b/Shared/Utilities/Logger.cs @@ -117,10 +117,10 @@ namespace Remotely.Shared.Utilities } } - public static void Write(Exception ex, string message, EventType eventType = EventType.Error) + public static void Write(Exception ex, string message, EventType eventType = EventType.Error, [CallerMemberName] string callerName = "") { - Write(message, eventType); - Write(ex, eventType); + Write(message, eventType, callerName); + Write(ex, eventType, callerName); } private static void CheckLogFileExists()