64 lines
1.8 KiB
Plaintext
64 lines
1.8 KiB
Plaintext
|
|
/*
|
||
|
|
文件名:Socket.nut
|
||
|
|
路径:User/Socket/Socket.nut
|
||
|
|
创建日期:2024-12-01 14:47
|
||
|
|
文件用途:网络通信
|
||
|
|
*/
|
||
|
|
class MySocket extends Socket {
|
||
|
|
|
||
|
|
//字符串包处理逻辑
|
||
|
|
PackHandler = null;
|
||
|
|
//数据流包处理逻辑
|
||
|
|
PackBinaryHandler = null;
|
||
|
|
|
||
|
|
State = 0;
|
||
|
|
|
||
|
|
constructor(Ip, Port) {
|
||
|
|
//初始化处理逻辑Map
|
||
|
|
PackHandler = {};
|
||
|
|
PackBinaryHandler = {};
|
||
|
|
|
||
|
|
//先执行父类的构造函数
|
||
|
|
base.constructor();
|
||
|
|
|
||
|
|
//绑定回调函数
|
||
|
|
BindFunc(SOCKET_CALLBACK_TYPE.onConnect, function() {
|
||
|
|
State = 1;
|
||
|
|
}.bindenv(this));
|
||
|
|
BindFunc(SOCKET_CALLBACK_TYPE.onReceive, function(PacketId, Str) {
|
||
|
|
//如果存在对应处理逻辑
|
||
|
|
if (PackHandler.rawin(PacketId)) {
|
||
|
|
//将字符画序列化json
|
||
|
|
local Jso = Json.Decode(Str);
|
||
|
|
PackHandler[PacketId](Jso);
|
||
|
|
}
|
||
|
|
}.bindenv(this));
|
||
|
|
BindFunc(SOCKET_CALLBACK_TYPE.onReceiveBinary, function(PacketId, Blob_Obj) {
|
||
|
|
//如果存在对应处理逻辑
|
||
|
|
if (PackBinaryHandler.rawin(PacketId)) {
|
||
|
|
PackBinaryHandler[PacketId](Blob_Obj);
|
||
|
|
}
|
||
|
|
}.bindenv(this));
|
||
|
|
|
||
|
|
Connect(Ip, Port, false);
|
||
|
|
//注册自己到全局
|
||
|
|
getroottable()._MySocket_ <- this;
|
||
|
|
}
|
||
|
|
|
||
|
|
//注册字符串包处理逻辑
|
||
|
|
function RegisterHandler(PacketId, Func) {
|
||
|
|
getroottable()._MySocket_.PackHandler.rawset(PacketId, Func);
|
||
|
|
}
|
||
|
|
|
||
|
|
//注册数据流包处理逻辑
|
||
|
|
function RegisterBinaryHandler(PacketId, Func) {
|
||
|
|
getroottable()._MySocket_.PackBinaryHandler.rawset(PacketId, Func);
|
||
|
|
}
|
||
|
|
|
||
|
|
//发包
|
||
|
|
function Send(PacketId, Jso) {
|
||
|
|
//将json序列化字符串
|
||
|
|
local Str = Json.Encode(Jso);
|
||
|
|
Socket_SendPacket(getroottable()._MySocket_.Client, PacketId, Str);
|
||
|
|
}
|
||
|
|
}
|