Remove static screencaster.

This commit is contained in:
Jared Goodwin 2019-12-14 09:08:14 -08:00
parent e4374bc380
commit 40fb8748e1
9 changed files with 83 additions and 42 deletions

View File

@ -40,7 +40,7 @@ namespace Remotely.Desktop.Unix.ViewModels
new X11Input(),
new LinuxAudioCapturer(),
new LinuxClipboardService(),
new LinuxScreenCaster());
new LinuxScreenCaster(new X11Capture()));
Conductor.SessionIDChanged += SessionIDChanged;
Conductor.ViewerRemoved += ViewerRemoved;
@ -209,7 +209,7 @@ namespace Remotely.Desktop.Unix.ViewModels
}
await Conductor.CasterSocket.SendCursorChange(new CursorInfo(null, Point.Empty, "default"), new List<string>() { screenCastRequest.ViewerID });
_ = ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer);
_ = Conductor.ScreenCaster.BeginScreenCasting(screenCastRequest);
});
}
});

View File

@ -36,7 +36,7 @@ namespace Remotely.Desktop.Win.ViewModels
new WinInput(),
new WinAudioCapturer(),
new WinClipboardService(),
new WinScreenCaster(CursorIconWatcher));
new WinScreenCaster(CursorIconWatcher, GetCapturer()));
Conductor.SessionIDChanged += SessionIDChanged;
Conductor.ViewerRemoved += ViewerRemoved;
@ -188,6 +188,29 @@ namespace Remotely.Desktop.Win.ViewModels
await Conductor?.CasterSocket?.SendCursorChange(cursor, Conductor.Viewers.Keys.ToList());
}
}
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(() =>
@ -215,7 +238,7 @@ namespace Remotely.Desktop.Win.ViewModels
capturer = new BitBltCapture();
}
await Conductor.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List<string>() { screenCastRequest.ViewerID });
_ = ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer);
_ = Conductor.ScreenCaster.BeginScreenCasting(screenCastRequest);
});
}
});

View File

@ -16,9 +16,14 @@ using Remotely.ScreenCast.Core.Interfaces;
namespace Remotely.ScreenCast.Core.Capture
{
public class ScreenCaster
public class ScreenCasterBase
{
public static async Task BeginScreenCasting(string viewerID,
protected ICapturer Capturer { get; }
public ScreenCasterBase(ICapturer capturer)
{
Capturer = capturer;
}
public async Task BeginScreenCasting(string viewerID,
string requesterName,
ICapturer capturer)
{

View File

@ -19,14 +19,16 @@ namespace Remotely.ScreenCast.Core
public class Conductor
{
public static Conductor Current { get; private set; }
public IScreenCaster ScreenCaster { get; }
public Conductor(IKeyboardMouseInput keyboardMouse,
IAudioCapturer audioService,
IClipboardService clipboardService,
IScreenCaster screenCastService)
IScreenCaster screenCaster)
{
Current = this;
CasterSocket = new CasterSocket(this, keyboardMouse, screenCastService, audioService, clipboardService);
ScreenCaster = screenCaster;
CasterSocket = new CasterSocket(this, keyboardMouse, screenCaster, audioService, clipboardService);
}
public event EventHandler<ScreenCastRequest> ScreenCastRequested;

View File

@ -25,18 +25,18 @@ namespace Remotely.ScreenCast.Core.Sockets
Conductor conductor,
IKeyboardMouseInput keyboardMouseInput,
IScreenCaster screenCastService,
IAudioCapturer audioService,
IAudioCapturer audioCapturer,
IClipboardService clipboardService)
{
Conductor = conductor;
KeyboardMouseInput = keyboardMouseInput;
ClipboardService = clipboardService;
AudioService = audioService;
ScreenCastService = screenCastService;
AudioCapturer = audioCapturer;
ScreenCaster = screenCastService;
}
public IScreenCaster ScreenCastService { get; }
private IAudioCapturer AudioService { get; }
public IScreenCaster ScreenCaster { get; }
private IAudioCapturer AudioCapturer { get; }
private IClipboardService ClipboardService { get; }
private Conductor Conductor { get; }
private HubConnection Connection { get; set; }
@ -153,7 +153,7 @@ namespace Remotely.ScreenCast.Core.Sockets
{
try
{
ScreenCastService.BeginScreenCasting(new ScreenCastRequest() { ViewerID = viewerID, RequesterName = requesterName });
ScreenCaster.BeginScreenCasting(new ScreenCastRequest() { ViewerID = viewerID, RequesterName = requesterName });
}
catch (Exception ex)
{
@ -277,7 +277,7 @@ namespace Remotely.ScreenCast.Core.Sockets
{
if (Conductor.Viewers.TryGetValue(viewerID, out var viewer) && viewer.HasControl)
{
AudioService.ToggleAudio(toggleOn);
AudioCapturer.ToggleAudio(toggleOn);
}
});

View File

@ -3,6 +3,7 @@ using Remotely.ScreenCast.Core.Services;
using System;
using System.Threading;
using Remotely.ScreenCast.Linux.Services;
using Remotely.ScreenCast.Linux.Capture;
namespace Remotely.ScreenCast.Linux
{
@ -18,7 +19,7 @@ namespace Remotely.ScreenCast.Linux
new X11Input(),
new LinuxAudioCapturer(),
new LinuxClipboardService(),
new LinuxScreenCaster());
new LinuxScreenCaster(new X11Capture()));
Conductor.ProcessArgs(args);
Conductor.Connect().ContinueWith(async (task) =>

View File

@ -12,15 +12,19 @@ using System.Threading.Tasks;
namespace Remotely.ScreenCast.Linux.Services
{
public class LinuxScreenCaster : IScreenCaster
public class LinuxScreenCaster : ScreenCasterBase, IScreenCaster
{
public LinuxScreenCaster(ICapturer capturer)
: base(capturer)
{
}
public async Task BeginScreenCasting(ScreenCastRequest screenCastRequest)
{
try
{
var capturer = new X11Capture();
await Conductor.Current.CasterSocket.SendCursorChange(new CursorInfo(null, Point.Empty, "default"), new List<string>() { screenCastRequest.ViewerID });
_ = ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer);
_ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, Capturer);
}
catch (Exception ex)
{

View File

@ -8,6 +8,8 @@ using System.Threading.Tasks;
using Remotely.Shared.Win32;
using System.Threading;
using Remotely.ScreenCast.Win.Services;
using Remotely.ScreenCast.Core.Interfaces;
using Remotely.ScreenCast.Win.Capture;
namespace Remotely.ScreenCast.Win
{
@ -33,7 +35,7 @@ namespace Remotely.ScreenCast.Win
new WinInput(),
new WinAudioCapturer(),
new WinClipboardService(),
new WinScreenCaster(CursorIconWatcher));
new WinScreenCaster(CursorIconWatcher, GetCapturer()));
Conductor.ProcessArgs(args);
Conductor.Connect().ContinueWith(async (task) =>
@ -57,8 +59,6 @@ namespace Remotely.ScreenCast.Win
}
}
private static async Task CheckForRelaunch()
{
@ -102,6 +102,28 @@ 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

@ -14,9 +14,10 @@ using Remotely.ScreenCast.Win.Capture;
namespace Remotely.ScreenCast.Win.Services
{
public class WinScreenCaster : IScreenCaster
public class WinScreenCaster : ScreenCasterBase, IScreenCaster
{
public WinScreenCaster(CursorIconWatcher cursorIconWatcher)
public WinScreenCaster(CursorIconWatcher cursorIconWatcher, ICapturer capturer)
: base(capturer)
{
CursorIconWatcher = cursorIconWatcher;
}
@ -25,25 +26,8 @@ namespace Remotely.ScreenCast.Win.Services
public async Task BeginScreenCasting(ScreenCastRequest screenCastRequest)
{
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();
}
await Conductor.Current.CasterSocket.SendCursorChange(CursorIconWatcher.GetCurrentCursor(), new List<string>() { screenCastRequest.ViewerID });
_ = ScreenCaster.BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, capturer);
_ = BeginScreenCasting(screenCastRequest.ViewerID, screenCastRequest.RequesterName, Capturer);
}
}
}