cyclejs-socket.io
Version:
# A socketcluster driver for Cycle.js
83 lines (70 loc) • 2.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.makeSocketIODriver = makeSocketIODriver;
var _xstream = require('xstream');
var _xstream2 = _interopRequireDefault(_xstream);
var _socket = require('socket.io-client');
var _socket2 = _interopRequireDefault(_socket);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
*
* @param options {
hostname: 'securedomain.com',
secure: true,
port: 443,
rejectUnauthorized: false // Only necessary during debug if using a self-signed certificate
}
* @returns {scDriver}
*/
function makeSocketIODriver(url, options) {
var socket = (0, _socket2.default)(url, options);
function get(eventName) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$multiArgs = _ref.multiArgs,
multiArgs = _ref$multiArgs === undefined ? false : _ref$multiArgs;
return _xstream2.default.create({
start: function start(listener) {
this.eventListener = multiArgs ? function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return listener.next(args);
} : function (arg) {
return listener.next(arg);
};
socket.on(eventName, this.eventListener);
},
stop: function stop() {
socket.off(eventName, this.eventListener);
},
eventListener: null
});
}
function publish(messageType, message) {
socket.emit(messageType, message);
}
return function sioDriver(events$) {
if (events$) {
events$.addListener({
next: function next(i) {
if (!!i) {
publish(i.messageType, i.message);
}
},
error: function error(err) {
return console.error(err);
},
complete: function complete() {
socket.disconnect();
}
});
}
return {
get: get,
socket: socket,
dispose: function dispose() {}
};
};
}