att-dhs
Version:
AT&T Developer Hosted Server Library
126 lines (96 loc) • 3.19 kB
JavaScript
/*jslint browser: true, devel: true, node: true, debug: true, todo: true, indent: 2, maxlen: 150, unparam: true*/
/*global require, module, get */
;
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
};