~starkingdoms/starkingdoms

42362ad2a42b2f654e74060bde7b01fc14f6c667 — core 2 years ago 476a451
gateway connection
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"