Files
feishin/server/sockets/index.ts
T
2022-11-15 13:35:26 -08:00

52 lines
1.5 KiB
TypeScript

import { Socket, Server } from 'socket.io';
export const sockets = (socket: Socket, io: Server) => {
socket.on('join', function (data) {
socket.join(data.id); // We are using room of socket io
});
socket.broadcast.emit('user:receive:connect', {
socketId: socket.id,
userId: socket.handshake.query.id,
userName: socket.handshake.query.username,
});
socket.on('disconnect', async () => {
socket.broadcast.emit('user:receive:disconnect', {
socketId: socket.id,
userId: socket.handshake.query.id,
userName: socket.handshake.query.username,
});
});
socket.on('user:send:get_online', async (data) => {
const sockets = await io.fetchSockets();
const onlineSockets = sockets?.map((s) => s.handshake.query.id) || [];
io.sockets
.in(data?.userId)
.emit('user:receive:get_online', { online: onlineSockets });
});
socket.on('user:send:change_song', async (data) => {
socket.broadcast.emit('user:receive:change_song', {
...data,
user: { ...data.user, socketId: socket.id },
});
});
socket.on('user:send:status_idle', async (data) => {
socket.broadcast.emit('user:receive:status_idle', {
status: 'idle',
user: { ...data.user, socketId: socket.id },
});
});
socket.on('user:send:status_playing', async (data) => {
socket.broadcast.emit('user:receive:status_playing', {
status: 'playing',
user: { ...data.user, socketId: socket.id },
});
});
};