UNPKG

att-dhs

Version:

AT&T Developer Hosted Server Library

249 lines (213 loc) 6.65 kB
/*jslint browser: true, devel: true, node: true, debug: true, todo: true, indent: 2, maxlen: 150, unparam: true*/ /*global require, exports*/ 'use strict'; var config = require('./att.dhs.config').config, restify = require('restify'), clients = {}; function getRestClient(token) { var restClient, logger = config.getLogger(); logger.logInfo('dhs.longpoller: getRestClient'); logger.logTrace('token', token); restClient = restify.createJsonClient({ url: 'https://api.att.com/', userAgent: 'att-dhs', accept: 'application/json', connection: 'keep-alive', DTN: '1', headers: { Authorization: 'Bearer ' + token }, requestTimeout: 10 * 60 * 1000, timeout: 5 * 60 * 300 }); return restClient; } function deleteClient(sessionId) { var logger = config.getLogger(), restClient; logger.logInfo('dhs.longpoller: deleteClient'); logger.logTrace('Session Id', sessionId); if (clients[sessionId] === undefined) { return; } restClient = getRestClient(clients[sessionId].token); logger.logDebug('Deleting Client'); logger.logTrace('Session Id', sessionId); if (clients.hasOwnProperty(sessionId)) { delete clients[sessionId]; restClient.del('RTC/v1/sessions/' + sessionId, function (error, req, res, result) { logger.logDebug('Client Deleted'); logger.logTrace('Delete result', result); }); } } // //function requestPolling(sessionId) { // var restClient, // logger = config.getConfiguration().logger; // // logger.logInfo('dhs.longpoller: requestPolling'); // logger.logTrace('Session Id', sessionId); // // restClient = getRestClient(clients[sessionId].token); // restClient.get('RTC/v1/sessions/' + sessionId + '/events', function (error, req, res, result) { // if (undefined !== error // && null !== error) { // options.error(error); // return; // } // // options.success(result, res); // }); //} // //function onStartClientSuccess(result, res) { // var logger = config.getConfiguration().logger; // // logger.logInfo('dhs.longpoller: onStartClientSuccess'); // logger.logTrace('statusCode', res.statusCode); // // if (res.statusCode == 204) { // logger.logInfo('Started Client Successfully'); // logger.logDebug('Success: no data'); // } // // if (res.statusCode == 200) { // logger.logInfo('Started Client Successfully'); // logger.logDebug('Success: with data'); // logger.logTrace('Success Data', result); // // if (Object.keys(result).length > 0) { // result.events.eventList.forEach(function (element) { // try { // socket.sendData('event', element); // } catch (e) { // logger.logInfo('Error starting client'); // logger.logError(e); // // issue with the websocket connection; stop polling // deleteClient(sessionId); // } // }); // } // } // // if (clients[sessionId] !== undefined) { // requestPolling(sessionId, token); // } // // logger.logDebug('WebSocket :Success'); //} // //function onStartClientError(error) { // var logger = config.getConfiguration().logger; // // logger.logInfo('dhs.longpoller: onStartClientError'); // logger.logTrace(error.statusCode); // logger.logError(error); // // if (error.statusCode === 401 /* Unauthorized Request */ // || error.statusCode === 403 /* Session Id not associated with token */ // || error.statusCode === 404 /* Session is expired */) { // try { // // attempt to send data, but recover if unable to // socket.sendData('error', error); // } catch (e) { // logger.logInfo('Error message not sent'); // logger.logError(e); // } // } else { // //Retry polling again // if (clients[sessionId] !== undefined) { // requestPolling(sessionId); // } // } //} function startClient(data, socket) { var options, sessionId, token, requestPolling, count, restClient, logger = config.getLogger(); logger.logInfo('dhs.longpoller: startClient'); logger.logTrace('data', data); options = {}; count = 0; sessionId = data.sessionId; token = data.token; requestPolling = function () { logger.logInfo('dhs.longpoller.startClient: requestPolling'); logger.logTrace('Session ID', sessionId); restClient.get('RTC/v1/sessions/' + sessionId + '/events', function (error, req, res, result) { if (undefined !== error && null !== error) { options.error(error); return; } options.success(result, res); }); }; options.onTimeout = function (result) { requestPolling(); // if timeout do a long polling }; options.success = function (result, res) { count = count + 1; logger.logInfo('dhs.longpoller.startClient: success'); logger.logTrace('Result', result); logger.logTrace('Status Code', res.statusCode); if (res.statusCode === 204) { logger.logDebug('success: no data'); } if (res.statusCode === 200) { logger.logDebug('success: with data'); if (Object.keys(result).length > 0) { result.events.eventList.forEach(function (element) { try { socket.sendData('event', element); } catch (e) { logger.logDebug('Error while sending message'); logger.logError(e); deleteClient(sessionId); // issue with the websocket connection; stop polling } }); } } if (undefined !== clients[sessionId]) { requestPolling(); } logger.logDebug('webSocket: Success'); }; options.error = function (error) { logger.logInfo('dhs.longpoller.startClient: error'); logger.logTrace('Error object', error); /** * 401: Unauthorized Request * 403: Session Id not associated with token * 404: Session has expired */ if (error.statusCode === 401 || error.statusCode === 403 || error.statusCode === 404) { try { socket.sendData('error', error); // Attempt to send data, but recover if unable to } catch (e) { logger.logDebug('Error while sending message'); logger.logError(e); } } else { if (clients[sessionId] !== undefined) { requestPolling(); // Retry polling again } } logger.logDebug('webSocket: Error'); }; restClient = getRestClient(token); clients[data.sessionId] = socket; // Saving the client before requesting logger.logTrace('Count of connected clients', Object.keys(clients).length); requestPolling(); } exports.longPoller = { startClient: startClient, deleteClient: deleteClient };