chamesu
Version:
This package contains all packages of the chat application.
71 lines (62 loc) • 2.97 kB
text/typescript
/*
* Copyright (c) 2022.
* Author Peter Placzek (tada5hi)
* For the full copyright and license information,
* view the LICENSE file that was distributed with this source code.
*/
import {AppContext} from "../../../index";
import {AuthSocketAppContext} from "../index";
import {SocketInterface} from "../../../../modules/socket";
import {createSocketErrorResponse, createSocketResponse} from "../../../../helpers";
import {
parseSocketEventMessage,
SocketEventMessage
} from "../../../../modules/socket/event/message";
import {OnlineIdsResponse} from "../../../../modules/socket/status";
import {handleAuthSocketContactJoinEvent, handleAuthSocketContactLeaveEvent} from "./contact";
function createSocketEventHandler(ctx: AppContext, authCtx: AuthSocketAppContext) {
return ctx.socketServer.on('connection',(socket: SocketInterface) => {
if(!!socket.userId) {
authCtx.contactHandler.joinAll(socket)
.then(r => r)
.catch(e => console.log(e));
}
socket.on('contactJoin', handleAuthSocketContactJoinEvent(socket, ctx, authCtx));
socket.on('contactLeave', handleAuthSocketContactLeaveEvent(socket, ctx, authCtx));
socket.on('contactsOnline', (data: unknown, cb: CallableFunction) => {
return authCtx.contactHandler.ctx.status.getOnline(socket.userId)
.then((onlineClients: OnlineIdsResponse) => {
return createSocketResponse(cb, onlineClients);
}).catch((error: any) => {
return createSocketErrorResponse(cb, error.message);
})
})
socket.on('guestsOnline', (data: unknown, cb: CallableFunction) => {
return parseSocketEventMessage(data).then((socketEvent: SocketEventMessage) => {
return authCtx.guestHandler.ctx.status.getOnlineClients()
.then((onlineClients: any) => {
return createSocketResponse(cb, onlineClients);
}).catch((error: any) => {
return createSocketErrorResponse(cb, error.message);
})
});
});
socket.on('usersOnline', (options: any, cb: CallableFunction) => {
return authCtx.userHandler.ctx.status.getOnline()
.then((onlineClients: OnlineIdsResponse) => {
return createSocketResponse(cb, onlineClients);
}).catch((error: any) => {
return createSocketErrorResponse(cb, error.message);
})
});
socket.on('disconnect', () => {
if(!!socket.userId) {
authCtx.userHandler.drop(socket).then(r => r);
authCtx.contactHandler.leaveAll(socket).then(r => r);
} else {
authCtx.guestHandler.drop(socket).then(r => r);
}
});
});
}
export default createSocketEventHandler;