-
Notifications
You must be signed in to change notification settings - Fork 0
/
gcmHandler.js
102 lines (89 loc) · 2.49 KB
/
gcmHandler.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
var gcm = require('node-gcm');
var fs = require('fs');
var apiKey = '999999999999999999999999999999999999999'; // Your GCM API key here
var numRetries = 4;
var registration_ids = [];
var ids_filename = "registration_ids.txt";
function setup() {
loadIdsFromFile();
}
function loadIdsFromFile() {
fs.readFile(ids_filename, function(err, data) {
if(err) {
console.log("Could not read ids from file " + ids_filename);
console.log(err);
} else {
registration_ids = registration_ids.concat(JSON.parse(data));
}
});
}
function saveIdsToFile() {
fs.writeFile(ids_filename, JSON.stringify(registration_ids), function(err, data) {
if(err) {
console.log("Could not save ids to file " + ids_filename);
console.log(err);
}
});
}
function register(query, response) {
if(query) {
var m = query.match(/id=(.*)/);
if(m) {
doRegister(m[1]);
}
}
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("200 OK");
response.end();
}
function doRegister(id) {
if(registration_ids.indexOf(id) == -1) {
registration_ids.push(id);
console.log("Registered id " + id);
saveIdsToFile();
}
}
function unregister(id) {
var n = registration_id.indexOf(id);
if(n != -1) {
registration_id.splice(n, 1);
saveIdsToFile();
}
}
function update(variables) {
console.log("Sending GCM message to " + registration_ids.length + " devices.");
var message = new gcm.Message();
message.collapseKey = 'door';
for(var v in variables) {
message.addData(v, variables[v]);
}
console.log("Message: " + JSON.stringify(message));
var sender = new gcm.Sender(apiKey);
for(var i in registration_ids) {
var id = registration_ids[i];
sender.send(message, [id], numRetries, function(result) {
if (result === undefined) {
console.log("Message could not be sent!");
} else if(result.errorCode !== undefined) {
if(result.errorCode == gcm.Constants.ERROR_NOT_REGISTERED ||
result.errorCode == gcm.Constants.ERROR_INVALID_REGISTRATION) {
/* registration ID is no longer valid -> unregister client */
console.log("Goodbye " + id);
unregister(id);
} else {
console.log("Unexpected error code " + result.errorCode);
}
} else {
console.log("Sent with message ID: " + result.messageId);
if(result.canonicalRegistrationId !== undefined) {
console.log("Swapping registration id");
unregister(id);
doRegister(result.canonicalRegistrationId);
}
}
});
}
}
exports.setup = setup;
exports.register = register;
exports.update = update;