UNPKG

att-dhs

Version:

AT&T Developer Hosted Server Library

126 lines (96 loc) 3.19 kB
/*jslint browser: true, devel: true, node: true, debug: true, todo: true, indent: 2, maxlen: 150, unparam: true*/ /*global require, module, get */ 'use strict'; var ws = null, config = require('./att.dhs.config').config, longPoller = require('./att.dhs.longpoller').longPoller, WebSocket = require('ws').Server; function longPoll(message, socket) { var logger = config.getLogger(); logger.logInfo('dhs.websocket: longPoll'); logger.logTrace('Message type', typeof message); //TODO : save the socket if (undefined === message.sessionId) { logger.logWarning('Please pass sessionId as parameter'); socket.sendData('event', 'Please pass sessionId as parameter'); } if (undefined === message.token) { logger.logWarning('Please pass valid token'); socket.sendData('event', 'Please pass valid token'); } logger.logDebug('added socket to client array and access token'); socket.sessionId = message.sessionId; socket.token = message.token; logger.logInfo('Starting long polling'); longPoller.startClient(message, socket); //TODO removed for android client //socket.sendData('event', 'started polling'); } function parseMessage(message, socket) { var logger = config.getLogger(); logger.logInfo('dhs.websocket: parseMessage'); logger.logTrace('Message type', typeof message); if (message.event === 'event') { logger.logInfo('Received event request from client'); logger.logTrace('Event request message from client', message); longPoll(message.data, socket); } } function onConnection(socket) { var logger = config.getLogger(), keepAliveIntervalObj = null; logger.logInfo('dhs.websocket: onConnection'); socket.keepAlive = function () { try { socket.ping(); } catch (e) { logger.logTrace(e); clearInterval(keepAliveIntervalObj); } }; keepAliveIntervalObj = setInterval(socket.keepAlive, 50000); socket.sendData = function (event, data) { this.send(JSON.stringify({ event: event, data: data })); }; socket.on('message', function incoming(message) { logger.logDebug('Message Received!'); logger.logTrace('Received message', message); ws.parseMessage(JSON.parse(message), this); }); socket.on('close', function () { logger.logDebug('Closing session'); logger.logTrace('Session Id', this.sessionId); longPoller.deleteClient(this.sessionId); clearInterval(socket.keepAlive); }); } function createSocket(options) { var logger = config.getLogger(); logger.logInfo('dhs.websocket: createSocket'); if (undefined === options || undefined === options.server) { throw new Error('No server object provided'); } if (undefined === options.success || 'function' !== typeof options.success) { options.success = function () {}; } if (ws === null) { ws = new WebSocket({ server: options.server }); logger.logDebug('Created WebSocket Waiting for Connection'); options.success(); } else { options.success(); return; } ws.parseMessage = parseMessage; ws.on('connection', onConnection); } exports.webSocket = { createSocket: createSocket };