nicolive-api
Version:
api client for live.nicovideo.jp
178 lines (150 loc) • 5.82 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _MessageServer = require('./MessageServer');
var _MessageServer2 = _interopRequireDefault(_MessageServer);
var _LiveViewer = require('./viewer/LiveViewer');
var _LiveViewer2 = _interopRequireDefault(_LiveViewer);
var _User = require('./User');
var _User2 = _interopRequireDefault(_User);
var _Live = require('./Live');
var _Live2 = _interopRequireDefault(_Live);
var _Room = require('./Room');
var _Room2 = _interopRequireDefault(_Room);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Manager = function () {
function Manager(playerStatus, cookie) {
_classCallCheck(this, Manager);
var _playerStatus$ms = playerStatus.ms,
addr = _playerStatus$ms.addr,
port = _playerStatus$ms.port,
thread = _playerStatus$ms.thread;
this.messageServer = new _MessageServer2.default({ addr: addr, port: port, thread: thread, room: new _Room2.default(playerStatus.user.room_label) });
this.user = new _User2.default(playerStatus.user);
this.live = new _Live2.default(playerStatus.stream);
this.viewer = null;
this.cookie = cookie;
this._messageServers = [];
this._viewers = [];
}
_createClass(Manager, [{
key: 'connect',
value: function connect(server) {
var _this = this;
return new Promise(function (resolve, reject) {
var addr = server.addr,
port = server.port,
thread = server.thread;
var viewer = new _LiveViewer2.default({
addr: addr,
port: port,
thread: thread,
open_time: _this.live.openTime,
user_id: _this.user.id,
premium: _this.user.premium,
mail: '184',
res_from: 0,
version: '20061206',
cookie: _this.cookie,
room: server.room
});
viewer.establish(_this.viewer ? _this.viewer.connection : null);
viewer.connection.on('handshaked', function () {
return resolve(viewer);
});
viewer.connection.on('fail', function () {
return reject();
});
viewer.connection.on('comment', function (comment) {
if (_this._isEjectMe(comment)) viewer.connection.emit('ejected');
});
});
}
}, {
key: 'seekArenaRoom',
value: function seekArenaRoom() {
var _this2 = this;
return new Promise(function (resolve) {
return _this2._connectPreviousRoom(_this2._messageServers[0], resolve);
});
}
}, {
key: 'seekLastRoom',
value: function seekLastRoom() {
var _this3 = this;
return new Promise(function (resolve) {
return _this3._connectNextRoom(_this3._messageServers[_this3._messageServers.length - 1], resolve);
});
}
}, {
key: 'connectAll',
value: function connectAll() {
var _this4 = this;
return new Promise(function (resolve) {
_this4._messageServers = [_this4.messageServer];
_this4.connect(_this4.messageServer).then(function (viewer) {
_this4.viewer = viewer;
_this4._viewers.push(viewer);
return _this4.seekArenaRoom();
}).then(function () {
return _this4.seekLastRoom();
}).then(function () {
return resolve();
});
});
}
}, {
key: 'disconnect',
value: function disconnect() {
for (var i = 0; i < this._viewers.length; i++) {
this._viewers[i].connection.destroy();
}
}
}, {
key: '_connectPreviousRoom',
value: function _connectPreviousRoom(server, res) {
var _this5 = this;
var previousServer = server.previous();
if (!previousServer) return res();
return new Promise(function (resolve) {
_this5.connect(previousServer).then(function (viewer) {
_this5._messageServers.unshift(previousServer);
_this5._viewers.unshift(viewer);
resolve(previousServer);
}).catch(function () {
return res();
});
}).then(function (server) {
return _this5._connectPreviousRoom(server, res);
});
}
}, {
key: '_connectNextRoom',
value: function _connectNextRoom(server, res) {
var _this6 = this;
var nextServer = server.next();
if (!nextServer) return res();
return new Promise(function (resolve) {
_this6.connect(nextServer).then(function (viewer) {
_this6._messageServers.push(nextServer);
_this6._viewers.push(viewer);
resolve(nextServer);
}).catch(function () {
return res();
});
}).then(function (server) {
return _this6._connectNextRoom(server, res);
});
}
}, {
key: '_isEjectMe',
value: function _isEjectMe(comment) {
return comment.isEject() && Number(comment.attr.thread) === this.messageServer.thread && Number(comment.text.match(/\d+/)[0]) === Number(this.user.roomSeetno);
}
}]);
return Manager;
}();
exports.default = Manager;
;