save
This commit is contained in:
parent
22031c44ef
commit
5ddd1c748d
@ -18,6 +18,7 @@ type Room interface {
|
|||||||
|
|
||||||
type RoomMgr interface {
|
type RoomMgr interface {
|
||||||
ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr)
|
ProcessCMMsg(*cs.CsNetMsgHandler, *f5.MsgHdr)
|
||||||
|
RemoveRoomMember(*f5.MsgHdr)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Player interface {
|
type Player interface {
|
||||||
|
@ -2,32 +2,32 @@ package player
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"cs"
|
"cs"
|
||||||
"ss"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"f5"
|
"f5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
|
||||||
"mt"
|
|
||||||
"q5"
|
|
||||||
"main/constant"
|
|
||||||
"main/common"
|
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
|
"main/common"
|
||||||
|
"main/constant"
|
||||||
. "main/global"
|
. "main/global"
|
||||||
|
"mt"
|
||||||
|
"net"
|
||||||
|
"q5"
|
||||||
|
"ss"
|
||||||
)
|
)
|
||||||
|
|
||||||
type pendingLoginRequest struct {
|
type pendingLoginRequest struct {
|
||||||
hdr *f5.MsgHdr
|
hdr *f5.MsgHdr
|
||||||
msg *cs.CMLogin
|
msg *cs.CMLogin
|
||||||
addTick int64
|
addTick int64
|
||||||
reqId int64
|
reqId int64
|
||||||
}
|
}
|
||||||
|
|
||||||
type playerMgr struct {
|
type playerMgr struct {
|
||||||
cs.MsgHandlerImpl
|
cs.MsgHandlerImpl
|
||||||
accountIdHash map[string]*player
|
accountIdHash map[string]*player
|
||||||
socketHash map[f5.WspCliConn]*player
|
socketHash map[f5.WspCliConn]*player
|
||||||
pendingLoginHash map[string]*pendingLoginRequest
|
pendingLoginHash map[string]*pendingLoginRequest
|
||||||
currReqId int64
|
currReqId int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *playerMgr) Init() {
|
func (this *playerMgr) Init() {
|
||||||
@ -48,15 +48,15 @@ func (this *playerMgr) Init() {
|
|||||||
})
|
})
|
||||||
f5.GetApp().RegisterIMMsgHandle(
|
f5.GetApp().RegisterIMMsgHandle(
|
||||||
constant.IM_WSP_CLOSE,
|
constant.IM_WSP_CLOSE,
|
||||||
func (args q5.Args) {
|
func(args q5.Args) {
|
||||||
conn := args[0].(net.Conn)
|
conn := args[0].(net.Conn)
|
||||||
deletedPlayers := make(map[f5.WspCliConn]*player)
|
deletedPlayers := make(map[f5.WspCliConn]*player)
|
||||||
for socket, hum := range(this.socketHash) {
|
for socket, hum := range this.socketHash {
|
||||||
if conn == socket.Conn {
|
if conn == socket.Conn {
|
||||||
deletedPlayers[socket] = hum
|
deletedPlayers[socket] = hum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for socket, _ := range(deletedPlayers) {
|
for socket, _ := range deletedPlayers {
|
||||||
this.onSocketClose(socket)
|
this.onSocketClose(socket)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -75,7 +75,9 @@ func (this *playerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) {
|
|||||||
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
||||||
oldHum.reBind(hdr.GetSocket())
|
oldHum.reBind(hdr.GetSocket())
|
||||||
oldHum.SendMsg(&rspMsg)
|
oldHum.SendMsg(&rspMsg)
|
||||||
return;
|
GetRoomMgr().RemoveRoomMember(hdr)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -87,17 +89,19 @@ func (this *playerMgr) CMLogin(hdr *f5.MsgHdr, msg *cs.CMLogin) {
|
|||||||
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
||||||
oldHum.reBind(hdr.GetSocket())
|
oldHum.reBind(hdr.GetSocket())
|
||||||
oldHum.SendMsg(&rspMsg)
|
oldHum.SendMsg(&rspMsg)
|
||||||
return;
|
GetRoomMgr().RemoveRoomMember(hdr)
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
reqId := this.genSeqId()
|
reqId := this.genSeqId()
|
||||||
pendingReq := this.getPendingRequest(msg.GetAccountId())
|
pendingReq := this.getPendingRequest(msg.GetAccountId())
|
||||||
if pendingReq == nil {
|
if pendingReq == nil {
|
||||||
this.pendingLoginHash[msg.GetAccountId()] = &pendingLoginRequest{
|
this.pendingLoginHash[msg.GetAccountId()] = &pendingLoginRequest{
|
||||||
hdr: hdr,
|
hdr: hdr,
|
||||||
msg: msg,
|
msg: msg,
|
||||||
addTick: q5.GetTickCount(),
|
addTick: q5.GetTickCount(),
|
||||||
reqId: *reqId,
|
reqId: *reqId,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if pendingReq.msg.GetAccountId() == msg.GetAccountId() &&
|
if pendingReq.msg.GetAccountId() == msg.GetAccountId() &&
|
||||||
@ -151,7 +155,7 @@ func (this *playerMgr) apiAuthCb(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCli
|
|||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
HeadId string `json:"head_id"`
|
HeadId string `json:"head_id"`
|
||||||
HeroId string `json:"hero_id"`
|
HeroId string `json:"hero_id"`
|
||||||
HeadFrame string `json:"head_frame"`
|
HeadFrame string `json:"head_frame"`
|
||||||
} `json:"info"`
|
} `json:"info"`
|
||||||
}{}
|
}{}
|
||||||
{
|
{
|
||||||
@ -179,6 +183,7 @@ func (this *playerMgr) apiAuthCb(hdr *f5.MsgHdr, msg *cs.CMLogin, rsp f5.HttpCli
|
|||||||
|
|
||||||
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
rspMsg.ServerInfo = proto.String(mt.Table.HallCluster.GetServerInfo())
|
||||||
GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, &rspMsg)
|
GetWspListener().SendProxyMsg(hdr.Conn, hdr.SocketHandle, &rspMsg)
|
||||||
|
GetRoomMgr().RemoveRoomMember(hdr)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *playerMgr) reportServerState(masterIp string, masterPort int32) {
|
func (this *playerMgr) reportServerState(masterIp string, masterPort int32) {
|
||||||
@ -235,7 +240,7 @@ func (this *playerMgr) internalGetPlayerBySocket(socket f5.WspCliConn) *player {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this* playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) {
|
func (this *playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr) {
|
||||||
switch handler.HandlerId {
|
switch handler.HandlerId {
|
||||||
case constant.PLAYER_MGR_HANDLER_ID:
|
case constant.PLAYER_MGR_HANDLER_ID:
|
||||||
cs.DispatchMsg(handler, hdr, this)
|
cs.DispatchMsg(handler, hdr, this)
|
||||||
@ -247,7 +252,7 @@ func (this* playerMgr) ProcessCMMsg(handler *cs.CsNetMsgHandler, hdr *f5.MsgHdr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *playerMgr) getPendingRequest(accountId string)* pendingLoginRequest {
|
func (this *playerMgr) getPendingRequest(accountId string) *pendingLoginRequest {
|
||||||
req, ok := this.pendingLoginHash[accountId]
|
req, ok := this.pendingLoginHash[accountId]
|
||||||
if ok {
|
if ok {
|
||||||
return req
|
return req
|
||||||
|
@ -352,3 +352,27 @@ message SMRoomGameStartNotify
|
|||||||
optional string team_uuid = 3; //CMJoin战斗服时用
|
optional string team_uuid = 3; //CMJoin战斗服时用
|
||||||
optional string custom_room_payload = 4; //自定义房间透传数据
|
optional string custom_room_payload = 4; //自定义房间透传数据
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//进入观察队伍
|
||||||
|
message CMEnterObserver
|
||||||
|
{
|
||||||
|
optional string room_id = 1; //房间号
|
||||||
|
}
|
||||||
|
|
||||||
|
message SMEnterObserver
|
||||||
|
{
|
||||||
|
optional int32 errcode = 1; //错误码 0:成功 1:权限不足
|
||||||
|
optional string errmsg = 2; //错误描述
|
||||||
|
}
|
||||||
|
|
||||||
|
//离开观察队伍
|
||||||
|
message CMLeaveObserver
|
||||||
|
{
|
||||||
|
optional string room_id = 1; //房间号
|
||||||
|
}
|
||||||
|
|
||||||
|
message SMLeaveObserver
|
||||||
|
{
|
||||||
|
optional int32 errcode = 1; //错误码 0:成功 1:权限不足
|
||||||
|
optional string errmsg = 2; //错误描述
|
||||||
|
}
|
||||||
|
@ -15,4 +15,10 @@ const (
|
|||||||
ROOM_MANUAL_START_TYPE
|
ROOM_MANUAL_START_TYPE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ROOM_DISBAND_DEFAULT_REASON = iota
|
||||||
|
ROOM_DISBAND_1_REASON
|
||||||
|
ROOM_DISBAND_NO_NEXT_OWNER_REASON
|
||||||
|
)
|
||||||
|
|
||||||
const ROOM_MIN_START_TEAM_NUM = 2
|
const ROOM_MIN_START_TEAM_NUM = 2
|
||||||
|
@ -110,7 +110,7 @@ func (this *room) canJoin(member common.Player, msg *cs.CMJoinRoom) bool {
|
|||||||
if member.GetRoom() != nil {
|
if member.GetRoom() != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if int32(len(this.teamUuidHash)) >= this.config.maxTeamNum {
|
if this.getTeamNum() >= this.config.maxTeamNum {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if this.getMember(member.GetAccountId()) != nil {
|
if this.getMember(member.GetAccountId()) != nil {
|
||||||
@ -193,7 +193,7 @@ func (this *room) CMDisbandRoom(hdr *f5.MsgHdr, msg *cs.CMDisbandRoom) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if this.roomState == ROOM_INIT_STATE {
|
if this.roomState == ROOM_INIT_STATE {
|
||||||
this.doDisband(1)
|
this.doDisband(ROOM_DISBAND_1_REASON)
|
||||||
}
|
}
|
||||||
hum.SendMsg(rspMsg)
|
hum.SendMsg(rspMsg)
|
||||||
}
|
}
|
||||||
@ -205,7 +205,7 @@ func (this *room) CMLeaveRoom(hdr *f5.MsgHdr, msg *cs.CMLeaveRoom) {
|
|||||||
if this.isOwner(hum) {
|
if this.isOwner(hum) {
|
||||||
nextOwner := this.getNextOwner()
|
nextOwner := this.getNextOwner()
|
||||||
if nextOwner == nil {
|
if nextOwner == nil {
|
||||||
this.doDisband(1)
|
this.doDisband(ROOM_DISBAND_NO_NEXT_OWNER_REASON)
|
||||||
return
|
return
|
||||||
} else {
|
} else {
|
||||||
this.removeMember(this.owner.hum.GetAccountId())
|
this.removeMember(this.owner.hum.GetAccountId())
|
||||||
@ -295,6 +295,22 @@ func (this *room) CMCloseNotify(hdr *f5.MsgHdr, msg *cs.CMCloseNotify) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *room) CMEnterObserver(hdr *f5.MsgHdr, msg *cs.CMEnterObserver) {
|
||||||
|
//hum := hdr.Context.(common.Player)
|
||||||
|
//m := this.getMember(hum.GetAccountId())
|
||||||
|
// if this.isOwner(hum) {
|
||||||
|
// t := this.owner.team
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *room) CMLeaveObserver(hdr *f5.MsgHdr, msg *cs.CMLeaveObserver) {
|
||||||
|
//hum := hdr.Context.(common.Player)
|
||||||
|
//m := this.getMember(hum.GetAccountId())
|
||||||
|
// if this.isOwner(hum) {
|
||||||
|
// t := this.owner.team
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
func (this *room) broadcastMsg(msg proto.Message) {
|
func (this *room) broadcastMsg(msg proto.Message) {
|
||||||
for _, m := range this.members {
|
for _, m := range this.members {
|
||||||
if m.hum.GetRoom() == this {
|
if m.hum.GetRoom() == this {
|
||||||
@ -308,7 +324,7 @@ func (this *room) autoStart() {
|
|||||||
if this.canStart() {
|
if this.canStart() {
|
||||||
this.doStart(0)
|
this.doStart(0)
|
||||||
} else {
|
} else {
|
||||||
this.doDisband(0)
|
this.doDisband(ROOM_DISBAND_DEFAULT_REASON)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,3 +146,10 @@ func (this *roomMgr) CMGetCurrentRoom(hdr *f5.MsgHdr, msg *cs.CMGetCurrentRoom)
|
|||||||
}
|
}
|
||||||
hum.SendMsg(rspMsg)
|
hum.SendMsg(rspMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (this *roomMgr) RemoveRoomMember(hdr *f5.MsgHdr) {
|
||||||
|
hum := GetPlayerMgr().GetPlayerBySocket(hdr.GetSocket())
|
||||||
|
if roomPtr, ok := hum.GetRoom().(*room); ok {
|
||||||
|
roomPtr.removeMember(hum.GetAccountId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user