@@ -2,6 +2,7 @@ const app = require('express')();
2
2
const http = require ( 'http' ) . createServer ( app ) ;
3
3
const io = require ( 'socket.io' ) ( http ) ;
4
4
const mongoose = require ( 'mongoose' ) ;
5
+ const admin = require ( 'firebase-admin' ) ;
5
6
const { v4 : uuidv4 } = require ( 'uuid' ) ;
6
7
7
8
const Question = require ( './model' ) ;
@@ -10,17 +11,20 @@ require('dotenv').config();
10
11
11
12
const port = process . env . PORT || 3000 ;
12
13
13
- const rooms = { } ;
14
- let waitingUsers = [ ] ;
15
-
16
14
/**
17
15
* {
18
- * socket : room
16
+ * socket : room (object)
19
17
* ...
20
18
* }
21
19
*/
22
20
const connectedUsers = { } ;
23
21
22
+ /**
23
+ * roomId: room (object)
24
+ */
25
+ const rooms = { } ;
26
+ let waitingUsers = [ ] ;
27
+
24
28
mongoose . connect ( process . env . DB_URI , {
25
29
useNewUrlParser : true ,
26
30
useUnifiedTopology : true ,
@@ -64,10 +68,18 @@ io.on('connection', (socket) => {
64
68
console . log ( '[CONNECTED]' ) ;
65
69
connectedUsers [ socket ] = null ;
66
70
67
- // TODO: Oyun sırasında bir kişi disconnect ederse handle'la
68
71
socket . on ( 'disconnect' , ( ) => {
69
72
console . log ( '[DISCONNECTED]' ) ;
70
73
74
+ // If the user is in a room
75
+ if ( connectedUsers [ socket ] ) {
76
+ const activeRoom = connectedUsers [ socket ] ;
77
+ console . log ( "[DISCONNECTED] In a room" ) ;
78
+ activeRoom . endGame ( socket ) ;
79
+ connectedUsers . delete ( socket ) ;
80
+ rooms = rooms . filter ( room => ! Object . is ( room , activeRoom ) )
81
+ }
82
+
71
83
// Remove the user from the waiting list
72
84
// Time complexity O(n)
73
85
waitingUsers = waitingUsers . filter ( user => ! ( Object . is ( socket , user . socket ) ) ) ;
@@ -85,6 +97,7 @@ io.on('connection', (socket) => {
85
97
socket . on ( "JOIN ROOM" , ( object ) => {
86
98
console . log ( `[JOIN ROOM] ${ object . username } is looking for room` ) ;
87
99
100
+
88
101
// If there is another user waiting for a game
89
102
// put them in the same room and start the game
90
103
if ( waitingUsers . length > 0 ) {
@@ -107,9 +120,11 @@ io.on('connection', (socket) => {
107
120
users . set ( waitingUsers [ 0 ] . socket , {
108
121
username : waitingUsers [ 0 ] . username
109
122
} ) ;
123
+
124
+ // console.log(users);
125
+ // console.log(`${JSON.stringify(users)}`);
110
126
111
- console . log ( `${ JSON . stringify ( users ) } ` ) ;
112
-
127
+
113
128
/*
114
129
{
115
130
'socket' : { username: 'kaan' }
@@ -131,7 +146,8 @@ io.on('connection', (socket) => {
131
146
username : object . username ,
132
147
socket,
133
148
} ) ;
134
- }
149
+ }
150
+
135
151
} ) ;
136
152
137
153
socket . on ( "READY" , ( object ) => {
@@ -160,7 +176,7 @@ io.on('connection', (socket) => {
160
176
// TODO: Oyun bitince oyunu rooms'dan sil
161
177
// TODO: LEAVE GAME mesajını handle'la
162
178
socket . on ( "LEAVE GAME" , ( object ) => {
163
-
179
+ console . log ( "[LEAVE GAME]" )
164
180
} ) ;
165
181
} )
166
182
0 commit comments