Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wss tachyon protocol #299

Merged
merged 43 commits into from
Jan 30, 2025
Merged
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
d452d03
Add a version of tachyon-client
bcdrme Jan 21, 2025
579a7d0
Server status
bcdrme Jan 21, 2025
adf3933
debugging stuff
bcdrme Jan 21, 2025
a755f1c
wip
bcdrme Jan 21, 2025
6cb4880
fix request
bcdrme Jan 21, 2025
aebe12d
debug messages
bcdrme Jan 21, 2025
30f7076
fix inverted logic
bcdrme Jan 21, 2025
468a22c
ranked
bcdrme Jan 21, 2025
0230063
matchmaking
bcdrme Jan 22, 2025
3cb2c3f
a bit more stylish
bcdrme Jan 22, 2025
a471fc7
matchmaking poc works
bcdrme Jan 22, 2025
af16089
clean up
bcdrme Jan 23, 2025
e479832
syncing server status
bcdrme Jan 23, 2025
550957a
fix token renewal
bcdrme Jan 23, 2025
30e0191
error handling
bcdrme Jan 23, 2025
30a3bda
update deps
bcdrme Jan 24, 2025
107e78d
slight change to app suffix
bcdrme Jan 24, 2025
72f78fa
wip
bcdrme Jan 24, 2025
24d2e32
wip
bcdrme Jan 24, 2025
1310d94
better handling of current user
bcdrme Jan 25, 2025
4cad53f
moved login page to root
bcdrme Jan 25, 2025
a0361e7
cleanup login step
bcdrme Jan 25, 2025
32b5724
fix typing of userId
bcdrme Jan 25, 2025
e779a8a
fix some initialization / typing
bcdrme Jan 25, 2025
9d8adba
eslint
bcdrme Jan 25, 2025
0533aad
fix some more initialization issues
bcdrme Jan 25, 2025
c6a8e13
change server
bcdrme Jan 25, 2025
9fb1672
wip
bcdrme Jan 25, 2025
d91fde2
cleanup
bcdrme Jan 25, 2025
edcf9e0
await service initialization
bcdrme Jan 25, 2025
328b24c
fix host for bots
bcdrme Jan 25, 2025
cb0fee9
move installed version to a Set
bcdrme Jan 25, 2025
3e35d68
drop latest game engine constant / latest game version
bcdrme Jan 25, 2025
d54c8e3
new api to start mutiplayer games
bcdrme Jan 25, 2025
b7075e7
list all available engine versions
bcdrme Jan 26, 2025
4ef9e79
download any engine version
bcdrme Jan 26, 2025
63589eb
dropped engine db for plain reactive store
bcdrme Jan 26, 2025
75a073b
fix a bunch of issues on first load
bcdrme Jan 30, 2025
76a212e
fix byar:lastest download
bcdrme Jan 30, 2025
28a009b
simpler reconnection mecanism
bcdrme Jan 30, 2025
dff31d2
update deps
bcdrme Jan 30, 2025
dcf8345
fix checks
bcdrme Jan 30, 2025
3255dab
cleanup
bcdrme Jan 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
drop latest game engine constant / latest game version
bcdrme committed Jan 25, 2025
commit 3e35d68560d4520b3806c16e626ba611f45ac14f
2 changes: 0 additions & 2 deletions src/main/config/default-versions.ts
Original file line number Diff line number Diff line change
@@ -6,7 +6,5 @@
* In the future these values should probably be set and fetched from the master server, so we don't need to deploy a new lobby release every time.
*/

export const DEFAULT_ENGINE_VERSION = "2025.01.3";
export const LATEST = "LATEST";

export const LATEST_GAME_VERSION = "byar:test";
8 changes: 8 additions & 0 deletions src/main/content/engine/engine-content.ts
Original file line number Diff line number Diff line change
@@ -43,6 +43,14 @@ export class EngineContentAPI extends AbstractContentAPI<EngineVersion> {
return this.installedVersions.values().some((installedVersion) => installedVersion.id === id);
}

public getLatestInstalledVersion() {
return this.installedVersions
.values()
.toArray()
.sort((a, b) => a.id.localeCompare(b.id))
.pop();
}

protected async getLatestTagName() {
const { data } = await this.ocotokit.rest.repos.getLatestRelease({
owner: contentSources.engineGitHub.owner,
8 changes: 4 additions & 4 deletions src/main/content/pr-downloader.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { spawn } from "child_process";
import { lastInArray } from "$/jaz-ts-utils/object";
import os from "os";
import path from "path";

@@ -8,7 +7,6 @@ import { AbstractContentAPI } from "./abstract-content";
import { engineContentAPI } from "./engine/engine-content";
import { logger } from "@main/utils/logger";
import { CONTENT_PATH } from "@main/config/app";
import { DEFAULT_ENGINE_VERSION } from "@main/config/default-versions";

const log = logger("pr-downloader.ts");

@@ -37,9 +35,11 @@ export abstract class PrDownloaderAPI<T> extends AbstractContentAPI<T> {
protected downloadContent(type: "game" | "map", name: string) {
return new Promise<DownloadInfo>((resolve) => {
log.debug(`Downloading ${name}...`);
const latestEngine = lastInArray(engineContentAPI.installedVersions)?.id || DEFAULT_ENGINE_VERSION;
const latestEngine = engineContentAPI.getLatestInstalledVersion();
if (!latestEngine) throw new Error("No engine version found");

const binaryName = process.platform === "win32" ? "pr-downloader.exe" : "pr-downloader";
const prBinaryPath = path.join(CONTENT_PATH, "engine", latestEngine, binaryName);
const prBinaryPath = path.join(CONTENT_PATH, "engine", latestEngine.id, binaryName);
const downloadArg = type === "game" ? "--download-game" : "--download-map";
const prdProcess = spawn(`${prBinaryPath}`, ["--filesystem-writepath", CONTENT_PATH, downloadArg, name], {
env: {
11 changes: 6 additions & 5 deletions src/main/game/game.ts
Original file line number Diff line number Diff line change
@@ -8,11 +8,12 @@ import { engineContentAPI } from "@main/content/engine/engine-content";

import { Replay } from "@main/content/replays/replay";
import { startScriptConverter } from "@main/utils/start-script-converter";
import { DEFAULT_ENGINE_VERSION, LATEST_GAME_VERSION } from "@main/config/default-versions";
import { LATEST_GAME_VERSION } from "@main/config/default-versions";
import { logger } from "@main/utils/logger";
import { gameContentAPI } from "@main/content/game/game-content";
import { CONTENT_PATH, REPLAYS_PATH } from "@main/config/app";
import { BattleWithMetadata } from "@main/game/battle/battle-types";
import engineService from "@main/services/engine.service";

const log = logger("main/game/game.ts");
const engineLogger = logger("[RECOIL ENGINE]", { separator: "\n", level: "info" });
@@ -56,21 +57,21 @@ export class GameAPI {
const scriptPath = path.join(CONTENT_PATH, this.springName);
await fs.promises.writeFile(scriptPath, script);
await this.launch({
engineVersion: DEFAULT_ENGINE_VERSION,
engineVersion: engineContentAPI.getLatestInstalledVersion().id,
gameVersion,
launchArg: scriptPath,
});
}

public async launchMultiplayerString(springString: string) {
public async launchMultiplayer(springString: string) {
return this.launch({
engineVersion: DEFAULT_ENGINE_VERSION,
engineVersion: engineContentAPI.getLatestInstalledVersion().id, //TODO: replace this with the engine version from the server
gameVersion: LATEST_GAME_VERSION,
launchArg: springString,
});
}

public async launch({ engineVersion = DEFAULT_ENGINE_VERSION, gameVersion, launchArg }: { engineVersion: string; gameVersion: string; launchArg: string }): Promise<void> {
public async launch({ engineVersion, gameVersion, launchArg }: { engineVersion: string; gameVersion: string; launchArg: string }): Promise<void> {
try {
log.info(`Launching game with engine: ${engineVersion}, game: ${gameVersion}`);
await this.fetchMissingContent(engineVersion, gameVersion);
4 changes: 3 additions & 1 deletion src/main/services/tachyon.service.ts
Original file line number Diff line number Diff line change
@@ -14,7 +14,9 @@ function registerIpcHandlers(mainWindow: Electron.BrowserWindow) {
const { ip, port, username, password } = data;
mainWindow.webContents.send("tachyon:battleStart", data);
const springString = `spring://${username}:${password}@${ip}:${port}`;
await gameAPI.launchMultiplayerString(springString);

//TODO ideally we should get an engine version from the server to pass to launchMultiplayerString
await gameAPI.launchMultiplayer(springString);
return {
status: "success",
};
4 changes: 0 additions & 4 deletions vendor/jaz-ts-utils/object.ts
Original file line number Diff line number Diff line change
@@ -2,10 +2,6 @@ export function randomFromArray<T>(arr: T[]): T | undefined {
return arr[Math.floor(Math.random() * arr.length)];
}

export function lastInArray<T>(target: T[]): T | undefined {
return target[target.length - 1];
}

export function removeFromArray<T>(target: T[], item: T): T[] {
const index = target.indexOf(item);
if (index > -1) {