diff --git a/server/hallserver/common/types.go b/server/hallserver/common/types.go index 7e26456c..b4df104f 100644 --- a/server/hallserver/common/types.go +++ b/server/hallserver/common/types.go @@ -11,7 +11,7 @@ import ( ) type Room interface { - + OnPlayerOffline(Player) } type RoomMgr interface { diff --git a/server/hallserver/listener/handlermgr.go b/server/hallserver/listener/handlermgr.go index 9d493151..d7de2c51 100644 --- a/server/hallserver/listener/handlermgr.go +++ b/server/hallserver/listener/handlermgr.go @@ -12,8 +12,8 @@ type HandlerMgr struct { func (this *HandlerMgr) Init() { ss.RegHandlerId(int(ss.SSMessageIdE__SS_Ping), constant.WSP_LISTENER_HANDLER_ID) - ss.RegHandlerId(int(ss.SSMessageIdE__SS_WSP_SocketDisconnect), constant.WSP_LISTENER_HANDLER_ID) + ss.RegHandlerId(int(ss.SSMessageIdE__SS_WSP_SocketDisconnect), constant.PLAYER_MGR_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMPing), constant.PLAYER_MGR_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMLogin), constant.PLAYER_MGR_HANDLER_ID) cs.RegHandlerId(int(cs.CMMessageIdE__CMReconnect), constant.PLAYER_MGR_HANDLER_ID) diff --git a/server/hallserver/listener/wsplistener.go b/server/hallserver/listener/wsplistener.go index e393f830..a9bc0c2c 100644 --- a/server/hallserver/listener/wsplistener.go +++ b/server/hallserver/listener/wsplistener.go @@ -27,7 +27,7 @@ func (this *WSPListener) Init() { listener, err := net.Listen("tcp", "0.0.0.0:"+ q5.ToString(mt.Table.HallCluster.GetListenPort())) if err != nil { - + panic(err) } else { this.listener = listener go this.parseNetPkt() @@ -39,9 +39,8 @@ func (this *WSPListener) UnInit() { } func (this *WSPListener) SS_ping(hdr *f5.MsgHdr, msg *ss.SS_Ping) { -} - -func (this *WSPListener) SS_WSP_SocketDisconnect(hdr *f5.MsgHdr, msg *ss.SS_WSP_SocketDisconnect) { + rspMsg := ss.SS_Pong{} + this.SendProxyMsg(hdr.Conn, 0, &rspMsg) } func (this *WSPListener) accept() { diff --git a/server/hallserver/player/player.go b/server/hallserver/player/player.go index 9f7bdbb4..8bccd380 100644 --- a/server/hallserver/player/player.go +++ b/server/hallserver/player/player.go @@ -13,7 +13,7 @@ type player struct { socket f5.WspCliConn accountId string sessionId string - room *common.Room + room common.Room } func (this *player) GetAccountId() string { @@ -24,17 +24,23 @@ func (this *player) SendMsg(rspMsg proto.Message) { GetWspListener().SendProxyMsg(this.socket.Conn, this.socket.SocketHandle, rspMsg) } -func (this *player) GetRoom() *common.Room { +func (this *player) GetRoom() common.Room { return this.room } - func (this *player) init(req *pendingLoginRequest){ this.socket = req.hdr.GetSocket() this.accountId = req.msg.GetAccountId() this.sessionId = req.msg.GetSessionId() } +func (this *player) onOffline(){ + this.socket.Reset() + if this.room != nil { + this.room.OnPlayerOffline(this) + } +} + func (this *player) CMCreateRoom(hdr *f5.MsgHdr, msg *cs.CMCreateRoom) { } diff --git a/server/hallserver/player/playermgr.go b/server/hallserver/player/playermgr.go index f0fc7cf4..72f1731c 100644 --- a/server/hallserver/player/playermgr.go +++ b/server/hallserver/player/playermgr.go @@ -2,6 +2,7 @@ package player import ( "cs" + "ss" "encoding/json" "f5" "fmt" @@ -178,10 +179,6 @@ func (this *playerMgr) reportServerState(masterIp string, masterPort int32) { }) } -func (this *playerMgr) GetPlayers() map[string]*player { - return this.accountIdHash -} - func (this *playerMgr) getPlayerByAccountId(accountId string) *player { player, ok := this.accountIdHash[accountId] if ok { @@ -223,3 +220,12 @@ func (this *playerMgr) genSeqId() *int64 { reqId := this.currReqId return &reqId } + +func (this *playerMgr) SS_WSP_SocketDisconnect(hdr *f5.MsgHdr, msg *ss.SS_WSP_SocketDisconnect) { + hum := this.getPlayerBySocket(hdr.GetSocket()) + if hum == nil { + return + } + delete(this.socketHash, hdr.GetSocket()) + hum.onOffline() +}