1-
21/*
32# CloudBoost - Core Engine that powers Bakend as a Service
4- # (c) 2014 HackerBay, Inc.
3+ # (c) 2014 HackerBay, Inc.
54# CloudBoost may be freely distributed under the Apache 2 License
65*/
76
8-
9- module . exports = function ( io ) {
10-
11- var g = { } ;
12-
13- io . on ( 'connection' , function ( socket ) {
14-
15- try {
16- socket . on ( 'app-init' , function ( data ) {
17- try {
18- socket . join ( data ) ;
19- } catch ( e ) {
20- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
7+ module . exports = function ( io ) {
8+
9+ var g = { } ;
10+ io . use ( function ( socket , next ) {
11+ next ( ) ;
12+ } ) ;
13+ io . on ( 'connection' , function ( socket ) {
14+
15+ try {
16+ socket . on ( 'app-init' , function ( data ) {
17+ try {
18+ socket . join ( data ) ;
19+ } catch ( e ) {
20+ global . winston . log ( 'error' , {
21+ "error" : String ( e ) ,
22+ "stack" : new Error ( ) . stack
23+ } ) ;
2124 }
2225 } ) ;
2326
24- /* Custom Channel Listeners. */
27+ /* Custom Channel Listeners. */
2528
26- socket . on ( 'join-custom-channel' , function ( data ) {
27- try {
28- console . log ( '++++++++ Joined Realtime Channel+++++' ) ;
29- console . log ( data ) ;
30- socket . join ( data ) ;
29+ socket . on ( 'join-custom-channel' , function ( data ) {
30+ try {
31+ console . log ( '++++++++ Joined Realtime Channel+++++' ) ;
32+ console . log ( data ) ;
33+ socket . join ( data ) ;
3134
32- } catch ( e ) {
33- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
34- }
35+ } catch ( e ) {
36+ global . winston . log ( 'error' , {
37+ "error" : String ( e ) ,
38+ "stack" : new Error ( ) . stack
39+ } ) ;
40+ }
3541 } ) ;
36-
37- socket . on ( 'socket-disconnect' , function ( data ) {
38- try {
42+
43+ socket . on ( 'socket-disconnect' , function ( data ) {
44+ try {
3945 socket . disconnect ( ) ;
40- } catch ( e ) {
41- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
46+ } catch ( e ) {
47+ global . winston . log ( 'error' , {
48+ "error" : String ( e ) ,
49+ "stack" : new Error ( ) . stack
50+ } ) ;
4251 }
4352 } ) ;
4453
45- socket . on ( 'leave-custom-channel' , function ( data ) {
46- try {
47- console . log ( '++++++++ Left Realtime Channel+++++' ) ;
48- console . log ( data ) ;
49- socket . leave ( data ) ;
50- } catch ( e ) {
51- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
52- }
54+ socket . on ( 'leave-custom-channel' , function ( data ) {
55+ try {
56+ console . log ( '++++++++ Left Realtime Channel+++++' ) ;
57+ console . log ( data ) ;
58+ socket . leave ( data ) ;
59+ } catch ( e ) {
60+ global . winston . log ( 'error' , {
61+ "error" : String ( e ) ,
62+ "stack" : new Error ( ) . stack
63+ } ) ;
64+ }
5365 } ) ;
5466
55- socket . on ( 'publish-custom-channel' , function ( data ) {
56- try {
57- console . log ( '++++++++ Publish Realtime Channel+++++' ) ;
58- console . log ( data ) ;
59- //if this doucment is an instance of a table Object.
60- var roomSockets = io . to ( data . channel ) ;
61- var sockets = roomSockets . sockets ;
62-
63- if ( typeof sockets === "object" ) {
64- for ( var key in sockets ) {
65- if ( sockets [ key ] ) {
66- sockets [ key ] . emit ( data . channel , data . data ) ;
67+ socket . on ( 'publish-custom-channel' , function ( data ) {
68+ try {
69+ console . log ( '++++++++ Publish Realtime Channel+++++' ) ;
70+ console . log ( data ) ;
71+ //if this doucment is an instance of a table Object.
72+ var roomSockets = io . to ( data . channel ) ;
73+ var sockets = roomSockets . sockets ;
74+
75+ if ( typeof sockets === "object" ) {
76+ for ( var key in sockets ) {
77+ if ( sockets [ key ] ) {
78+ sockets [ key ] . emit ( data . channel , data . data ) ;
6779 }
6880 }
6981 }
70-
71- io . emit ( data . channel , data . data ) ;
72-
73- } catch ( e ) {
74- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
82+
83+ io . emit ( data . channel , data . data ) ;
84+
85+ } catch ( e ) {
86+ global . winston . log ( 'error' , {
87+ "error" : String ( e ) ,
88+ "stack" : new Error ( ) . stack
89+ } ) ;
7590 }
7691 } ) ;
7792
7893 /* CloudObject Channel Listeners. */
79- socket . on ( 'join-object-channel' , function ( data ) {
80- try {
94+ socket . on ( 'join-object-channel' , function ( data ) {
95+ try {
8196 console . log ( '++++++++ Joined Object Realtime Channel+++++' ) ;
8297 console . log ( data ) ;
83-
98+
8499 if ( typeof data === 'string' ) { // Backward Compatibility : data only has the room id
85100 socket . join ( data ) ;
86101 } else { //data has both the room id and the sessionId.
87102 socket . join ( data . room ) ;
88103 //connect socket.id and sessionId together
104+ global . socketQueryHelper . setQuery ( socket . id , data . query ) ;
89105 global . socketSessionHelper . saveSession ( socket . id , data . sessionId ) ;
90106 }
91- } catch ( e ) {
92- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
107+ } catch ( e ) {
108+ global . winston . log ( 'error' , {
109+ "error" : String ( e ) ,
110+ "stack" : new Error ( ) . stack
111+ } ) ;
93112 }
94113 } ) ;
95114
96- socket . on ( 'leave-object-channel' , function ( data ) {
97- try {
98- console . log ( '++++++++ Leave Object Realtime Channel+++++' ) ;
99- console . log ( data ) ;
115+ socket . on ( 'leave-object-channel' , function ( data ) {
116+ try {
117+ console . log ( '++++++++ Leave Object Realtime Channel+++++' ) ;
118+ console . log ( data ) ;
100119 socket . leave ( data ) ;
101- } catch ( e ) {
102- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
103- }
120+ } catch ( e ) {
121+ global . winston . log ( 'error' , {
122+ "error" : String ( e ) ,
123+ "stack" : new Error ( ) . stack
124+ } ) ;
125+ }
104126 } ) ;
105127
106- socket . on ( 'disconnect' , function ( ) {
107- try {
128+ socket . on ( 'disconnect' , function ( ) {
129+ try {
108130 global . socketSessionHelper . deleteSession ( socket . id ) ; //deletes the lnk between this socket and session.
109- } catch ( e ) {
110- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
131+ } catch ( e ) {
132+ global . winston . log ( 'error' , {
133+ "error" : String ( e ) ,
134+ "stack" : new Error ( ) . stack
135+ } ) ;
111136 }
112137 } ) ;
113138
114- } catch ( e ) {
115- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
139+ } catch ( e ) {
140+ global . winston . log ( 'error' , {
141+ "error" : String ( e ) ,
142+ "stack" : new Error ( ) . stack
143+ } ) ;
116144 }
117145
118- } ) ;
146+ } ) ;
119147
120- g . sendObjectNotification = function ( appId , document , eventType ) {
121- try {
122- //event type can be created, updated, deleted.
123- if ( document && document . _tableName ) {
124- console . log ( '++++++++ Sending Realtime Object Notification+++++' ) ;
125- console . log ( eventType + ' event' ) ;
126- console . log ( document ) ;
127- //if this doucment is an instance of a table Object.
148+ g . sendObjectNotification = function ( appId , document , eventType ) {
149+ try {
150+ //event type can be created, updated, deleted.
151+ if ( document && document . _tableName ) {
152+ console . log ( '++++++++ Sending Realtime Object Notification+++++' ) ;
153+ console . log ( eventType + ' event' ) ;
154+ console . log ( document ) ;
155+ //if this doucment is an instance of a table Object.
128156 var roomSockets = io . to ( appId . toLowerCase ( ) + 'table' + document . _tableName . toLowerCase ( ) + eventType . toLowerCase ( ) ) ;
129157 var sockets = roomSockets . sockets ;
130-
158+
131159 var promises = [ ] ;
132160
133161 //check for ACL and then send.
134162
135- if ( typeof sockets === "object" ) {
136- for ( var key in sockets ) {
137- if ( sockets [ key ] ) {
138- promises . push ( _sendNotification ( appId , document , sockets [ key ] , eventType ) ) ;
163+ if ( typeof sockets === "object" ) {
164+ for ( var key in sockets ) {
165+ if ( sockets [ key ] ) {
166+ promises . push ( _sendNotification ( appId , document , sockets [ key ] , eventType ) ) ;
139167 }
140168 }
141- } else {
169+ } else {
142170 for ( var i = 0 ; i < sockets . length ; i ++ ) {
143171 var socket = sockets [ i ] ;
144- promises . push ( _sendNotification ( appId , document , socket , eventType ) ) ;
172+ promises . push ( _sendNotification ( appId , document , socket , eventType ) ) ;
145173 }
146174 }
147175
148- global . q . all ( promises ) . then ( function ( ) {
176+ global . q . all ( promises ) . then ( function ( ) {
149177 console . log ( "Notifications Sent" ) ;
150- } , function ( ) {
178+ } , function ( ) {
151179 console . log ( "Error on sending Notifications" ) ;
152180 } ) ;
153- }
154- } catch ( e ) {
155- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
181+ }
182+ } catch ( e ) {
183+ global . winston . log ( 'error' , {
184+ "error" : String ( e ) ,
185+ "stack" : new Error ( ) . stack
186+ } ) ;
156187 }
157- } ;
158-
188+ } ;
189+
159190 return g ;
160191
161192} ;
162193
163194/**
164195 */
165196
166- function _sendNotification ( appId , document , socket , eventType ) {
197+ function _sendNotification ( appId , document , socket , eventType ) {
167198 var deferred = global . q . defer ( ) ;
168- try {
169- global . socketSessionHelper . getSession ( socket . id , function ( err , session ) {
199+ try {
200+ global . socketSessionHelper . getSession ( socket . id , function ( err , session ) {
170201 if ( err ) {
171202 deferred . reject ( ) ;
172203 }
173204 if ( ! session || global . aclHelper . isAllowedReadAccess ( session . userId , session . roles , document . ACL ) ) {
174- socket . emit ( appId . toLowerCase ( ) + 'table' + document . _tableName . toLowerCase ( ) + eventType . toLowerCase ( ) , document ) ;
175- console . log ( "Socket Emitted." ) ;
176- deferred . resolve ( ) ;
205+ global . socketQueryHelper . getQuery ( socket . id , function ( err , socketQuery ) {
206+ var socketQueryValidate = true ;
207+ if ( socketQuery )
208+ socketQueryValidate = global . socketQueryHelper . validateSocketQuery ( document , socketQuery . query ) ;
209+ if ( socketQueryValidate ) {
210+ socket . emit ( appId . toLowerCase ( ) + 'table' + document . _tableName . toLowerCase ( ) + eventType . toLowerCase ( ) , document ) ;
211+ console . log ( "Socket Emitted." ) ;
212+ } else {
213+ console . log ( 'Socket Query doesn\'t satsfies the current document' ) ;
214+ }
215+ deferred . resolve ( ) ;
216+ } ) ;
177217 } else {
178218 console . log ( "JUST RESOLVED" ) ;
179219 deferred . resolve ( ) ;
180220 }
181221 } ) ;
182- } catch ( e ) {
183- global . winston . log ( 'error' , { "error" :String ( e ) , "stack" : new Error ( ) . stack } ) ;
184- deferred . reject ( e ) ;
222+ } catch ( e ) {
223+ global . winston . log ( 'error' , {
224+ "error" : String ( e ) ,
225+ "stack" : new Error ( ) . stack
226+ } ) ;
227+ deferred . reject ( e ) ;
185228 }
186229 return deferred . promise ;
187- }
230+ }
0 commit comments