@fuwu-yuan/bgew
Version:
Baguette Game Engine Web is a french 2D Web game engine
153 lines (152 loc) • 4.44 kB
JavaScript
"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;