From 47dedfe2b16b5617e51017e82083589cfd508f42 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sun, 15 Dec 2019 16:44:30 -0800 Subject: [PATCH] Fix DirectX capturer initialization. --- .../ViewModels/MainWindowViewModel.cs | 2 +- Desktop.Win/ViewModels/MainWindowViewModel.cs | 24 +--------------- ScreenCast.Core/Capture/ScreenCasterBase.cs | 5 ---- ScreenCast.Core/Sockets/CasterSocket.cs | 4 +-- ScreenCast.Linux/Program.cs | 2 +- .../Services/LinuxScreenCaster.cs | 7 +---- ScreenCast.Win/Program.cs | 23 +-------------- ScreenCast.Win/Services/WinScreenCaster.cs | 28 +++++++++++++++++-- Server/Startup.cs | 1 - 9 files changed, 32 insertions(+), 64 deletions(-) diff --git a/Desktop.Unix/ViewModels/MainWindowViewModel.cs b/Desktop.Unix/ViewModels/MainWindowViewModel.cs index ffe2e1b6..a307752b 100644 --- a/Desktop.Unix/ViewModels/MainWindowViewModel.cs +++ b/Desktop.Unix/ViewModels/MainWindowViewModel.cs @@ -40,7 +40,7 @@ namespace Remotely.Desktop.Unix.ViewModels new X11Input(), new LinuxAudioCapturer(), new LinuxClipboardService(), - new LinuxScreenCaster(new X11Capture())); + new LinuxScreenCaster()); Conductor.SessionIDChanged += SessionIDChanged; Conductor.ViewerRemoved += ViewerRemoved; diff --git a/Desktop.Win/ViewModels/MainWindowViewModel.cs b/Desktop.Win/ViewModels/MainWindowViewModel.cs index 18e761a4..a3522e3e 100644 --- a/Desktop.Win/ViewModels/MainWindowViewModel.cs +++ b/Desktop.Win/ViewModels/MainWindowViewModel.cs @@ -36,7 +36,7 @@ namespace Remotely.Desktop.Win.ViewModels new WinInput(), new WinAudioCapturer(), new WinClipboardService(), - new WinScreenCaster(CursorIconWatcher, GetCapturer())); + new WinScreenCaster(CursorIconWatcher)); Conductor.SessionIDChanged += SessionIDChanged; Conductor.ViewerRemoved += ViewerRemoved; @@ -189,28 +189,6 @@ namespace Remotely.Desktop.Win.ViewModels } } - private ICapturer GetCapturer() - { - ICapturer capturer; - try - { - if (Conductor.Current.Viewers.Count == 0) - { - capturer = new DXCapture(); - } - else - { - capturer = new BitBltCapture(); - } - } - catch (Exception ex) - { - Logger.Write(ex); - capturer = new BitBltCapture(); - } - - return capturer; - } private void ScreenCastRequested(object sender, ScreenCastRequest screenCastRequest) { App.Current.Dispatcher.Invoke(() => diff --git a/ScreenCast.Core/Capture/ScreenCasterBase.cs b/ScreenCast.Core/Capture/ScreenCasterBase.cs index d32d6ba6..9a89409f 100644 --- a/ScreenCast.Core/Capture/ScreenCasterBase.cs +++ b/ScreenCast.Core/Capture/ScreenCasterBase.cs @@ -18,11 +18,6 @@ namespace Remotely.ScreenCast.Core.Capture { public class ScreenCasterBase { - protected ICapturer Capturer { get; } - public ScreenCasterBase(ICapturer capturer) - { - Capturer = capturer; - } public async Task BeginScreenCasting(string viewerID, string requesterName, ICapturer capturer) diff --git a/ScreenCast.Core/Sockets/CasterSocket.cs b/ScreenCast.Core/Sockets/CasterSocket.cs index 66af36b7..1b2381b8 100644 --- a/ScreenCast.Core/Sockets/CasterSocket.cs +++ b/ScreenCast.Core/Sockets/CasterSocket.cs @@ -121,8 +121,8 @@ namespace Remotely.ScreenCast.Core.Sockets { Connection.Closed += (ex) => { - Logger.Write($"Connection closed. Error: {ex.Message}"); - Environment.Exit(1); + Logger.Write($"Connection closed. Error: {ex?.Message}"); + Environment.Exit(0); return Task.CompletedTask; }; diff --git a/ScreenCast.Linux/Program.cs b/ScreenCast.Linux/Program.cs index 3be19e46..8ea4cf77 100644 --- a/ScreenCast.Linux/Program.cs +++ b/ScreenCast.Linux/Program.cs @@ -19,7 +19,7 @@ namespace Remotely.ScreenCast.Linux new X11Input(), new LinuxAudioCapturer(), new LinuxClipboardService(), - new LinuxScreenCaster(new X11Capture())); + new LinuxScreenCaster()); Conductor.ProcessArgs(args); Conductor.Connect().ContinueWith(async (task) => diff --git a/ScreenCast.Linux/Services/LinuxScreenCaster.cs b/ScreenCast.Linux/Services/LinuxScreenCaster.cs index 6636221b..8adfeaff 100644 --- a/ScreenCast.Linux/Services/LinuxScreenCaster.cs +++ b/ScreenCast.Linux/Services/LinuxScreenCaster.cs @@ -14,17 +14,12 @@ namespace Remotely.ScreenCast.Linux.Services { public class LinuxScreenCaster : ScreenCasterBase, IScreenCaster { - public LinuxScreenCaster(ICapturer capturer) - : base(capturer) - { - - } public async Task BeginScreenCasting(ScreenCastRequest screenCastRequest) { try { await Conductor.Current.CasterSocket.SendCursorChange(new CursorInfo(null, Point.Empty, "default"), new List() { screenCastRequest.ViewerID }); - _ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, Capturer); + _ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, new X11Capture()); } catch (Exception ex) { diff --git a/ScreenCast.Win/Program.cs b/ScreenCast.Win/Program.cs index 08e2f5d0..c54ffb57 100644 --- a/ScreenCast.Win/Program.cs +++ b/ScreenCast.Win/Program.cs @@ -35,7 +35,7 @@ namespace Remotely.ScreenCast.Win new WinInput(), new WinAudioCapturer(), new WinClipboardService(), - new WinScreenCaster(CursorIconWatcher, GetCapturer())); + new WinScreenCaster(CursorIconWatcher)); Conductor.ProcessArgs(args); Conductor.Connect().ContinueWith(async (task) => @@ -102,28 +102,7 @@ namespace Remotely.ScreenCast.Win Logger.Write((Exception)e.ExceptionObject); } - private static ICapturer GetCapturer() - { - ICapturer capturer; - try - { - if (Conductor.Current.Viewers.Count == 0) - { - capturer = new DXCapture(); - } - else - { - capturer = new BitBltCapture(); - } - } - catch (Exception ex) - { - Logger.Write(ex); - capturer = new BitBltCapture(); - } - return capturer; - } private static async Task HandleConnection(Conductor conductor) { while (true) diff --git a/ScreenCast.Win/Services/WinScreenCaster.cs b/ScreenCast.Win/Services/WinScreenCaster.cs index a2ee5cf0..7b831ed8 100644 --- a/ScreenCast.Win/Services/WinScreenCaster.cs +++ b/ScreenCast.Win/Services/WinScreenCaster.cs @@ -16,8 +16,7 @@ namespace Remotely.ScreenCast.Win.Services { public class WinScreenCaster : ScreenCasterBase, IScreenCaster { - public WinScreenCaster(CursorIconWatcher cursorIconWatcher, ICapturer capturer) - : base(capturer) + public WinScreenCaster(CursorIconWatcher cursorIconWatcher) { CursorIconWatcher = cursorIconWatcher; } @@ -27,7 +26,30 @@ namespace Remotely.ScreenCast.Win.Services public async Task BeginScreenCasting(ScreenCastRequest screenCastRequest) { await Conductor.Current.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List() { screenCastRequest.ViewerID }); - _ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, Capturer); + _ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, GetCapturer()); + } + + private static ICapturer GetCapturer() + { + ICapturer capturer; + try + { + if (Conductor.Current.Viewers.Count == 0) + { + capturer = new DXCapture(); + } + else + { + capturer = new BitBltCapture(); + } + } + catch (Exception ex) + { + Logger.Write(ex); + capturer = new BitBltCapture(); + } + + return capturer; } } } diff --git a/Server/Startup.cs b/Server/Startup.cs index 593fdb9f..0f8a8a24 100644 --- a/Server/Startup.cs +++ b/Server/Startup.cs @@ -188,7 +188,6 @@ namespace Remotely.Server ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); - // TODO: Re-enable when Swagger works when building for Linux on Windows. app.UseSwagger(); app.UseSwaggerUI(c =>