chore(example) introduce changes to example implementation

This commit is contained in:
gh0sTedBuddy
2024-04-07 20:08:40 +01:00
parent 675ef2c5a7
commit cf279d4a3e
2 changed files with 34 additions and 48 deletions

View File

@@ -4,18 +4,18 @@ export default class WetSockClient {
this.listeners = new Map(); this.listeners = new Map();
this.plugins = new Map(); this.plugins = new Map();
this.socket.onopen = () => { this.socket.addEventListener('open', () => {
console.log('Connected to WetSock server'); console.log('Connected to WetSock server');
}; });
this.socket.onmessage = (event) => { this.socket.addEventListener('message', (event) => {
const message = JSON.parse(event.data); const message = JSON.parse(event.data);
this.handleMessage(message); this.handleMessage(message);
}; });
this.socket.onclose = () => { this.socket.addEventListener('close', () => {
console.log('Disconnected from WetSock server'); console.log('Disconnected from WetSock server');
}; });
} }
on(event, callback) { on(event, callback) {
@@ -33,13 +33,14 @@ export default class WetSockClient {
} }
handleMessage(message) { handleMessage(message) {
const { event, ...data } = message; this.emit('message', message);
const { event, data, ...rest } = message;
if (event === 'pluginList') { switch (event) {
this.updatePlugins(data.plugins); case 'plugins':
} else { this.updatePlugins(data);
this.emit(event, data); break;
} }
this.emit(event, data);
} }
updatePlugins(plugins) { updatePlugins(plugins) {
@@ -49,34 +50,15 @@ export default class WetSockClient {
} }
send(message) { 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)); this.socket.send(JSON.stringify(message));
} }
// Generic methods for interacting with plugins
createEntity(pluginIdentifier, entityData) {
this.send({ action: 'create', pluginIdentifier, data: entityData });
}
performAction(pluginIdentifier, entityId, actionName, ...args) {
this.send({ action: 'perform', pluginIdentifier, entityId, data: { actionName, args } });
}
// Helper methods for common actions
joinRoom(roomId) {
this.performAction('room', roomId, 'join');
}
leaveRoom(roomId) {
this.performAction('room', roomId, 'leave');
}
sendMessageToRoom(roomId, message) {
this.performAction('room', roomId, 'sendMessage', message);
}
createTask(taskData) {
this.createEntity('task', taskData);
}
// ... other helper methods ...
} }

View File

@@ -1,24 +1,28 @@
import { resolve } from 'path'; import { resolve } from 'path';
import WetSock from './WetSock'; import WetSock from './WetSock';
import RoomPlugin from './WetSock/Plugins/Rooms/RoomPlugin';
const wetsock = new WetSock(); const wetsock = new WetSock();
const rooms = new RoomPlugin();
wetsock.registerPlugin('rooms', rooms);
const server = Bun.serve({ const server = Bun.serve({
port: process.env.APP_PORT || 43_069, port: process.env.APP_PORT || 3_000,
fetch(req, server) { async fetch(req, server) {
const url = new URL(req.url); const url = new URL(req.url);
if(url.pathname == '/chat') return wetsock.handleUpgrade(req, server); if(url.pathname == '/chat') return wetsock.handleUpgrade(req, server);
let filePath = resolve(__dirname, 'WetSock', 'Client', 'Assets', 'index.html');
if(url.pathname == '/client.js') { if(url.pathname == '/client.js') {
const filePath = resolve(__dirname, 'WetSock', 'Client', 'Client.js'); filePath = resolve(__dirname, 'WetSock', 'Client', 'Client.js');
const file = Bun.file(filePath);
return new Response(file);
} }
const filePath = resolve(__dirname, 'views', 'index.html');
const file = Bun.file(filePath); const file = Bun.file(filePath);
if(!(await file.exists())) {
return new Response('Not found', {status: 404});
}
return new Response(file); return new Response(file);
}, },
websocket: { websocket: {