UNPKG

migme-ferry

Version:

Ferry transports packets to and from fusion/fission

93 lines (72 loc) 2.69 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = SocketConnection; var _websocket = require('../config/websocket'); var _websocket2 = _interopRequireDefault(_websocket); var _ferryEvent = require('../events/ferry-event'); var _ferryEvent2 = _interopRequireDefault(_ferryEvent); var _dispatcher = require('../events/dispatcher'); var _dispatcher2 = _interopRequireDefault(_dispatcher); var _debug = require('../utils/debug'); var _debug2 = _interopRequireDefault(_debug); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function SocketConnection(uri) { var _uri = uri; var _socket = null; return { get uri() { return _uri; }, get socket() { return _socket; }, createSocket: function createSocket(uri) { return new _websocket2.default(uri); }, connect: function connect() { var _this = this; _socket = this.createSocket(_uri); _socket.onopen = function () { (0, _debug2.default)('Socket Open at:', _uri); _dispatcher2.default.emit(_ferryEvent2.default.CONNECTED); }; _socket.onclose = function (e) { (0, _debug2.default)('Socket closed'); _dispatcher2.default.emit(_ferryEvent2.default.CONNECTION_CLOSED, e); _this.close(); }; _socket.onmessage = function (e) { (0, _debug2.default)('Socket Message recieved:', e.data); var data = typeof e.data === 'string' ? JSON.parse(e.data) : e.data; _dispatcher2.default.emit(_ferryEvent2.default.PACKET_RECEIVED, data); }; _socket.onerror = function (e) { (0, _debug2.default)('Socket error:', e); _dispatcher2.default.emit(_ferryEvent2.default.PACKET_FAILED, e); }; }, close: function close() { if (_socket) { _socket.close(); _socket.onopen = _socket.onclose = null; _socket.onmessage = _socket.onerror = null; _socket = null; _dispatcher2.default.emit(_ferryEvent2.default.CONNECTION_CLOSED); } }, send: function send(packet) { if (!_socket || _socket.readyState === _websocket2.default.CLOSING || _socket.readyState === _websocket2.default.CLOSED) { _dispatcher2.default.emit(_ferryEvent2.default.CONNECTION_CLOSED); throw new Error('Socket not connected'); } if (_socket.readyState === _websocket2.default.CONNECTING) { throw new Error('Socket is still connecting'); } (0, _debug2.default)('Socket send:', packet); _socket.send(JSON.stringify(packet.toJSON())); } }; } module.exports = exports['default'];