This commit is contained in:
aozhiwei 2024-02-17 18:43:00 +08:00
parent d3e5a14871
commit be5570cad9
9 changed files with 194 additions and 26 deletions

View File

@ -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()
}

View File

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

View File

@ -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
)

View File

@ -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:
{

View File

@ -0,0 +1,12 @@
package initialize
import (
_ "main/listener"
_ "main/app"
. "main/global"
)
func Init() {
GetApp().Run(InitModules, UnInitModules)
}

View File

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

View File

@ -1,9 +1,9 @@
package main
import (
"f5"
"main/initialize"
)
func main() {
f5.Run(app)
initialize.Init()
}

View File

@ -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) {

View File

@ -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