From be5570cad9367fcde7550babe86b0993d521dae8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 17 Feb 2024 18:43:00 +0800 Subject: [PATCH] 1 --- server/imserver_new/app/app.go | 10 +- server/imserver_new/common/types.go | 25 ++++ server/imserver_new/constant/constant.go | 137 ++++++++++++++++++++ server/imserver_new/global/global.go | 6 - server/imserver_new/initialize/enter.go | 12 ++ server/imserver_new/listener/wsplistener.go | 14 +- server/imserver_new/main.go | 4 +- server/imserver_new/player.go | 3 +- server/imserver_new/playermgr.go | 9 +- 9 files changed, 194 insertions(+), 26 deletions(-) create mode 100644 server/imserver_new/initialize/enter.go diff --git a/server/imserver_new/app/app.go b/server/imserver_new/app/app.go index 28f40e33..c571f540 100644 --- a/server/imserver_new/app/app.go +++ b/server/imserver_new/app/app.go @@ -33,8 +33,8 @@ func (this *app) Init() { this.initCb() f5.GetSysLog().Info("%s start host:%s port:%d", this.GetPkgName(), - mt.Table.HallCluster.GetIp(), - mt.Table.HallCluster.GetListenPort()) + mt.Table.IMCluster.GetIp(), + mt.Table.IMCluster.GetListenPort()) } func (this *app) UnInit() { @@ -65,10 +65,6 @@ func (this *app) Update() { fallthrough case constant.PLAYER_HANDLER_ID: GetPlayerMgr().ProcessCMMsg(handler, hdr) - case constant.ROOM_HANDLER_ID: - fallthrough - case constant.ROOM_MGR_HANDLER_ID: - GetRoomMgr().ProcessCMMsg(handler, hdr) } } } @@ -84,5 +80,5 @@ func (this *app) registerDataSources() { } func (this *app) GetHttpListenPort() int32 { - return mt.Table.HallCluster.GetHttpListenPort() + return mt.Table.IMCluster.GetHttpListenPort() } diff --git a/server/imserver_new/common/types.go b/server/imserver_new/common/types.go index 54942be6..f0230d7e 100644 --- a/server/imserver_new/common/types.go +++ b/server/imserver_new/common/types.go @@ -3,6 +3,7 @@ package common import ( "net" "ss" + "cs" "f5" proto "github.com/golang/protobuf/proto" @@ -12,3 +13,27 @@ type WspListener interface { ProcessSSMMsg(*ss.SsNetMsgHandler, *f5.MsgHdr) SendProxyMsg(net.Conn, uint16, proto.Message) } + +type App interface { + Run(func(), func()) + AddNetMsg(*f5.MsgHdr) +} + +type Player interface { + GetAccountId() string + GetSessionId() string + GetName() string + GetAvatarUrl() string + GetHeroId() string + GetHeadFrame() string + GetPing() int32 + SendMsg(proto.Message) + IsOnline() bool +} + +type PlayerMgr interface { + ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr) + GetPlayerBySocket(f5.WspCliConn) Player + GetPlayerByAccountId(string) Player + OnSocketClose(f5.WspCliConn) +} diff --git a/server/imserver_new/constant/constant.go b/server/imserver_new/constant/constant.go index c9b4f707..fd989b61 100644 --- a/server/imserver_new/constant/constant.go +++ b/server/imserver_new/constant/constant.go @@ -9,3 +9,140 @@ const ( PLAYER_MGR_MODULE_IDX MAX_MODULE_IDX ) + +const ( + PLAYER_MGR_HANDLER_ID = 1 + PLAYER_HANDLER_ID = 2 + WSP_LISTENER_HANDLER_ID = 3 +) + +const ( + MAX_PACKET_LEN = 1024 * 64 +) + +const ( + GAME_DB = "gamedb" + FRIEND_DB = "firenddb" + GAME_ID = 206 +) + +// im server chat +const ( + kCCBegin = iota + kCCWorld = 1 + kCCPrivate = 2 + kCCGuild = 3 + kCCTeam = 4 + kCCBigHorn = 5 + kCCLoopMsg = 6 + kCCEnd +) + +// im server friend +const ( + MaxFriendMembers = 200 + MaxPendingFriendReqs = 20 + MaxBlockedMembers = 50 + SearchWord = 42 // 搜索关键字 + MaxSearchResults = 20 // 搜索结果20条 + + FriendshipStatusPending = 0 // 好友关系状态 等待中 pending + FriendshipStatusOK = 1 // 好友关系状态 接受 ok + FriendshipStatusReject = 2 // 好友关系状态 拒绝 reject + FriendshipStatusDeleted = 3 // 好友关系状态 已删除 disband + + BlacklistStatusDefault = 0 // 好友黑名单状态 是否已移除黑名单 默认0,添加进来 未移除 + BlacklistStatusIsRemoved = 1 // 好友黑名单状态 已移除黑名单 + + OnlineStatusOff = 0 // 在线状态 离线 + OnlineStatus = 1 // 在线状态 在线 +) + +// im server guild +const ( + RandomGuildCount = 10 + MaxMembers = 30 + MaxMembersViceLeader = 2 + MaxPendingReqs = 10 + DefaultLogs = 20 + LogTypeApprove = 1 // 公会日志类型, 批准加入 + LogTypeLeave = 2 + LogTypeDismiss = 3 + LogTypeChangeLevel = 4 + LogTypeDisband = 6 + GuildMemberLevelLeader = 1 // 成员等级, 会长 + GuildMemberLevelViceLeader = 20 // 成员等级, 副会长 + GuildMemberLevelElite = 30 // 成员等级, 精英 + GuildMemberLevelDefault = 40 // 成员等级, 普通成员 + JoinCondDefault = 0 // 加入条件 0 需要审批 + JoinCondFree = 1 // 加入条件 1 可直接加入 + JoinCondStar = 2 // 加入条件 2 满足星星条件 + + PendingReqIsJoinGuildStatusDefault = 0 // 等待验证请求状态, 0 等待审核 + PendingReqIsJoinGuildStatusJoined = 1 // 等待验证请求状态, 1 已加入 + PendingReqIsJoinGuildStatusReject = 2 // 等待验证请求状态, 2 拒绝 + PendingReqIsJoinGuildStatusDisband = 3 // 等待验证请求状态, 3 公会已解散 + + // Event Names + EVENT_GUILD_CREATE = "event_guild_create" + EVENT_GUILD_APPLY = "event_guild_apply" + EVENT_GUILD_APPROVE = "event_guild_approve" + EVENT_GUILD_REJECT = "event_guild_reject" + EVENT_GUILD_JOIN = "event_guild_join" + EVENT_GUILD_LEAVE = "event_guild_leave" + EVENT_GUILD_DISMISS_MEMBER = "event_guild_dismiss_member" + EVENT_GUILD_DISBAND = "event_guild_disband" + EVENT_GUILD_SET_MEMBER_LEVEL = "event_guild_set_member_level" + EVENT_GUILD_SET_NAME = "event_guild_set_name" + EVENT_GUILD_SET_NOTICE = "event_guild_set_notice" + + // Err code + ERR_CODE_OK = 0 + + // Login and Reconnect + ERR_CODE_RECONNECT_PLAYER_NO_EXISTS = 10001 + ERR_CODE_RECONNECT_PLAYER_SESSION_ID_NO_VALID = 10002 + + // Friemds + ERR_CODE_USERS_NO_EXISTS = 11001 + ERR_CODE_FRIENDSHIP_IS_FULL = 11002 + ERR_CODE_PENDING_REQUEST_IS_FULL = 11003 + ERR_CODE_UPDATE_PENDING_REQUEST_DB_FAIL = 11004 + ERR_CODE_UPDATE_FRIENDSHIP_DB_FAIL = 11005 + ERR_CODE_UPDATE_BLACKLIST_DB_FAIL = 11006 + ERR_CODE_NO_IN_REQ = 11007 + ERR_CODE_USERS_IS_FULL = 11008 + ERR_CODE_USER_IN_BLACKLIST = 11009 + ERR_CODE_USER_NOT_IN_BLACKLIST = 11010 + ERR_CODE_BLACKLIST_FULL = 11011 + ERR_CODE_SEARCH_USERS_SIZE_FULL = 11012 + ERR_CODE_SEARCH_USERS_DB_FAIL = 11013 + ERR_CODE_SEARCH_USER_DB_RESULT_IS_NULL = 11014 + ERR_CODE_SEARCH_USER_DB_FAIL = 11015 + ERR_CODE_SEARCH_NO_RESULT = 11016 + ERR_CODE_FRIEND_NO_EXISTS = 11017 + ERR_CODE_ALREADY_FRIEND = 11018 + + // Guild + ERR_CODE_GUILD_NO_EXISTS = 12001 + ERR_CODE_JOINED_GUILD = 12002 + ERR_CODE_CREATE_GUILD_FAIL = 12003 + ERR_CODE_APPLY_GUILD_FAIL = 12004 + ERR_CODE_GUILD_MEMBER_NO_EXISTS = 12005 + ERR_CODE_GUILD_MEMBER_FULL = 12006 + ERR_CODE_GUILD_PENDING_REQUEST_NO_EXISTS = 12007 + ERR_CODE_GUILD_NO_LEADER_PERM = 12008 + ERR_CODE_GUILD_BLOCKED_LEADER = 12009 + ERR_CODE_GUILD_OPERATOR_MEMBER_NO_PERM = 12010 + ERR_CODE_GUILD_DISMISS_MEMBER_NO_PERM = 12011 + ERR_CODE_CREATE_GUILD_DB_FAIL = 12013 + ERR_CODE_CREATE_GUILD_MEMBER_DB_FAIL = 12014 + ERR_CODE_UPDATE_GUILD_DB_FAIL = 12015 + ERR_CODE_UPDATE_GUILD_MEMBER_DB_FAIL = 12016 + ERR_CODE_UPDATE_GUILD_PENDING_REQUEST_DB_FAIL = 12017 + ERR_CODE_REQUEST_PARAMS_ERROR = 12018 + ERR_CODE_GUILD_SETMEMBERLEVEL_VICE_LEADER_MAX_LIMIT = 12019 + ERR_CODE_GUILD_DUPLICATE_NAME = 12020 + ERR_CODE_GUILD_API_ERROR = 12021 + ERR_CODE_GUILD_NAME_TOO_LONG = 12022 +) diff --git a/server/imserver_new/global/global.go b/server/imserver_new/global/global.go index 6f215706..826bd643 100644 --- a/server/imserver_new/global/global.go +++ b/server/imserver_new/global/global.go @@ -17,14 +17,9 @@ var initOrders = []int32 { } var app common.App -var roomMgr common.RoomMgr var playerMgr common.PlayerMgr var wspListener common.WspListener -func GetRoomMgr() common.RoomMgr { - return roomMgr -} - func GetPlayerMgr() common.PlayerMgr { return playerMgr } @@ -63,7 +58,6 @@ func RegModule(idx int32, m q5.Module) { } case constant.ROOMMGR_MODULE_IDX: { - roomMgr = m.(common.RoomMgr) } default: { diff --git a/server/imserver_new/initialize/enter.go b/server/imserver_new/initialize/enter.go new file mode 100644 index 00000000..1889514b --- /dev/null +++ b/server/imserver_new/initialize/enter.go @@ -0,0 +1,12 @@ +package initialize + +import ( + _ "main/listener" + _ "main/app" + + . "main/global" +) + +func Init() { + GetApp().Run(InitModules, UnInitModules) +} diff --git a/server/imserver_new/listener/wsplistener.go b/server/imserver_new/listener/wsplistener.go index 9bf6b0e2..df3e2db4 100644 --- a/server/imserver_new/listener/wsplistener.go +++ b/server/imserver_new/listener/wsplistener.go @@ -1,4 +1,4 @@ -package main +package listener import ( "fmt" @@ -11,6 +11,8 @@ import ( "ss" proto "github.com/golang/protobuf/proto" + "main/constant" + . "main/global" ) type WSPListener struct { @@ -64,8 +66,8 @@ func (this *WSPListener) socketRead(conn net.Conn) { for { { readBytes := bufLen - alreadyReadBytes - if readBytes > MAX_PACKET_LEN-recvBufLen { - readBytes = MAX_PACKET_LEN - recvBufLen + if readBytes > constant.MAX_PACKET_LEN-recvBufLen { + readBytes = constant.MAX_PACKET_LEN - recvBufLen } if readBytes > 0 { @@ -90,7 +92,7 @@ func (this *WSPListener) socketRead(conn net.Conn) { copy(recvBuf[:], recvBuf[offset:]) } recvBufLen -= offset - if recvBufLen >= MAX_PACKET_LEN { + if recvBufLen >= constant.MAX_PACKET_LEN { panic("recv max packet") } @@ -142,13 +144,13 @@ func (this *WSPListener) parseNetPkt() { hdr.Msg = ss.ParsePb(hdr.MsgId, hdr.Data) if hdr.Msg != nil { hdr.Entry.Init(hdr) - app.addNetMsg(hdr) + GetApp().AddNetMsg(hdr) } } else { hdr.Msg = cs.ParsePb(hdr.MsgId, hdr.Data) if hdr.Msg != nil { hdr.Entry.Init(hdr) - app.addNetMsg(hdr) + GetApp().AddNetMsg(hdr) } } } diff --git a/server/imserver_new/main.go b/server/imserver_new/main.go index 90187b72..ac0e77e9 100644 --- a/server/imserver_new/main.go +++ b/server/imserver_new/main.go @@ -1,9 +1,9 @@ package main import ( - "f5" + "main/initialize" ) func main() { - f5.Run(app) + initialize.Init() } diff --git a/server/imserver_new/player.go b/server/imserver_new/player.go index 3d53bd55..f68dfc89 100644 --- a/server/imserver_new/player.go +++ b/server/imserver_new/player.go @@ -6,6 +6,7 @@ import ( "github.com/golang/protobuf/proto" "q5" "sort" + . "main/global" ) type Player struct { @@ -29,7 +30,7 @@ func (p *Player) GetSessionId() string { } func (p *Player) SendMsg(rspMsg proto.Message) { - wspListener.sendProxyMsg(p.socket.Conn, p.socket.SocketHandle, rspMsg) + GetWspListener().SendProxyMsg(p.socket.Conn, p.socket.SocketHandle, rspMsg) } func (p *Player) ReBind(socket f5.WspCliConn) { diff --git a/server/imserver_new/playermgr.go b/server/imserver_new/playermgr.go index c65b10b4..5158a664 100644 --- a/server/imserver_new/playermgr.go +++ b/server/imserver_new/playermgr.go @@ -8,6 +8,7 @@ import ( "github.com/golang/protobuf/proto" "mt" "q5" + . "main/global" ) type PlayerMgr struct { @@ -156,7 +157,7 @@ func (this *PlayerMgr) CMLoginResult(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.Htt rspMsg := &cs.SMLogin{} rspMsg.ServerInfo = serverInfo rspMsg.AccountId = &resObj.Info.AccountID - wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) } func (this *PlayerMgr) reportServerState(masterIp string, masterPort int32) { @@ -221,17 +222,17 @@ func (this *PlayerMgr) CMReconnect(hdr *f5.MsgHdr, msg *cs.CMReconnect) { if hum == nil { rspMsg.Errcode = proto.Int32(ERR_CODE_RECONNECT_PLAYER_NO_EXISTS) rspMsg.Errmsg = proto.String("player no exists") - wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) return } if hum.GetSessionId() != msg.GetSessionId() { rspMsg.Errcode = proto.Int32(ERR_CODE_RECONNECT_PLAYER_SESSION_ID_NO_VALID) rspMsg.Errmsg = proto.String("session_id no valid") - wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) return } hum.ReBind(hdr.GetSocket()) - wspListener.sendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) + GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, rspMsg) } // GetRemotePlayerInfo