DOF/sqr/User/Socket/Socket.nut

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);
}
}