Fix DirectX capturer initialization.

This commit is contained in:
Jared Goodwin 2019-12-15 16:44:30 -08:00
parent 1f74ebffa5
commit 47dedfe2b1
9 changed files with 32 additions and 64 deletions

View File

@ -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;

View File

@ -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(() =>

View File

@ -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)

View File

@ -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;
};

View File

@ -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) =>

View File

@ -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<string>() { screenCastRequest.ViewerID });
_ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, Capturer);
_ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, new X11Capture());
}
catch (Exception ex)
{

View File

@ -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)

View File

@ -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<string>() { 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;
}
}
}

View File

@ -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 =>