This repository has been archived on 2025-03-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
wetsock/lib/WetSock/Client/Client.js

65 lines
1.5 KiB
JavaScript

export default class WetSockClient {
constructor(url) {
this.socket = new WebSocket(url);
this.listeners = new Map();
this.plugins = new Map();
this.socket.addEventListener('open', () => {
console.log('Connected to WetSock server');
});
this.socket.addEventListener('message', (event) => {
const message = JSON.parse(event.data);
this.handleMessage(message);
});
this.socket.addEventListener('close', () => {
console.log('Disconnected from WetSock server');
});
}
on(event, callback) {
if (!this.listeners.has(event)) {
this.listeners.set(event, []);
}
this.listeners.get(event).push(callback);
}
emit(event, ...args) {
const listeners = this.listeners.get(event);
if (listeners) {
listeners.forEach((listener) => listener(...args));
}
}
handleMessage(message) {
this.emit('message', message);
const { event, data, ...rest } = message;
switch (event) {
case 'plugins':
this.updatePlugins(data);
break;
}
this.emit(event, data);
}
updatePlugins(plugins) {
plugins.forEach((plugin) => {
this.plugins.set(plugin.identifier, plugin.actions);
});
}
send(message) {
if(typeof(message) != 'string') throw new TypeError('message needs to be a string');
if(message.startsWith('/')) {
const [command, ...rest] = message.split(' ');
message = {
action: command.substring(1),
message: rest.join(' ')
}
}
this.socket.send(JSON.stringify(message));
}
}