cgserver 6.0.7 → 6.1.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.
Files changed (137) hide show
  1. package/dist/lib/AI/AiObject.js +10 -0
  2. package/dist/lib/AI/Astar.js +133 -0
  3. package/dist/lib/AI/BehaviorAI.js +307 -0
  4. package/dist/lib/AI/Entity.js +33 -0
  5. package/dist/lib/AI/Point.js +68 -0
  6. package/dist/lib/AI/TriggerMgr.js +201 -0
  7. package/dist/lib/Config/Config.js +37 -0
  8. package/dist/lib/Config/FrameworkConfig.js +234 -0
  9. package/dist/lib/Config/ServerConfig.js +18 -0
  10. package/dist/lib/Config/_error_.js +35 -0
  11. package/dist/lib/Core/Core.js +561 -0
  12. package/dist/lib/Core/Timer.js +116 -0
  13. package/dist/lib/Database/BaseMongoService.js +79 -0
  14. package/dist/lib/Database/BaseService.js +281 -0
  15. package/dist/lib/Database/Decorator/AutoIncrement.js +11 -0
  16. package/dist/lib/Database/Decorator/DBCache.js +64 -0
  17. package/dist/lib/Database/Decorator/NotNull.js +11 -0
  18. package/dist/lib/Database/Decorator/PrimaryKey.js +11 -0
  19. package/dist/lib/Database/Decorator/Property.js +61 -0
  20. package/dist/lib/Database/Decorator/Table.js +15 -0
  21. package/dist/lib/Database/Decorator/Type.js +20 -0
  22. package/dist/lib/Database/MSSqlManager.js +43 -0
  23. package/dist/lib/Database/MongoManager.js +401 -0
  24. package/dist/lib/Database/MysqlManager.js +180 -0
  25. package/dist/lib/Database/RedisManager.js +408 -0
  26. package/dist/lib/Logic/CacheTool.js +73 -0
  27. package/dist/lib/Logic/HttpTool.js +58 -0
  28. package/dist/lib/Logic/Log.js +77 -0
  29. package/dist/lib/Service/AccountService.js +473 -0
  30. package/dist/lib/Service/MongoAccountService.js +396 -0
  31. package/dist/lib/Service/MongoCacheService.js +27 -0
  32. package/dist/lib/Service/MongoUserService.js +93 -0
  33. package/dist/lib/Service/UserService.js +184 -0
  34. package/dist/lib/Service/ini.js +35 -0
  35. package/dist/lib/SocketServer/IClientWebSocket.js +71 -0
  36. package/dist/lib/SocketServer/IServerWebSocket.js +41 -0
  37. package/dist/lib/SocketServer/ISocketServer.js +190 -0
  38. package/dist/lib/SocketServer/IWebSocket.js +223 -0
  39. package/dist/lib/SocketServer/ProtoFilter/GoogleProtoFilter.js +57 -0
  40. package/dist/lib/SocketServer/ProtoFilter/IProtoFilter.js +8 -0
  41. package/dist/lib/SocketServer/ProtoFilter/JsonProtoFilter.js +29 -0
  42. package/dist/lib/SocketServer/ProtoFilter/ProtoFactory.js +31 -0
  43. package/dist/lib/ThirdParty/AlipayTool.js +122 -0
  44. package/dist/lib/ThirdParty/Alisms.js +46 -0
  45. package/dist/lib/ThirdParty/AppleTool.js +234 -0
  46. package/dist/lib/ThirdParty/EmailTool.js +33 -0
  47. package/dist/lib/ThirdParty/OpenSocial.js +32 -0
  48. package/dist/lib/ThirdParty/QQTool.js +115 -0
  49. package/dist/lib/ThirdParty/QiniuTool.js +21 -0
  50. package/dist/lib/ThirdParty/WechatOATool.js +61 -0
  51. package/dist/lib/ThirdParty/WechatTool.js +74 -0
  52. package/dist/lib/WebServer/Controller/BaseController.js +112 -0
  53. package/dist/lib/WebServer/Controller/BaseUserController.js +168 -0
  54. package/dist/lib/WebServer/Controller/MongoBaseUserController.js +168 -0
  55. package/dist/lib/WebServer/Decorator/AdminValidate.js +19 -0
  56. package/dist/lib/WebServer/Decorator/AuthorityValidate.js +22 -0
  57. package/dist/lib/WebServer/Decorator/CreatorValidate.js +19 -0
  58. package/dist/lib/WebServer/Decorator/JsonAdminValidate.js +15 -0
  59. package/dist/lib/WebServer/Decorator/JsonAuthorityValidate.js +20 -0
  60. package/dist/lib/WebServer/Decorator/JsonCreatorValidate.js +19 -0
  61. package/dist/lib/WebServer/Engine/ControllerManager.js +112 -0
  62. package/dist/lib/WebServer/Engine/Engine.js +135 -0
  63. package/dist/lib/WebServer/Engine/RazorJs.js +544 -0
  64. package/dist/lib/WebServer/Engine/Request.js +214 -0
  65. package/dist/lib/WebServer/Engine/Response.js +94 -0
  66. package/dist/lib/WebServer/IWebServer.js +49 -0
  67. package/dist/lib/cgserver.js +153 -0
  68. package/dist/{AI → types/AI}/AiObject.d.ts +0 -0
  69. package/dist/{AI → types/AI}/Astar.d.ts +0 -0
  70. package/dist/{AI → types/AI}/BehaviorAI.d.ts +0 -0
  71. package/dist/{AI → types/AI}/Entity.d.ts +0 -0
  72. package/dist/{AI → types/AI}/Point.d.ts +0 -0
  73. package/dist/{AI → types/AI}/TriggerMgr.d.ts +0 -0
  74. package/dist/{Config → types/Config}/Config.d.ts +0 -0
  75. package/dist/{Config → types/Config}/FrameworkConfig.d.ts +0 -0
  76. package/dist/{Config → types/Config}/ServerConfig.d.ts +0 -0
  77. package/dist/{Config → types/Config}/_error_.d.ts +0 -0
  78. package/dist/{Core → types/Core}/Core.d.ts +0 -0
  79. package/dist/{Core → types/Core}/Timer.d.ts +0 -0
  80. package/dist/{Database → types/Database}/BaseMongoService.d.ts +1 -1
  81. package/dist/{Database → types/Database}/BaseService.d.ts +0 -0
  82. package/dist/{Database → types/Database}/Decorator/AutoIncrement.d.ts +0 -0
  83. package/dist/{Database → types/Database}/Decorator/DBCache.d.ts +0 -0
  84. package/dist/{Database → types/Database}/Decorator/NotNull.d.ts +0 -0
  85. package/dist/{Database → types/Database}/Decorator/PrimaryKey.d.ts +0 -0
  86. package/dist/{Database → types/Database}/Decorator/Property.d.ts +0 -0
  87. package/dist/{Database → types/Database}/Decorator/Table.d.ts +0 -0
  88. package/dist/{Database → types/Database}/Decorator/Type.d.ts +0 -0
  89. package/dist/{Database → types/Database}/MSSqlManager.d.ts +0 -0
  90. package/dist/{Database → types/Database}/MongoManager.d.ts +1 -1
  91. package/dist/{Database → types/Database}/MysqlManager.d.ts +0 -0
  92. package/dist/{Database → types/Database}/RedisManager.d.ts +0 -0
  93. package/dist/{Logic → types/Logic}/CacheTool.d.ts +0 -0
  94. package/dist/{Logic → types/Logic}/HttpTool.d.ts +0 -0
  95. package/dist/{Logic → types/Logic}/Log.d.ts +0 -0
  96. package/dist/{Service → types/Service}/AccountService.d.ts +0 -0
  97. package/dist/{Service → types/Service}/MongoAccountService.d.ts +0 -0
  98. package/dist/{Service → types/Service}/MongoCacheService.d.ts +0 -0
  99. package/dist/{Service → types/Service}/MongoUserService.d.ts +0 -0
  100. package/dist/{Service → types/Service}/UserService.d.ts +0 -0
  101. package/dist/{Service → types/Service}/ini.d.ts +0 -0
  102. package/dist/{SocketServer → types/SocketServer}/IClientWebSocket.d.ts +0 -0
  103. package/dist/{SocketServer → types/SocketServer}/IServerWebSocket.d.ts +0 -0
  104. package/dist/{SocketServer → types/SocketServer}/ISocketServer.d.ts +0 -0
  105. package/dist/{SocketServer → types/SocketServer}/IWebSocket.d.ts +0 -0
  106. package/dist/{SocketServer → types/SocketServer}/ProtoFilter/GoogleProtoFilter.d.ts +0 -0
  107. package/dist/{SocketServer → types/SocketServer}/ProtoFilter/IProtoFilter.d.ts +0 -0
  108. package/dist/{SocketServer → types/SocketServer}/ProtoFilter/JsonProtoFilter.d.ts +0 -0
  109. package/dist/{SocketServer → types/SocketServer}/ProtoFilter/ProtoFactory.d.ts +0 -0
  110. package/dist/{ThirdParty → types/ThirdParty}/AlipayTool.d.ts +0 -0
  111. package/dist/{ThirdParty → types/ThirdParty}/Alisms.d.ts +0 -0
  112. package/dist/{ThirdParty → types/ThirdParty}/AppleTool.d.ts +0 -0
  113. package/dist/{ThirdParty → types/ThirdParty}/EmailTool.d.ts +0 -0
  114. package/dist/{ThirdParty → types/ThirdParty}/OpenSocial.d.ts +0 -0
  115. package/dist/{ThirdParty → types/ThirdParty}/QQTool.d.ts +0 -0
  116. package/dist/{ThirdParty → types/ThirdParty}/QiniuTool.d.ts +0 -0
  117. package/dist/{ThirdParty → types/ThirdParty}/WechatOATool.d.ts +0 -0
  118. package/dist/{ThirdParty → types/ThirdParty}/WechatTool.d.ts +0 -0
  119. package/dist/{WebServer → types/WebServer}/Controller/BaseController.d.ts +0 -0
  120. package/dist/{WebServer → types/WebServer}/Controller/BaseUserController.d.ts +0 -0
  121. package/dist/{WebServer → types/WebServer}/Controller/MongoBaseUserController.d.ts +0 -0
  122. package/dist/{WebServer → types/WebServer}/Decorator/AdminValidate.d.ts +0 -0
  123. package/dist/{WebServer → types/WebServer}/Decorator/AuthorityValidate.d.ts +0 -0
  124. package/dist/{WebServer → types/WebServer}/Decorator/CreatorValidate.d.ts +0 -0
  125. package/dist/{WebServer → types/WebServer}/Decorator/JsonAdminValidate.d.ts +0 -0
  126. package/dist/{WebServer → types/WebServer}/Decorator/JsonAuthorityValidate.d.ts +0 -0
  127. package/dist/{WebServer → types/WebServer}/Decorator/JsonCreatorValidate.d.ts +0 -0
  128. package/dist/{WebServer → types/WebServer}/Engine/ControllerManager.d.ts +0 -0
  129. package/dist/{WebServer → types/WebServer}/Engine/Engine.d.ts +0 -0
  130. package/dist/{WebServer → types/WebServer}/Engine/RazorJs.d.ts +0 -0
  131. package/dist/{WebServer → types/WebServer}/Engine/Request.d.ts +0 -0
  132. package/dist/{WebServer → types/WebServer}/Engine/Response.d.ts +0 -0
  133. package/dist/{WebServer → types/WebServer}/IWebServer.d.ts +0 -0
  134. package/dist/{cgserver.d.ts → types/cgserver.d.ts} +0 -0
  135. package/package.json +3 -3
  136. package/dist/Index.d.ts +0 -73
  137. package/dist/cgserver.js +0 -1037
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EAccountFrom = exports.EAccountState = exports.EUserState = exports.ERoleGroup = void 0;
4
+ var ERoleGroup;
5
+ (function (ERoleGroup) {
6
+ ERoleGroup[ERoleGroup["Creator"] = 1] = "Creator";
7
+ ERoleGroup[ERoleGroup["Admin"] = 2] = "Admin";
8
+ ERoleGroup[ERoleGroup["Proxy"] = 3] = "Proxy";
9
+ ERoleGroup[ERoleGroup["Common"] = 4] = "Common"; //普通成员
10
+ })(ERoleGroup = exports.ERoleGroup || (exports.ERoleGroup = {}));
11
+ var EUserState;
12
+ (function (EUserState) {
13
+ EUserState[EUserState["Ban"] = -1] = "Ban";
14
+ EUserState[EUserState["Waitting"] = 0] = "Waitting";
15
+ EUserState[EUserState["Normarl"] = 1] = "Normarl";
16
+ })(EUserState = exports.EUserState || (exports.EUserState = {}));
17
+ var EAccountState;
18
+ (function (EAccountState) {
19
+ EAccountState[EAccountState["Ban"] = -1] = "Ban";
20
+ EAccountState[EAccountState["Waitting"] = 0] = "Waitting";
21
+ EAccountState[EAccountState["Normarl"] = 1] = "Normarl";
22
+ })(EAccountState = exports.EAccountState || (exports.EAccountState = {}));
23
+ var EAccountFrom;
24
+ (function (EAccountFrom) {
25
+ EAccountFrom[EAccountFrom["Guest"] = 0] = "Guest";
26
+ EAccountFrom[EAccountFrom["OpenSocial"] = 1] = "OpenSocial";
27
+ EAccountFrom[EAccountFrom["WeChat"] = 2] = "WeChat";
28
+ EAccountFrom[EAccountFrom["QQ"] = 3] = "QQ";
29
+ EAccountFrom[EAccountFrom["Phone"] = 4] = "Phone";
30
+ EAccountFrom[EAccountFrom["Email"] = 5] = "Email";
31
+ EAccountFrom[EAccountFrom["Name"] = 6] = "Name";
32
+ EAccountFrom[EAccountFrom["QuickPhone"] = 7] = "QuickPhone";
33
+ EAccountFrom[EAccountFrom["Apple"] = 8] = "Apple";
34
+ EAccountFrom[EAccountFrom["Google"] = 9] = "Google";
35
+ })(EAccountFrom = exports.EAccountFrom || (exports.EAccountFrom = {}));
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IClientWebSocket = void 0;
4
+ const IWebSocket_1 = require("./IWebSocket");
5
+ const ws = require("websocket");
6
+ const Log_1 = require("../Logic/Log");
7
+ const IProtoFilter_1 = require("./ProtoFilter/IProtoFilter");
8
+ class IClientWebSocket extends IWebSocket_1.IWebSocket {
9
+ _host = "";
10
+ /**
11
+ * 连接的服务器地址
12
+ */
13
+ get host() {
14
+ return this._host;
15
+ }
16
+ _port = "";
17
+ /**
18
+ * 连接的服务器端口
19
+ */
20
+ get port() {
21
+ return this._port;
22
+ }
23
+ _need_close = false;
24
+ constructor(protoType = IProtoFilter_1.EProtoType.Json, protoPath = "") {
25
+ super(protoType, protoPath);
26
+ }
27
+ connect(domain, port) {
28
+ this._host = domain || this._host;
29
+ this._port = port || this._port;
30
+ this._connect();
31
+ }
32
+ _connect() {
33
+ let url = "ws://" + this._host + ":" + this._port + "/";
34
+ Log_1.GLog.info("Trying to connect to server : " + url);
35
+ let _ws = new ws.client();
36
+ _ws.on("connect", super.onConnect.bind(this));
37
+ _ws.on("connectFailed", this.onClose.bind(this));
38
+ _ws.connect(url, null, null, { cookie: "client=" + this._tipKey });
39
+ }
40
+ onOpen(e) {
41
+ super.onOpen(e);
42
+ Log_1.GLog.info("success to connect to " + this._host + ":" + this._port);
43
+ }
44
+ onClose(reasonCode, description) {
45
+ super.onClose(reasonCode, description);
46
+ if (!this._need_close) {
47
+ setTimeout(() => {
48
+ if (!this._need_close) {
49
+ this.connect(this._host, this._port);
50
+ }
51
+ }, 1000);
52
+ return true;
53
+ }
54
+ else {
55
+ return false;
56
+ }
57
+ }
58
+ close() {
59
+ this._need_close = true;
60
+ super.close();
61
+ }
62
+ _onDecode(message, ...params) {
63
+ let msg = super._onDecode(message, "msgRes");
64
+ return msg;
65
+ }
66
+ _onEncode(data, ...params) {
67
+ let msg = super._onEncode(data, "msgReq");
68
+ return msg;
69
+ }
70
+ }
71
+ exports.IClientWebSocket = IClientWebSocket;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IServerWebSocket = void 0;
4
+ const IWebSocket_1 = require("./IWebSocket");
5
+ const Log_1 = require("../Logic/Log");
6
+ const IProtoFilter_1 = require("./ProtoFilter/IProtoFilter");
7
+ class IServerWebSocket extends IWebSocket_1.IWebSocket {
8
+ _server = null;
9
+ get server() {
10
+ return this._server;
11
+ }
12
+ constructor(server, protoType = IProtoFilter_1.EProtoType.Json, protoPath = "") {
13
+ super(protoType, protoPath);
14
+ this._server = server;
15
+ this._tipKey = this._server.name;
16
+ }
17
+ onClose(reasonCode, description) {
18
+ super.onClose(reasonCode, description);
19
+ this._server.removeServerWebSocketBySocketId(this._socket_id);
20
+ }
21
+ broadCast(data) {
22
+ let serverWS = this._server.serverWebSocket;
23
+ if (!data) {
24
+ Log_1.GLog.info("Send Message warning:null data!");
25
+ return;
26
+ }
27
+ Log_1.GLog.info("broadCast:----------------------------------");
28
+ Log_1.GLog.info(data);
29
+ let msg = this._protoFilter.encode(data);
30
+ serverWS.broadcast(msg);
31
+ }
32
+ _onDecode(message, ...params) {
33
+ let msg = super._onDecode(message, "msgReq");
34
+ return msg;
35
+ }
36
+ _onEncode(data, ...params) {
37
+ let msg = super._onEncode(data, "msgRes");
38
+ return msg;
39
+ }
40
+ }
41
+ exports.IServerWebSocket = IServerWebSocket;
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ISocketServer = void 0;
4
+ const MysqlManager_1 = require("../Database/MysqlManager");
5
+ const RedisManager_1 = require("../Database/RedisManager");
6
+ const ws = require("websocket");
7
+ const Log_1 = require("./../Logic/Log");
8
+ const fs = require("fs");
9
+ const http = require("http");
10
+ const https = require("https");
11
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
12
+ const MongoManager_1 = require("../Database/MongoManager");
13
+ const MSSqlManager_1 = require("../Database/MSSqlManager");
14
+ class ISocketServer {
15
+ //服务器已被关闭
16
+ _is_closed = false;
17
+ get isClosed() {
18
+ return this._is_closed;
19
+ }
20
+ _code = -1; //服务器唯一编码
21
+ get code() {
22
+ return this._code;
23
+ }
24
+ set code(value) {
25
+ this._code = value;
26
+ }
27
+ _name = "";
28
+ get name() {
29
+ return this._name;
30
+ }
31
+ get fullServerName() {
32
+ return this._name + "@" + this._code;
33
+ }
34
+ //监听websocket
35
+ _web_socket = null;
36
+ get serverWebSocket() {
37
+ return this._web_socket;
38
+ }
39
+ //来自于用户的链接
40
+ _ws_clients = new Map();
41
+ _listen_port = 0;
42
+ get listenPort() {
43
+ return this._listen_port;
44
+ }
45
+ set listenPort(value) {
46
+ this._listen_port = value;
47
+ }
48
+ /**
49
+ * websocket can accepted protocol
50
+ */
51
+ _accepted_protocol = null;
52
+ //服务器管理相关
53
+ /*
54
+ item=servername:class
55
+ */
56
+ _name_vs_class = {};
57
+ registerWebSocketHandleClass(name, cls) {
58
+ if (!name || name == "") {
59
+ throw "registerWebSocketHandleClass name must be not null or empty!";
60
+ }
61
+ this._name_vs_class[name] = cls;
62
+ }
63
+ constructor(server_name) {
64
+ this._name = server_name;
65
+ }
66
+ removeServerWebSocketBySocketId(socketId) {
67
+ this._ws_clients[socketId] = null;
68
+ delete this._ws_clients[socketId];
69
+ }
70
+ async run() {
71
+ await MSSqlManager_1.GMSSqlMgr.init();
72
+ await MysqlManager_1.GMysqlMgr.init();
73
+ await RedisManager_1.GRedisMgr.init(FrameworkConfig_1.GFCfg.db.redis);
74
+ await MongoManager_1.GMongoMgr.init();
75
+ let code = await RedisManager_1.GRedisMgr.incr("server_code");
76
+ this._code = code;
77
+ setTimeout(this.initWebSocket.bind(this), 3000); //给数据库相关留一点时间
78
+ }
79
+ stop() {
80
+ this._is_closed = true;
81
+ this._web_socket.closeAllConnections();
82
+ }
83
+ /*
84
+ 把所有的客户端链接保存起来
85
+ 方便统计,广播等
86
+ */
87
+ addClient(client_server) {
88
+ this._ws_clients[client_server.socketId] = client_server;
89
+ }
90
+ isOriginAllowed(origin) {
91
+ return true;
92
+ }
93
+ initWebSocket(wss) {
94
+ let server = null;
95
+ if (wss) {
96
+ console.log("wss:---");
97
+ let options = {
98
+ key: fs.readFileSync("ssl/ssl2.key"),
99
+ cert: fs.readFileSync("ssl/ssl2.crt"),
100
+ //passphrase:'1234'//如果秘钥文件有密码的话,用这个属性设置密码
101
+ };
102
+ server = https.createServer(options, (request, response) => {
103
+ Log_1.GLog.info((new Date()) + 'wss Received request for ' + request.url);
104
+ response.writeHead(404);
105
+ response.end();
106
+ });
107
+ }
108
+ else {
109
+ server = http.createServer((request, response) => {
110
+ Log_1.GLog.info((new Date()) + 'ws Received request for ' + request.url);
111
+ response.writeHead(404);
112
+ response.end();
113
+ });
114
+ }
115
+ server.listen(this._listen_port, this.onListenning.bind(this));
116
+ this._web_socket = new ws.server({
117
+ httpServer: server,
118
+ // You should not use autoAcceptConnections for production
119
+ // applications, as it defeats all standard cross-origin protection
120
+ // facilities built into the protocol and the browser. You should
121
+ // *always* verify the connection's origin and decide whether or not
122
+ // to accept it.
123
+ autoAcceptConnections: false
124
+ });
125
+ this._web_socket.on('request', this.onRequest.bind(this));
126
+ this._web_socket.on('close', this.onClose.bind(this));
127
+ }
128
+ onClose(connection, reason, desc) {
129
+ }
130
+ onListenning() {
131
+ let info = (new Date()) + " Server " + this.fullServerName + " is listening on port " + this._listen_port;
132
+ Log_1.GLog.info(info);
133
+ console.log(info);
134
+ }
135
+ onRequest(req) {
136
+ if (this._is_closed) {
137
+ return;
138
+ }
139
+ let protocol = null;
140
+ if (req.requestedProtocols.length > 0) {
141
+ protocol = req.requestedProtocols[0];
142
+ }
143
+ let allowed = this.isOriginAllowed(req.origin);
144
+ if (!allowed) {
145
+ req.reject();
146
+ Log_1.GLog.info(' Connection from origin ' + req.origin + ' rejected.', true);
147
+ return;
148
+ }
149
+ try {
150
+ let conn = req.accept(this._accepted_protocol, req.origin);
151
+ if (!conn) {
152
+ Log_1.GLog.info(' protocol reject', true);
153
+ return;
154
+ }
155
+ Log_1.GLog.info((new Date()) + ' Connection accepted.');
156
+ let server_name = this._getServerNameByCookies(req.cookies);
157
+ this.createWebSocketObjectByProtocol(server_name, conn);
158
+ }
159
+ catch (e) {
160
+ Log_1.GLog.info(' protocol reject', true);
161
+ }
162
+ }
163
+ createWebSocketObjectByProtocol(server_name, _ws) {
164
+ server_name = server_name || "default";
165
+ let cls = this._name_vs_class[server_name];
166
+ if (!cls) {
167
+ Log_1.GLog.error("(createWebSocketObjectByProtocol in server(" + this.name + "))no this websocket handle class=" + server_name);
168
+ return null;
169
+ }
170
+ let ws_server = (new cls(this));
171
+ this.addClient(ws_server);
172
+ ws_server.onConnect(_ws);
173
+ return ws_server;
174
+ }
175
+ _getServerNameByCookies(cookies) {
176
+ let server_name = "";
177
+ if (!cookies) {
178
+ return server_name;
179
+ }
180
+ for (let index in cookies) {
181
+ let cookie = cookies[index];
182
+ if (cookie.name == "server") {
183
+ server_name = cookie.value;
184
+ break;
185
+ }
186
+ }
187
+ return server_name;
188
+ }
189
+ }
190
+ exports.ISocketServer = ISocketServer;
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IWebSocket = void 0;
4
+ const Log_1 = require("../Logic/Log");
5
+ const ProtoFactory_1 = require("./ProtoFilter/ProtoFactory");
6
+ const IProtoFilter_1 = require("./ProtoFilter/IProtoFilter");
7
+ const Core_1 = require("../Core/Core");
8
+ const FrameworkConfig_1 = require("../Config/FrameworkConfig");
9
+ const _ = require("underscore");
10
+ let WebSocketIdMgr = {
11
+ id: _.random(0, 99999999),
12
+ getNewID() {
13
+ return this.id++;
14
+ },
15
+ };
16
+ class IWebSocket {
17
+ _await = false;
18
+ get await() {
19
+ return this._await;
20
+ }
21
+ _debug_msg = false;
22
+ get debug_msg() {
23
+ return this._debug_msg;
24
+ }
25
+ set debug_msg(value) {
26
+ this._debug_msg = value;
27
+ }
28
+ _socket_id = 0;
29
+ get socketId() {
30
+ return this._socket_id;
31
+ }
32
+ _tipKey = "";
33
+ get tipKey() {
34
+ return this._tipKey;
35
+ }
36
+ _ws = null;
37
+ _protoType = IProtoFilter_1.EProtoType.Json;
38
+ _protoFilter = null;
39
+ _protoPath = "";
40
+ _ip = null;
41
+ get remoteHost() {
42
+ if (!this._ip) {
43
+ this._ip = this._ws.remoteAddress;
44
+ this._ip = this._ip.substring(this._ip.lastIndexOf(":") + 1);
45
+ }
46
+ return this._ip;
47
+ }
48
+ get connected() {
49
+ if (this._ws
50
+ && this._ws.connected == true) {
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ constructor(protoType = IProtoFilter_1.EProtoType.Json, protoPath = "") {
56
+ this._debug_msg = FrameworkConfig_1.GFCfg.debug_msg;
57
+ this._socket_id = WebSocketIdMgr.getNewID();
58
+ this._protoType = protoType;
59
+ this._protoPath = protoPath;
60
+ }
61
+ getNewMsg(cmd, errcode) {
62
+ let msg = {
63
+ cmd: cmd,
64
+ errcode: errcode,
65
+ servertime: new Date().getTime()
66
+ };
67
+ return msg;
68
+ }
69
+ receive_heartbeat(jsonData) {
70
+ this.send_heartbeat();
71
+ }
72
+ send_heartbeat() {
73
+ let msg = this.getNewMsg("heartbeat");
74
+ this.send(msg);
75
+ }
76
+ onConnect(_ws) {
77
+ this._ws = _ws;
78
+ if (!this._protoFilter) {
79
+ this._protoFilter = ProtoFactory_1.GProtoFactory.createFilter(this._protoType);
80
+ this._protoFilter.init(this._protoPath);
81
+ }
82
+ this._ws.on("message", this.onMessage.bind(this));
83
+ this._ws.on("error", this.onError.bind(this));
84
+ this._ws.on("close", this.onClose.bind(this));
85
+ this.onOpen();
86
+ }
87
+ _msgs = [];
88
+ onMessage(message) {
89
+ try {
90
+ let msg = this._onDecode(message);
91
+ if (this._await) {
92
+ this._msgs.push(msg);
93
+ if (!this._run_await) {
94
+ this._awaitMessages();
95
+ }
96
+ }
97
+ else {
98
+ this._onMessage(msg);
99
+ }
100
+ }
101
+ catch (e) {
102
+ Log_1.GLog.error('Received Message Handle Error: ' + e);
103
+ }
104
+ }
105
+ _onDecode(message, ...params) {
106
+ let msg = null;
107
+ if (message.type === 'utf8') {
108
+ msg = this._protoFilter.decode(message.utf8Data, ...params);
109
+ }
110
+ else if (message.type === 'binary') {
111
+ msg = this._protoFilter.decode(message.binaryData, ...params);
112
+ }
113
+ return msg;
114
+ }
115
+ _onEncode(data, ...params) {
116
+ let msg = this._protoFilter.encode(data, ...params);
117
+ return msg;
118
+ }
119
+ _run_await = false;
120
+ async _awaitMessages() {
121
+ this._run_await = true;
122
+ while (this._msgs.length > 0) {
123
+ let msg = this._msgs.shift();
124
+ await this._onMessage(msg);
125
+ }
126
+ this._run_await = false;
127
+ }
128
+ /**
129
+ * 过滤消息,每个消息处理之前调用
130
+ * @param jsonData
131
+ * @returns
132
+ */
133
+ filterMsg(jsonData) {
134
+ if (this._debug_msg
135
+ && jsonData
136
+ && jsonData.cmd != "heartbeat") {
137
+ Log_1.GLog.info(this.tipKey + " receive:--------", true);
138
+ Log_1.GLog.info(jsonData, true);
139
+ }
140
+ if (!jsonData.cmd || jsonData.cmd == "") {
141
+ Log_1.GLog.error('Received Message warning: no cmd param,data=');
142
+ Log_1.GLog.error(jsonData);
143
+ return false;
144
+ }
145
+ return true;
146
+ }
147
+ async _onMessage(data) {
148
+ let jsonData = data;
149
+ let ret = this.filterMsg(jsonData);
150
+ if (!ret) {
151
+ return;
152
+ }
153
+ else if (!this["receive_" + jsonData.cmd]) {
154
+ if (this["receive_other_all"]) {
155
+ try {
156
+ await this["receive_other_all"](jsonData); //默认支持其他所有处理消息
157
+ }
158
+ catch (e) {
159
+ if (e && e.stack) {
160
+ Log_1.GLog.error(e.stack);
161
+ }
162
+ else {
163
+ Log_1.GLog.error(e + " msg:data=" + JSON.stringify(jsonData));
164
+ }
165
+ }
166
+ }
167
+ else {
168
+ Log_1.GLog.error('Received Message warning: no cmd handle,cmd=' + jsonData.cmd);
169
+ }
170
+ }
171
+ else {
172
+ try {
173
+ await this["receive_" + jsonData.cmd](jsonData);
174
+ }
175
+ catch (e) {
176
+ if (e && e.stack) {
177
+ Log_1.GLog.error("error msg:data=" + JSON.stringify(jsonData) + "\n" + e.stack);
178
+ }
179
+ else {
180
+ Log_1.GLog.error(e + " msg:data=" + JSON.stringify(jsonData));
181
+ }
182
+ }
183
+ }
184
+ }
185
+ onOpen(e) {
186
+ }
187
+ onError(e) {
188
+ Log_1.GLog.info("onError:" + e.message);
189
+ }
190
+ onClose(reasonCode, description) {
191
+ Log_1.GLog.info("onClose resonCode=" + reasonCode + " des=" + description);
192
+ }
193
+ send(data) {
194
+ if (!this.connected) {
195
+ return;
196
+ }
197
+ if (!data) {
198
+ Log_1.GLog.error("Send Message warning:null data!");
199
+ return;
200
+ }
201
+ if (this._debug_msg
202
+ && data.cmd != "heartbeat") {
203
+ Log_1.GLog.info(this.tipKey + " send:-----------------------------------", true);
204
+ Log_1.GLog.info(data, true);
205
+ }
206
+ let msg = this._onEncode(data);
207
+ this._ws.send(msg);
208
+ }
209
+ close() {
210
+ this._ws.close();
211
+ }
212
+ getServerNameFromCmd(cmd) {
213
+ if (!cmd || !Core_1.core.isString(cmd)) {
214
+ return null;
215
+ }
216
+ let index = cmd.indexOf("_");
217
+ if (index <= 0) {
218
+ return null;
219
+ }
220
+ return cmd.substring(0, index);
221
+ }
222
+ }
223
+ exports.IWebSocket = IWebSocket;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GoogleProtoFilter = void 0;
4
+ const Log_1 = require("../../Logic/Log");
5
+ const protobufjs = require("protobufjs");
6
+ class GoogleProtoFilter {
7
+ _root = new protobufjs.Root();
8
+ _inited = false;
9
+ init(path) {
10
+ if (this._inited) {
11
+ return;
12
+ }
13
+ this._inited = true;
14
+ try {
15
+ this._root.loadSync(path, { keepCase: true });
16
+ }
17
+ catch (e) {
18
+ Log_1.GLog.error(e);
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ encode(data, root) {
24
+ let msg = { cmd: data.cmd };
25
+ msg[msg.cmd] = data;
26
+ msg[msg.cmd].cmd = undefined;
27
+ msg["errcode"] = data.errcode;
28
+ msg["tip"] = data.tip;
29
+ data.errcode = undefined;
30
+ delete data.errcode;
31
+ delete msg[msg.cmd].cmd;
32
+ let body = this._root.lookupType(root);
33
+ var errMsg = body.verify(msg);
34
+ if (errMsg)
35
+ throw Error(errMsg);
36
+ var msgBody = body.create(msg);
37
+ var bufferBody = body.encode(msgBody).finish();
38
+ return bufferBody;
39
+ }
40
+ decode(data, root) {
41
+ let body = this._root.lookupType(root);
42
+ if (!body) {
43
+ Log_1.GLog.info("proto body not in proto(!" + root + ")");
44
+ return null;
45
+ }
46
+ let msgBody = body.decode(data);
47
+ if (!msgBody) {
48
+ Log_1.GLog.info("proto body decode wrong!");
49
+ return null;
50
+ }
51
+ let objBody = body.toObject(msgBody);
52
+ let obj = objBody[objBody.cmd];
53
+ obj.cmd = objBody.cmd;
54
+ return obj;
55
+ }
56
+ }
57
+ exports.GoogleProtoFilter = GoogleProtoFilter;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EProtoType = void 0;
4
+ var EProtoType;
5
+ (function (EProtoType) {
6
+ EProtoType[EProtoType["Json"] = 1] = "Json";
7
+ EProtoType[EProtoType["GoogleProtoBuffer"] = 2] = "GoogleProtoBuffer";
8
+ })(EProtoType = exports.EProtoType || (exports.EProtoType = {}));
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.JsonProtoFilter = void 0;
4
+ const Core_1 = require("../../Core/Core");
5
+ const Log_1 = require("../../Logic/Log");
6
+ class JsonProtoFilter {
7
+ init(path) {
8
+ return true;
9
+ }
10
+ encode(data) {
11
+ if (!Core_1.core.isString(data)) {
12
+ data = JSON.stringify(data);
13
+ }
14
+ return data;
15
+ }
16
+ decode(data) {
17
+ try {
18
+ if (Core_1.core.isString(data)) {
19
+ data = JSON.parse(data);
20
+ }
21
+ }
22
+ catch (e) {
23
+ Log_1.GLog.error("decode json data Failed-----data=" + data);
24
+ return;
25
+ }
26
+ return data;
27
+ }
28
+ }
29
+ exports.JsonProtoFilter = JsonProtoFilter;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GProtoFactory = void 0;
4
+ const GoogleProtoFilter_1 = require("./GoogleProtoFilter");
5
+ const JsonProtoFilter_1 = require("./JsonProtoFilter");
6
+ const IProtoFilter_1 = require("./IProtoFilter");
7
+ exports.GProtoFactory = null;
8
+ class ProtoFactory {
9
+ _filters = new Map();
10
+ createFilter(type) {
11
+ let filter = this._filters.get(type);
12
+ if (filter) {
13
+ return filter;
14
+ }
15
+ switch (type) {
16
+ case IProtoFilter_1.EProtoType.GoogleProtoBuffer:
17
+ {
18
+ filter = new GoogleProtoFilter_1.GoogleProtoFilter();
19
+ break;
20
+ }
21
+ default:
22
+ {
23
+ filter = new JsonProtoFilter_1.JsonProtoFilter();
24
+ break;
25
+ }
26
+ }
27
+ this._filters.set(type, filter);
28
+ return filter;
29
+ }
30
+ }
31
+ exports.GProtoFactory = new ProtoFactory();