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

const	axios	=	require('axios');


           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)	=>	{
           				sessionMiddleware(socket.request,	socket.request.res,	next);
           		});
           		room.on('connection',	(socket)	=>	{
           				console.log('room	네임스페이스에	접속');
           				socket.on('disconnect',	()	=>	{
           						console.log('room	네임스페이스	접속	해제');
           				});
           		});


           		chat.on('connection',	(socket)	=>	{
           				console.log('chat	네임스페이스에	접속');
           				const	req	=	socket.request;
           				const	{	headers:	{	referer	}	}	=	req;
           				const	roomId	=	referer
           						.split('/')[referer.split('/').length	-	1]
           						.replace(/\?.+/,	'');
           				socket.join(roomId);
           ➋

           				socket.to(roomId).emit('join',	{
           						user:	'system',
           						chat:	`${req.session.color}님이	입장하셨습니다.`,
           				});
           				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명이면	방	삭제
           								axios.delete(`http://localhost:8005/room/${roomId}`)
           										.then(()	=>	{
           												console.log('방	제거	요청	성공');
           										})
           										.catch((error)	=>	{
           												console.error(error);
   539   540   541   542   543   544   545   546   547   548   549