1
- var _ = require ( 'lodash' ) ;
2
- import { Channel } from './channel' ;
3
1
import { Database } from './../database' ;
4
2
import { Log } from './../log' ;
3
+ var _ = require ( "lodash" ) ;
5
4
6
5
export class PresenceChannel {
7
6
/**
@@ -20,25 +19,32 @@ export class PresenceChannel {
20
19
* Get the members of a presence channel.
21
20
*/
22
21
getMembers ( channel : string ) : Promise < any > {
23
- return this . db . get ( channel + ' :members' ) ;
22
+ return this . db . get ( channel + " :members" ) ;
24
23
}
25
24
26
25
/**
27
26
* Check if a user is on a presence channel.
28
27
*/
29
28
isMember ( channel : string , member : any ) : Promise < boolean > {
30
29
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
+ ) ;
42
48
} ) ;
43
49
}
44
50
@@ -47,16 +53,19 @@ export class PresenceChannel {
47
53
*/
48
54
removeInactive ( channel : string , members : any [ ] , member : any ) : Promise < any > {
49
55
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 ) ;
54
68
} ) ;
55
-
56
- this . db . set ( channel + ':members' , members ) ;
57
-
58
- resolve ( members ) ;
59
- } ) ;
60
69
} ) ;
61
70
}
62
71
@@ -67,81 +76,87 @@ export class PresenceChannel {
67
76
join ( socket : any , channel : string , member : any ) {
68
77
if ( ! member ) {
69
78
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
+ ) ;
71
82
}
72
83
73
84
return ;
74
85
}
75
86
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
+ ) ;
95
112
}
96
113
97
114
/**
98
115
* Remove a member from a presenece channel and broadcast they have left
99
116
* only if not other presence channel instances exist.
100
117
*/
101
118
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
+ ) ;
116
138
}
117
139
118
140
/**
119
141
* On join event handler.
120
142
*/
121
143
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
126
145
. to ( channel )
127
- . emit ( ' presence:joining' , channel , member ) ;
146
+ . emit ( " presence:joining" , channel , member ) ;
128
147
}
129
148
130
149
/**
131
150
* On leave emitter.
132
151
*/
133
152
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 ) ;
137
154
}
138
155
139
156
/**
140
157
* On subscribed event emitter.
141
158
*/
142
159
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 ) ;
146
161
}
147
162
}
0 commit comments