deploy Syncer to a2acloud Kubernetes
Some checks failed
build / image (push) Failing after 28s

This commit is contained in:
Syncer Deploy
2026-08-28 10:46:42 -03:00
commit e93c1b026f
72 changed files with 17680 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
import { NetworkedPredictedEngine } from "./networked-client.js";
import { NetworkedAuthoritativeEngine } from "./networked-server.js";
import type { NetworkedGameDefinition } from "./networked-types.js";
import { createBinaryProtocol, type BinaryProtocol } from "./protocol.js";
import type { ServerEngineOptions } from "./server.js";
export interface DefinedNetworkedGame<
AuthorityState,
ClientState,
Input,
AuthorityEvent = never,
PerceptionEvent = never,
> extends NetworkedGameDefinition<
AuthorityState,
ClientState,
Input,
AuthorityEvent,
PerceptionEvent
> {
protocol: BinaryProtocol<Input, ClientState, PerceptionEvent>;
createServer(
options?: ServerEngineOptions,
): NetworkedAuthoritativeEngine<
AuthorityState,
ClientState,
Input,
AuthorityEvent,
PerceptionEvent
>;
createClient(): NetworkedPredictedEngine<
AuthorityState,
ClientState,
Input,
AuthorityEvent,
PerceptionEvent
>;
}
export function defineNetworkedGame<
AuthorityState,
ClientState,
Input,
AuthorityEvent = never,
PerceptionEvent = never,
>(
definition: NetworkedGameDefinition<
AuthorityState,
ClientState,
Input,
AuthorityEvent,
PerceptionEvent
>,
): DefinedNetworkedGame<
AuthorityState,
ClientState,
Input,
AuthorityEvent,
PerceptionEvent
> {
validateRates(definition.tickRateHz, definition.snapshotRateHz);
const protocol = createBinaryProtocol<Input, ClientState, PerceptionEvent>(
definition.codecs,
);
return Object.freeze({
...definition,
protocol,
createServer(options?: ServerEngineOptions) {
return new NetworkedAuthoritativeEngine(definition, options);
},
createClient() {
return new NetworkedPredictedEngine(definition);
},
});
}
function validateRates(tickRateHz: number, snapshotRateHz: number): void {
if (!Number.isInteger(tickRateHz) || tickRateHz <= 0) {
throw new RangeError("tickRateHz must be a positive integer");
}
if (
!Number.isInteger(snapshotRateHz) ||
snapshotRateHz <= 0 ||
snapshotRateHz > tickRateHz ||
tickRateHz % snapshotRateHz !== 0
) {
throw new RangeError(
"snapshotRateHz must be a positive divisor of tickRateHz",
);
}
}