jsplanet
Version:
A controller for Trackmania 2020 dedicated server.
39 lines (38 loc) • 1.47 kB
JavaScript
import { TypedEmitter } from "tiny-typed-emitter";
import { VERSION } from "./consts.js";
import GbxRemote from "./gbx/remote.js";
import { ChatManager, MapsManager, PlayersManager, ScoresManager, ServerManager, TeamsManager, } from "./managers/index.js";
class JsPlanet extends TypedEmitter {
chatManager;
mapsManager;
playersManager;
scoresManager;
serverManager;
teamsManager;
remote;
constructor(host, port, user, password) {
super();
this.remote = new GbxRemote(host, port, user, password);
this.mapsManager = new MapsManager(this.remote);
this.serverManager = new ServerManager(this.remote);
this.teamsManager = new TeamsManager(this.remote);
this.playersManager = new PlayersManager(this, this.remote);
this.chatManager = new ChatManager(this, this.remote, this.playersManager);
this.scoresManager = new ScoresManager(this, this.remote, this.playersManager);
this.forwardEvents();
this.once("ready", async () => {
await this.chatManager.send(`$0F0JsPlanet v${VERSION} started.`);
});
}
async connect() {
return await this.remote.connect();
}
disconnect(reason) {
this.remote.disconnect(reason);
}
forwardEvents() {
this.remote.on("disconnect", this.emit.bind(this, "disconnect"));
this.remote.on("ready", this.emit.bind(this, "ready"));
}
}
export default JsPlanet;