@@ -21,6 +21,7 @@ const io = new Server(server, {
21
21
} ,
22
22
} ) ;
23
23
24
+ // Partially Referenced from: https://github.com/yjs/y-monaco/blob/master/demo/monaco-demo.js
24
25
const yjsWs = new WebSocketServer ( { noServer : true } ) ;
25
26
yjsWs . on ( "connection" , ( conn , req ) => {
26
27
setupWSConnection ( conn , req , {
@@ -36,18 +37,23 @@ setInterval(() => {
36
37
const stats = {
37
38
conns,
38
39
docs : docs . size ,
39
- websocket : `ws://localhost:${ PORT } ` ,
40
- http : `http://localhost:${ PORT } ` ,
41
40
} ;
42
41
console . log ( `${ new Date ( ) . toISOString ( ) } Stats: ${ JSON . stringify ( stats ) } ` ) ;
43
42
} , 10000 ) ;
44
43
44
+ const roomUserCount = new Map ( ) ;
45
45
io . on ( "connection" , ( socket ) => {
46
46
console . log ( "User connected to Socket.IO" ) ;
47
47
48
48
// Join a room based on roomId
49
49
socket . on ( "joinRoom" , ( roomId ) => {
50
50
socket . join ( roomId ) ;
51
+ if ( roomUserCount . has ( roomId ) ) {
52
+ roomUserCount . set ( roomId , roomUserCount . get ( roomId ) + 1 ) ;
53
+ } else {
54
+ roomUserCount . set ( roomId , 1 ) ;
55
+ }
56
+ io . to ( roomId ) . emit ( "roomCount" , roomUserCount . get ( roomId ) ) ;
51
57
console . log ( `User joined room: ${ roomId } ` ) ;
52
58
} ) ;
53
59
@@ -60,6 +66,18 @@ io.on("connection", (socket) => {
60
66
io . to ( roomId ) . emit ( "chatMessage" , newMessage ) ;
61
67
} ) ;
62
68
69
+ socket . on ( "disconnecting" , ( ) => {
70
+ socket . rooms . forEach ( ( roomId ) => {
71
+ if ( roomId !== socket . id ) {
72
+ if ( roomUserCount . has ( roomId ) ) {
73
+ const currentCount = roomUserCount . get ( roomId ) ;
74
+ roomUserCount . set ( roomId , currentCount - 1 ) ;
75
+ io . to ( roomId ) . emit ( "roomCount" , roomUserCount . get ( roomId ) ) ;
76
+ }
77
+ }
78
+ } ) ;
79
+ } ) ;
80
+
63
81
socket . on ( "disconnect" , ( ) => {
64
82
console . log ( "User disconnected from Socket.IO" ) ;
65
83
} ) ;
0 commit comments