chore(project) rename main directory
This commit is contained in:
54
lib/WetSock/WetSock.js
Normal file
54
lib/WetSock/WetSock.js
Normal file
@@ -0,0 +1,54 @@
|
||||
export default class WetSock {
|
||||
#config = undefined;
|
||||
#server = undefined;
|
||||
#clients = new Map();
|
||||
#plugins = new Map();
|
||||
constructor(config) {
|
||||
this.config = config;
|
||||
this.server = null;
|
||||
}
|
||||
|
||||
start(server) {
|
||||
this.#server = server;
|
||||
}
|
||||
|
||||
registerPlugin(identifier, plugin) {
|
||||
plugin.initialize(this);
|
||||
this.#plugins.set(identifier, plugin);
|
||||
}
|
||||
|
||||
getPlugin(identifier) {
|
||||
return this.#plugins.get(identifier);
|
||||
}
|
||||
|
||||
handleUpgrade(req) {
|
||||
const clientId = Math.random().toString(36).substring(2);
|
||||
const success = this.#server.upgrade(req, { data: { clientId } });
|
||||
if (success) {
|
||||
return undefined;
|
||||
}
|
||||
return Response.redirect('/', 302);
|
||||
}
|
||||
|
||||
handleMessage(ws, message) {
|
||||
const client = this.#clients.get(ws.data.clientId);
|
||||
for(const plugin of this.#plugins) {
|
||||
if(plugin.onMessage(ws.data.clientId, message)) break; // plugin consumes message by returning a truthy value
|
||||
}
|
||||
}
|
||||
|
||||
handleOpen(ws) {
|
||||
const client = this.#clients.get(ws.data.clientId);
|
||||
this.#plugins.forEach((plugin) => plugin.onOpen(ws.data.clientId));
|
||||
}
|
||||
|
||||
handleClose(ws) {
|
||||
const client = this.#clients.get(ws.data.clientId);
|
||||
this.#plugins.forEach((plugin) => plugin.onClose(ws.data.clientId));
|
||||
this.#clients.delete(ws.data.clientId);
|
||||
}
|
||||
|
||||
handleDrain(ws) {
|
||||
// Handle socket drain event
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user