diff --git a/assets/main.scene b/assets/main.scene index 32fbf36..a09b4ef 100644 --- a/assets/main.scene +++ b/assets/main.scene @@ -227,7 +227,7 @@ "_priority": 1073741824, "_fov": 45, "_fovAxis": 0, - "_orthoHeight": 409.2789968652038, + "_orthoHeight": 360, "_near": 1, "_far": 2000, "_color": { diff --git a/assets/script/Main.ts b/assets/script/Main.ts index 81f29bd..6a73142 100644 --- a/assets/script/Main.ts +++ b/assets/script/Main.ts @@ -2,7 +2,7 @@ * @Author: dgflash * @Date: 2021-07-03 16:13:17 * @LastEditors: dgflash - * @LastEditTime: 2022-04-18 11:50:36 + * @LastEditTime: 2022-04-21 15:06:55 */ import { setDisplayStats, _decorator } from 'cc'; import { DEBUG } from 'cc/env'; diff --git a/assets/script/core/libs/net-protocol.meta b/assets/script/core/libs/net-protocol.meta new file mode 100644 index 0000000..1c76679 --- /dev/null +++ b/assets/script/core/libs/net-protocol.meta @@ -0,0 +1,12 @@ +{ + "ver": "1.1.0", + "importer": "directory", + "imported": true, + "uuid": "c6f01f2e-ad3d-44c8-a95a-f1671636b1a4", + "files": [], + "subMetas": {}, + "userData": { + "compressionType": {}, + "isRemoteBundle": {} + } +} diff --git a/assets/script/core/libs/pako.min.js b/assets/script/core/libs/net-protocol/pako.min.js similarity index 100% rename from assets/script/core/libs/pako.min.js rename to assets/script/core/libs/net-protocol/pako.min.js diff --git a/assets/script/core/libs/pako.min.js.meta b/assets/script/core/libs/net-protocol/pako.min.js.meta similarity index 100% rename from assets/script/core/libs/pako.min.js.meta rename to assets/script/core/libs/net-protocol/pako.min.js.meta diff --git a/assets/script/core/network/NetInterface.ts b/assets/script/core/network/NetInterface.ts index 4a010ce..9eb09fe 100644 --- a/assets/script/core/network/NetInterface.ts +++ b/assets/script/core/network/NetInterface.ts @@ -1,4 +1,3 @@ - /* * 网络相关接口定义 */ @@ -21,12 +20,16 @@ export interface IRequestProtocol { data?: any; } -/** 相应协议 */ +/** 响应协议 */ export interface IResponseProtocol { + /** 响应协议状态码 */ code: number, + /** 数据是否压缩 */ + isCompress: boolean, + /** 协议数据 */ data?: any, - callback?: string, - isCompress: boolean + /** 协议回调方法名 */ + callback?: string } /** 回调对象 */ @@ -44,71 +47,20 @@ export interface RequestObject { /** 协议辅助接口 */ export interface IProtocolHelper { - getHeadlen(): number; // 返回包头长度 - getHearbeat(): NetData; // 返回一个心跳包 - getPackageLen(msg: NetData): number; // 返回整个包的长度 - checkResponsePackage(msg: IResponseProtocol): boolean; // 检查包数据是否合法(避免客户端报错崩溃) - handlerRequestPackage(reqProtocol: IRequestProtocol): string; // 处理请求包数据 - handlerResponsePackage(respProtocol: IResponseProtocol): boolean; // 处理响应包数据 - getPackageId(msg: IResponseProtocol): string; // 返回包的id或协议类型 -} - -var unzip = function (str: string) { - let charData = str.split('').map(function (x) { - return x.charCodeAt(0); - }); - let binData = new Uint8Array(charData); - //@ts-ignore - let data = pako.inflate(binData, { to: 'string' }); - return data; -} - -var zip = function (str: string) { - //@ts-ignore - let binaryString = pako.gzip(str, { to: 'string' }); - return binaryString; -} - -/** 默认字符串协议对象 */ -export class DefStringProtocol implements IProtocolHelper { - getHeadlen(): number { - return 0; - } - getHearbeat(): NetData { - return ""; - } - getPackageLen(msg: NetData): number { - return msg.toString().length; - } - checkResponsePackage(respProtocol: IResponseProtocol): boolean { - return true; - } - - handlerResponsePackage(respProtocol: IResponseProtocol): boolean { - if (respProtocol.code == 1) { - if (respProtocol.isCompress) { - respProtocol.data = unzip(respProtocol.data); - } - respProtocol.data = JSON.parse(respProtocol.data); - - return true; - } - else { - return false; - } - } - - handlerRequestPackage(reqProtocol: IRequestProtocol): string { - var rspCmd = reqProtocol.action + "_" + reqProtocol.method;; - reqProtocol.callback = rspCmd; - if (reqProtocol.isCompress) { - reqProtocol.data = zip(reqProtocol.data); - } - return rspCmd; - } - getPackageId(respProtocol: IResponseProtocol): string { - return respProtocol.callback!; - } + /** 返回包头长度 */ + getHeadlen(): number; + /** 返回一个心跳包 */ + getHearbeat(): NetData; + /** 返回整个包的长度 */ + getPackageLen(msg: NetData): number; + /** 检查包数据是否合法(避免客户端报错崩溃) */ + checkResponsePackage(msg: IResponseProtocol): boolean; + /** 处理请求包数据 */ + handlerRequestPackage(reqProtocol: IRequestProtocol): string; + /** 处理响应包数据 */ + handlerResponsePackage(respProtocol: IResponseProtocol): boolean; + /** 返回包的id或协议类型 */ + getPackageId(msg: IResponseProtocol): string; } export type SocketFunc = (event: any) => void; diff --git a/assets/script/core/network/NetNode.ts b/assets/script/core/network/NetNode.ts index 11556bb..196cf9d 100644 --- a/assets/script/core/network/NetNode.ts +++ b/assets/script/core/network/NetNode.ts @@ -182,6 +182,7 @@ export class NetNode { this.resetHearbeatTimer(); // 触发消息执行 let rspCmd = this._protocolHelper!.getPackageId(json); + Logger.logNet(`接受到命令【${rspCmd}】的消息`); // 优先触发request队列 if (this._requests.length > 0) { @@ -290,7 +291,6 @@ export class NetNode { /** 发起请求,并进入缓存列表 */ public request(reqProtocol: IRequestProtocol, rspObject: CallbackObject, showTips: boolean = true, force: boolean = false) { var rspCmd = this._protocolHelper!.handlerRequestPackage(reqProtocol); - this.base_request(reqProtocol, rspCmd, rspObject, showTips, force); } @@ -315,7 +315,9 @@ export class NetNode { if (this._state == NetNodeState.Working || force) { this._socket!.send(buf); } + Logger.logNet(`队列命令为【${rspCmd}】的请求,等待请求数据的回调`); + // 进入发送缓存列表 this._requests.push({ buffer: buf, rspCmd, rspObject diff --git a/assets/script/core/network/NetProtocolPako.ts b/assets/script/core/network/NetProtocolPako.ts new file mode 100644 index 0000000..3d6b0b3 --- /dev/null +++ b/assets/script/core/network/NetProtocolPako.ts @@ -0,0 +1,69 @@ +/* + * @Author: dgflash + * @Date: 2022-04-21 13:45:51 + * @LastEditors: dgflash + * @LastEditTime: 2022-04-21 13:51:33 + */ +import { IProtocolHelper, IRequestProtocol, IResponseProtocol, NetData } from "./NetInterface"; + +var unzip = function (str: string) { + let charData = str.split('').map(function (x) { + return x.charCodeAt(0); + }); + let binData = new Uint8Array(charData); + //@ts-ignore + let data = pako.inflate(binData, { to: 'string' }); + return data; +} + +var zip = function (str: string) { + //@ts-ignore + let binaryString = pako.gzip(str, { to: 'string' }); + return binaryString; +} + +/** Pako.js 数据压缩协议 */ +export class NetProtocolPako implements IProtocolHelper { + getHeadlen(): number { + return 0; + } + + getHearbeat(): NetData { + return ""; + } + + getPackageLen(msg: NetData): number { + return msg.toString().length; + } + + checkResponsePackage(respProtocol: IResponseProtocol): boolean { + return true; + } + + handlerResponsePackage(respProtocol: IResponseProtocol): boolean { + if (respProtocol.code == 1) { + if (respProtocol.isCompress) { + respProtocol.data = unzip(respProtocol.data); + } + respProtocol.data = JSON.parse(respProtocol.data); + + return true; + } + else { + return false; + } + } + + handlerRequestPackage(reqProtocol: IRequestProtocol): string { + var rspCmd = reqProtocol.action + "_" + reqProtocol.method; + reqProtocol.callback = rspCmd; + if (reqProtocol.isCompress) { + reqProtocol.data = zip(reqProtocol.data); + } + return rspCmd; + } + + getPackageId(respProtocol: IResponseProtocol): string { + return respProtocol.callback!; + } +} \ No newline at end of file diff --git a/assets/script/core/network/NetProtocolPako.ts.meta b/assets/script/core/network/NetProtocolPako.ts.meta new file mode 100644 index 0000000..4577090 --- /dev/null +++ b/assets/script/core/network/NetProtocolPako.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "88ae0948-8390-4559-bd4e-d44f3f12dc22", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/core/network/NetProtocolProtobuf.ts b/assets/script/core/network/NetProtocolProtobuf.ts new file mode 100644 index 0000000..c37c56c --- /dev/null +++ b/assets/script/core/network/NetProtocolProtobuf.ts @@ -0,0 +1,53 @@ +/* + * @Author: dgflash + * @Date: 2022-04-21 13:48:44 + * @LastEditors: dgflash + * @LastEditTime: 2022-04-21 14:11:25 + */ +import { IProtocolHelper, IRequestProtocol, IResponseProtocol, NetData } from "./NetInterface"; + +/** Protobuf.js 数据压缩协议 */ +export class NetProtocolProtobuf implements IProtocolHelper { + getHeadlen(): number { + return 0; + } + + getHearbeat(): NetData { + return ""; + } + + getPackageLen(msg: NetData): number { + return msg.toString().length; + } + + checkResponsePackage(respProtocol: IResponseProtocol): boolean { + return true; + } + + handlerResponsePackage(respProtocol: IResponseProtocol): boolean { + if (respProtocol.code == 1) { + if (respProtocol.isCompress) { + // respProtocol.data + } + respProtocol.data = JSON.parse(respProtocol.data); + + return true; + } + else { + return false; + } + } + + handlerRequestPackage(reqProtocol: IRequestProtocol): string { + var rspCmd = reqProtocol.action + "_" + reqProtocol.method; + reqProtocol.callback = rspCmd; + if (reqProtocol.isCompress) { + // reqProtocol.data + } + return rspCmd; + } + + getPackageId(respProtocol: IResponseProtocol): string { + return respProtocol.callback!; + } +} \ No newline at end of file diff --git a/assets/script/core/network/NetProtocolProtobuf.ts.meta b/assets/script/core/network/NetProtocolProtobuf.ts.meta new file mode 100644 index 0000000..5089d7b --- /dev/null +++ b/assets/script/core/network/NetProtocolProtobuf.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.23", + "importer": "typescript", + "imported": true, + "uuid": "5714abb2-1adb-4e4a-b397-795b2f200533", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/script/game/common/net/NetChannelManager.ts b/assets/script/game/common/net/NetChannelManager.ts index f5c4e18..da29301 100644 --- a/assets/script/game/common/net/NetChannelManager.ts +++ b/assets/script/game/common/net/NetChannelManager.ts @@ -1,10 +1,11 @@ /* * @Date: 2021-08-12 09:33:37 - * @LastEditors: H.Joeson - * @LastEditTime: 2021-11-25 15:49:50 + * @LastEditors: dgflash + * @LastEditTime: 2022-04-21 14:08:46 */ -import { DefStringProtocol, NetData } from "../../../core/network/NetInterface"; +import { NetData } from "../../../core/network/NetInterface"; import { NetManager } from "../../../core/network/NetManager"; +import { NetProtocolPako } from "../../../core/network/NetProtocolPako"; import { WebSock } from "../../../core/network/WebSock"; import { netConfig } from "./NetConfig"; import { NetGameTips } from "./NetGameTips"; @@ -16,7 +17,7 @@ export enum NetChannelType { } /** 游戏服务器心跳协议 */ -class GameProtocol extends DefStringProtocol { +class GameProtocol extends NetProtocolPako { /** 心跳协议 */ getHearbeat(): NetData { return `{"action":"LoginAction","method":"heart","data":"null","isCompress":false,"channelid":${netConfig.channelid},"callback":"LoginAction_heart"}`; @@ -48,5 +49,4 @@ export class NetChannelManager { } } -export var netChannel = new NetChannelManager(); - +export var netChannel = new NetChannelManager(); \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index d39c747..b496c90 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -4,6 +4,19 @@ "lockfileVersion": 2, "requires": true, "packages": { + "node_modules/@types/buffers": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@types/buffers/-/buffers-0.1.31.tgz", + "integrity": "sha512-wEZBb3o0Kh5RAj3V172vJCcxaCV8C2HJ7YLBBlG5Mwue0g4uRg5LWv8C6ap8MyFbXE6UbYEuvtHY7oTWAPeXEw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", + "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==" + }, "node_modules/ky": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/ky/-/ky-0.30.0.tgz", diff --git a/package-lock.json b/package-lock.json index 04cff9f..b88164b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,28 @@ "": { "version": "3.4.2", "dependencies": { + "@types/buffers": "^0.1.31", "ky": "^0.30.0", "nanoid": "^3.3.2", "seedrandom": "^3.0.5" + }, + "devDependencies": { + "@types/node": "^17.0.25" } }, + "node_modules/@types/buffers": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@types/buffers/-/buffers-0.1.31.tgz", + "integrity": "sha512-wEZBb3o0Kh5RAj3V172vJCcxaCV8C2HJ7YLBBlG5Mwue0g4uRg5LWv8C6ap8MyFbXE6UbYEuvtHY7oTWAPeXEw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", + "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==" + }, "node_modules/ky": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/ky/-/ky-0.30.0.tgz", @@ -41,6 +58,19 @@ } }, "dependencies": { + "@types/buffers": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@types/buffers/-/buffers-0.1.31.tgz", + "integrity": "sha512-wEZBb3o0Kh5RAj3V172vJCcxaCV8C2HJ7YLBBlG5Mwue0g4uRg5LWv8C6ap8MyFbXE6UbYEuvtHY7oTWAPeXEw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "17.0.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz", + "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==" + }, "ky": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/ky/-/ky-0.30.0.tgz", diff --git a/package.json b/package.json index 52b45d8..ef01fd2 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,12 @@ "uuid": "c30b28da-749e-479b-bcb6-cecd8d7be9e3", "version": "3.4.2", "dependencies": { + "@types/buffers": "^0.1.31", "ky": "^0.30.0", "nanoid": "^3.3.2", "seedrandom": "^3.0.5" + }, + "devDependencies": { + "@types/node": "^17.0.25" } }