jsge
Version:
Javascript Game Engine
196 lines (149 loc) • 7.53 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="expires" content="Wen, 05 Jun 2024 07:01:00 GMT">
<title>JSDoc: Source: base/INetwork.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="stage-title">Source: base/INetwork.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import { CONST, ERROR_CODES } from "../constants.js";
import { Exception } from "./Exception.js";
import { Logger } from "./Logger.js";
import { SystemEvent } from "./Events/SystemEvent.js";
//import { Socket } from "socket.io-client";
/**
* Represents Socket connection
*
* From 1.4.4 disabled by default,
* to enable, set settings.network.enabled to true
*/
export class INetwork extends EventTarget {
/**
* @type {Object}
*/
#systemSettings;
/**
* @type {Socket}
*/
#socket;
/**
* @hideconstructor
*/
constructor(systemSettings) {
super();
if (!systemSettings) {
Exception(ERROR_CODES.CREATE_INSTANCE_ERROR, "systemSettings should be passed to class instance");
}
this.#systemSettings = systemSettings;
}
init() {
import("socket.io-client").then((module) => {
this.#socket = module.io(this.#systemSettings.network.address, {withCredentials: true});
this.#registerSocketListeners();
});
}
/**
* @returns {boolean}
*/
get isServerConnected () {
if (this.#socket && this.#socket.connected) {
return true;
} else {
return false;
}
}
get playerId() {
return this.#socket.id;
}
sendGatherRoomsInfo() {
this.#socket.emit(CONST.EVENTS.WEBSOCKET.CLIENT_SERVER.ROOMS_INFO_REQUEST);
}
sendCreateOrJoinRoom(roomName, map) {
this.#socket.emit(CONST.EVENTS.WEBSOCKET.CLIENT_SERVER.CREATE_OR_JOIN, roomName , map);
}
sendMessage(message) {
this.#socket.emit(CONST.EVENTS.WEBSOCKET.CLIENT_SERVER.CLIENT_MESSAGE, message);
}
#onConnect = () => {
Logger.debug("connected, socket id: " + this.#socket.id);
this.dispatchEvent(new Event(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.CONNECTION_STATUS_CHANGED));
};
#onDisconnect = (reason) => {
Logger.debug("server disconnected, reason: " + reason);
this.dispatchEvent(new Event(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.CONNECTION_STATUS_CHANGED));
};
#onData = (event) => {
console.warn("server data: ", event);
};
#onMessage = (message) => {
Logger.debug("received new message from server: " + message);
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.SERVER_MESSAGE, message));
};
#onRoomsInfo = (rooms) => {
Logger.debug("received roomsInfo " + rooms);
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.ROOMS_INFO, rooms));
};
#onCreateNewRoom = (room, map) => {
Logger.debug("CLIENT SOCKET: Created room " + room);
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.CREATED, {room, map}));
};
#onRoomIsFull = (room) => {
Logger.debug("CLIENT SOCKET: Room is full, can't join: " + room);
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.FULL, {room}));
};
#onJoinedToRoom = (room, map) => {
Logger.debug("CLIENT SOCKET: Joined to room: " + room, ", map: ", map);
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.JOINED, {room, map}));
};
#onUnjoinedFromRoom = (playerId) => {
this.dispatchEvent(new SystemEvent(CONST.EVENTS.WEBSOCKET.SERVER_CLIENT.DISCONNECTED, {playerId}));
};
#registerSocketListeners() {
this.#socket.on("connect", this.#onConnect);
this.#socket.on("disconnect", this.#onDisconnect);
this.#socket.on("data", this.#onData);
this.#socket.on("roomsInfo", this.#onRoomsInfo);
this.#socket.on("created", this.#onCreateNewRoom);
this.#socket.on("full", this.#onRoomIsFull);
this.#socket.on("joined", this.#onJoinedToRoom);
this.#socket.on("log", function(array) {
console.log.apply(console, array);
});
this.#socket.on("message", this.#onMessage);
this.#socket.on("removed", function(message) {
console.log("removed message");
console.log(message);
});
this.#socket.on("disconnected", this.#onUnjoinedFromRoom);
addEventListener("beforeunload", this.#disconnect);
}
#disconnect = () => {
this.#socket.disconnect();
};
}</code></pre>
</article>
</section>
</div>
<nav>
<div class="switcher"><ul><li class="active"><a href="/">1.5.9</a></li></div>
<h2><a href="/">Home</a></h2><h3>Classes</h3><ul><li><a href="DrawCircleObject.html">DrawCircleObject</a></li><li><a href="DrawConusObject.html">DrawConusObject</a></li><li><a href="DrawImageObject.html">DrawImageObject</a></li><li><a href="DrawLineObject.html">DrawLineObject</a></li><li><a href="DrawObjectFactory.html">DrawObjectFactory</a></li><li><a href="DrawPolygonObject.html">DrawPolygonObject</a></li><li><a href="DrawRectObject.html">DrawRectObject</a></li><li><a href="DrawShapeObject.html">DrawShapeObject</a></li><li><a href="DrawTextObject.html">DrawTextObject</a></li><li><a href="DrawTiledLayer.html">DrawTiledLayer</a></li><li><a href="GameStage.html">GameStage</a></li><li><a href="GameStageData.html">GameStageData</a></li><li><a href="IExtension.html">IExtension</a></li><li><a href="INetwork.html">INetwork</a></li><li><a href="IRender.html">IRender</a></li><li><a href="ISystem.html">ISystem</a></li><li><a href="ISystemAudio.html">ISystemAudio</a></li><li><a href="RenderLoop.html">RenderLoop</a></li><li><a href="RenderLoopDebug.html">RenderLoopDebug</a></li><li><a href="System.html">System</a></li><li><a href="SystemSettings.html">SystemSettings</a></li></ul><h3>Tutorials</h3><ul><li><a href="tutorial-application_scheme.html">Application Scheme</a></li><li><a href="tutorial-assets_manager.html">Assets Manager</a></li><li><a href="tutorial-common_issues.html">Common Issues</a></li><li><a href="tutorial-how_to_add_and_use_audio.html">How to add and use audio</a></li><li><a href="tutorial-how_to_do_animations.html">How to Create Animations</a></li><li><a href="tutorial-how_to_load_and_use_tilemaps.html">How to Load and Use Tilemaps</a></li><li><a href="tutorial-quick_start.html">Quick Start</a></li><li><a href="tutorial-spine_animations.html">How to Add Spine Animations</a></li><li><a href="tutorial-stages_lifecycle.html">Stages Lifecycle</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 4.0.4</a> on Wed Jun 18 2025 06:53:54 GMT+0000 (Coordinated Universal Time)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>