Change how casting thread is started.

This commit is contained in:
Jared Goodwin 2021-08-26 13:35:09 -07:00
parent 82e3074354
commit 14291e0920
5 changed files with 20 additions and 41 deletions

View File

@ -220,14 +220,12 @@ namespace Remotely.Desktop.Core.Services
}
}
_ = Task.Run(() => {
ScreenCaster.BeginScreenCasting(new ScreenCastRequest()
{
NotifyUser = notifyUser,
ViewerID = viewerID,
RequesterName = requesterName,
UseWebRtc = useWebRtc
});
ScreenCaster.BeginScreenCasting(new ScreenCastRequest()
{
NotifyUser = notifyUser,
ViewerID = viewerID,
RequesterName = requesterName,
UseWebRtc = useWebRtc
});
}
catch (Exception ex)

View File

@ -25,7 +25,6 @@ namespace Remotely.Desktop.Core.Services
public class ScreenCaster : IScreenCaster
{
private readonly ConcurrentDictionary<string, Thread> _castingThreads = new();
private readonly Conductor _conductor;
private readonly ICursorIconWatcher _cursorIconWatcher;
private readonly ISessionIndicator _sessionIndicator;
@ -45,13 +44,7 @@ namespace Remotely.Desktop.Core.Services
public void BeginScreenCasting(ScreenCastRequest screenCastRequest)
{
var castingThread = new Thread(async () =>
{
await CastScreen(screenCastRequest);
});
castingThread.SetApartmentState(ApartmentState.STA);
_castingThreads.AddOrUpdate(screenCastRequest.ViewerID, castingThread, (k, v) => castingThread);
castingThread.Start();
_ = Task.Run(async () => await CastScreen(screenCastRequest));
}
private async Task CastScreen(ScreenCastRequest screenCastRequest)
@ -215,7 +208,6 @@ namespace Remotely.Desktop.Core.Services
Logger.Write("No more viewers. Calling shutdown service.");
await _shutdownService.Shutdown();
}
_castingThreads.TryRemove(screenCastRequest.ViewerID, out _);
}
}

View File

@ -315,26 +315,19 @@ namespace Remotely.Desktop.Win.ViewModels
}
}
private void ScreenCastRequested(object sender, ScreenCastRequest screenCastRequest)
private async void ScreenCastRequested(object sender, ScreenCastRequest screenCastRequest)
{
App.Current.Dispatcher.Invoke(() =>
await App.Current.Dispatcher.InvokeAsync(async () =>
{
App.Current.MainWindow.Activate();
var result = MessageBox.Show(Application.Current.MainWindow, $"You've received a connection request from {screenCastRequest.RequesterName}. Accept?", "Connection Request", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.Yes)
{
Task.Run(() =>
{
Services.GetRequiredService<IScreenCaster>().BeginScreenCasting(screenCastRequest);
});
Services.GetRequiredService<IScreenCaster>().BeginScreenCasting(screenCastRequest);
}
else
{
// Run on another thread so it doesn't tie up the UI thread.
Task.Run(async () =>
{
await _casterSocket.SendConnectionRequestDenied(screenCastRequest.ViewerID);
});
await _casterSocket.SendConnectionRequestDenied(screenCastRequest.ViewerID);
}
});
}

View File

@ -20,7 +20,6 @@ namespace Remotely.Desktop.XPlat
{
public class App : Application
{
private static Conductor Conductor;
private static IServiceProvider Services => ServiceContainer.Instance;
public override void Initialize()
@ -96,24 +95,24 @@ namespace Remotely.Desktop.XPlat
BuildServices();
Conductor = Services.GetRequiredService<Conductor>();
var conductor = Services.GetRequiredService<Conductor>();
var args = Environment.GetCommandLineArgs().SkipWhile(x => !x.StartsWith("-"));
Logger.Write("Processing Args: " + string.Join(", ", args));
Conductor.ProcessArgs(args.ToArray());
conductor.ProcessArgs(args.ToArray());
await Services.GetRequiredService<IDeviceInitService>().GetInitParams();
if (Conductor.Mode == Core.Enums.AppMode.Chat)
if (conductor.Mode == Core.Enums.AppMode.Chat)
{
await Services.GetRequiredService<IChatClientService>().StartChat(Conductor.RequesterID, Conductor.OrganizationName);
await Services.GetRequiredService<IChatClientService>().StartChat(conductor.RequesterID, conductor.OrganizationName);
}
else if (Conductor.Mode == Core.Enums.AppMode.Unattended)
else if (conductor.Mode == Core.Enums.AppMode.Unattended)
{
var casterSocket = Services.GetRequiredService<ICasterSocket>();
await casterSocket.Connect(Conductor.Host).ConfigureAwait(false);
await casterSocket.SendDeviceInfo(Conductor.ServiceID, Environment.MachineName, Conductor.DeviceID).ConfigureAwait(false);
await casterSocket.NotifyRequesterUnattendedReady(Conductor.RequesterID).ConfigureAwait(false);
await casterSocket.Connect(conductor.Host).ConfigureAwait(false);
await casterSocket.SendDeviceInfo(conductor.ServiceID, Environment.MachineName, conductor.DeviceID).ConfigureAwait(false);
await casterSocket.NotifyRequesterUnattendedReady(conductor.RequesterID).ConfigureAwait(false);
Services.GetRequiredService<IdleTimer>().Start();
Services.GetRequiredService<IClipboardService>().BeginWatching();
Services.GetRequiredService<IKeyboardMouseInput>().Init();

View File

@ -284,10 +284,7 @@ namespace Remotely.Desktop.XPlat.ViewModels
var result = await MessageBox.Show($"You've received a connection request from {screenCastRequest.RequesterName}. Accept?", "Connection Request", MessageBoxType.YesNo);
if (result == MessageBoxResult.Yes)
{
_ = Task.Run(() =>
{
Services.GetRequiredService<IScreenCaster>().BeginScreenCasting(screenCastRequest);
});
Services.GetRequiredService<IScreenCaster>().BeginScreenCasting(screenCastRequest);
}
});
}