Skip to content

Commit 4457d82

Browse files
Merge pull request #129 from ritishgumber/master
query over notification
2 parents 6b37029 + 2494836 commit 4457d82

File tree

3 files changed

+1067
-694
lines changed

3 files changed

+1067
-694
lines changed

database-connect/realTime.js

Lines changed: 148 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,187 +1,230 @@
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

Comments
 (0)