diff --git a/Agent/Services/AppLauncher.cs b/Agent/Services/AppLauncher.cs index a6a919f3..ab8e1152 100644 --- a/Agent/Services/AppLauncher.cs +++ b/Agent/Services/AppLauncher.cs @@ -28,12 +28,12 @@ namespace Remotely.Agent.Services var rcBinaryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ScreenCast", OSUtils.ScreenCastExecutableFileName); if (!File.Exists(rcBinaryPath)) { - await hubConnection.InvokeAsync("DisplayMessage", "Chat executable not found on target device.", "Executable not found on device.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Chat executable not found on target device.", "Executable not found on device.", requesterID); } // Start ScreenCast. - await hubConnection.InvokeAsync("DisplayMessage", $"Starting chat service...", "Starting chat service.", requesterID); + await hubConnection.SendAsync("DisplayMessage", $"Starting chat service...", "Starting chat service.", requesterID); if (OSUtils.IsWindows) { @@ -46,7 +46,7 @@ namespace Remotely.Agent.Services var result = Win32Interop.OpenInteractiveProcess($"{rcBinaryPath} -mode Chat -requester {requesterID} -organization \"{orgName}\"", "default", false, out var procInfo); if (!result) { - await hubConnection.InvokeAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); } else { @@ -63,7 +63,7 @@ namespace Remotely.Agent.Services catch (Exception ex) { Logger.Write(ex); - await hubConnection.InvokeAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); } return -1; } @@ -75,13 +75,13 @@ namespace Remotely.Agent.Services var rcBinaryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ScreenCast", OSUtils.ScreenCastExecutableFileName); if (!File.Exists(rcBinaryPath)) { - await hubConnection.InvokeAsync("DisplayMessage", "Remote control executable not found on target device.", "Executable not found on device.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Remote control executable not found on target device.", "Executable not found on device.", requesterID); return; } // Start ScreenCast. - await hubConnection.InvokeAsync("DisplayMessage", $"Starting remote control...", "Starting remote control.", requesterID); + await hubConnection.SendAsync("DisplayMessage", $"Starting remote control...", "Starting remote control.", requesterID); if (OSUtils.IsWindows) { @@ -94,7 +94,7 @@ namespace Remotely.Agent.Services var result = Win32Interop.OpenInteractiveProcess(rcBinaryPath + $" -mode Unattended -requester {requesterID} -serviceid {serviceID} -deviceid {ConnectionInfo.DeviceID} -host {ConnectionInfo.Host}", "default", true, out _); if (!result) { - await hubConnection.InvokeAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); } } } @@ -107,7 +107,7 @@ namespace Remotely.Agent.Services catch (Exception ex) { Logger.Write(ex); - await hubConnection.InvokeAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); + await hubConnection.SendAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); } } public async Task RestartScreenCaster(List viewerIDs, string serviceID, string requesterID, HubConnection hubConnection) @@ -140,8 +140,8 @@ namespace Remotely.Agent.Services if (!result) { Logger.Write("Failed to relaunch screen caster."); - await hubConnection.InvokeAsync("SendConnectionFailedToViewers", viewerIDs); - await hubConnection.InvokeAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); + await hubConnection.SendAsync("SendConnectionFailedToViewers", viewerIDs); + await hubConnection.SendAsync("DisplayMessage", "Remote control failed to start on target device.", "Failed to start remote control.", requesterID); } } } @@ -154,7 +154,7 @@ namespace Remotely.Agent.Services } catch (Exception ex) { - await hubConnection.InvokeAsync("SendConnectionFailedToViewers", viewerIDs); + await hubConnection.SendAsync("SendConnectionFailedToViewers", viewerIDs); Logger.Write(ex); throw; } diff --git a/Agent/Services/CommandExecutor.cs b/Agent/Services/CommandExecutor.cs index 0b905f88..c12cef9c 100644 --- a/Agent/Services/CommandExecutor.cs +++ b/Agent/Services/CommandExecutor.cs @@ -32,11 +32,11 @@ namespace Remotely.Agent.Services if (Encoding.UTF8.GetBytes(serializedResult).Length > 400000) { await SendResultsViaAjax("PSCore", psCoreResult); - await hubConnection.InvokeAsync("PSCoreResultViaAjax", commandID); + await hubConnection.SendAsync("PSCoreResultViaAjax", commandID); } else { - await hubConnection.InvokeAsync("PSCoreResult", psCoreResult); + await hubConnection.SendAsync("PSCoreResult", psCoreResult); } break; } @@ -48,11 +48,11 @@ namespace Remotely.Agent.Services if (Encoding.UTF8.GetBytes(serializedResult).Length > 400000) { await SendResultsViaAjax("WinPS", result); - await hubConnection.InvokeAsync("WinPSResultViaAjax", commandID); + await hubConnection.SendAsync("WinPSResultViaAjax", commandID); } else { - await hubConnection.InvokeAsync("CommandResult", result); + await hubConnection.SendAsync("CommandResult", result); } } break; @@ -64,11 +64,11 @@ namespace Remotely.Agent.Services if (Encoding.UTF8.GetBytes(serializedResult).Length > 400000) { await SendResultsViaAjax("CMD", result); - await hubConnection.InvokeAsync("CMDResultViaAjax", commandID); + await hubConnection.SendAsync("CMDResultViaAjax", commandID); } else { - await hubConnection.InvokeAsync("CommandResult", result); + await hubConnection.SendAsync("CommandResult", result); } } break; @@ -80,11 +80,11 @@ namespace Remotely.Agent.Services if (Encoding.UTF8.GetBytes(serializedResult).Length > 400000) { await SendResultsViaAjax("Bash", result); - await hubConnection.InvokeAsync("BashResultViaAjax", commandID); + await hubConnection.SendAsync("BashResultViaAjax", commandID); } else { - await hubConnection.InvokeAsync("CommandResult", result); + await hubConnection.SendAsync("CommandResult", result); } } break; @@ -95,7 +95,7 @@ namespace Remotely.Agent.Services catch (Exception ex) { Logger.Write(ex); - await hubConnection.InvokeAsync("DisplayMessage", "There was an error executing the command. It has been logged on the client device.", "Error executing command.", senderConnectionID); + await hubConnection.SendAsync("DisplayMessage", "There was an error executing the command. It has been logged on the client device.", "Error executing command.", senderConnectionID); } } @@ -135,7 +135,7 @@ namespace Remotely.Agent.Services break; } - await hubConnection.InvokeAsync("CommandResultViaApi", commandID, requestID); + await hubConnection.SendAsync("CommandResultViaApi", commandID, requestID); } catch (Exception ex) { diff --git a/Agent/Services/DeviceSocket.cs b/Agent/Services/DeviceSocket.cs index 9d5f750a..e28f32ed 100644 --- a/Agent/Services/DeviceSocket.cs +++ b/Agent/Services/DeviceSocket.cs @@ -58,7 +58,7 @@ namespace Remotely.Agent.Services var device = await DeviceInformation.Create(ConnectionInfo.DeviceID, ConnectionInfo.OrganizationID); - var result = await HubConnection.InvokeAsync("DeviceCameOnline", device); + var result = await HubConnection.SendAsync("DeviceCameOnline", device); if (!result) { @@ -75,17 +75,17 @@ namespace Remotely.Agent.Services { IsServerVerified = true; ConnectionInfo.ServerVerificationToken = Guid.NewGuid().ToString(); - await HubConnection.InvokeAsync("SetServerVerificationToken", ConnectionInfo.ServerVerificationToken); + await HubConnection.SendAsync("SetServerVerificationToken", ConnectionInfo.ServerVerificationToken); ConfigService.SaveConnectionInfo(ConnectionInfo); } else { - await HubConnection.InvokeAsync("SendServerVerificationToken"); + await HubConnection.SendAsync("SendServerVerificationToken"); } if (ConfigService.TryGetDeviceSetupOptions(out DeviceSetupOptions options)) { - await HubConnection.InvokeAsync("DeviceSetupOptions", options, ConnectionInfo.DeviceID); + await HubConnection.SendAsync("DeviceSetupOptions", options, ConnectionInfo.DeviceID); } HeartbeatTimer?.Dispose(); @@ -97,7 +97,7 @@ namespace Remotely.Agent.Services public async Task SendHeartbeat() { var currentInfo = await DeviceInformation.Create(ConnectionInfo.DeviceID, ConnectionInfo.OrganizationID); - await HubConnection.InvokeAsync("DeviceHeartbeat", currentInfo); + await HubConnection.SendAsync("DeviceHeartbeat", currentInfo); } private async void HeartbeatTimer_Elapsed(object sender, ElapsedEventArgs e) @@ -176,7 +176,7 @@ namespace Remotely.Agent.Services } } } - await this.HubConnection.InvokeAsync("TransferCompleted", transferID, requesterID); + await this.HubConnection.SendAsync("TransferCompleted", transferID, requesterID); }); HubConnection.On("DeployScript", async (string mode, string fileID, string commandResultID, string requesterID) => { if (!IsServerVerified) diff --git a/Desktop.Win/ViewModels/MainWindowViewModel.cs b/Desktop.Win/ViewModels/MainWindowViewModel.cs index dee0d9c0..117ad88d 100644 --- a/Desktop.Win/ViewModels/MainWindowViewModel.cs +++ b/Desktop.Win/ViewModels/MainWindowViewModel.cs @@ -9,7 +9,6 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; -using System.Reflection; using System.Threading.Tasks; using System.Windows; using System.Security.Principal; @@ -20,7 +19,6 @@ using Remotely.ScreenCast.Core.Communication; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Remotely.Shared.Win32; -using Screen = System.Windows.Forms.Screen; namespace Remotely.Desktop.Win.ViewModels { diff --git a/ScreenCast.Core/Communication/CasterSocket.cs b/ScreenCast.Core/Communication/CasterSocket.cs index 46194e7f..49bc79ab 100644 --- a/ScreenCast.Core/Communication/CasterSocket.cs +++ b/ScreenCast.Core/Communication/CasterSocket.cs @@ -208,7 +208,7 @@ namespace Remotely.ScreenCast.Core.Communication { if (conductor.Viewers.TryGetValue(viewerID, out var viewer) && viewer.HasControl) { - await Connection.InvokeAsync("CtrlAltDel"); + await Connection.SendAsync("CtrlAltDel"); } }); @@ -217,7 +217,7 @@ namespace Remotely.ScreenCast.Core.Communication Logger.Write($"Disconnecting caster socket. Reason: {reason}"); foreach (var viewer in conductor.Viewers.Values.ToList()) { - await Connection.InvokeAsync("ViewerDisconnected", viewer.ViewerConnectionID); + await Connection.SendAsync("ViewerDisconnected", viewer.ViewerConnectionID); viewer.DisconnectRequested = true; } }); @@ -313,7 +313,7 @@ namespace Remotely.ScreenCast.Core.Communication Connection.On("ViewerDisconnected", async (string viewerID) => { - await Connection.InvokeAsync("ViewerDisconnected", viewerID); + await Connection.SendAsync("ViewerDisconnected", viewerID); if (conductor.Viewers.TryGetValue(viewerID, out var viewer)) { viewer.DisconnectRequested = true; diff --git a/Server/Program.cs b/Server/Program.cs index 33b06015..99c98540 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -32,7 +32,10 @@ namespace Remotely.Server { if (OSUtils.IsWindows && enableEventLog) { - logging.AddEventLog(); + logging.AddEventLog(settings => { + settings.LogName = "Remotely_Server"; + settings.SourceName = "Remotely_Server"; + }); } } }); diff --git a/Server/Services/RCBrowserSocketHub.cs b/Server/Services/RCBrowserSocketHub.cs index d45a1b2f..61496968 100644 --- a/Server/Services/RCBrowserSocketHub.cs +++ b/Server/Services/RCBrowserSocketHub.cs @@ -180,7 +180,9 @@ namespace Remotely.Server.Services if (Context?.User?.Identity?.IsAuthenticated == true) { orgId = DataService.GetUserByID(Context.UserIdentifier).OrganizationID; - var currentUsers = RCDeviceSocketHub.SessionInfoList.Count(x => x.Value.OrganizationID == orgId); + var currentUsers = RCDeviceSocketHub.SessionInfoList.Count(x => + x.Key != screenCasterID && + x.Value.OrganizationID == orgId); if (currentUsers >= AppConfig.RemoteControlSessionLimit) { await Clients.Caller.SendAsync("ShowMessage", "Max number of concurrent sessions reached."); diff --git a/Server/wwwroot/css/remote-control-dark.css b/Server/wwwroot/css/remote-control-dark.css index b8622640..2d2649aa 100644 --- a/Server/wwwroot/css/remote-control-dark.css +++ b/Server/wwwroot/css/remote-control-dark.css @@ -18,7 +18,8 @@ button:active { } button.toggled { - background-color: rgb(120,120,120); + background-color: rgb(220, 220, 220); + color: black; } button[disabled] { diff --git a/Server/wwwroot/css/remote-control-light.css b/Server/wwwroot/css/remote-control-light.css index 0dacb005..2aeac4fe 100644 --- a/Server/wwwroot/css/remote-control-light.css +++ b/Server/wwwroot/css/remote-control-light.css @@ -18,7 +18,8 @@ button:active { } button.toggled { - background-color: #60d8ff; + background-color: #afecff; + color: black; } button[disabled] { diff --git a/Server/wwwroot/scripts/RemoteControl/UI.js b/Server/wwwroot/scripts/RemoteControl/UI.js index b28b6a18..e546af88 100644 --- a/Server/wwwroot/scripts/RemoteControl/UI.js +++ b/Server/wwwroot/scripts/RemoteControl/UI.js @@ -10,6 +10,7 @@ export var ConnectButton = document.getElementById("connectButton"); export var RequesterNameInput = document.getElementById("nameInput"); export var StatusMessage = document.getElementById("statusMessage"); export var ScreenViewer = document.getElementById("screenViewer"); +export var ScreenViewerWrapper = document.getElementById("screenViewerWrapper"); export var Screen2DContext = ScreenViewer.getContext("2d"); export var HorizontalBars = document.querySelectorAll(".horizontal-button-bar"); export var ConnectBox = document.getElementById("connectBox"); @@ -45,7 +46,7 @@ var cancelNextViewerClick; var isPinchZooming; var startPinchPoint1; var startPinchPoint2; -var startPinchDistance; +var lastPinchDistance; var isMenuButtonDragging; var startMenuDraggingY; var startLongPressTimeout; @@ -107,7 +108,6 @@ export function ApplyInputHandlers(sockets) { if (FitToScreenButton.classList.contains("toggled")) { ScreenViewer.style.removeProperty("max-width"); ScreenViewer.style.removeProperty("max-height"); - ScreenViewer.style.width = "100%"; } else { ScreenViewer.style.maxWidth = "unset"; @@ -247,7 +247,7 @@ export function ApplyInputHandlers(sockets) { if (currentTouchCount == 2) { startPinchPoint1 = { X: e.touches[0].pageX, Y: e.touches[0].pageY, IsEmpty: false }; startPinchPoint2 = { X: e.touches[1].pageX, Y: e.touches[1].pageY, IsEmpty: false }; - startPinchDistance = GetDistanceBetween(startPinchPoint1.X, startPinchPoint1.Y, startPinchPoint2.X, startPinchPoint2.Y); + lastPinchDistance = GetDistanceBetween(startPinchPoint1.X, startPinchPoint1.Y, startPinchPoint2.X, startPinchPoint2.Y); } isDragging = false; KeyboardButton.removeAttribute("hidden"); @@ -265,17 +265,22 @@ export function ApplyInputHandlers(sockets) { var pinchPoint1 = { X: e.touches[0].pageX, Y: e.touches[0].pageY, IsEmpty: false }; var pinchPoint2 = { X: e.touches[1].pageX, Y: e.touches[1].pageY, IsEmpty: false }; var pinchDistance = GetDistanceBetween(pinchPoint1.X, pinchPoint1.Y, pinchPoint2.X, pinchPoint2.Y); - if (Math.abs(pinchDistance - startPinchDistance) > 5) { + if (Math.abs(pinchDistance - lastPinchDistance) > 5) { isPinchZooming = true; if (FitToScreenButton.classList.contains("toggled")) { FitToScreenButton.click(); } - var currentWidth = Number(ScreenViewer.style.width.slice(0, -1)); - var newWidth = Math.max(100, currentWidth + (pinchDistance - startPinchDistance)); - currentWidth = newWidth; - ScreenViewer.style.width = String(currentWidth) + "%"; - startPinchDistance = pinchDistance; - // TODO: Scroll wrapper. + var currentWidth = ScreenViewer.clientWidth; + var currentHeight = ScreenViewer.clientHeight; + var currentWidthPercent = Number(ScreenViewer.style.width.slice(0, -1)); + var newWidthPercent = Math.max(100, currentWidthPercent + (pinchDistance - lastPinchDistance)); + ScreenViewer.style.width = String(newWidthPercent) + "%"; + var heightChange = ScreenViewer.clientHeight - currentHeight; + var widthChange = ScreenViewer.clientWidth - currentWidth; + var scrollPercentX = ScreenViewerWrapper.scrollLeft / (ScreenViewerWrapper.scrollWidth - ScreenViewerWrapper.clientWidth); + var scrollPercentY = ScreenViewerWrapper.scrollTop / (ScreenViewerWrapper.scrollHeight - ScreenViewerWrapper.clientHeight); + ScreenViewerWrapper.scrollBy(widthChange * scrollPercentX, heightChange * scrollPercentY); + lastPinchDistance = pinchDistance; } return; } diff --git a/Server/wwwroot/scripts/RemoteControl/UI.js.map b/Server/wwwroot/scripts/RemoteControl/UI.js.map index 1c7f76d2..54532ca2 100644 --- a/Server/wwwroot/scripts/RemoteControl/UI.js.map +++ b/Server/wwwroot/scripts/RemoteControl/UI.js.map @@ -1 +1 @@ -{"version":3,"file":"UI.js","sourceRoot":"","sources":["UI.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"UI.js","sourceRoot":"","sources":["UI.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/RemoteControl/UI.ts b/Server/wwwroot/scripts/RemoteControl/UI.ts index 01bd7489..1c1c85ac 100644 --- a/Server/wwwroot/scripts/RemoteControl/UI.ts +++ b/Server/wwwroot/scripts/RemoteControl/UI.ts @@ -13,6 +13,7 @@ export var ConnectButton = document.getElementById("connectButton") as HTMLButto export var RequesterNameInput = document.getElementById("nameInput") as HTMLInputElement; export var StatusMessage = document.getElementById("statusMessage") as HTMLDivElement; export var ScreenViewer = document.getElementById("screenViewer") as HTMLCanvasElement; +export var ScreenViewerWrapper = document.getElementById("screenViewerWrapper") as HTMLDivElement; export var Screen2DContext = ScreenViewer.getContext("2d"); export var HorizontalBars = document.querySelectorAll(".horizontal-button-bar"); export var ConnectBox = document.getElementById("connectBox") as HTMLDivElement; @@ -49,7 +50,7 @@ var cancelNextViewerClick: boolean; var isPinchZooming: boolean; var startPinchPoint1: Point; var startPinchPoint2: Point; -var startPinchDistance: number; +var lastPinchDistance: number; var isMenuButtonDragging: boolean; var startMenuDraggingY: number; var startLongPressTimeout: number; @@ -112,7 +113,6 @@ export function ApplyInputHandlers(sockets: RCBrowserSockets) { if (FitToScreenButton.classList.contains("toggled")) { ScreenViewer.style.removeProperty("max-width"); ScreenViewer.style.removeProperty("max-height"); - ScreenViewer.style.width = "100%"; } else { ScreenViewer.style.maxWidth = "unset"; @@ -256,7 +256,7 @@ export function ApplyInputHandlers(sockets: RCBrowserSockets) { if (currentTouchCount == 2) { startPinchPoint1 = { X: e.touches[0].pageX, Y: e.touches[0].pageY, IsEmpty: false }; startPinchPoint2 = { X: e.touches[1].pageX, Y: e.touches[1].pageY, IsEmpty: false }; - startPinchDistance = GetDistanceBetween(startPinchPoint1.X, + lastPinchDistance = GetDistanceBetween(startPinchPoint1.X, startPinchPoint1.Y, startPinchPoint2.X, startPinchPoint2.Y); @@ -285,17 +285,25 @@ export function ApplyInputHandlers(sockets: RCBrowserSockets) { pinchPoint2.X, pinchPoint2.Y); - if (Math.abs(pinchDistance - startPinchDistance) > 5) { + if (Math.abs(pinchDistance - lastPinchDistance) > 5) { isPinchZooming = true; if (FitToScreenButton.classList.contains("toggled")) { FitToScreenButton.click(); } - var currentWidth = Number(ScreenViewer.style.width.slice(0, -1)); - var newWidth = Math.max(100, currentWidth + (pinchDistance - startPinchDistance)); - currentWidth = newWidth; - ScreenViewer.style.width = String(currentWidth) + "%"; - startPinchDistance = pinchDistance; - // TODO: Scroll wrapper. + var currentWidth = ScreenViewer.clientWidth; + var currentHeight = ScreenViewer.clientHeight; + + var currentWidthPercent = Number(ScreenViewer.style.width.slice(0, -1)); + var newWidthPercent = Math.max(100, currentWidthPercent + (pinchDistance - lastPinchDistance)); + ScreenViewer.style.width = String(newWidthPercent) + "%"; + + var heightChange = ScreenViewer.clientHeight - currentHeight; + var widthChange = ScreenViewer.clientWidth - currentWidth; + var scrollPercentX = ScreenViewerWrapper.scrollLeft / (ScreenViewerWrapper.scrollWidth - ScreenViewerWrapper.clientWidth); + var scrollPercentY = ScreenViewerWrapper.scrollTop / (ScreenViewerWrapper.scrollHeight - ScreenViewerWrapper.clientHeight); + ScreenViewerWrapper.scrollBy(widthChange * scrollPercentX, heightChange * scrollPercentY); + + lastPinchDistance = pinchDistance; } return; }