M Cargo.lock => Cargo.lock +2 -2
@@ 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",
M starkingdoms-client/index.html => starkingdoms-client/index.html +2 -2
@@ 13,7 13,7 @@
<h1>StarKingdoms</h1>
<h2>Join Game</h2>
- <form>
+ <form id="join-fm">
<label>Choose server</label>
<div class="fm-select">
@@ 28,7 28,7 @@
<label for="username" class="username-label">Username</label>
<input class="username-box" id="username" required autocomplete="off"/>
- <button class="launch-btn">Launch!</button>
+ <button id="launch-btn" class="launch-btn">Launch!</button>
</form>
</div>
M starkingdoms-client/package.json => starkingdoms-client/package.json +4 -0
@@ 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"
}
}
A starkingdoms-client/src/gateway.ts => starkingdoms-client/src/gateway.ts +39 -0
@@ 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<WebSocket> {
+ 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
M starkingdoms-client/src/main.ts => starkingdoms-client/src/main.ts +43 -3
@@ 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 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="footer-icon"><path d="M9.653 16.915l-.005-.003-.019-.01a20.759 20.759 0 01-1.162-.682 22.045 22.045 0 01-2.582-1.9C4.045 12.733 2 10.352 2 7.5a4.5 4.5 0 018-2.828A4.5 4.5 0 0118 7.5c0 2.852-2.044 5.233-3.885 6.82a22.049 22.049 0 01-3.744 2.582l-.019.01-.005.003h-.002a.739.739 0 01-.69.001l-.002-.001z" /></svg> 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...");
+ (<HTMLButtonElement>custom_select_btn).disabled = true;
+ (<HTMLInputElement>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 = (<HTMLInputElement>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);
+ (<HTMLButtonElement>custom_select_btn).disabled = false;
+ (<HTMLInputElement>document.getElementById("username")!).disabled = false;
+ }
+})<
\ No newline at end of file
M starkingdoms-client/yarn.lock => starkingdoms-client/yarn.lock +24 -0
@@ 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"