UNPKG

@fuwu-yuan/bgew

Version:

Baguette Game Engine Web is a french 2D Web game engine

153 lines (152 loc) 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NetworkManager = void 0; const webSocket_1 = require("rxjs/webSocket"); const networkmanager_abstract_1 = require("./networkmanager.abstract"); class NetworkManager extends networkmanager_abstract_1.AbstractNetworkManager { constructor() { super(...arguments); this.roomuid = ""; } /** * @override */ ping() { return this.api.get('/ping') .then(function (response) { return response.data; }); } /** * @override */ joinRoom(uid) { if (this.roomuid === "") this.roomuid = uid; return new Promise((resolve, reject) => { this.webSocketSubject = webSocket_1.webSocket(this.wsUrl + uid); this.webSocketSubject.subscribe((msg) => { switch (msg.code) { case "player_join": this.board.step.onPlayerJoin(msg); break; case "player_leave": this.board.step.onPlayerLeave(msg); break; case "broadcast": this.board.step.onNetworkMessage(msg); break; case "msg_sent": this.board.networkManager.msgSentConfirmation(msg); break; case "connected": resolve({ status: "success", code: "connected", data: msg.data }); break; case "room_full": resolve({ status: "error", code: "room_full", data: msg.data }); break; } }, err => { if (err instanceof CloseEvent) { this.board.step.onConnectionClosed(); } reject(err); }, this.board.step.onConnectionClosed); }); } /** * @override */ createRoom(name, limit = 0, data, autojoinroom = true) { console.log("Creating room " + name); return this.api.post('/room', { game: this.board.name, version: this.board.version, data: data, name: name, limit: limit }).then((response) => { let resp = response.data; if (resp.status === "success") { this.roomuid = resp.data.uid; if (autojoinroom) { return this.joinRoom(this.roomuid); } else { return response.data; } } else { throw resp; } }); } /** * @override */ setRoomData(data, merge = false) { return this.api.post('/room/data/' + this.roomuid, { data: data, merge: merge }).then(function (response) { return response.data; }); } getRoomData() { return this.api.get('/room/data/' + this.roomuid) .then(function (response) { return response.data; }); } /** * @override */ closeRoom(uid, close = true) { return this.api.post('/room/close/' + this.roomuid, { close: close, }).then(function (response) { return response.data; }); } /** * @override */ openRoom(uid) { return this.closeRoom(uid, false); } /** * @override */ getOpenedRooms() { return this.api.get('/room', { params: { open: true, game: this.board.name, version: this.board.version } }).then(function (response) { return response.data; }); } /** * @override */ getClosedRooms() { return this.api.get('/room', { params: { open: false, game: this.board.name, version: this.board.version } }).then(function (response) { return response.data; }); } get apiUrl() { return "https://bgew.stevecohen.fr/api"; } get wsUrl() { return "wss://bgew.stevecohen.fr/"; } } exports.NetworkManager = NetworkManager;