import { Client } from "./client.ts"import { Packet } from "./packet.ts"
export class EventHandler { constructor(){ return; } handleMessage(packet: Packet, client: Client, channelsList: {[key: string]: Record<string, Client>}){ const { message } = packet.payload; const currentClientId = client.id.toString();
const channelName = client.channel; const ids = Object.keys(channelsList[channelName])
ids.forEach((id)=>{
channelsList[channelName][id].socket.send(JSON.stringify({ protocol: packet.event, payload: { message, from: currentClientId } })); })
}
changeChannel(packet: Packet, client: Client, channelsList: {[key: string]: Record<string, Client>}): {[key: string]: Record<string, Client>}{ const { to } = packet.payload;
const channel = client.channel;
delete channelsList[channel][client.id]; client.channel = to; channelsList[to][client.id] = client; return channelsList; }
broadcast(packet: Packet, client: Client, channelsList: {[key: string]: Record<string, Client>}){ const { message } = packet.payload; const channelName = client.channel; const currentClientId = client.id.toString(); const ids = Object.keys(channelsList[channelName]); ids.forEach((id)=>{ console.log('broadcasting', id, 'channelsList', channelsList) if(id !== currentClientId) channelsList[channelName][id].socket.send(JSON.stringify({ protocol: packet.event, payload: { message, from: currentClientId }, })); }); }
directMessage(packet: Packet, client: Client, clients: {[key: string]: Client}){ const { message, to } = packet.payload; const currentClientId = client.id; Object.values(clients).forEach(client => { if(client.id.toString() == to.toString()){ client.socket.send(JSON.stringify({ protocol: packet.event, payload: { message, from: currentClientId }, })) } }) }
grab(packet: Packet, client: Client, clients: {[key: string]: Client}, channelsList: {[key: string]: Record<string, Client>}){
const currentClientId = client.id.toString(); const results: Array<string> = [];
const { message } = packet.payload; if(message === 'myid'){ results.push(currentClientId) } else if(message === 'clients'){ Object.keys(clients).forEach(clientId => { results.push(clientId) }) } else if (message === 'channels'){ Object.keys(channelsList).forEach(channel => { results.push(channel); }); } else if (message === 'mychannelclients'){ Object.keys(channelsList[client.channel]).forEach(id => { results.push(id) }) } else if (message === 'mychannel'){ results.push(client.channel) } else { results.push('invalid grab request') }
client.socket.send(JSON.stringify({ protocol: packet.event, payload: { message: results, type: message } })) }}