@@ -76,11 +76,35 @@ class Room {
7676 * @property {any } extra
7777 */
7878 addUser ( user ) {
79- this . users . forEach ( userr => {
80- user . socket . emit ( 'user-connected' , userr . userid ) ;
81- } )
8279 this . users . push ( user ) ;
8380 this . current ++ ;
81+ this . users . forEach ( userr => {
82+ userr . socket . emit ( 'users-updated' , this . getUsers ( ) ) ;
83+ } )
84+ }
85+ getUsers ( ) {
86+ const rv = { } ;
87+ for ( let i = 0 ; i < this . users . length ; i ++ ) {
88+ rv [ this . users [ i ] . extra . userid ] = this . users [ i ] . extra ;
89+ }
90+ return rv ;
91+ }
92+ terminate ( ) {
93+ for ( let i = 0 ; i < this . users . length ; i ++ ) {
94+ this . users [ i ] . socket . disconnect ( ) ;
95+ }
96+ }
97+ userLeft ( userid ) {
98+ this . current -- ;
99+ for ( let i = 0 ; i < this . users . length ; i ++ ) {
100+ if ( this . users [ i ] . extra . userid === userid ) {
101+ this . users . splice ( i , 1 ) ;
102+ break ;
103+ }
104+ }
105+ this . users . forEach ( userr => {
106+ userr . socket . emit ( 'users-updated' , this . getUsers ( ) ) ;
107+ } )
84108 }
85109}
86110
@@ -90,18 +114,48 @@ function start(io, rooms, numusers, devv) {
90114 io . on ( 'connection' , ( socket ) => {
91115 updateusers ( ) ;
92116 let url = socket . handshake . url ;
93- let args = transformArgs ( url ) ;
94- let extraData = JSON . parse ( args . extra ) ;
95117 let room = null ;
118+ let extraData ;
96119
120+ socket . on ( "disconnect" , ( ) => {
121+ if ( extraData . userid === room . owner . userid ) {
122+ room . terminate ( ) ;
123+ global . rooms . splice ( global . rooms . indexOf ( room ) ) ;
124+ } else {
125+ room . userLeft ( extraData . userid ) ;
126+ }
127+ } )
97128 socket . on ( 'open-room' , function ( data , cb ) {
98- room = new Room ( data . extra . domain , data . extra . game_id , args . sessionid , data . extra . room_name , args . maxParticipantsAllowed , 1 , data . password . trim ( ) , args . userid , socket , data . extra , args . coreVer ) ;
129+ if ( getRoom ( data . extra . domain , data . extra . game_id , data . extra . sessionid ) !== null ) {
130+ cb ( true ) ;
131+ return ;
132+ }
133+ room = new Room ( data . extra . domain , data . extra . game_id , data . extra . sessionid , data . extra . room_name , data . maxPlayers , 1 , data . password . trim ( ) , data . extra . userid , socket , data . extra ) ;
99134 global . rooms . push ( room ) ;
100135 extraData = data . extra ;
101- socket . emit ( 'extra-data-updated' , args . userid , extraData ) ;
102136 socket . join ( room . id ) ;
137+ cb ( false ) ;
138+ //console.log(room);
103139
104140 } )
141+ socket . on ( 'join-room' , function ( data , cb ) {
142+ room = getRoom ( data . extra . domain , data . extra . game_id , data . extra . sessionid ) ;
143+ if ( room === null || ( room && room . current >= room . max ) ) {
144+ cb ( true , ( room === null ) ? "ROOM_NOT_FOUND" : "ROOM_FULL" ) ;
145+ return ;
146+ }
147+ extraData = data . extra ;
148+ room . addUser ( {
149+ socket : socket ,
150+ extra : extraData
151+ } ) ;
152+ socket . join ( room . id ) ;
153+ cb ( false , room . getUsers ( ) ) ;
154+
155+ } )
156+ socket . on ( "data-message" , ( data ) => {
157+ socket . to ( room . id ) . emit ( "data-message" , data ) ;
158+ } )
105159
106160
107161 } ) ;
0 commit comments