From cef2cdf45809b2c82b7b4f1a47419d38944e606a Mon Sep 17 00:00:00 2001 From: Martin Donnelly Date: Thu, 28 Apr 2016 16:57:44 +0100 Subject: [PATCH] Push notifications --- app.js | 12 ++++++- app/js/appv2.js | 61 ++++++++++++++++++++++++++++------ lib/office/officeController.js | 29 ++++++++++++++++ routes/register_v1.js | 7 ++++ 4 files changed, 97 insertions(+), 12 deletions(-) create mode 100644 routes/register_v1.js diff --git a/app.js b/app.js index 841c69b..f47401f 100644 --- a/app.js +++ b/app.js @@ -16,6 +16,7 @@ var mqttConnect = require('./lib/mqtt/mqttConnect'); var log4js = require('log4js'); var logger = log4js.getLogger(); + var WebSocketServer = require('websocket').server; var EventEmitter = require('events'); @@ -29,6 +30,8 @@ var heating_v1 = require('./routes/heating_v1'); var projector_v1 = require('./routes/projector_v1'); var isProduction = false; +var iosTokens = []; + mqttConnect.setEmitter(busEmitter); mqttConnect.doConnection(); @@ -166,7 +169,7 @@ wsServer.on('request', function(request) { console.log((new Date()) + ' Connection accepted.'); var sendSocketHandler = (obj) => { - //logger.info('sendSocket: ' , JSON.stringify(obj)); + //Logger.info('sendSocket: ' , JSON.stringify(obj)); try { connection.sendUTF(JSON.stringify(obj)); } @@ -211,6 +214,13 @@ app.post('/api/v1/heating/on', heating_v1.turnon); app.post('/api/v1/projector/off', projector_v1.turnoff); app.post('/api/v1/projector/on', projector_v1.turnon); +app.post('/api/v1/register/ios', function(req, res) { + + console.log(req.body); +}); + + + app.listen(3000, function() { console.log('Express listening on 3000'); }); diff --git a/app/js/appv2.js b/app/js/appv2.js index 506c53f..f16a0b2 100644 --- a/app/js/appv2.js +++ b/app/js/appv2.js @@ -9,7 +9,7 @@ var SOController = (function() { var path; var wsUrl; - var local = true; + var local = false; var bus = {}; var prevDate; var prevTime; @@ -17,6 +17,9 @@ var SOController = (function() { var weatherStore = null; var lastWeatherRequest = 0; var soWebSocket; + var iosConfig = { + "badge": true, "sound": true, "alert": true, + }; var lightsList = { off: ['frontLightOff', 'backLightOff'], on: ['frontLightOn', 'backLightOn'] @@ -291,18 +294,54 @@ var SOController = (function() { }; var notifyConfirm = function(r) { - console.log(r); + console.log('notifyConfirm', r); }; var cordovaNotify = function(d) { - navigator.notification.confirm( - d.msg, // message - notifyConfirm, // callback to invoke with index of button pressed - 'Smartoffice Console', // title - ['Extend','Ignore'] // buttonLabels - ); + try { + navigator.notification.beep(1); + } catch(e) + { + console.log(e); + } + + try { + navigator.notification.confirm( + d.msg, // message + notifyConfirm, // callback to invoke with index of button pressed + 'Smartoffice Console', // title + ['Extend','Ignore'] // buttonLabels + ); + + } catch(e) + { + console.log(e); + } + }; + var setupPush = function() { + console.log('Setting up push notifications..'); + + var push = PushNotification.init({"android":{},"ios":iosConfig,"windows":{}}); + + push.on('registration', function(d) { + console.log('Registration: ', JSON.stringify(d)); + $.post(path + 'api/v1/register/ios', d, function() {}); + }); + + push.on('notification', function(d) { + console.log('Notification: ', d); + }); + + push.on('error', function(e) { + console.error('Push error:', e); + }); + + }; + + + // module.init = function() { @@ -310,6 +349,7 @@ var SOController = (function() { clock(); weatherClock(); soWebSocket = new SOWEBSOCKET(this); + setupPush(); }; module.updateCalendar = function(data) { @@ -322,14 +362,13 @@ var SOController = (function() { module.notify = function(d) { if (window.cordova && !(window.cordova instanceof HTMLElement)) { - document.addEventListener('deviceready', onDeviceReady, false); + cordovaNotify(d); } else { browserNotify(d); } }; - - + return module; })(); diff --git a/lib/office/officeController.js b/lib/office/officeController.js index 621be07..8aef501 100644 --- a/lib/office/officeController.js +++ b/lib/office/officeController.js @@ -8,6 +8,12 @@ var events = require('events'); var eventBus ; var util = require('util'); +var pushNotifications = require('node-pushnotifications'); + +var gcmSender = new gcm.Sender({ + key: 'AIzaSyBl1vJ00d_lMb5yKGp97jZ94Oc70GRpZiw' + }); + var officeController = function(neweventbus) { logger.debug((typeof neweventbus)); @@ -93,6 +99,29 @@ officeController.prototype.announceMeetingEnd = function(meeting) { var packet = {id: 'announce', msg: msg, uid: meeting.uid}; eventBus.emit('sendSocket', packet); + + var message = new gcm.Message({ + collapse_key: 'test', + data: { + key1: 'value1' + }, + delay_while_idle: true, + time_to_live: 34, + dry_run: false + }); + + sender.sendMessage(message.toJSON(), '', true, function(err, data) { + if (!err) { + logger.info('Message sent'); + logger.debug(data); + // do something + } else { + logger.error('Message failed'); + logger.error(err); + // handle error + } + }); + }; diff --git a/routes/register_v1.js b/routes/register_v1.js new file mode 100644 index 0000000..681cf04 --- /dev/null +++ b/routes/register_v1.js @@ -0,0 +1,7 @@ +/** + * + * User: Martin Donnelly + * Date: 2016-04-28 + * Time: 16:51 + * + */