chamesu
Version:
This package contains all packages of the chat application.
72 lines (61 loc) • 2.55 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 {UserSocketHandler, useUserSocketHandler} from "./entities/user";
import {GuestSocketHandler} from "./entities/guest";
import createAuthMiddleware from "./middleware";
import createSocketEventHandler from "./events";
import {GuestStatusModule} from "./entities/guest/status";
import {GuestEvent} from "./entities/guest/event";
import {UserEvent, useUserEvent} from "./entities/user/event";
import {useUserEventCache} from "./entities/user/cache";
import {SocketInterface} from "../../../modules/socket";
import {useUserStatus} from "./entities/user/status";
import {ContactSocketHandler} from "./entities/contact";
import {useContactEventCache} from "./entities/contact/cache";
import {useContactEvent} from "./entities/contact/event";
import {useContactStatusHandler} from "./entities/contact/status";
export type AuthSocketAppContext = {
userHandler: UserSocketHandler,
guestHandler: GuestSocketHandler,
contactHandler?: ContactSocketHandler
};
export default function createAuthSocketApp(ctx: AppContext) {
const guestHandler = new GuestSocketHandler({
event: new GuestEvent('/'),
status: new GuestStatusModule(ctx.config.redisDatabase, {redis: { statusGroupKey: 'guestList' }})
});
const userHandler = useUserSocketHandler({
cache: useUserEventCache(ctx.config.redisDatabase),
notify: useUserEvent('/'),
status: useUserStatus(ctx.config.redisDatabase),
}, {
socket: {
userKey: 'user'
}
})
guestHandler.checkIntegrity(ctx.socketServer).then(r => r);
userHandler.checkIntegrity(ctx.socketServer).then(r => r);
const contactHandler = new ContactSocketHandler({
cache: useContactEventCache(ctx.config.redisDatabase),
notify: useContactEvent('/'),
status: useContactStatusHandler(ctx.config.redisDatabase)
});
contactHandler.checkIntegrity(ctx.socketServer).then(r => r);
ctx.socketServer.use(createAuthMiddleware(
async function (socket: SocketInterface) {
await userHandler.add(socket);
}, async function (socket: SocketInterface) {
await guestHandler.add(socket);
}));
const aCtx : AuthSocketAppContext = {
userHandler,
guestHandler,
contactHandler
}
createSocketEventHandler(ctx, aCtx);
}