catproxy
Version:
a node proxy or host change tools
106 lines (89 loc) • 2.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _promise = require('promise');
var _promise2 = _interopRequireDefault(_promise);
var _socket = require('socket.io');
var _socket2 = _interopRequireDefault(_socket);
var _log = require('../log');
var _log2 = _interopRequireDefault(_log);
var _receiveMsg = require('./receiveMsg');
var receiveMsg = _interopRequireWildcard(_receiveMsg);
var _receiveType = require('./receiveType');
var receiveType = _interopRequireWildcard(_receiveType);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var wss;
// 方法分发
// 会根据receiveType中定义的不同类型调用不同的事件,每个事件的方法就是receiveType的键
// 方法有三个参数message(当前客户端的消息), ws(当前的client连接), wss (io对象)
// 方法返回值 可以是promise或者 值,如果返回值为空,则不会给客户端回写值
/**
* websocket通讯入口
*
* 所有接受到得消息是一个Object
*
* {
* path: "数据访问路径,相同type下的不同逻辑处理可以用不同的path"
* param: "请求参"
* }
*
*
* 所有发出的消息是一个Object
*
* data:{
* //当前请求的状态,如果不是100表示出现错误了
* status: 100,
* result: {'当前返回的数据'}
* }
*
*/
var recive = function recive(ws, evtType) {
ws.on(receiveType[evtType], function (message, callback) {
_log2.default.verbose('收到消息, 消息类型: ' + receiveType[evtType]);
var method = receiveMsg[evtType];
var result = null;
if (method) {
// 调用定义的方法
result = method(message, ws, wss);
// 需要向客户端返回结果
if (result) {
// 返回的是一个promise
if (result.then) {
result.then(function (msg) {
return msg && callback(msg);
}, function (msg) {
return msg && callback(msg);
});
} else {
callback(result);
}
}
} else {
_log2.default.warn('消息' + receiveType[evtType] + '查找执行方法失败');
}
});
};
// 将接受到的消息映射到 receiveMsg中去处理
var distributeReciveMethod = function distributeReciveMethod() {
// 有新德客户端建立链接
wss.on('connection', function (ws) {
for (var type in receiveType) {
recive(ws, type);
}
});
};
exports.default = function (server) {
if (!server) {
return _promise2.default.reject('must have server');
}
return new _promise2.default(function (resolve) {
wss = (0, _socket2.default)(server);
wss.on('error', function (err) {
_log2.default.info('err io', err);
});
distributeReciveMethod();
resolve(wss);
});
};