stuff and things
This commit is contained in:
127
server/utils/messages.js
Executable file
127
server/utils/messages.js
Executable file
@@ -0,0 +1,127 @@
|
||||
/**
|
||||
* Very bad logic error. Player must quit game, refresh page, and log in again.
|
||||
*
|
||||
* Client-->Server
|
||||
* or
|
||||
* Server-->Client-->Plater
|
||||
*/
|
||||
export const MSG_CALAMITY = "calamity";
|
||||
|
||||
/** Tell recipient that an error has occurred */
|
||||
export const MSG_ERROR = "e";
|
||||
|
||||
/**
|
||||
* Message to be displayed.
|
||||
*
|
||||
* Server-->Client-->Player
|
||||
*/
|
||||
export const MSG_MESSAGE = "m";
|
||||
|
||||
/**
|
||||
* Message contains the player's password (or hash or whatever).
|
||||
*
|
||||
* Player-->Client-->Server
|
||||
*/
|
||||
export const MSG_PASSWORD = "pass";
|
||||
|
||||
/**
|
||||
* Server-->Client-->Player
|
||||
*
|
||||
* Server tells the client to prompt the player for some info
|
||||
*/
|
||||
export const MSG_PROMPT = "ask";
|
||||
|
||||
/**
|
||||
* Client sends the player's username to the server
|
||||
*
|
||||
* Player-->Client-->Server
|
||||
*/
|
||||
export const MSG_USERNAME = "user";
|
||||
|
||||
/**
|
||||
* Player has entered a command, and wants to do something.
|
||||
*
|
||||
* Player-->Client-->Server
|
||||
*/
|
||||
export const MSG_COMMAND = "c";
|
||||
|
||||
/**
|
||||
* Represents a message sent from client to server.
|
||||
*/
|
||||
export class ClientMessage {
|
||||
/**
|
||||
* @protected
|
||||
* @type {any[]} _arr The array that contains the message data
|
||||
*/
|
||||
_arr;
|
||||
|
||||
/** The message type.
|
||||
*
|
||||
* One of the MSG_* constants from this document.
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
get type() {
|
||||
return this._arr[0];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} msgData the raw text data in the websocket message.
|
||||
*/
|
||||
constructor(msgData) {
|
||||
if (typeof msgData !== "string") {
|
||||
throw new Error("Could not create client message. Attempting to parse json, but data was not even a string, it was a " + typeof msgData);
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
this._arr = JSON.parse(msgData);
|
||||
} catch (_) {
|
||||
throw new Error(`Could not create client message. Attempting to parse json, but data was invalid json: >>> ${msgData} <<<`);
|
||||
}
|
||||
|
||||
if (typeof this._arr !== "array") {
|
||||
throw new Error(`Could not create client message. Excpected an array, but got a ${typeof this._arr}`);
|
||||
}
|
||||
|
||||
if (this._arr.length < 1) {
|
||||
throw new Error("Could not create client message. Excpected an array with at least 1 element, but got an empty one");
|
||||
}
|
||||
|
||||
this._arr = arr;
|
||||
}
|
||||
|
||||
/** Does this message contain a message that should be displayed to the user the "normal" way? */
|
||||
isMessage() {
|
||||
return this._arr[0] === "m";
|
||||
}
|
||||
|
||||
/** Does this message contain a username-response from the client? */
|
||||
hasUsername() {
|
||||
return this._arr[0] === MSG_USERNAME;
|
||||
}
|
||||
|
||||
/** Does this message contain a password-response from the client? */
|
||||
hasPassword() {
|
||||
return this._arr[0] === MSG_PASSWORD;
|
||||
}
|
||||
|
||||
/** @returns {string|false} Get the username stored in this message */
|
||||
get username() {
|
||||
return this.hasUsername() ? this._arr[1] : false;
|
||||
}
|
||||
|
||||
/** @returns {string|false} Get the password stored in this message */
|
||||
get password() {
|
||||
return this.hasPassword() ? this._arr[1] : false;
|
||||
}
|
||||
|
||||
get command() {
|
||||
return this.isCommand() ? this._attr[1] : false;
|
||||
}
|
||||
|
||||
isCommand() {
|
||||
return this._raw[0] === MSG_COMMAND;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user