From 350369ae57e7760fc68e3bee80f58bda344d0459 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 7 Nov 2002 21:30:51 +0000 Subject: [PATCH] verbose disconnect reasons --- direct/src/distributed/ClientRepository.py | 57 +++++++++++++++------- direct/src/distributed/MsgTypes.py | 3 ++ 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/direct/src/distributed/ClientRepository.py b/direct/src/distributed/ClientRepository.py index 0370f7ff3d..84b7ce27bf 100644 --- a/direct/src/distributed/ClientRepository.py +++ b/direct/src/distributed/ClientRepository.py @@ -41,6 +41,9 @@ class ClientRepository(DirectObject.DirectObject): # is weak. self.connectHttp = base.config.GetBool('connect-http', 1) + self.bootedIndex = None + self.bootedText = None + self.tcpConn = None return None @@ -75,7 +78,8 @@ class ClientRepository(DirectObject.DirectObject): the return status code giving reason for failure, if it is known. """ - + self.bootedIndex = None + self.bootedText = None if self.connectHttp: ch = self.http.makeChannel(0) ch.beginConnectTo(serverURL) @@ -488,24 +492,43 @@ class ClientRepository(DirectObject.DirectObject): "Asked to update non-existent DistObj " + str(doId)) return None + def handleGoGetLost(self, di): + # The server told us it's about to drop the connection on us. + # Get ready! + if (di.getRemainingSize() > 0): + self.bootedIndex = di.getUint16() + self.bootedText = di.getString() + + ClientRepository.notify.warning( + "Server is booting us out (%d): %s" % (self.bootedIndex, self.bootedText)) + else: + self.bootedIndex = None + self.bootedText = None + ClientRepository.notify.warning( + "Server is booting us out with no explanation.") + + def handleUnexpectedMsgType(self, msgType, di): - currentLoginState = self.loginFSM.getCurrentState() - if currentLoginState: - currentLoginStateName = currentLoginState.getName() + if msgType == CLIENT_GO_GET_LOST: + self.handleGoGetLost(di) else: - currentLoginStateName = "None" - currentGameState = self.gameFSM.getCurrentState() - if currentGameState: - currentGameStateName = currentGameState.getName() - else: - currentGameStateName = "None" - ClientRepository.notify.warning( - "Ignoring unexpected message type: " + - str(msgType) + - " login state: " + - currentLoginStateName + - " game state: " + - currentGameStateName) + currentLoginState = self.loginFSM.getCurrentState() + if currentLoginState: + currentLoginStateName = currentLoginState.getName() + else: + currentLoginStateName = "None" + currentGameState = self.gameFSM.getCurrentState() + if currentGameState: + currentGameStateName = currentGameState.getName() + else: + currentGameStateName = "None" + ClientRepository.notify.warning( + "Ignoring unexpected message type: " + + str(msgType) + + " login state: " + + currentLoginStateName + + " game state: " + + currentGameStateName) return None def sendSetShardMsg(self, shardId): diff --git a/direct/src/distributed/MsgTypes.py b/direct/src/distributed/MsgTypes.py index 2bde9500f6..ad90ba0704 100644 --- a/direct/src/distributed/MsgTypes.py +++ b/direct/src/distributed/MsgTypes.py @@ -1,5 +1,8 @@ """MsgTypes module: contains distributed object message types""" +# Sent by the server when it is dropping the connection deliberately. +CLIENT_GO_GET_LOST = 4 + CLIENT_OBJECT_UPDATE_FIELD = 24 CLIENT_OBJECT_UPDATE_FIELD_RESP = 24 CLIENT_OBJECT_DISABLE_RESP = 25