From d474a786e86e27409ffa95d7614219b21a1bcf9f Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Sun, 23 Feb 2020 13:48:52 -0800 Subject: [PATCH] Added chat window on the browser side. --- Server/Server.csproj | 2 + Server/Services/DeviceSocketHub.cs | 2 +- Server/wwwroot/css/Themes/cyborg.custom.css | 12 +++ Server/wwwroot/css/Themes/yeti.custom.css | 9 +++ Server/wwwroot/css/site.css | 26 +++++++ Server/wwwroot/scripts/BrowserSockets.js | 8 +- Server/wwwroot/scripts/BrowserSockets.js.map | 2 +- Server/wwwroot/scripts/BrowserSockets.ts | 8 +- Server/wwwroot/scripts/Chat.js | 76 ++++++++++++++++++ Server/wwwroot/scripts/Chat.js.map | 1 + Server/wwwroot/scripts/Chat.ts | 82 ++++++++++++++++++++ Server/wwwroot/scripts/DataGrid.js | 11 ++- Server/wwwroot/scripts/DataGrid.js.map | 2 +- Server/wwwroot/scripts/DataGrid.ts | 11 ++- 14 files changed, 243 insertions(+), 9 deletions(-) create mode 100644 Server/wwwroot/scripts/Chat.js create mode 100644 Server/wwwroot/scripts/Chat.js.map create mode 100644 Server/wwwroot/scripts/Chat.ts diff --git a/Server/Server.csproj b/Server/Server.csproj index fc46cdf7..b96d0739 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -21,6 +21,7 @@ + @@ -136,6 +137,7 @@ + diff --git a/Server/Services/DeviceSocketHub.cs b/Server/Services/DeviceSocketHub.cs index a39511e4..942c9239 100644 --- a/Server/Services/DeviceSocketHub.cs +++ b/Server/Services/DeviceSocketHub.cs @@ -50,7 +50,7 @@ namespace Remotely.Server.Services public Task Chat(string message, string senderConnectionID) { - return BrowserHub.Clients.Client(senderConnectionID).SendAsync("Chat", Device.DeviceName, message); + return BrowserHub.Clients.Client(senderConnectionID).SendAsync("Chat", Device.ID, Device.DeviceName, message); } public Task CMDResultViaAjax(string commandID) diff --git a/Server/wwwroot/css/Themes/cyborg.custom.css b/Server/wwwroot/css/Themes/cyborg.custom.css index b931e200..d3504e75 100644 --- a/Server/wwwroot/css/Themes/cyborg.custom.css +++ b/Server/wwwroot/css/Themes/cyborg.custom.css @@ -119,4 +119,16 @@ button.navbar-toggler:hover { span.label.code { background: rgb(60, 60, 60); color: white; +} + +.chat-window { + background-color: rgb(25,25,25); + border: 1px solid dimgray; +} +.chat-header { + color: white; + background-color: #555; +} +.chat-input { + background-color: lightgray; } \ No newline at end of file diff --git a/Server/wwwroot/css/Themes/yeti.custom.css b/Server/wwwroot/css/Themes/yeti.custom.css index 463a6beb..d39b6cc8 100644 --- a/Server/wwwroot/css/Themes/yeti.custom.css +++ b/Server/wwwroot/css/Themes/yeti.custom.css @@ -114,4 +114,13 @@ button.navbar-toggler:hover { span.label.code { background: rgb(245, 245, 245); color: black; +} + +.chat-window { + background-color: white; + border: 1px solid dimgray; +} +.chat-header { + color: white; + background-color: #008cba; } \ No newline at end of file diff --git a/Server/wwwroot/css/site.css b/Server/wwwroot/css/site.css index 7f124d96..fb5b8036 100644 --- a/Server/wwwroot/css/site.css +++ b/Server/wwwroot/css/site.css @@ -220,6 +220,32 @@ span.label.code { .middle-aligned { vertical-align: middle !important; } + +.chat-window { + position: fixed; + right: 20px; + bottom: 20px; + width: 250px; +} + +.chat-header { + user-select: none; + cursor: move; + padding: 5px 10px; +} + +.chat-messages { + overflow-y: auto; + height: 200px; + padding: 5px 10px; +} + +.chat-input { + width: 100%; + resize: none; + margin-bottom: -5px; +} + .float-message { position: fixed; top: 20px; diff --git a/Server/wwwroot/scripts/BrowserSockets.js b/Server/wwwroot/scripts/BrowserSockets.js index 962769b1..ff376685 100644 --- a/Server/wwwroot/scripts/BrowserSockets.js +++ b/Server/wwwroot/scripts/BrowserSockets.js @@ -4,6 +4,7 @@ import { CreateCommandHarness, AddCommandResultsHarness, AddPSCoreResultsHarness import { Store } from "./Store.js"; import { Main } from "./Main.js"; import { AddConsoleOutput, AddConsoleHTML } from "./Console.js"; +import { ReceiveChatText } from "./Chat.js"; export var Connection; export var ServiceID; export var Connected; @@ -32,8 +33,11 @@ export function Connect() { } ; function applyMessageHandlers(hubConnection) { - hubConnection.on("Chat", (deviceName, message) => { - AddConsoleHTML(`Chat from ${deviceName}: ${message}`); + hubConnection.on("Chat", (deviceID, deviceName, message) => { + if (message) { + AddConsoleHTML(`Chat from ${deviceName}: ${message}`); + ReceiveChatText(deviceID, deviceName, message); + } }); hubConnection.on("UserOptions", (options) => { Main.UserSettings.CommandModeShortcuts.Web = options.CommandModeShortcutWeb; diff --git a/Server/wwwroot/scripts/BrowserSockets.js.map b/Server/wwwroot/scripts/BrowserSockets.js.map index d8764f20..8878b8af 100644 --- a/Server/wwwroot/scripts/BrowserSockets.js.map +++ b/Server/wwwroot/scripts/BrowserSockets.js.map @@ -1 +1 @@ -{"version":3,"file":"BrowserSockets.js","sourceRoot":"","sources":["BrowserSockets.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BrowserSockets.js","sourceRoot":"","sources":["BrowserSockets.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/BrowserSockets.ts b/Server/wwwroot/scripts/BrowserSockets.ts index 1f41bb5e..b4401759 100644 --- a/Server/wwwroot/scripts/BrowserSockets.ts +++ b/Server/wwwroot/scripts/BrowserSockets.ts @@ -9,6 +9,7 @@ import { Store } from "./Store.js"; import { UserOptions } from "./Models/UserOptions.js"; import { Main } from "./Main.js"; import { AddConsoleOutput, AddConsoleHTML } from "./Console.js"; +import { ReceiveChatText } from "./Chat.js"; export var Connection: any; @@ -44,8 +45,11 @@ export function Connect() { }; function applyMessageHandlers(hubConnection) { - hubConnection.on("Chat", (deviceName: string, message: string) => { - AddConsoleHTML(`Chat from ${deviceName}: ${message}`); + hubConnection.on("Chat", (deviceID: string, deviceName: string, message: string) => { + if (message) { + AddConsoleHTML(`Chat from ${deviceName}: ${message}`); + ReceiveChatText(deviceID, deviceName, message); + } }); hubConnection.on("UserOptions", (options: UserOptions) => { Main.UserSettings.CommandModeShortcuts.Web = options.CommandModeShortcutWeb; diff --git a/Server/wwwroot/scripts/Chat.js b/Server/wwwroot/scripts/Chat.js new file mode 100644 index 00000000..b564e4fb --- /dev/null +++ b/Server/wwwroot/scripts/Chat.js @@ -0,0 +1,76 @@ +import * as BrowserSockets from "./BrowserSockets.js"; +export function CreateChatWindow(deviceID, deviceName) { + var chatWindow = document.getElementById("chat-" + deviceID); + if (!chatWindow) { + var windowHtml = ` +
+
+ +
+
Chat with ${deviceName}
+
+
+
+ + `; + chatWindow = document.createElement("div"); + chatWindow.classList.add("chat-window"); + chatWindow.style.right = "20px"; + chatWindow.style.bottom = "20px"; + chatWindow.setAttribute("id", "chat-" + deviceID); + chatWindow.innerHTML = windowHtml; + document.body.appendChild(chatWindow); + chatWindow.querySelector(".close-button").onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + document.body.removeChild(chatWindow); + }; + chatWindow.querySelector(".chat-header").onmousedown = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + chatWindow.removeEventListener("mousemove", moveChatWindow); + chatWindow.removeEventListener("mouseup", stopMovingChatWindow); + chatWindow.removeEventListener("mouseleave", stopMovingChatWindow); + chatWindow.addEventListener("mousemove", moveChatWindow); + chatWindow.addEventListener("mouseup", stopMovingChatWindow); + chatWindow.addEventListener("mouseleave", stopMovingChatWindow); + }; + chatWindow.querySelector(".chat-input").onkeypress = (ev) => { + if (ev.key.toLowerCase() == "enter") { + ev.preventDefault(); + ev.stopPropagation(); + var inputText = ev.currentTarget.value; + chatWindow.querySelector(".chat-messages").innerHTML += ` +
+ You: + ${inputText} +
+ `; + ev.currentTarget.value = ""; + BrowserSockets.Connection.invoke("Chat", inputText, [deviceID]); + } + }; + } +} +export function ReceiveChatText(deviceID, deviceName, message) { + CreateChatWindow(deviceID, deviceName); + var chatWindow = document.getElementById("chat-" + deviceID); + var chatMessages = chatWindow.querySelector(".chat-messages"); + chatMessages.innerHTML += ` +
+ ${deviceName}: + ${message} +
+ `; +} +function moveChatWindow(ev) { + var chatWindow = ev.currentTarget; + chatWindow.style.right = String(parseInt(chatWindow.style.right || "0") - ev.movementX) + "px"; + chatWindow.style.bottom = String(parseInt(chatWindow.style.bottom || "0") - ev.movementY) + "px"; +} +function stopMovingChatWindow(ev) { + ev.currentTarget.removeEventListener("mousemove", moveChatWindow); + ev.currentTarget.removeEventListener("mouseup", stopMovingChatWindow); + ev.currentTarget.removeEventListener("mouseleave", stopMovingChatWindow); +} +//# sourceMappingURL=Chat.js.map \ No newline at end of file diff --git a/Server/wwwroot/scripts/Chat.js.map b/Server/wwwroot/scripts/Chat.js.map new file mode 100644 index 00000000..a77ee0d1 --- /dev/null +++ b/Server/wwwroot/scripts/Chat.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Chat.js","sourceRoot":"","sources":["Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAEtD,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,UAAkB;IACjE,IAAI,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,EAAE;QACb,IAAI,UAAU,GAAG;;;;;gCAKO,UAAU;;;;;SAKjC,CAAC;QACF,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QAChC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACjC,UAAU,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;QAClD,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAErC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAiB,CAAC,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE;YACxE,EAAE,CAAC,cAAc,EAAE,CAAC;YACpB,EAAE,CAAC,eAAe,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC,CAAC;QAED,UAAU,CAAC,aAAa,CAAC,cAAc,CAAoB,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE;YAC9E,EAAE,CAAC,cAAc,EAAE,CAAC;YACpB,EAAE,CAAC,eAAe,EAAE,CAAC;YACrB,UAAU,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAC5D,UAAU,CAAC,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAChE,UAAU,CAAC,mBAAmB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;YACnE,UAAU,CAAC,gBAAgB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACzD,UAAU,CAAC,gBAAgB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;YAC7D,UAAU,CAAC,gBAAgB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;QACpE,CAAC,CAAC;QAED,UAAU,CAAC,aAAa,CAAC,aAAa,CAAyB,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE;YACjF,IAAI,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE;gBACjC,EAAE,CAAC,cAAc,EAAE,CAAC;gBACpB,EAAE,CAAC,eAAe,EAAE,CAAC;gBACrB,IAAI,SAAS,GAAI,EAAE,CAAC,aAAqC,CAAC,KAAK,CAAC;gBAC/D,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAoB,CAAC,SAAS,IAAI;;;gCAG5D,SAAS;;iBAExB,CAAC;gBACD,EAAE,CAAC,aAAqC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrD,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;aACnE;QACL,CAAC,CAAC;KACL;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,UAAkB,EAAE,OAAe;IACjF,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvC,IAAI,UAAU,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,GAAG,QAAQ,CAAmB,CAAC;IAC/E,IAAI,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,gBAAgB,CAAmB,CAAC;IAChF,YAAY,CAAC,SAAS,IAAI;;yCAEW,UAAU;oBAC/B,OAAO;;KAEtB,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,EAAc;IAClC,IAAI,UAAU,GAAG,EAAE,CAAC,aAA+B,CAAC;IACpD,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;IAC/F,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AACrG,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAc;IACxC,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClE,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACtE,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAC7E,CAAC"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/Chat.ts b/Server/wwwroot/scripts/Chat.ts new file mode 100644 index 00000000..e3eec17b --- /dev/null +++ b/Server/wwwroot/scripts/Chat.ts @@ -0,0 +1,82 @@ +import * as BrowserSockets from "./BrowserSockets.js"; + +export function CreateChatWindow(deviceID: string, deviceName: string) { + var chatWindow = document.getElementById("chat-" + deviceID); + if (!chatWindow) { + var windowHtml = ` +
+
+ +
+
Chat with ${deviceName}
+
+
+
+ + `; + chatWindow = document.createElement("div"); + chatWindow.classList.add("chat-window"); + chatWindow.style.right = "20px"; + chatWindow.style.bottom = "20px"; + chatWindow.setAttribute("id", "chat-" + deviceID); + chatWindow.innerHTML = windowHtml; + document.body.appendChild(chatWindow); + + (chatWindow.querySelector(".close-button") as HTMLElement).onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + document.body.removeChild(chatWindow); + }; + + (chatWindow.querySelector(".chat-header") as HTMLDivElement).onmousedown = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + chatWindow.removeEventListener("mousemove", moveChatWindow); + chatWindow.removeEventListener("mouseup", stopMovingChatWindow); + chatWindow.removeEventListener("mouseleave", stopMovingChatWindow); + chatWindow.addEventListener("mousemove", moveChatWindow); + chatWindow.addEventListener("mouseup", stopMovingChatWindow); + chatWindow.addEventListener("mouseleave", stopMovingChatWindow); + }; + + (chatWindow.querySelector(".chat-input") as HTMLTextAreaElement).onkeypress = (ev) => { + if (ev.key.toLowerCase() == "enter") { + ev.preventDefault(); + ev.stopPropagation(); + var inputText = (ev.currentTarget as HTMLTextAreaElement).value; + (chatWindow.querySelector(".chat-messages") as HTMLDivElement).innerHTML += ` +
+ You: + ${inputText} +
+ `; + (ev.currentTarget as HTMLTextAreaElement).value = ""; + BrowserSockets.Connection.invoke("Chat", inputText, [deviceID]); + } + }; + } +} + +export function ReceiveChatText(deviceID: string, deviceName: string, message: string) { + CreateChatWindow(deviceID, deviceName); + var chatWindow = document.getElementById("chat-" + deviceID) as HTMLDivElement; + var chatMessages = chatWindow.querySelector(".chat-messages") as HTMLDivElement; + chatMessages.innerHTML += ` +
+ ${deviceName}: + ${message} +
+ `; +} + +function moveChatWindow(ev: MouseEvent) { + var chatWindow = ev.currentTarget as HTMLDivElement; + chatWindow.style.right = String(parseInt(chatWindow.style.right || "0") - ev.movementX) + "px"; + chatWindow.style.bottom = String(parseInt(chatWindow.style.bottom || "0") - ev.movementY) + "px"; +} + +function stopMovingChatWindow(ev: MouseEvent) { + ev.currentTarget.removeEventListener("mousemove", moveChatWindow); + ev.currentTarget.removeEventListener("mouseup", stopMovingChatWindow); + ev.currentTarget.removeEventListener("mouseleave", stopMovingChatWindow); +} \ No newline at end of file diff --git a/Server/wwwroot/scripts/DataGrid.js b/Server/wwwroot/scripts/DataGrid.js index 045c1683..c6e64f2f 100644 --- a/Server/wwwroot/scripts/DataGrid.js +++ b/Server/wwwroot/scripts/DataGrid.js @@ -2,6 +2,7 @@ import * as UI from "./UI.js"; import { Main } from "./Main.js"; import { DeviceGrid } from "./UI.js"; import { AddConsoleOutput } from "./Console.js"; +import { CreateChatWindow } from "./Chat.js"; export const DataSource = new Array(); export const FilterOptions = new class { constructor() { @@ -63,12 +64,20 @@ export function AddOrUpdateDevice(device) { ${device.TotalStorage.toLocaleString()} ${Math.round(device.UsedMemory / device.TotalMemory * 100)}% ${device.TotalMemory.toLocaleString()} - `; + + + + `; recordRow.querySelector(".device-edit-button").onclick = (ev) => { ev.preventDefault(); ev.stopPropagation(); window.open(`${location.origin}/EditDevice?deviceID=${device.ID}`, "_blank"); }; + recordRow.querySelector(".device-chat-button").onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + CreateChatWindow(device.ID, device.DeviceName); + }; UpdateDeviceCounts(); } export function ApplyFilter() { diff --git a/Server/wwwroot/scripts/DataGrid.js.map b/Server/wwwroot/scripts/DataGrid.js.map index feca0ec0..ded9967c 100644 --- a/Server/wwwroot/scripts/DataGrid.js.map +++ b/Server/wwwroot/scripts/DataGrid.js.map @@ -1 +1 @@ -{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DataGrid.js","sourceRoot":"","sources":["DataGrid.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/Server/wwwroot/scripts/DataGrid.ts b/Server/wwwroot/scripts/DataGrid.ts index b214c385..fcc0ab6c 100644 --- a/Server/wwwroot/scripts/DataGrid.ts +++ b/Server/wwwroot/scripts/DataGrid.ts @@ -3,6 +3,7 @@ import { Device } from "./Models/Device.js"; import { Main } from "./Main.js"; import { DeviceGrid } from "./UI.js"; import { AddConsoleOutput } from "./Console.js"; +import { CreateChatWindow } from "./Chat.js"; export const DataSource: Array = new Array(); @@ -71,7 +72,10 @@ export function AddOrUpdateDevice(device: Device) { ${device.TotalStorage.toLocaleString()} ${Math.round(device.UsedMemory /device.TotalMemory * 100)}% ${device.TotalMemory.toLocaleString()} - `; + + + + `; (recordRow.querySelector(".device-edit-button") as HTMLButtonElement).onclick = (ev) => { @@ -79,6 +83,11 @@ export function AddOrUpdateDevice(device: Device) { ev.stopPropagation(); window.open(`${location.origin}/EditDevice?deviceID=${device.ID}`, "_blank"); }; + (recordRow.querySelector(".device-chat-button") as HTMLButtonElement).onclick = (ev) => { + ev.preventDefault(); + ev.stopPropagation(); + CreateChatWindow(device.ID, device.DeviceName); + }; UpdateDeviceCounts(); } export function ApplyFilter() {