import { Socket, Server } from "socket.io"; import ZoneRepository from "../repositories/ZoneRepository"; import ZoneManager from "../ZoneManager"; import {Zone} from "@prisma/client"; interface IZoneLoad { zoneId?: number; } /** * @TODO: Implement zone loading, check if zone id is given or else load current character zone * * Handle character zone load event * @param socket * @param io */ export default function CharacterZoneLoad(socket: Socket, io: Server) { socket.on('character:zone:load', async (data: IZoneLoad) => { console.log(`---User ${socket.id} has requested zone.`); const zone = await ZoneRepository.getById(1); if (!zone) { console.log(`---Zone not found.`); return; } socket.join(zone.name); const socketConnectionsInRoom = await io.in(zone.name).fetchSockets(); const characters = socketConnectionsInRoom.filter(socket => socket.id !== socket.id); // update to match with model Character // send over zone and characters io.in(zone.name).to(socket.id).emit('character:zone:load', { zone: zone, characters: characters, }); }); }