diff --git a/Remotely.sln b/Remotely.sln index 4f96b643..56f5abb2 100644 --- a/Remotely.sln +++ b/Remotely.sln @@ -157,10 +157,10 @@ Global {6B726FC4-A907-4813-BF38-3342E02AA8D2}.Release|x86.Build.0 = Release|x86 {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.ActiveCfg = Debug|Any CPU - {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.Build.0 = Debug|Any CPU - {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.ActiveCfg = Debug|Any CPU - {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.Build.0 = Debug|Any CPU + {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.ActiveCfg = Debug|x64 + {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x64.Build.0 = Debug|x64 + {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.ActiveCfg = Debug|x86 + {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Debug|x86.Build.0 = Debug|x86 {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|Any CPU.Build.0 = Release|Any CPU {A3D0368C-0850-4614-B5B5-41B9D5135AA9}.Release|x64.ActiveCfg = Release|x64 diff --git a/ScreenCast.Core/Services/ScreenCasterBase.cs b/ScreenCast.Core/Services/ScreenCasterBase.cs index 86541a3a..b8f940b1 100644 --- a/ScreenCast.Core/Services/ScreenCasterBase.cs +++ b/ScreenCast.Core/Services/ScreenCasterBase.cs @@ -15,61 +15,53 @@ namespace Remotely.ScreenCast.Core.Services { public class ScreenCasterBase { - public ScreenCasterBase(Viewer viewer) - { - Viewer = viewer; - } - - protected Viewer Viewer { get; } - public async Task BeginScreenCasting(string viewerID, string requesterName) { + byte[] encodedImageBytes; + var fpsQueue = new Queue(); var conductor = ServiceContainer.Instance.GetRequiredService(); - var viewers = conductor.Viewers; var mode = conductor.Mode; + var viewer = ServiceContainer.Instance.GetRequiredService(); + viewer.Name = requesterName; + viewer.ViewerConnectionID = viewerID; + var viewers = conductor.Viewers; Logger.Write($"Starting screen cast. Requester: {requesterName}. Viewer ID: {viewerID}. App Mode: {mode}"); - byte[] encodedImageBytes; - var fpsQueue = new Queue(); - - Viewer.Name = requesterName; - Viewer.ViewerConnectionID = viewerID; - - viewers.AddOrUpdate(viewerID, Viewer, (id, v) => Viewer); + viewers.AddOrUpdate(viewerID, viewer, (id, v) => viewer); if (mode == Enums.AppMode.Normal) { - conductor.InvokeViewerAdded(Viewer); + conductor.InvokeViewerAdded(viewer); } if (EnvironmentHelper.IsWindows) { - await Viewer.InitializeWebRtc(); + await viewer.InitializeWebRtc(); } - await Viewer.SendMachineName(Environment.MachineName, viewerID); + await viewer.SendMachineName(Environment.MachineName, viewerID); - await Viewer.SendScreenData( - Viewer.Capturer.SelectedScreen, - Viewer.Capturer.GetDisplayNames().ToArray(), + await viewer.SendScreenData( + viewer.Capturer.SelectedScreen, + viewer.Capturer.GetDisplayNames().ToArray(), viewerID); - await Viewer.SendScreenSize(Viewer.Capturer.CurrentScreenBounds.Width, - Viewer.Capturer.CurrentScreenBounds.Height, + await viewer.SendScreenSize(viewer.Capturer.CurrentScreenBounds.Width, + viewer.Capturer.CurrentScreenBounds.Height, viewerID); - Viewer.Capturer.ScreenChanged += async (sender, bounds) => + viewer.Capturer.ScreenChanged += async (sender, bounds) => { - await Viewer.SendScreenSize(bounds.Width, bounds.Height, viewerID); + await viewer.SendScreenSize(bounds.Width, bounds.Height, viewerID); }; - while (!Viewer.DisconnectRequested && Viewer.IsConnected) + while (!viewer.DisconnectRequested && viewer.IsConnected) { try { - if (Viewer.IsStalled()) + if (viewer.IsStalled()) { // Viewer isn't responding. Abort sending. break; @@ -85,30 +77,30 @@ namespace Remotely.ScreenCast.Core.Services Debug.WriteLine($"Capture FPS: {fpsQueue.Count}"); } - await Viewer.ThrottleIfNeeded(); + await viewer.ThrottleIfNeeded(); - Viewer.Capturer.GetNextFrame(); + viewer.Capturer.GetNextFrame(); - var diffArea = ImageUtils.GetDiffArea(Viewer.Capturer.CurrentFrame, Viewer.Capturer.PreviousFrame, Viewer.Capturer.CaptureFullscreen); + var diffArea = ImageUtils.GetDiffArea(viewer.Capturer.CurrentFrame, viewer.Capturer.PreviousFrame, viewer.Capturer.CaptureFullscreen); if (diffArea.IsEmpty) { continue; } - using (var newImage = Viewer.Capturer.CurrentFrame.Clone(diffArea, PixelFormat.Format32bppArgb)) + using (var newImage = viewer.Capturer.CurrentFrame.Clone(diffArea, PixelFormat.Format32bppArgb)) { - if (Viewer.Capturer.CaptureFullscreen) + if (viewer.Capturer.CaptureFullscreen) { - Viewer.Capturer.CaptureFullscreen = false; + viewer.Capturer.CaptureFullscreen = false; } - encodedImageBytes = ImageUtils.EncodeBitmap(newImage, Viewer.EncoderParams); + encodedImageBytes = ImageUtils.EncodeBitmap(newImage, viewer.EncoderParams); if (encodedImageBytes?.Length > 0) { - await Viewer.SendScreenCapture(encodedImageBytes, viewerID, diffArea.Left, diffArea.Top, diffArea.Width, diffArea.Height, Viewer.ImageQuality); + await viewer.SendScreenCapture(encodedImageBytes, viewerID, diffArea.Left, diffArea.Top, diffArea.Width, diffArea.Height, viewer.ImageQuality); } } } @@ -123,11 +115,11 @@ namespace Remotely.ScreenCast.Core.Services try { - Viewer.Dispose(); + viewer.Dispose(); - Viewer.Capturer.Dispose(); + viewer.Capturer.Dispose(); - Viewer.Disconnect(); + viewer.Disconnect(); } catch (Exception ex) diff --git a/ScreenCast.Linux/Services/ClipboardServiceLinux.cs b/ScreenCast.Linux/Services/ClipboardServiceLinux.cs index 919f9ded..c9deaedf 100644 --- a/ScreenCast.Linux/Services/ClipboardServiceLinux.cs +++ b/ScreenCast.Linux/Services/ClipboardServiceLinux.cs @@ -8,7 +8,9 @@ namespace Remotely.ScreenCast.Linux.Services { public class ClipboardServiceLinux : IClipboardService { +#pragma warning disable public event EventHandler ClipboardTextChanged; +#pragma warning restore public void BeginWatching() { diff --git a/ScreenCast.Linux/Services/ScreenCasterLinux.cs b/ScreenCast.Linux/Services/ScreenCasterLinux.cs index 52ad34f5..a279ab58 100644 --- a/ScreenCast.Linux/Services/ScreenCasterLinux.cs +++ b/ScreenCast.Linux/Services/ScreenCasterLinux.cs @@ -13,12 +13,6 @@ namespace Remotely.ScreenCast.Linux.Services { public class ScreenCasterLinux : ScreenCasterBase, IScreenCaster { - public ScreenCasterLinux(Viewer viewer) - : base(viewer) - { - - } - public async Task BeginScreenCasting(ScreenCastRequest screenCastRequest) { try diff --git a/ScreenCast.Win/Services/ScreenCasterWin.cs b/ScreenCast.Win/Services/ScreenCasterWin.cs index f7825f40..64c89208 100644 --- a/ScreenCast.Win/Services/ScreenCasterWin.cs +++ b/ScreenCast.Win/Services/ScreenCasterWin.cs @@ -13,8 +13,7 @@ namespace Remotely.ScreenCast.Win.Services { public class ScreenCasterWin : ScreenCasterBase, IScreenCaster { - public ScreenCasterWin(CursorIconWatcher cursorIconWatcher, Viewer viewer) - : base(viewer) + public ScreenCasterWin(CursorIconWatcher cursorIconWatcher) { CursorIconWatcher = cursorIconWatcher; } diff --git a/Server/Server.csproj b/Server/Server.csproj index 0922f02a..d10530e5 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -45,6 +45,7 @@ + @@ -159,6 +160,7 @@ + Code diff --git a/Server/wwwroot/scripts/Enums/DynamicDtoType.js b/Server/wwwroot/scripts/Enums/DynamicDtoType.js index 76ef12aa..2eae92a3 100644 --- a/Server/wwwroot/scripts/Enums/DynamicDtoType.js +++ b/Server/wwwroot/scripts/Enums/DynamicDtoType.js @@ -4,5 +4,6 @@ export var DynamicDtoType; DynamicDtoType[DynamicDtoType["ScreenData"] = 1] = "ScreenData"; DynamicDtoType[DynamicDtoType["ScreenSize"] = 2] = "ScreenSize"; DynamicDtoType[DynamicDtoType["MachineName"] = 3] = "MachineName"; + DynamicDtoType[DynamicDtoType["ClipboardText"] = 4] = "ClipboardText"; })(DynamicDtoType || (DynamicDtoType = {})); //# sourceMappingURL=DynamicDtoType.js.map \ No newline at end of file diff --git a/Server/wwwroot/scripts/Enums/DynamicDtoType.js.map b/Server/wwwroot/scripts/Enums/DynamicDtoType.js.map index 64a546ad..a405fc6c 100644 --- a/Server/wwwroot/scripts/Enums/DynamicDtoType.js.map +++ b/Server/wwwroot/scripts/Enums/DynamicDtoType.js.map @@ -1 +1 @@ -{"version":3,"file":"DynamicDtoType.js","sourceRoot":"","sources":["DynamicDtoType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAKX;AALD,WAAY,cAAc;IACtB,mEAAgB,CAAA;IAChB,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,iEAAe,CAAA;AACnB,CAAC,EALW,cAAc,KAAd,cAAc,QAKzB"} \ No newline at end of file +{"version":3,"file":"DynamicDtoType.js","sourceRoot":"","sources":["DynamicDtoType.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACtB,mEAAgB,CAAA;IAChB,+DAAc,CAAA;IACd,+DAAc,CAAA;IACd,iEAAe,CAAA;IACf,qEAAa,CAAA;AACjB,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/Enums/DynamicDtoType.ts b/Server/wwwroot/scripts/Enums/DynamicDtoType.ts index ac7ff8bb..41e28783 100644 --- a/Server/wwwroot/scripts/Enums/DynamicDtoType.ts +++ b/Server/wwwroot/scripts/Enums/DynamicDtoType.ts @@ -2,5 +2,6 @@ CaptureFrame = 0, ScreenData = 1, ScreenSize = 2, - MachineName = 3 + MachineName = 3, + ClipboardText } \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js new file mode 100644 index 00000000..36ae694d --- /dev/null +++ b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js @@ -0,0 +1 @@ +//# sourceMappingURL=ClipboardTextDto.js.map \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js.map b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js.map new file mode 100644 index 00000000..8ebe8825 --- /dev/null +++ b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ClipboardTextDto.js","sourceRoot":"","sources":["ClipboardTextDto.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.ts b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.ts new file mode 100644 index 00000000..7bc30752 --- /dev/null +++ b/Server/wwwroot/scripts/RemoteControl/RtcDtos/ClipboardTextDto.ts @@ -0,0 +1,5 @@ +import { DynamicDto } from "../DynamicDto.js"; + +export interface ClipboardTextDto extends DynamicDto { + ClipboardText: string; +} \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js index 11823b85..dda90df0 100644 --- a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js +++ b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js @@ -1,6 +1,7 @@ import * as UI from "./UI.js"; import { DynamicDtoType } from "../Enums/DynamicDtoType.js"; import { Remotely } from "./Main.js"; +import { PopupMessage } from "../UI.js"; export class RtcMessageHandler { constructor() { this.FpsStack = []; @@ -22,9 +23,15 @@ export class RtcMessageHandler { case DynamicDtoType.ScreenSize: this.ProcessScreenSize(model); break; + case DynamicDtoType.ClipboardText: + this.ProcessClipboardText(model); default: } } + ProcessClipboardText(clipboardText) { + Remotely.ClipboardWatcher.SetClipboardText(clipboardText.ClipboardText); + PopupMessage("Clipboard updated."); + } ProcessMachineName(machineNameDto) { document.title = `${machineNameDto.MachineName} - Remotely Session`; } diff --git a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js.map b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js.map index acda3096..eb043bf1 100644 --- a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js.map +++ b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.js.map @@ -1 +1 @@ -{"version":3,"file":"RtcMessageHandler.js","sourceRoot":"","sources":["RtcMessageHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAMrC,MAAM,OAAO,iBAAiB;IAA9B;QACI,aAAQ,GAAkB,EAAE,CAAC;QAC7B,gBAAW,GAAQ,MAAM,CAAC,aAAa,CAAC,CAAC;QACzC,yBAAoB,GAAiB,EAAE,CAAC;IA8D5C,CAAC;IA7DG,kBAAkB,CAAC,IAAiB;QAChC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAe,CAAC;QACxD,QAAQ,KAAK,CAAC,OAAO,EAAE;YACnB,KAAK,cAAc,CAAC,YAAY;gBAC5B,IAAI,CAAC,mBAAmB,CAAC,KAAmC,CAAC,CAAC;gBAC9D,MAAM;YACV,KAAK,cAAc,CAAC,WAAW;gBAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAkC,CAAC,CAAC;gBAC5D,MAAM;YACV,KAAK,cAAc,CAAC,UAAU;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAiC,CAAC,CAAC;gBAC1D,MAAM;YACV,KAAK,cAAc,CAAC,UAAU;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAiC,CAAC,CAAA;gBACzD,MAAM;YACV,QAAQ;SACX;IACL,CAAC;IACD,kBAAkB,CAAC,cAA8B;QAC7C,QAAQ,CAAC,KAAK,GAAG,GAAG,cAAc,CAAC,WAAW,qBAAqB,CAAC;IACxE,CAAC;IACD,iBAAiB,CAAC,aAA4B;QAC1C,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAChF,CAAC;IAED,iBAAiB,CAAC,aAA4B;QAC1C,EAAE,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,mBAAmB,CAAC,YAA6B;QAC7C,IAAI,EAAE,CAAC,yBAAyB,CAAC,OAAO;YACpC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,YAAY,EAAE;YAC7D,EAAE,CAAC,aAAa,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;SAC9D;QAED,IAAI,YAAY,CAAC,UAAU,EAAE;YACzB,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC1E,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACxC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;gBACd,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,EAC5B,YAAY,CAAC,IAAI,EACjB,YAAY,CAAC,GAAG,EAChB,YAAY,CAAC,KAAK,EAClB,YAAY,CAAC,MAAM,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC;YACF,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAE/B,IAAI,QAAQ,CAAC,KAAK,EAAE;gBAChB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE;oBACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;iBACzB;gBACD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;aACvD;SACJ;aACI;YACD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;SAC3D;IACL,CAAC;CACJ"} \ No newline at end of file +{"version":3,"file":"RtcMessageHandler.js","sourceRoot":"","sources":["RtcMessageHandler.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.ts b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.ts index d7d0ba71..814b950f 100644 --- a/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.ts +++ b/Server/wwwroot/scripts/RemoteControl/RtcMessageHandler.ts @@ -6,6 +6,8 @@ import { CaptureFrameDto } from "./RtcDtos/CaptureFrameDto.js"; import { MachineNameDto } from "./RtcDtos/MachineNameDto.js"; import { ScreenDataDto } from "./RtcDtos/ScreenDataDto.js"; import { ScreenSizeDto } from "./RtcDtos/ScreenSizeDto.js"; +import { ClipboardTextDto } from "./RtcDtos/ClipboardTextDto.js"; +import { PopupMessage } from "../UI.js"; export class RtcMessageHandler { FpsStack: Array = []; @@ -26,9 +28,15 @@ export class RtcMessageHandler { case DynamicDtoType.ScreenSize: this.ProcessScreenSize(model as unknown as ScreenSizeDto) break; + case DynamicDtoType.ClipboardText: + this.ProcessClipboardText(model as unknown as ClipboardTextDto); default: } } + ProcessClipboardText(clipboardText: ClipboardTextDto) { + Remotely.ClipboardWatcher.SetClipboardText(clipboardText.ClipboardText); + PopupMessage("Clipboard updated."); + } ProcessMachineName(machineNameDto: MachineNameDto) { document.title = `${machineNameDto.MachineName} - Remotely Session`; }