From 42362ad2a42b2f654e74060bde7b01fc14f6c667 Mon Sep 17 00:00:00 2001 From: core Date: Fri, 24 Nov 2023 21:43:29 -0500 Subject: [PATCH] gateway connection --- Cargo.lock | 4 +-- starkingdoms-client/index.html | 4 +-- starkingdoms-client/package.json | 4 +++ starkingdoms-client/src/gateway.ts | 39 +++++++++++++++++++++++++ starkingdoms-client/src/main.ts | 46 ++++++++++++++++++++++++++++-- starkingdoms-client/yarn.lock | 24 ++++++++++++++++ 6 files changed, 114 insertions(+), 7 deletions(-) create mode 100644 starkingdoms-client/src/gateway.ts diff --git a/Cargo.lock b/Cargo.lock index 3c2df72b498b153e60e2c5ae418f0a0f99f40c93..015343af992847fa9a761c959d975796a680fafa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -380,7 +380,7 @@ dependencies = [ [[package]] name = "bevy_twite" version = "0.1.0" -source = "git+https://gitlab.com/ghostlyzsh/twite.git#6d54f37b7c392d2df993ee1cae2064b7ac410da7" +source = "git+https://gitlab.com/c0repwn3r/twite.git#5c8672e1321b445540c8577e6c8066df3844c00d" dependencies = [ "bevy", "crossbeam-channel", @@ -1167,7 +1167,7 @@ dependencies = [ [[package]] name = "twite" version = "0.1.0" -source = "git+https://gitlab.com/ghostlyzsh/twite.git#6d54f37b7c392d2df993ee1cae2064b7ac410da7" +source = "git+https://gitlab.com/c0repwn3r/twite.git#5c8672e1321b445540c8577e6c8066df3844c00d" dependencies = [ "base64", "rand", diff --git a/starkingdoms-client/index.html b/starkingdoms-client/index.html index e1f0d1c855efab9c33e411292896ef06e739117e..77741dbf68a70182bc274b804a85bf7328fcaea1 100644 --- a/starkingdoms-client/index.html +++ b/starkingdoms-client/index.html @@ -13,7 +13,7 @@

StarKingdoms

Join Game

-
+
@@ -28,7 +28,7 @@ - +
diff --git a/starkingdoms-client/package.json b/starkingdoms-client/package.json index da0cabd5b38482ec5f3dab55e30ba9951847d9b7..caa3c44261d3593adb541f5d9d3b438e185aba68 100644 --- a/starkingdoms-client/package.json +++ b/starkingdoms-client/package.json @@ -9,7 +9,11 @@ "preview": "vite preview" }, "devDependencies": { + "@types/debug": "^4.1.12", "typescript": "^5.2.2", "vite": "^5.0.0" + }, + "dependencies": { + "debug": "^4.3.4" } } diff --git a/starkingdoms-client/src/gateway.ts b/starkingdoms-client/src/gateway.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ede1bc46583ca995949aec8dc1eff38dfb93902 --- /dev/null +++ b/starkingdoms-client/src/gateway.ts @@ -0,0 +1,39 @@ +import createDebug from "debug"; + +const logger = createDebug("gateway"); + +export interface GatewayClient { + socket: WebSocket; +} + +export async function gateway_connect(url: string) { + logger("connecting to gateway socket at " + url) + + let ws = await _websocket_connect(url); + + logger("connected to gateway, sending username and auth details"); + + let client: GatewayClient = { + socket: ws + }; + + return client; +} + +let socket: WebSocket | undefined = undefined; + +function _websocket_connect(url: string): Promise { + if (socket && socket.readyState < 2) { + // reuse socket connection + return Promise.resolve(socket); + } + return new Promise((resolve, reject) => { + socket = new WebSocket(url); + socket.onopen = () => { + resolve(socket!); + }; + socket.onerror = (err) => { + reject(err); + }; + }); +} \ No newline at end of file diff --git a/starkingdoms-client/src/main.ts b/starkingdoms-client/src/main.ts index 5681de4cbf8d8ce8191eb883a3c84e0048d09a0b..3d15cbb30176c595e753ad72f51c8efe11a19457 100644 --- a/starkingdoms-client/src/main.ts +++ b/starkingdoms-client/src/main.ts @@ -1,4 +1,17 @@ import CONFIG from "./config.json"; +import createDebug from "debug"; +import {gateway_connect, GatewayClient} from "./gateway.ts"; + +const logger = createDebug("main"); +logger(`Hello, world! StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) at your service`); + +export interface GlobalData { + client: GatewayClient | null +} + +export const global: GlobalData = { + client: null +} const version_string = `StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) made with by the StarKingdoms team`; document.getElementById("footer")!.innerHTML = version_string; @@ -42,8 +55,6 @@ for (let server_id in CONFIG.servers) { } } -console.log(inverse_server_lookup); - const options_list = document.querySelectorAll(".fm-select-dropdown li"); options_list.forEach((option) => { function handler(e: Event) { @@ -61,5 +72,34 @@ options_list.forEach((option) => { } option.addEventListener("keyup", handler); option.addEventListener("click", handler); -}) +}); + +function setStatus(stat: string) { + document.getElementById("launch-btn")!.textContent = stat; +} + +document.getElementById("join-fm")!.addEventListener("submit", async (e) => { + e.preventDefault(); + + setStatus("Connecting..."); + (custom_select_btn).disabled = true; + (document.getElementById("username")!).disabled = true; + try { + let server_name = selected_value.textContent!; + let server_id = inverse_server_lookup[server_name]; + // @ts-ignore + let server: ConfigServer = CONFIG.servers[server_id]; + + let username = (document.getElementById("username")!).value; + + logger(`connecting to ${server.url} as ${username} with auth = none`); + + global.client = await gateway_connect(server.url); + } catch (e) { + setStatus("Connection failed!"); + console.error(e); + (custom_select_btn).disabled = false; + (document.getElementById("username")!).disabled = false; + } +}) \ No newline at end of file diff --git a/starkingdoms-client/yarn.lock b/starkingdoms-client/yarn.lock index 71dd06e20832a84532d2edc1499a156a7afcaebc..106e68ac63567522e917e16823e0ef8fd51a6fde 100644 --- a/starkingdoms-client/yarn.lock +++ b/starkingdoms-client/yarn.lock @@ -172,6 +172,25 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.5.2.tgz#7e59216d929a6b444304000be40c32d2d127fe4f" integrity sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg== +"@types/debug@^4.1.12": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== + dependencies: + "@types/ms" "*" + +"@types/ms@*": + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + esbuild@^0.19.3: version "0.19.7" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.7.tgz#b9a7235097b81278dcf090e2532ed13c95a2ee84" @@ -205,6 +224,11 @@ fsevents@~2.3.2, fsevents@~2.3.3: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + nanoid@^3.3.6: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"