DP-S-Script/Dps_A/BaseClass/Socket/SocketBase.nut

153 lines
4.5 KiB
Plaintext
Raw Normal View History

2024-09-16 17:05:26 +08:00
/*
文件名: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 <- {}
2025-03-27 20:21:11 +08:00
if (!getroottable().rawin("ClientSocketDP_SPackFuncMap")) ClientSocketDP_SPackFuncMap <- {}
2024-09-16 17:05:26 +08:00
//收到来自客户端的包 只有130
function OnClientSocketMsg(C_User, C_Pack_Str) {
if (PacketDebugModel) print("收到客户端包: " + C_Pack_Str);
local Jso = Json.Decode(C_Pack_Str);
2025-03-27 20:21:11 +08:00
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);
}
2024-09-16 17:05:26 +08:00
} else {
2025-03-27 20:21:11 +08:00
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);
}
2024-09-16 17:05:26 +08:00
}
}
2025-03-27 20:21:11 +08:00
}
function Register_DPS_Pack(Id, Func) {
ClientSocketDP_SPackFuncMap.rawset(Id, Func);
2024-09-16 17:05:26 +08:00
}