Cleanup Capturer services.

This commit is contained in:
Jared Goodwin 2020-04-03 11:10:37 -07:00
parent 138b339e07
commit d04552152e
5 changed files with 25 additions and 18 deletions

View File

@ -224,13 +224,13 @@ namespace Remotely.Desktop.Linux.ViewModels
});
serviceCollection.AddSingleton<IScreenCaster, ScreenCasterLinux>();
serviceCollection.AddSingleton<IKeyboardMouseInput, X11Input>();
serviceCollection.AddSingleton<IKeyboardMouseInput, KeyboardMouseInputLinux>();
serviceCollection.AddSingleton<IClipboardService, ClipboardServiceLinux>();
serviceCollection.AddSingleton<IAudioCapturer, AudioCapturerLinux>();
serviceCollection.AddSingleton<CasterSocket>();
serviceCollection.AddSingleton<IdleTimer>();
serviceCollection.AddSingleton<Conductor>();
serviceCollection.AddTransient<IScreenCapturer, X11Capture>();
serviceCollection.AddTransient<IScreenCapturer, ScreenCapturerLinux>();
ServiceContainer.Instance = serviceCollection.BuildServiceProvider();

View File

@ -60,14 +60,14 @@ namespace Remotely.ScreenCast.Linux
});
serviceCollection.AddSingleton<IScreenCaster, ScreenCasterLinux>();
serviceCollection.AddSingleton<IKeyboardMouseInput, X11Input>();
serviceCollection.AddSingleton<IKeyboardMouseInput, KeyboardMouseInputLinux>();
serviceCollection.AddSingleton<IClipboardService, ClipboardServiceLinux>();
serviceCollection.AddSingleton<IAudioCapturer, AudioCapturerLinux>();
serviceCollection.AddSingleton<CasterSocket>();
serviceCollection.AddSingleton<IdleTimer>();
serviceCollection.AddSingleton<Conductor>();
serviceCollection.AddSingleton<ChatHostService>();
serviceCollection.AddTransient<IScreenCapturer, X11Capture>();
serviceCollection.AddTransient<IScreenCapturer, ScreenCapturerLinux>();
ServiceContainer.Instance = serviceCollection.BuildServiceProvider();
}

View File

@ -10,9 +10,9 @@ using Remotely.ScreenCast.Core.Models;
namespace Remotely.ScreenCast.Linux.Services
{
public class X11Input : IKeyboardMouseInput
public class KeyboardMouseInputLinux : IKeyboardMouseInput
{
public X11Input()
public KeyboardMouseInputLinux()
{
Display = LibX11.XOpenDisplay(null);
}

View File

@ -11,10 +11,10 @@ using System.Text;
namespace Remotely.ScreenCast.Linux.Services
{
public class X11Capture : IScreenCapturer
public class ScreenCapturerLinux : IScreenCapturer
{
private readonly Dictionary<string, int> x11Screens = new Dictionary<string, int>();
public X11Capture()
public ScreenCapturerLinux()
{
Display = LibX11.XOpenDisplay(null);
Init();

View File

@ -77,20 +77,14 @@ namespace Remotely.ScreenCast.Win.Services
public Bitmap PreviousFrame { get; set; }
public string SelectedScreen { get; private set; } = Screen.PrimaryScreen.DeviceName;
private Graphics Graphic { get; set; }
public void Dispose()
{
foreach (var output in directxScreens.Values)
{
output.Dispose();
}
directxScreens.Clear();
device?.Dispose();
adapter?.Dispose();
factory?.Dispose();
DisposeDirectX();
CurrentFrame?.Dispose();
PreviousFrame?.Dispose();
}
public IEnumerable<string> GetDisplayNames() => Screen.AllScreens.Select(x => x.DeviceName);
public void GetNextFrame()
@ -146,6 +140,7 @@ namespace Remotely.ScreenCast.Win.Services
InitBitBlt();
InitDirectX();
}
public void SetSelectedScreen(string displayName)
{
if (displayName == SelectedScreen)
@ -167,6 +162,17 @@ namespace Remotely.ScreenCast.Win.Services
ScreenChanged?.Invoke(this, CurrentScreenBounds);
}
private void DisposeDirectX()
{
foreach (var output in directxScreens.Values)
{
output.Dispose();
}
directxScreens.Clear();
device?.Dispose();
adapter?.Dispose();
factory?.Dispose();
}
private void GetBitBltFrame()
{
try
@ -268,6 +274,7 @@ namespace Remotely.ScreenCast.Win.Services
private void InitBitBlt()
{
bitBltScreens.Clear();
Graphic = Graphics.FromImage(CurrentFrame);
for (var i = 0; i < Screen.AllScreens.Length; i++)
{
@ -276,7 +283,7 @@ namespace Remotely.ScreenCast.Win.Services
}
private void InitDirectX()
{
Dispose();
DisposeDirectX();
factory = new Factory1();