migme-ferry
Version:
Ferry transports packets to and from fusion/fission
93 lines (72 loc) • 2.69 kB
JavaScript
;
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'];