Page 546 - Nodejs 교과서 개정2판
P. 546

module.exports	=	(server,	app,	sessionMiddleware)	=>	{
            		const	io	=	SocketIO(server,	{	path:	'/socket.io'	});
            		app.set('io',	io);
            		const	room	=	io.of('/room');
            		const	chat	=	io.of('/chat');


            		io.use((socket,	next)	=>	{
            				cookieParser(process.env.COOKIE_SECRET)(socket.request,	socket.request.res,	next);
            				sessionMiddleware(socket.request,	socket.request.res,	next);
            		});


            		...


            		chat.on('connection',	(socket)	=>	{
            				...
            				socket.on('disconnect',	()	=>	{
            						console.log('chat	네임스페이스	접속	해제');
            						socket.leave(roomId);
            						const	currentRoom	=	socket.adapter.rooms[roomId];
            						const	userCount	=	currentRoom	?	currentRoom.length	:	0;
            						if	(userCount	===	0)	{	//	접속자가	0명이면	방	삭제
            								const	signedCookie	=	req.signedCookies['connect.sid'];
            								const	connectSID	=	cookie.sign(signedCookie,	process.env.COOKIE_SECRET);
            								axios.delete(`http://localhost:8005/room/${roomId}`,	{
            										headers:	{
            												Cookie:	`connect.sid=s%3A${connectSID}`,
            										},
            								})
            										.then(()	=>	{
            												console.log('방	제거	요청	성공');
            										})
            										.catch((error)	=>	{
            												console.error(error);
            										});
            						}	else	{
            								socket.to(roomId).emit('exit',	{
            										user:	'system',
            										chat:	`${req.session.color}님이	퇴장하셨습니다.`,
            								});
            						}
            				});
            		});
            };
   541   542   543   544   545   546   547   548   549   550   551