1- var _ = require ( 'lodash' ) ;
2- import { Channel } from './channel' ;
31import { Database } from './../database' ;
42import { Log } from './../log' ;
3+ var _ = require ( "lodash" ) ;
54
65export class PresenceChannel {
76 /**
@@ -20,25 +19,32 @@ export class PresenceChannel {
2019 * Get the members of a presence channel.
2120 */
2221 getMembers ( channel : string ) : Promise < any > {
23- return this . db . get ( channel + ' :members' ) ;
22+ return this . db . get ( channel + " :members" ) ;
2423 }
2524
2625 /**
2726 * Check if a user is on a presence channel.
2827 */
2928 isMember ( channel : string , member : any ) : Promise < boolean > {
3029 return new Promise ( ( resolve , reject ) => {
31- this . getMembers ( channel ) . then ( members => {
32- this . removeInactive ( channel , members , member ) . then ( ( members : any ) => {
33- let search = members . filter ( m => m . user_id == member . user_id ) ;
34-
35- if ( search && search . length ) {
36- resolve ( true ) ;
37- }
38-
39- resolve ( false ) ;
40- } ) ;
41- } , error => Log . error ( error ) ) ;
30+ this . getMembers ( channel ) . then (
31+ ( members ) => {
32+ this . removeInactive ( channel , members , member ) . then (
33+ ( members : any ) => {
34+ let search = members . filter (
35+ ( m ) => m . user_id == member . user_id
36+ ) ;
37+
38+ if ( search && search . length ) {
39+ resolve ( true ) ;
40+ }
41+
42+ resolve ( false ) ;
43+ }
44+ ) ;
45+ } ,
46+ ( error ) => Log . error ( error )
47+ ) ;
4248 } ) ;
4349 }
4450
@@ -47,16 +53,19 @@ export class PresenceChannel {
4753 */
4854 removeInactive ( channel : string , members : any [ ] , member : any ) : Promise < any > {
4955 return new Promise ( ( resolve , reject ) => {
50- this . io . of ( '/' ) . in ( channel ) . clients ( ( error , clients ) => {
51- members = members || [ ] ;
52- members = members . filter ( member => {
53- return clients . indexOf ( member . socketId ) >= 0 ;
56+ this . io
57+ . of ( "/" )
58+ . in ( channel )
59+ . clients ( ( error , clients ) => {
60+ members = members || [ ] ;
61+ members = members . filter ( ( member ) => {
62+ return clients . indexOf ( member . socketId ) >= 0 ;
63+ } ) ;
64+
65+ this . db . set ( channel + ":members" , members ) ;
66+
67+ resolve ( members ) ;
5468 } ) ;
55-
56- this . db . set ( channel + ':members' , members ) ;
57-
58- resolve ( members ) ;
59- } ) ;
6069 } ) ;
6170 }
6271
@@ -67,81 +76,87 @@ export class PresenceChannel {
6776 join ( socket : any , channel : string , member : any ) {
6877 if ( ! member ) {
6978 if ( this . options . devMode ) {
70- Log . error ( 'Unable to join channel. Member data for presence channel missing' ) ;
79+ Log . error (
80+ "Unable to join channel. Member data for presence channel missing"
81+ ) ;
7182 }
7283
7384 return ;
7485 }
7586
76- this . isMember ( channel , member ) . then ( is_member => {
77- this . getMembers ( channel ) . then ( members => {
78- members = members || [ ] ;
79- member . socketId = socket . id ;
80- members . push ( member ) ;
81-
82- this . db . set ( channel + ':members' , members ) ;
83-
84- members = _ . uniqBy ( members . reverse ( ) , 'user_id' ) ;
85-
86- this . onSubscribed ( socket , channel , members ) ;
87-
88- if ( ! is_member ) {
89- this . onJoin ( socket , channel , member ) ;
90- }
91- } , error => Log . error ( error ) ) ;
92- } , ( ) => {
93- Log . error ( 'Error retrieving pressence channel members.' ) ;
94- } ) ;
87+ this . isMember ( channel , member ) . then (
88+ ( is_member ) => {
89+ this . getMembers ( channel ) . then (
90+ ( members ) => {
91+ members = members || [ ] ;
92+ member . socketId = socket . id ;
93+ members . push ( member ) ;
94+
95+ this . db . set ( channel + ":members" , members ) ;
96+
97+ members = _ . uniqBy ( members . reverse ( ) , "user_id" ) ;
98+
99+ this . onSubscribed ( socket , channel , members ) ;
100+
101+ if ( ! is_member ) {
102+ this . onJoin ( socket , channel , member ) ;
103+ }
104+ } ,
105+ ( error ) => Log . error ( error )
106+ ) ;
107+ } ,
108+ ( ) => {
109+ Log . error ( "Error retrieving pressence channel members." ) ;
110+ }
111+ ) ;
95112 }
96113
97114 /**
98115 * Remove a member from a presenece channel and broadcast they have left
99116 * only if not other presence channel instances exist.
100117 */
101118 leave ( socket : any , channel : string ) : void {
102- this . getMembers ( channel ) . then ( members => {
103- members = members || [ ] ;
104- let member = members . find ( member => member . socketId == socket . id ) ;
105- members = members . filter ( m => m . socketId != member . socketId ) ;
106-
107- this . db . set ( channel + ':members' , members ) ;
108-
109- this . isMember ( channel , member ) . then ( is_member => {
110- if ( ! is_member ) {
111- delete member . socketId ;
112- this . onLeave ( channel , member ) ;
113- }
114- } ) ;
115- } , error => Log . error ( error ) ) ;
119+ this . getMembers ( channel ) . then (
120+ ( members ) => {
121+ members = members || [ ] ;
122+ let member = members . find (
123+ ( member ) => member . socketId == socket . id
124+ ) ;
125+ members = members . filter ( ( m ) => m . socketId != member . socketId ) ;
126+
127+ this . db . set ( channel + ":members" , members ) ;
128+
129+ this . isMember ( channel , member ) . then ( ( is_member ) => {
130+ if ( ! is_member ) {
131+ delete member . socketId ;
132+ this . onLeave ( channel , member ) ;
133+ }
134+ } ) ;
135+ } ,
136+ ( error ) => Log . error ( error )
137+ ) ;
116138 }
117139
118140 /**
119141 * On join event handler.
120142 */
121143 onJoin ( socket : any , channel : string , member : any ) : void {
122- this . io
123- . sockets
124- . connected [ socket . id ]
125- . broadcast
144+ this . io . sockets . connected [ socket . id ] . broadcast
126145 . to ( channel )
127- . emit ( ' presence:joining' , channel , member ) ;
146+ . emit ( " presence:joining" , channel , member ) ;
128147 }
129148
130149 /**
131150 * On leave emitter.
132151 */
133152 onLeave ( channel : string , member : any ) : void {
134- this . io
135- . to ( channel )
136- . emit ( 'presence:leaving' , channel , member ) ;
153+ this . io . to ( channel ) . emit ( "presence:leaving" , channel , member ) ;
137154 }
138155
139156 /**
140157 * On subscribed event emitter.
141158 */
142159 onSubscribed ( socket : any , channel : string , members : any [ ] ) {
143- this . io
144- . to ( socket . id )
145- . emit ( 'presence:subscribed' , channel , members ) ;
160+ this . io . to ( socket . id ) . emit ( "presence:subscribed" , channel , members ) ;
146161 }
147162}
0 commit comments