153 lines
4.5 KiB
Plaintext
153 lines
4.5 KiB
Plaintext
/*
|
|
文件名:SocketBase.nut
|
|
路径:BaseClass/Socket/SocketBase.nut
|
|
创建日期:2024-04-10 10:13
|
|
文件用途:套接字连接
|
|
*/
|
|
//todo 公告接口
|
|
|
|
class Socket {
|
|
|
|
/*
|
|
* @函数作用: 发送包给插件网关
|
|
* @参数 Table
|
|
* @返回值
|
|
*/
|
|
function SendGateway(T) {
|
|
local str = Json.Encode(T);
|
|
if (PacketDebugModel) print("发送包给网关: " + str);
|
|
if (getroottable().rawin("Sq_SendPackToGateway")) Sq_SendPackToGateway(str);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//网关链接建立回调Map
|
|
if (!getroottable().rawin("OnGatewaySocketConnectFunc")) OnGatewaySocketConnectFunc <- {};
|
|
//插件网关建立连接时
|
|
function OnGatewaySocketConnect() {
|
|
print("############凌众插件连接建立############");
|
|
print("############凌众插件连接建立############");
|
|
print("############凌众插件连接建立############");
|
|
print("############凌众插件连接建立############");
|
|
local Jso = {
|
|
op = 10001,
|
|
channel = Sq_Game_GetConfig(),
|
|
type = 1
|
|
}
|
|
Socket.SendGateway(Jso);
|
|
|
|
foreach(value in OnGatewaySocketConnectFunc) {
|
|
value();
|
|
}
|
|
}
|
|
//网关包回调Map
|
|
if (!getroottable().rawin("GatewaySocketPackFuncMap")) GatewaySocketPackFuncMap <- {}
|
|
//插件网关收到包时
|
|
function OnGatewaySocketMsg(Msg) {
|
|
if (PacketDebugModel) print("收到网关包:" + Msg);
|
|
local Jso = Json.Decode(Msg);
|
|
if (!("op" in Jso)) {
|
|
if (PacketDebugModel) print("收到空op包");
|
|
return;
|
|
}
|
|
if (Jso.op in GatewaySocketPackFuncMap) {
|
|
GatewaySocketPackFuncMap[Jso.op](Jso);
|
|
} else {
|
|
// print(Msg);
|
|
local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
|
|
if (SUser) {
|
|
local Pack = Packet();
|
|
Pack.Put_Header(1, 130);
|
|
Pack.Put_Byte(1);
|
|
Pack.Put_Int(Msg.len());
|
|
Pack.Put_Binary(Msg);
|
|
Pack.Finalize(true);
|
|
SUser.Send(Pack);
|
|
Pack.Delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//公用接口
|
|
/*
|
|
* @函数作用: 调用玩家移动城镇
|
|
* @参数 Jso 需要参数uid cid town regionId
|
|
* @返回值
|
|
*/
|
|
GatewaySocketPackFuncMap[20240408] <- function(Jso) {
|
|
local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
|
|
if (SUser) {
|
|
World.MoveArea(SUser, Jso.town, Jso.regionId, Jso.X, Jso.Y);
|
|
}
|
|
}
|
|
/*
|
|
* @函数作用: 让指定玩家组队并进入副本
|
|
* @参数 Jso 需要参数uid cid Member 最外层uid cid 确定队长 Member 里面是一个uid 和 cid 信息对象的List 注意队长不要放进去
|
|
* @返回值
|
|
*/
|
|
GatewaySocketPackFuncMap[20240416] <- function(Jso) {
|
|
local SUser = World.GetUserByUidCid(Jso.uid, Jso.cid);
|
|
if (SUser) {
|
|
local Gm = GameManager();
|
|
local SParty = Gm.GetParty();
|
|
SParty.Create(SUser);
|
|
foreach(_Index, PlayerInfo in Jso.Member) {
|
|
local UserBuf = World.GetUserByUidCid(PlayerInfo.uid, PlayerInfo.cid);
|
|
if (UserBuf) {
|
|
SParty.Join(UserBuf);
|
|
}
|
|
}
|
|
SParty.SendIpInfo();
|
|
World.SendPartyInfoToAll(SParty);
|
|
if (Jso.map != 0) {
|
|
local T = {
|
|
op = 2024041602,
|
|
map = Jso.map
|
|
}
|
|
SUser.SendJso(T);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/***********************************************
|
|
**************** ****************
|
|
************************************************/
|
|
|
|
//客户端包回调Map
|
|
if (!getroottable().rawin("ClientSocketPackFuncMap")) ClientSocketPackFuncMap <- {}
|
|
if (!getroottable().rawin("ClientSocketDP_SPackFuncMap")) ClientSocketDP_SPackFuncMap <- {}
|
|
|
|
|
|
//收到来自客户端的包 只有130
|
|
function OnClientSocketMsg(C_User, C_Pack_Str) {
|
|
if (PacketDebugModel) print("收到客户端包: " + C_Pack_Str);
|
|
|
|
local Jso = Json.Decode(C_Pack_Str);
|
|
if (Jso.op == 2147483646) {
|
|
if (Jso.dps_id in ClientSocketDP_SPackFuncMap) {
|
|
Jso.rawdelete("op");
|
|
local SUser = User(C_User);
|
|
ClientSocketDP_SPackFuncMap[Jso.dps_id](SUser, Jso);
|
|
}
|
|
} else {
|
|
if (Jso.op in ClientSocketPackFuncMap) {
|
|
local SUser = User(C_User);
|
|
ClientSocketPackFuncMap[Jso.op](SUser, Jso);
|
|
} else {
|
|
local SUser = User(C_User);
|
|
if (SUser) {
|
|
Jso.uid <- SUser.GetUID();
|
|
Jso.cid <- SUser.GetCID();
|
|
Socket.SendGateway(Jso);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function Register_DPS_Pack(Id, Func) {
|
|
ClientSocketDP_SPackFuncMap.rawset(Id, Func);
|
|
} |