UNPKG

2.96 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _promise = require('promise');
8
9var _promise2 = _interopRequireDefault(_promise);
10
11var _socket = require('socket.io');
12
13var _socket2 = _interopRequireDefault(_socket);
14
15var _log = require('../log');
16
17var _log2 = _interopRequireDefault(_log);
18
19var _receiveMsg = require('./receiveMsg');
20
21var receiveMsg = _interopRequireWildcard(_receiveMsg);
22
23var _receiveType = require('./receiveType');
24
25var receiveType = _interopRequireWildcard(_receiveType);
26
27function _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; } }
28
29function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
31var wss;
32
33//方法分发
34//会根据receiveType中定义的不同类型调用不同的事件,每个事件的方法就是receiveType的键
35//方法有三个参数message(当前客户端的消息), ws(当前的client连接), wss (io对象)
36//方法返回值 可以是promise或者 值,如果返回值为空,则不会给客户端回写值
37/**
38 * websocket通讯入口
39 *
40 * 所有接受到得消息是一个Object
41 *
42 * {
43 * path: "数据访问路径,相同type下的不同逻辑处理可以用不同的path"
44 * param: "请求参"
45 * }
46 *
47 *
48 * 所有发出的消息是一个Object
49 *
50 * data:{
51 * //当前请求的状态,如果不是100表示出现错误了
52 * status: 100,
53 * result: {'当前返回的数据'}
54 * }
55 *
56 */
57var recive = function recive(ws, evtType) {
58 ws.on(receiveType[evtType], function (message, callback) {
59 _log2.default.verbose('收到消息, 消息类型: ' + receiveType[evtType]);
60 var method = receiveMsg[evtType];
61 var result = null;
62 if (method) {
63 //调用定义的方法
64 result = method(message, ws, wss);
65 //需要向客户端返回结果
66 if (result) {
67 //返回的是一个promise
68 if (result.then) {
69 result.then(function (msg) {
70 return msg && callback(msg);
71 }, function (msg) {
72 return msg && callback(msg);
73 });
74 } else {
75 callback(result);
76 }
77 }
78 } else {
79 _log2.default.warn('消息' + receiveType[evtType] + '查找执行方法失败');
80 }
81 });
82};
83
84//将接受到的消息映射到 receiveMsg中去处理
85var distributeReciveMethod = function distributeReciveMethod() {
86 //有新德客户端建立链接
87 wss.on('connection', function (ws) {
88 for (var type in receiveType) {
89 recive(ws, type);
90 }
91 });
92};
93
94exports.default = function (server) {
95 if (!server) {
96 return _promise2.default.reject('must have server');
97 }
98 return new _promise2.default(function (resolve) {
99 wss = (0, _socket2.default)(server);
100 wss.on('error', function (err) {
101 _log2.default.info('err io', err);
102 });
103 distributeReciveMethod();
104 resolve(wss);
105 });
106};
\No newline at end of file