cgserver 11.2.8 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/lib/Framework/Server/ProtoFilter/GoogleProtoFilter.js +57 -0
- package/dist/lib/Framework/Server/ProtoFilter/IProtoFilter.js +9 -0
- package/dist/lib/Framework/Server/ProtoFilter/JsonProtoFilter.js +29 -0
- package/dist/lib/Framework/Server/ProtoFilter/ProtoFactory.js +35 -0
- package/dist/lib/Framework/Server/SocketServer/IClientSocket.js +44 -0
- package/dist/lib/Framework/Server/SocketServer/IServerSocket.js +95 -0
- package/dist/lib/Framework/Server/SocketServer/ISocket.js +222 -0
- package/dist/lib/Framework/Server/SocketServer/ISocketServer.js +144 -0
- package/dist/lib/Framework/Server/SocketServer/PacketParser.js +40 -0
- package/dist/lib/Framework/Server/WebServer/Controller/BaseController.js +119 -0
- package/dist/lib/Framework/Server/WebServer/Controller/MongoBaseUserController.js +171 -0
- package/dist/lib/Framework/Server/WebServer/Controller/MysqlBaseUserController.js +169 -0
- package/dist/lib/Framework/Server/WebServer/Engine/ControllerManager.js +115 -0
- package/dist/lib/Framework/Server/WebServer/Engine/Engine.js +218 -0
- package/dist/lib/Framework/Server/WebServer/Engine/RazorJs.js +543 -0
- package/dist/lib/Framework/Server/WebServer/Engine/Request.js +226 -0
- package/dist/lib/Framework/Server/WebServer/Engine/Response.js +87 -0
- package/dist/lib/Framework/Server/WebServer/IWebServer.js +55 -0
- package/dist/lib/Framework/Server/WebSocketServer/IClientWebSocket.js +44 -0
- package/dist/lib/Framework/Server/WebSocketServer/IRpc.js +36 -0
- package/dist/lib/Framework/Server/WebSocketServer/IRpcClientWebSocket.js +140 -0
- package/dist/lib/Framework/Server/WebSocketServer/IRpcServerWebSocket.js +82 -0
- package/dist/lib/Framework/Server/WebSocketServer/IServerWebSocket.js +95 -0
- package/dist/lib/Framework/Server/WebSocketServer/IWebSocket.js +215 -0
- package/dist/lib/Framework/Server/WebSocketServer/IWebSocketServer.js +214 -0
- package/dist/lib/Framework/ThirdParty/CgMq.js +27 -1
- package/dist/lib/Framework/cgserver.js +21 -8
- package/dist/lib/Framework/global.js +2 -2
- package/dist/lib/Framework/index_export_.js +31 -20
- package/dist/types/Framework/Server/ProtoFilter/GoogleProtoFilter.d.ts +9 -0
- package/dist/types/Framework/Server/ProtoFilter/IProtoFilter.d.ts +10 -0
- package/dist/types/Framework/Server/ProtoFilter/JsonProtoFilter.d.ts +6 -0
- package/dist/types/Framework/Server/ProtoFilter/ProtoFactory.d.ts +12 -0
- package/dist/types/Framework/Server/SocketServer/IClientSocket.d.ts +17 -0
- package/dist/types/Framework/Server/SocketServer/IServerSocket.d.ts +38 -0
- package/dist/types/Framework/Server/SocketServer/ISocket.d.ts +80 -0
- package/dist/types/Framework/Server/SocketServer/ISocketServer.d.ts +45 -0
- package/dist/types/Framework/Server/SocketServer/PacketParser.d.ts +9 -0
- package/dist/types/Framework/Server/WebServer/Controller/BaseController.d.ts +34 -0
- package/dist/types/Framework/Server/WebServer/Controller/MongoBaseUserController.d.ts +28 -0
- package/dist/types/Framework/Server/WebServer/Controller/MysqlBaseUserController.d.ts +27 -0
- package/dist/types/Framework/Server/WebServer/Engine/ControllerManager.d.ts +37 -0
- package/dist/types/Framework/Server/WebServer/Engine/Engine.d.ts +44 -0
- package/dist/types/Framework/Server/WebServer/Engine/RazorJs.d.ts +21 -0
- package/dist/types/Framework/Server/WebServer/Engine/Request.d.ts +50 -0
- package/dist/types/Framework/Server/WebServer/Engine/Response.d.ts +26 -0
- package/dist/types/Framework/Server/WebServer/IWebServer.d.ts +22 -0
- package/dist/types/Framework/Server/WebSocketServer/IClientWebSocket.d.ts +17 -0
- package/dist/types/Framework/Server/WebSocketServer/IRpc.d.ts +32 -0
- package/dist/types/Framework/Server/WebSocketServer/IRpcClientWebSocket.d.ts +29 -0
- package/dist/types/Framework/Server/WebSocketServer/IRpcServerWebSocket.d.ts +23 -0
- package/dist/types/Framework/Server/WebSocketServer/IServerWebSocket.d.ts +38 -0
- package/dist/types/Framework/Server/WebSocketServer/IWebSocket.d.ts +76 -0
- package/dist/types/Framework/Server/WebSocketServer/IWebSocketServer.d.ts +46 -0
- package/dist/types/Framework/ThirdParty/CgMq.d.ts +11 -2
- package/dist/types/Framework/ThirdParty/Rpc.d.ts +1 -1
- package/dist/types/Framework/cgserver.d.ts +7 -3
- package/dist/types/Framework/global.d.ts +2 -2
- package/dist/types/Framework/index_export_.d.ts +24 -19
- package/package.json +2 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Request = void 0;
|
|
4
|
+
const url_1 = require("url");
|
|
5
|
+
const Core_1 = require("../../../Core/Core");
|
|
6
|
+
const Log_1 = require("../../../Logic/Log");
|
|
7
|
+
class Request {
|
|
8
|
+
_req = null;
|
|
9
|
+
get baseReq() {
|
|
10
|
+
return this._req;
|
|
11
|
+
}
|
|
12
|
+
_cfg = null;
|
|
13
|
+
_post_cb = null;
|
|
14
|
+
set onPost(value) {
|
|
15
|
+
this._post_cb = value;
|
|
16
|
+
}
|
|
17
|
+
_module = "";
|
|
18
|
+
get module() {
|
|
19
|
+
return this._module;
|
|
20
|
+
}
|
|
21
|
+
_controller = "";
|
|
22
|
+
get controller() {
|
|
23
|
+
return this._controller;
|
|
24
|
+
}
|
|
25
|
+
_action = "";
|
|
26
|
+
get action() {
|
|
27
|
+
return this._action;
|
|
28
|
+
}
|
|
29
|
+
_suffix = "";
|
|
30
|
+
get suffix() {
|
|
31
|
+
return this._suffix;
|
|
32
|
+
}
|
|
33
|
+
_file_url = null;
|
|
34
|
+
get fileUrl() {
|
|
35
|
+
return this._file_url;
|
|
36
|
+
}
|
|
37
|
+
_params = {};
|
|
38
|
+
get params() {
|
|
39
|
+
var body = (this._req.query || {});
|
|
40
|
+
for (let k in body) {
|
|
41
|
+
var v = body[k];
|
|
42
|
+
if (!Core_1.core.isString(v)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
if (parseInt(v) == v) {
|
|
46
|
+
body[k] = parseInt(v);
|
|
47
|
+
}
|
|
48
|
+
else if (parseFloat(v) == v) {
|
|
49
|
+
body[k] == parseFloat(v);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return body;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 原始body字符串
|
|
56
|
+
*/
|
|
57
|
+
get rawBody() {
|
|
58
|
+
if (!this._req) {
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
return this._req["rawBody"] || "";
|
|
62
|
+
}
|
|
63
|
+
get postData() {
|
|
64
|
+
var body = this._req.body || {};
|
|
65
|
+
if (this._req.headers["content-type"] == "application/x-www-form-urlencoded") {
|
|
66
|
+
for (let k in body) {
|
|
67
|
+
body = k;
|
|
68
|
+
break;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (Core_1.core.isString(body)) {
|
|
72
|
+
try {
|
|
73
|
+
body = JSON.parse(body);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
Log_1.gLog.error("post data--" + body + "--parse error");
|
|
77
|
+
body = {};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return body;
|
|
81
|
+
}
|
|
82
|
+
get url() {
|
|
83
|
+
return this._req.url;
|
|
84
|
+
}
|
|
85
|
+
get root() {
|
|
86
|
+
let root = this._req.headers.host;
|
|
87
|
+
if (root != "") {
|
|
88
|
+
root = this._req.protocol + "://" + root;
|
|
89
|
+
}
|
|
90
|
+
return root;
|
|
91
|
+
}
|
|
92
|
+
get method() {
|
|
93
|
+
return this._req.method;
|
|
94
|
+
}
|
|
95
|
+
get headers() {
|
|
96
|
+
return this._req.headers;
|
|
97
|
+
}
|
|
98
|
+
get remoteHost() {
|
|
99
|
+
let ips = this._req.headers['x-forwarded-for'];
|
|
100
|
+
let ip = "";
|
|
101
|
+
if (Core_1.core.isArray(ips)) {
|
|
102
|
+
ip = ips[0];
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
ip = ips;
|
|
106
|
+
}
|
|
107
|
+
ip = ip ||
|
|
108
|
+
this._req.socket.remoteAddress ||
|
|
109
|
+
this._req.ip || "";
|
|
110
|
+
ip = ip.replace("::ffff:", "");
|
|
111
|
+
return ip;
|
|
112
|
+
}
|
|
113
|
+
constructor(req, cfg) {
|
|
114
|
+
this._cfg = cfg;
|
|
115
|
+
this._req = req;
|
|
116
|
+
this._init();
|
|
117
|
+
}
|
|
118
|
+
getCookie(key) {
|
|
119
|
+
let cookie_key = this._cfg.cookie.prefix + key;
|
|
120
|
+
if (!this._req.cookies) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return this._req.cookies[cookie_key];
|
|
124
|
+
}
|
|
125
|
+
_init() {
|
|
126
|
+
let path = this._req.url;
|
|
127
|
+
//服务器根目录路径写法,链接转换
|
|
128
|
+
let _i = path.lastIndexOf("~");
|
|
129
|
+
if (_i >= 0) {
|
|
130
|
+
path = path.substr(_i + 1);
|
|
131
|
+
}
|
|
132
|
+
//处理参数
|
|
133
|
+
this._parseParams(path);
|
|
134
|
+
}
|
|
135
|
+
_addListener(event, listener) {
|
|
136
|
+
this._req.addListener(event, listener);
|
|
137
|
+
}
|
|
138
|
+
_parseParams(path) {
|
|
139
|
+
this._module = this._cfg.routs.onlyModule || this._cfg.routs.defaults.module;
|
|
140
|
+
this._controller = this._cfg.routs.defaults.controller;
|
|
141
|
+
this._action = this._cfg.routs.defaults.action;
|
|
142
|
+
this._suffix = null;
|
|
143
|
+
this._file_url = null;
|
|
144
|
+
this._params = {};
|
|
145
|
+
if (path == "/") {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let firstQuoteIndex = path.indexOf("?");
|
|
149
|
+
let preQuoteStr = path;
|
|
150
|
+
if (firstQuoteIndex > 0) {
|
|
151
|
+
preQuoteStr = path.substring(0, firstQuoteIndex);
|
|
152
|
+
}
|
|
153
|
+
let lastDotIndex = preQuoteStr.lastIndexOf(".");
|
|
154
|
+
if (lastDotIndex > 0) {
|
|
155
|
+
let dotStr = preQuoteStr.substring(lastDotIndex + 1);
|
|
156
|
+
this._suffix = dotStr;
|
|
157
|
+
this._file_url = preQuoteStr;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
let quote_index = path.indexOf("?");
|
|
161
|
+
if (quote_index >= 0) {
|
|
162
|
+
let url = new url_1.URL(path);
|
|
163
|
+
url.searchParams.forEach((value, name, searchParams) => {
|
|
164
|
+
this._params[name] = value;
|
|
165
|
+
});
|
|
166
|
+
path = path.substring(0, quote_index);
|
|
167
|
+
}
|
|
168
|
+
let params = path.split("/");
|
|
169
|
+
let default_module = false;
|
|
170
|
+
if (this._cfg.routs.onlyModule) {
|
|
171
|
+
default_module = true;
|
|
172
|
+
}
|
|
173
|
+
if (params.length > 1 && params[1].length > 0) {
|
|
174
|
+
/**
|
|
175
|
+
* 如果是only模式,那么就不支持controller和module相同,
|
|
176
|
+
* 如果相同则认为是模块名,这样就可以同时支持,带模块的路径模式和非带模块的路径模式了
|
|
177
|
+
*/
|
|
178
|
+
if (default_module
|
|
179
|
+
&& params[1].toLowerCase() == this._cfg.routs.onlyModule.toLowerCase()) {
|
|
180
|
+
default_module = false;
|
|
181
|
+
}
|
|
182
|
+
if (default_module) {
|
|
183
|
+
this._controller = params[1];
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this._module = params[1];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (params.length > 2 && params[2].length > 0) {
|
|
190
|
+
if (default_module) {
|
|
191
|
+
this._action = params[2];
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this._controller = params[2];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (params.length > 3
|
|
198
|
+
&& params[3].length > 0
|
|
199
|
+
&& !default_module) {
|
|
200
|
+
this._action = params[3];
|
|
201
|
+
}
|
|
202
|
+
this._params = this._params || {};
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
getDebugInfo() {
|
|
206
|
+
let debuginfo = {
|
|
207
|
+
module: this._module,
|
|
208
|
+
controller: this._controller,
|
|
209
|
+
action: this._action,
|
|
210
|
+
suffix: this._suffix,
|
|
211
|
+
file_url: this._file_url,
|
|
212
|
+
params: this._params,
|
|
213
|
+
post: this.postData,
|
|
214
|
+
method: this._req.method.toLowerCase()
|
|
215
|
+
};
|
|
216
|
+
return debuginfo;
|
|
217
|
+
}
|
|
218
|
+
debugInfo(force = false) {
|
|
219
|
+
if (!this._cfg.debug && !force) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
let debuginfo = this.getDebugInfo();
|
|
223
|
+
Log_1.gLog.info(debuginfo);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
exports.Request = Request;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Response = void 0;
|
|
4
|
+
const fs = require("fs");
|
|
5
|
+
const mime = require("mime");
|
|
6
|
+
const Log_1 = require("../../../Logic/Log");
|
|
7
|
+
class Response {
|
|
8
|
+
_res = null;
|
|
9
|
+
_cookie_prefix = "";
|
|
10
|
+
_cfg = null;
|
|
11
|
+
debug = false;
|
|
12
|
+
get baseRes() {
|
|
13
|
+
return this._res;
|
|
14
|
+
}
|
|
15
|
+
constructor(res, cfg) {
|
|
16
|
+
this._cfg = cfg;
|
|
17
|
+
this.debug = this._cfg.debug || false;
|
|
18
|
+
this._res = res;
|
|
19
|
+
this._cookie_prefix = this._cfg.cookie.prefix;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @param key
|
|
24
|
+
* @param value
|
|
25
|
+
* @param time 秒
|
|
26
|
+
*/
|
|
27
|
+
setCookie(key, value, time) {
|
|
28
|
+
key = this._cookie_prefix + key;
|
|
29
|
+
if (time) {
|
|
30
|
+
this._res.cookie(key, value, { maxAge: time * 1000, httpOnly: true });
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
this._res.cookie(key, value, { httpOnly: true });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
clearCookie(key) {
|
|
37
|
+
this.setCookie(key, "", -1000);
|
|
38
|
+
}
|
|
39
|
+
redirect(path) {
|
|
40
|
+
this._res.writeHead(302, { 'Location': path });
|
|
41
|
+
this._res.end();
|
|
42
|
+
}
|
|
43
|
+
render(data) {
|
|
44
|
+
return this._res.send(data);
|
|
45
|
+
}
|
|
46
|
+
renderJson(data) {
|
|
47
|
+
this.debugInfo(data);
|
|
48
|
+
return this._res.json(data);
|
|
49
|
+
}
|
|
50
|
+
sendStatus(status) {
|
|
51
|
+
this.debugInfo(status);
|
|
52
|
+
this._res.sendStatus(status);
|
|
53
|
+
}
|
|
54
|
+
renderHtml(html) {
|
|
55
|
+
return this._res.send(html || "");
|
|
56
|
+
}
|
|
57
|
+
renderFile(fullPath) {
|
|
58
|
+
this._res.sendFile(fullPath);
|
|
59
|
+
}
|
|
60
|
+
downloadFile(fullPath) {
|
|
61
|
+
let fileName = "";
|
|
62
|
+
let quote_index = fullPath.indexOf("/");
|
|
63
|
+
if (quote_index > 0) {
|
|
64
|
+
fileName = fullPath.substring(quote_index + 1);
|
|
65
|
+
}
|
|
66
|
+
fs.stat(fullPath, (err, stats) => {
|
|
67
|
+
if (!stats || stats.isDirectory()) {
|
|
68
|
+
return this.sendStatus(404);
|
|
69
|
+
}
|
|
70
|
+
let size = stats.size;
|
|
71
|
+
var f = fs.createReadStream(fullPath);
|
|
72
|
+
this._res.writeHead(200, {
|
|
73
|
+
'Content-Type': mime.getType(fullPath) || 'application/octet-stream',
|
|
74
|
+
'Content-Disposition': 'attachment; filename=' + fileName,
|
|
75
|
+
'Content-Length': size
|
|
76
|
+
});
|
|
77
|
+
f.pipe(this._res);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
debugInfo(data) {
|
|
81
|
+
if (!this.debug) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
Log_1.gLog.info(data);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.Response = Response;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IWebServer = void 0;
|
|
4
|
+
const Engine_1 = require("./Engine/Engine");
|
|
5
|
+
const RazorJs_1 = require("./Engine/RazorJs");
|
|
6
|
+
const cgserver_1 = require("../../cgserver");
|
|
7
|
+
const EventTool_1 = require("../../Logic/EventTool");
|
|
8
|
+
const Log_1 = require("../../Logic/Log");
|
|
9
|
+
const IServerConfig_1 = require("../../Config/IServerConfig");
|
|
10
|
+
//实现对controller的手动注册
|
|
11
|
+
class IWebServer {
|
|
12
|
+
_engine = null;
|
|
13
|
+
/**
|
|
14
|
+
* 启动服务器
|
|
15
|
+
* @param server_index 这个是服务器的配置index
|
|
16
|
+
*/
|
|
17
|
+
async start(cfg, dbcfg) {
|
|
18
|
+
cgserver_1.gCgServer.addWebServer(this);
|
|
19
|
+
if (!cfg) {
|
|
20
|
+
Log_1.gLog.error("webserver 配置不存在,启动服务器失败");
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
if (!dbcfg && IServerConfig_1.gServerCfg) {
|
|
24
|
+
dbcfg = IServerConfig_1.gServerCfg.db;
|
|
25
|
+
}
|
|
26
|
+
if (dbcfg) {
|
|
27
|
+
await cgserver_1.gCgServer.initDb(dbcfg);
|
|
28
|
+
}
|
|
29
|
+
//初始化web引擎
|
|
30
|
+
this._engine = new Engine_1.Engine(cfg, new RazorJs_1.RazorJs());
|
|
31
|
+
this._engine.start();
|
|
32
|
+
this._registerController();
|
|
33
|
+
this._registerRouter();
|
|
34
|
+
EventTool_1.gEventTool.emit("web_server_init_done");
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
pause() {
|
|
38
|
+
this._engine.pause();
|
|
39
|
+
}
|
|
40
|
+
resume() {
|
|
41
|
+
this._engine.resume();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 注册控制器
|
|
45
|
+
* eg:GControllerMgr.registerController("Admin","System",SystemController)
|
|
46
|
+
*/
|
|
47
|
+
_registerController() {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 注册路由
|
|
51
|
+
*/
|
|
52
|
+
_registerRouter() {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.IWebServer = IWebServer;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IClientWebSocket = void 0;
|
|
4
|
+
const Log_1 = require("../../Logic/Log");
|
|
5
|
+
const IWebSocket_1 = require("./IWebSocket");
|
|
6
|
+
const IProtoFilter_1 = require("../ProtoFilter/IProtoFilter");
|
|
7
|
+
/**
|
|
8
|
+
* 服务器接收到的客户端的连接
|
|
9
|
+
* 客户端的session对象
|
|
10
|
+
*/
|
|
11
|
+
class IClientWebSocket extends IWebSocket_1.IWebSocket {
|
|
12
|
+
_server = null;
|
|
13
|
+
get server() {
|
|
14
|
+
return this._server;
|
|
15
|
+
}
|
|
16
|
+
constructor(server, protoType = IProtoFilter_1.EProtoType.Json, protoPath = "") {
|
|
17
|
+
super(protoType, protoPath);
|
|
18
|
+
this._server = server;
|
|
19
|
+
this._tipKey = this._server.name;
|
|
20
|
+
}
|
|
21
|
+
onClose(reasonCode, description) {
|
|
22
|
+
super.onClose(reasonCode, description);
|
|
23
|
+
this._server.removeServerWebSocketBySocketId(this._socket_id);
|
|
24
|
+
}
|
|
25
|
+
broadCast(data) {
|
|
26
|
+
if (!data) {
|
|
27
|
+
Log_1.gLog.info("Send Message warning:null data!");
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
Log_1.gLog.info("broadCast:----------------------------------");
|
|
31
|
+
Log_1.gLog.info(data);
|
|
32
|
+
let msg = this._protoFilter.encode(data);
|
|
33
|
+
this._server.broadCast(msg);
|
|
34
|
+
}
|
|
35
|
+
_onDecode(message, ...params) {
|
|
36
|
+
let msg = super._onDecode(message, "msgReq");
|
|
37
|
+
return msg;
|
|
38
|
+
}
|
|
39
|
+
_onEncode(data, ...params) {
|
|
40
|
+
let msg = super._onEncode(data, "msgRes");
|
|
41
|
+
return msg;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.IClientWebSocket = IClientWebSocket;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IRpc = exports.RpcMsg = void 0;
|
|
4
|
+
const IWebSocket_1 = require("./IWebSocket");
|
|
5
|
+
class RpcMsg extends IWebSocket_1.BaseMsg {
|
|
6
|
+
__rpcid = "";
|
|
7
|
+
__return = false;
|
|
8
|
+
/**
|
|
9
|
+
* 发送者分组
|
|
10
|
+
*/
|
|
11
|
+
from_group = "";
|
|
12
|
+
/**
|
|
13
|
+
* 发送者分组下的某个具体对象id
|
|
14
|
+
*/
|
|
15
|
+
from_id = "";
|
|
16
|
+
/**
|
|
17
|
+
* 必填,目的组
|
|
18
|
+
*/
|
|
19
|
+
to_group = "";
|
|
20
|
+
/**
|
|
21
|
+
* 目的分组下的某个具体对象id
|
|
22
|
+
*/
|
|
23
|
+
to_id = "";
|
|
24
|
+
/**
|
|
25
|
+
* 监听的对象,比如,发送给push服务器的,监听了10086的服务器listem="10086",listem,也可以理解为子group
|
|
26
|
+
*/
|
|
27
|
+
listen = "";
|
|
28
|
+
/**
|
|
29
|
+
* 消息携带的数据
|
|
30
|
+
*/
|
|
31
|
+
data = null;
|
|
32
|
+
}
|
|
33
|
+
exports.RpcMsg = RpcMsg;
|
|
34
|
+
class IRpc {
|
|
35
|
+
}
|
|
36
|
+
exports.IRpc = IRpc;
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IRpcClientWebSocket = void 0;
|
|
4
|
+
const IClientWebSocket_1 = require("./IClientWebSocket");
|
|
5
|
+
const Core_1 = require("../../Core/Core");
|
|
6
|
+
const Log_1 = require("../../Logic/Log");
|
|
7
|
+
const EventTool_1 = require("../../Logic/EventTool");
|
|
8
|
+
class IRpcClientWebSocket extends IClientWebSocket_1.IClientWebSocket {
|
|
9
|
+
/**
|
|
10
|
+
* 自己的身份
|
|
11
|
+
*/
|
|
12
|
+
_group = "";
|
|
13
|
+
_id = "";
|
|
14
|
+
//超时时间
|
|
15
|
+
_timeout = 3000;
|
|
16
|
+
_listens = {};
|
|
17
|
+
isListenning(listen) {
|
|
18
|
+
if (!listen) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
return !!this._listens[listen];
|
|
22
|
+
}
|
|
23
|
+
_genId(pre = "") {
|
|
24
|
+
return pre + "_" + Core_1.core.getUuid();
|
|
25
|
+
}
|
|
26
|
+
getNewMsg(cmd, errcode) {
|
|
27
|
+
let msg = super.getNewMsg(cmd, errcode);
|
|
28
|
+
msg.__rpcid = this._genId(cmd);
|
|
29
|
+
msg.from_group = this._group;
|
|
30
|
+
msg.from_id = this._id;
|
|
31
|
+
return msg;
|
|
32
|
+
}
|
|
33
|
+
toRetMsg(req_msg, data, errcode) {
|
|
34
|
+
let ret_msg = this.getNewMsg(req_msg.cmd, errcode);
|
|
35
|
+
//唯一标识必须保持一致
|
|
36
|
+
ret_msg.__return = true;
|
|
37
|
+
ret_msg.__rpcid = req_msg.__rpcid;
|
|
38
|
+
ret_msg.data = data;
|
|
39
|
+
ret_msg.from_group = req_msg.to_group;
|
|
40
|
+
ret_msg.from_id = this._id;
|
|
41
|
+
ret_msg.to_group = req_msg.from_group;
|
|
42
|
+
ret_msg.to_id = req_msg.from_id;
|
|
43
|
+
return ret_msg;
|
|
44
|
+
}
|
|
45
|
+
async callRemote(msg) {
|
|
46
|
+
if (!msg) {
|
|
47
|
+
Log_1.gLog.error("send null msg!");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (!msg.__rpcid) {
|
|
51
|
+
msg.__rpcid = this._genId(msg.cmd);
|
|
52
|
+
}
|
|
53
|
+
return new Promise((resolve, reject) => {
|
|
54
|
+
let handler = null;
|
|
55
|
+
let func = (jsonData) => {
|
|
56
|
+
if (handler) {
|
|
57
|
+
clearTimeout(handler);
|
|
58
|
+
handler = null;
|
|
59
|
+
}
|
|
60
|
+
resolve(jsonData);
|
|
61
|
+
};
|
|
62
|
+
handler = setTimeout(() => {
|
|
63
|
+
EventTool_1.gEventTool.off(msg.__rpcid, func);
|
|
64
|
+
resolve({ errcode: { id: 10086, des: "timeout" } });
|
|
65
|
+
}, 3000);
|
|
66
|
+
EventTool_1.gEventTool.once(msg.__rpcid, func);
|
|
67
|
+
super.send(msg);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
receive_init(req_msg) {
|
|
71
|
+
if (req_msg.__rpcid) {
|
|
72
|
+
req_msg.__return = true;
|
|
73
|
+
}
|
|
74
|
+
if (!req_msg.from_group) {
|
|
75
|
+
let ret_msg = this.toRetMsg(req_msg, req_msg.data, { id: 10004, des: "初始化消息必须带有identity" });
|
|
76
|
+
this.send(ret_msg);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
this._group = req_msg.from_group;
|
|
80
|
+
this._id = req_msg.from_id;
|
|
81
|
+
let ret_msg = this.toRetMsg(req_msg, null);
|
|
82
|
+
this.send(ret_msg);
|
|
83
|
+
}
|
|
84
|
+
receive_listen(req_msg) {
|
|
85
|
+
if (req_msg.__rpcid) {
|
|
86
|
+
req_msg.__return = true;
|
|
87
|
+
}
|
|
88
|
+
let data = req_msg.data;
|
|
89
|
+
if (!data || !Core_1.core.isArray(data)) {
|
|
90
|
+
let ret_msg = this.toRetMsg(req_msg, req_msg.data, { id: 10005, des: "listen data not correct must be string[]" });
|
|
91
|
+
this.send(ret_msg);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
for (let i = 0; i < data.length; i++) {
|
|
95
|
+
let listen = data[i];
|
|
96
|
+
if (!listen) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
this._listens[listen] = true;
|
|
100
|
+
}
|
|
101
|
+
let ret_msg = this.toRetMsg(req_msg, null);
|
|
102
|
+
this.send(ret_msg);
|
|
103
|
+
}
|
|
104
|
+
receive_unlisten(req_msg) {
|
|
105
|
+
if (req_msg.__rpcid) {
|
|
106
|
+
req_msg.__return = true;
|
|
107
|
+
}
|
|
108
|
+
let data = req_msg.data;
|
|
109
|
+
if (!data || !Core_1.core.isArray(data)) {
|
|
110
|
+
let ret_msg = this.toRetMsg(req_msg, req_msg.data, { id: 10005, des: "listen data not correct must be string[]" });
|
|
111
|
+
this.send(ret_msg);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
for (let i = 0; i < data.length; i++) {
|
|
115
|
+
let listen = data[i];
|
|
116
|
+
if (!listen) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
this._listens[listen] = undefined;
|
|
120
|
+
delete this._listens[listen];
|
|
121
|
+
}
|
|
122
|
+
let ret_msg = this.toRetMsg(req_msg, null);
|
|
123
|
+
this.send(ret_msg);
|
|
124
|
+
}
|
|
125
|
+
receive_other_all(msg) {
|
|
126
|
+
Log_1.gLog.error({ des: "no handle", msg });
|
|
127
|
+
}
|
|
128
|
+
async _onMessage(msg) {
|
|
129
|
+
if (msg.__return) {
|
|
130
|
+
let ret = this.filterMsg(msg);
|
|
131
|
+
if (!ret) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
EventTool_1.gEventTool.emit(msg.__rpcid, msg);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
super._onMessage(msg);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
exports.IRpcClientWebSocket = IRpcClientWebSocket;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IRpcServerWebSocket = void 0;
|
|
4
|
+
const _ = require("underscore");
|
|
5
|
+
const IServerWebSocket_1 = require("./IServerWebSocket");
|
|
6
|
+
const Log_1 = require("../../Logic/Log");
|
|
7
|
+
const EventTool_1 = require("../../Logic/EventTool");
|
|
8
|
+
class IRpcServerWebSocket extends IServerWebSocket_1.IServerWebSocket {
|
|
9
|
+
/**
|
|
10
|
+
* 自己的身份
|
|
11
|
+
*/
|
|
12
|
+
_group = "";
|
|
13
|
+
_id = "";
|
|
14
|
+
//超时时间
|
|
15
|
+
_timeout = 3000;
|
|
16
|
+
constructor(group, id, timeout = 3000) {
|
|
17
|
+
super();
|
|
18
|
+
this._group = group;
|
|
19
|
+
this._id = id;
|
|
20
|
+
this._timeout = timeout || 3000;
|
|
21
|
+
}
|
|
22
|
+
_genId(pre = "") {
|
|
23
|
+
return pre + "_" + Date.now() % 10000000000 + "_" + _.uniqueId() + _.random(9999999);
|
|
24
|
+
}
|
|
25
|
+
getNewMsg(cmd, errcode) {
|
|
26
|
+
let msg = super.getNewMsg(cmd, errcode);
|
|
27
|
+
msg.__rpcid = this._genId(cmd);
|
|
28
|
+
msg.from_group = this._group;
|
|
29
|
+
msg.from_id = this._id;
|
|
30
|
+
return msg;
|
|
31
|
+
}
|
|
32
|
+
toRetMsg(req_msg, data, errcode) {
|
|
33
|
+
let ret_msg = this.getNewMsg(req_msg.cmd, errcode);
|
|
34
|
+
//唯一标识必须保持一致
|
|
35
|
+
ret_msg.__return = true;
|
|
36
|
+
ret_msg.__rpcid = req_msg.__rpcid;
|
|
37
|
+
ret_msg.data = data;
|
|
38
|
+
ret_msg.from_group = this._group;
|
|
39
|
+
ret_msg.from_id = this._id;
|
|
40
|
+
ret_msg.to_group = req_msg.from_group;
|
|
41
|
+
ret_msg.to_id = req_msg.from_id;
|
|
42
|
+
return ret_msg;
|
|
43
|
+
}
|
|
44
|
+
async callRemote(msg) {
|
|
45
|
+
if (!msg) {
|
|
46
|
+
Log_1.gLog.error("send null msg!");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
let handler = null;
|
|
51
|
+
let func = (retRpcMsg) => {
|
|
52
|
+
if (handler) {
|
|
53
|
+
clearTimeout(handler);
|
|
54
|
+
handler = null;
|
|
55
|
+
}
|
|
56
|
+
resolve(retRpcMsg);
|
|
57
|
+
};
|
|
58
|
+
handler = setTimeout(() => {
|
|
59
|
+
EventTool_1.gEventTool.off(msg.__rpcid, func);
|
|
60
|
+
let error_msg = this.getNewMsg(msg.cmd, { id: 10086, des: "timeout" });
|
|
61
|
+
resolve(error_msg);
|
|
62
|
+
}, this._timeout);
|
|
63
|
+
EventTool_1.gEventTool.once(msg.__rpcid, func);
|
|
64
|
+
super.send(msg);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
receive_other_all(msg) {
|
|
68
|
+
Log_1.gLog.error({ des: "no handle", msg });
|
|
69
|
+
}
|
|
70
|
+
async _onMessage(msg) {
|
|
71
|
+
if (msg.__return) {
|
|
72
|
+
let ret = this.filterMsg(msg);
|
|
73
|
+
if (!ret) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
EventTool_1.gEventTool.emit(msg.__rpcid, msg);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
super._onMessage(msg);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.IRpcServerWebSocket = IRpcServerWebSocket;
|