This commit is contained in:
aozhiwei 2023-10-10 15:17:23 +08:00
commit effe90537f
10 changed files with 120 additions and 133 deletions

View File

@ -1,19 +1,19 @@
package app
import (
"f5"
"q5"
"mt"
"cs"
"ss"
"f5"
"main/constant"
. "main/global"
"mt"
"q5"
"ss"
)
type app struct {
netMsgQueue q5.Queue
initCb func()
unInitCb func()
initCb func()
unInitCb func()
}
func (this *app) GetPkgName() string {
@ -82,3 +82,7 @@ func (this *app) AddNetMsg(hdr *f5.MsgHdr) {
func (this *app) registerDataSources() {
}
func (this *app) GetHttpListenPort() int32 {
return mt.Table.HallCluster.GetHttpListenPort()
}

View File

@ -4,8 +4,8 @@ import (
"net"
"cs"
"ss"
"f5"
"ss"
proto "github.com/golang/protobuf/proto"
)
@ -42,11 +42,10 @@ type PlayerMgr interface {
type WspListener interface {
ProcessSSMMsg(*ss.SsNetMsgHandler, *f5.MsgHdr)
SendProxyMsg(net.Conn, uint16, proto.Message);
SendProxyMsg(net.Conn, uint16, proto.Message)
}
type HttpListener interface {
}
type App interface {

View File

@ -10,8 +10,8 @@ type httpListener struct {
}
func (this *httpListener) Init() {
this.httpServer = new (f5.HttpServer)
this.httpServer.Init("imserver.httplistener", 1000 * 10)
this.httpServer = new(f5.HttpServer)
this.httpServer.Init("hallserver.httplistener", 1000*10)
this.httpServer.Start(mt.Table.HallCluster.GetHttpListenPort())
}

View File

@ -1,21 +1,21 @@
package room
import (
"q5"
"f5"
"cs"
"main/common"
"f5"
"github.com/golang/protobuf/proto"
"main/common"
"q5"
)
type member struct {
room *room
joinTime int64
state int32
room *room
joinTime int64
state int32
closeGameStartNotify bool
teamEntry q5.ListHead
team *team
hum common.Player
teamEntry q5.ListHead
team *team
hum common.Player
}
func (this *member) init(room *room, hum common.Player) {

View File

@ -2,38 +2,38 @@ package room
import (
"cs"
"q5"
"f5"
"mt"
"github.com/golang/protobuf/proto"
"main/common"
"main/constant"
"github.com/golang/protobuf/proto"
"mt"
"q5"
)
type room struct {
cs.MsgHandlerImpl
roomId string
roomId string
roomIdx int64
entry q5.ListHead
config struct {
mapId int32
zoneId int32
nodeId int32
passwd string
entry q5.ListHead
config struct {
mapId int32
zoneId int32
nodeId int32
passwd string
maxTeamNum int32
}
owner *member
roomState int32
startTime int64
startReason int32
disbandTime int64
disbandReason int32
teamUuidHash map[string]*team
teamIdHash map[int32]*team
members map[string]*member
startTimer *f5.TimerWp
delayDeleteTimer *f5.TimerWp
attacher *f5.TimerAttacher
owner *member
roomState int32
startTime int64
startReason int32
disbandTime int64
disbandReason int32
teamUuidHash map[string]*team
teamIdHash map[int32]*team
members map[string]*member
startTimer *f5.TimerWp
delayDeleteTimer *f5.TimerWp
attacher *f5.TimerAttacher
gameStartNotifyMsg *cs.SMRoomGameStartNotify
}
@ -54,8 +54,8 @@ func (this *room) init(roomId string,
}
func (this *room) unInit() {
for ; len(this.teamUuidHash) > 0; {
for _, t := range(this.teamUuidHash) {
for len(this.teamUuidHash) > 0 {
for _, t := range this.teamUuidHash {
t.unInit()
break
}
@ -170,7 +170,7 @@ func (this *room) fillMFCurrentRoom(pb *cs.MFCurrentRoom) {
pb.Owner = new(cs.MFMember)
this.owner.fillMFMember(pb.Owner)
q5.NewSlice(&pb.TeamList, 0, 10)
for _, t := range(this.teamUuidHash) {
for _, t := range this.teamUuidHash {
pbT := &cs.MFTeam{}
t.fillMFTeam(pbT)
q5.AppendSlice(&pb.TeamList, pbT)
@ -266,7 +266,7 @@ func (this *room) CMKickoutTeam(hdr *f5.MsgHdr, msg *cs.CMKickoutTeam) {
hum := hdr.Context.(common.Player)
m := this.getMember(hum.GetAccountId())
t := this.getTeamByUuid(msg.GetTeamUuid())
if m == this.owner && t != nil && t != m.team && this.roomState == ROOM_INIT_STATE{
if m == this.owner && t != nil && t != m.team && this.roomState == ROOM_INIT_STATE {
notifyMsg := &cs.SMRoomKickoutNotify{}
this.broadcastMsg(notifyMsg)
t.unInit()
@ -296,7 +296,7 @@ func (this *room) CMCloseNotify(hdr *f5.MsgHdr, msg *cs.CMCloseNotify) {
}
func (this *room) broadcastMsg(msg proto.Message) {
for _, m := range(this.members) {
for _, m := range this.members {
if m.hum.GetRoom() == this {
m.hum.SendMsg(msg)
}
@ -324,7 +324,7 @@ func (this *room) doDisband(reason int32) {
notifyMsg := &cs.SMRoomDisbandNotify{}
notifyMsg.RoomId = proto.String(this.roomId)
notifyMsg.Reason = proto.Int32(reason)
for _, m := range(this.members) {
for _, m := range this.members {
if m.hum.GetRoom() == this {
m.hum.SendMsg(notifyMsg)
}
@ -338,9 +338,9 @@ func (this *room) doStart(reason int32) {
this.startReason = ROOM_AUTO_START_TYPE
f5.GetTimer().SetIntervalExWp(
1000,
func (e int32, args *q5.Args) {
func(e int32, args *q5.Args) {
if e == q5.TIMER_EXEC_EVENT {
if f5.GetApp().GetNowSeconds() - this.startTime <
if f5.GetApp().GetNowSeconds()-this.startTime <
int64(mt.Table.Config.Get().GetGameStartNotifyTime()) {
this.notifyGameStart()
}
@ -362,7 +362,7 @@ func (this *room) notifyGameStart() {
if this.gameStartNotifyMsg == nil {
this.genGameStartNotifyMsg()
}
for _, m := range(this.members) {
for _, m := range this.members {
if m.state == MEMBER_READY_STATE &&
m.hum.GetRoom() == this &&
!m.closeGameStartNotify {
@ -372,52 +372,54 @@ func (this *room) notifyGameStart() {
}
func (this *room) genGameStartNotifyMsg() {
if this.gameStartNotifyMsg == nil {
this.gameStartNotifyMsg = &cs.SMRoomGameStartNotify{}
this.gameStartNotifyMsg.ZoneId = proto.Int32(this.config.zoneId)
this.gameStartNotifyMsg.NodeId = proto.Int32(this.config.nodeId)
this.gameStartNotifyMsg.TeamUuid = proto.String(q5.ToString(this.roomIdx))
startInfo := struct {
ZoneId int32 `json:"zone_id"`
NodeId int32 `json:"node_id"`
RoomUuid string `json:"room_uuid"`
StartTime int32 `json:"start_time"`
TeamList [] struct {
TeamUuid string `json:"team_uuid"`
Members [] struct {
AccountId string `json:"account_id"`
} `json:"members"`
} `json:"team_list"`
}{
ZoneId: this.config.zoneId,
NodeId: this.config.nodeId,
RoomUuid: q5.ToString(this.roomIdx),
StartTime: int32(this.startTime),
}
q5.NewSlice(&startInfo.TeamList, 0, 10)
for _, t := range(this.teamUuidHash) {
if t.hasAlreadMember() {
ele := q5.NewSliceElement(&startInfo.TeamList)
ele.TeamUuid = t.teamUuid
q5.NewSlice(&ele.Members, 0, 4)
t.members.ForEach(
func (data interface{}) bool {
m := data.(*member)
if m.state == MEMBER_READY_STATE {
ele2 := q5.NewSliceElement(&ele.Members)
ele2.AccountId = m.hum.GetAccountId()
}
return true
})
}
}
this.gameStartNotifyMsg.CustomRoomPayload = proto.String(q5.EncodeJson(&startInfo))
if this.gameStartNotifyMsg != nil {
return
}
this.gameStartNotifyMsg = &cs.SMRoomGameStartNotify{}
this.gameStartNotifyMsg.ZoneId = proto.Int32(this.config.zoneId)
this.gameStartNotifyMsg.NodeId = proto.Int32(this.config.nodeId)
this.gameStartNotifyMsg.TeamUuid = proto.String(q5.ToString(this.roomIdx))
startInfo := struct {
ZoneId int32 `json:"zone_id"`
NodeId int32 `json:"node_id"`
RoomUuid string `json:"room_uuid"`
StartTime int32 `json:"start_time"`
TeamList []struct {
TeamUuid string `json:"team_uuid"`
Members []struct {
AccountId string `json:"account_id"`
} `json:"members"`
} `json:"team_list"`
}{
ZoneId: this.config.zoneId,
NodeId: this.config.nodeId,
RoomUuid: q5.ToString(this.roomIdx),
StartTime: int32(this.startTime),
}
q5.NewSlice(&startInfo.TeamList, 0, 10)
for _, t := range this.teamUuidHash {
if t.hasAlreadMember() {
ele := q5.NewSliceElement(&startInfo.TeamList)
ele.TeamUuid = t.teamUuid
q5.NewSlice(&ele.Members, 0, 4)
t.members.ForEach(
func(data interface{}) bool {
m := data.(*member)
if m.state == MEMBER_READY_STATE {
ele2 := q5.NewSliceElement(&ele.Members)
ele2.AccountId = m.hum.GetAccountId()
}
return true
})
}
}
this.gameStartNotifyMsg.CustomRoomPayload = proto.String(q5.EncodeJson(&startInfo))
}
func (this *room) canStart() bool {
alreadyNum := 0
for _, t := range(this.teamUuidHash) {
for _, t := range this.teamUuidHash {
if t.hasAlreadMember() {
alreadyNum++
}
@ -491,8 +493,8 @@ func (this *room) delayDeleteRoom() {
panic("errror dealyDeleteRoom")
}
this.delayDeleteTimer = f5.GetTimer().SetTimeoutExWp(
1000 * mt.Table.Config.Get().GetDelayDeleteTime(),
func (e int32, args *q5.Args) {
1000*mt.Table.Config.Get().GetDelayDeleteTime(),
func(e int32, args *q5.Args) {
if e == q5.TIMER_EXEC_EVENT {
this.unInit()
}
@ -508,8 +510,8 @@ func newRoom() *room {
r.entry.Init(r)
r.attacher = f5.GetTimer().NewTimerAttacher()
r.startTimer = f5.GetTimer().SetTimeoutExWp(
1000 * mt.Table.Config.Get().GetAutoStartTime(),
func (e int32, args *q5.Args) {
1000*mt.Table.Config.Get().GetAutoStartTime(),
func(e int32, args *q5.Args) {
if e == q5.TIMER_EXEC_EVENT {
r.autoStart()
}

View File

@ -2,19 +2,19 @@ package room
import (
"cs"
"q5"
"f5"
"main/constant"
"main/common"
"github.com/golang/protobuf/proto"
"main/common"
"main/constant"
. "main/global"
"q5"
)
type roomMgr struct {
cs.MsgHandlerImpl
currRoomId int32
idHash map[string]*room
roomList q5.ListHead
idHash map[string]*room
roomList q5.ListHead
}
func (this *roomMgr) Init() {
@ -53,7 +53,7 @@ func (this *roomMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) {
}
case constant.ROOM_HANDLER_ID:
hum := GetPlayerMgr().GetPlayerBySocket(hdr.GetSocket())
if hum != nil && hum.GetRoom() != nil {
if hum != nil && hum.GetRoom() != nil {
hdr.Context = hum
cs.DispatchMsg(handler, hdr, hum.GetRoom().(*room))
}
@ -116,7 +116,7 @@ func (this *roomMgr) CMSearchRoom(hdr *f5.MsgHdr, msg *cs.CMSearchRoom) {
sinceId := msg.GetSinceId()
roomId := msg.GetRoomId()
this.roomList.ForEach(
func (data interface{}) bool {
func(data interface{}) bool {
r := data.(*room)
if r.roomIdx > sinceId && r.viewable() {
if roomId != "" && roomId != r.roomId {

View File

@ -1,16 +1,16 @@
package room
import (
"q5"
"cs"
"github.com/golang/protobuf/proto"
"q5"
)
type team struct {
room *room
teamId int32
room *room
teamId int32
teamUuid string
members q5.ListHead
members q5.ListHead
}
func (this *team) init(room *room, teamId int32, teamUuid string) {
@ -22,7 +22,7 @@ func (this *team) init(room *room, teamId int32, teamUuid string) {
func (this *team) unInit() {
this.members.ForEach(
func (data interface{}) bool {
func(data interface{}) bool {
m := data.(*member)
m.unInit()
return true
@ -37,7 +37,7 @@ func (this *team) fillMFTeam(pb *cs.MFTeam) {
pb.TeamUuid = proto.String(this.teamUuid)
q5.NewSlice(&pb.Members, 0, 4)
this.members.ForEach(
func (data interface{}) bool {
func(data interface{}) bool {
m := data.(*member)
pbM := &cs.MFMember{}
m.fillMFMember(pbM)
@ -58,7 +58,7 @@ func (this *team) getMemberNum() int32 {
func (this *team) hasAlreadMember() bool {
ok := false
this.members.ForEach(
func (data interface{}) bool {
func(data interface{}) bool {
m := data.(*member)
if m.state == MEMBER_READY_STATE {
ok = true
@ -72,7 +72,7 @@ func (this *team) hasAlreadMember() bool {
func (this *team) getOwnerCandidate() *member {
var ownerCandidate *member
this.members.ForEach(
func (data interface{}) bool {
func(data interface{}) bool {
m := data.(*member)
if m.hum.IsOnline() {
ownerCandidate = m

View File

@ -28,11 +28,9 @@ func (this *App) Init() {
chatMgr.init()
cacheMgr.init()
wspListener.init()
httpListener.init()
}
func (this *App) UnInit() {
httpListener.unInit()
playerMgr.unInit()
handlerMgr.unInit()
wspListener.unInit()
@ -110,3 +108,7 @@ func (this *App) registerDataSources() {
mt.Table.FriendDb.GetById(0).GetDatabase(),
30)
}
func (this *App) GetHttpListenPort() int32 {
return mt.Table.IMCluster.GetHttpListenPort()
}

View File

@ -4,7 +4,6 @@ var app = new(App)
var wspListener = new(WSPListener)
var playerMgr = new(PlayerMgr)
var handlerMgr = new(HandlerMgr)
var httpListener = new(HttpListener)
var friendMgr = new(FriendsMgr)
var cacheMgr = new(CacheMgr)

View File

@ -1,19 +0,0 @@
package main
import (
"f5"
"mt"
)
type HttpListener struct {
httpServer *f5.HttpServer
}
func (this *HttpListener) init() {
this.httpServer = new (f5.HttpServer)
this.httpServer.Init("imserver.httplistener", 1000 * 10)
this.httpServer.Start(mt.Table.IMCluster.GetHttpListenPort())
}
func (this *HttpListener) unInit() {
}