Fix server specific session state saving in bf2 module
This commit is contained in:
@@ -118,16 +118,15 @@ class bf2(MumoModule):
|
|||||||
log.error("Invalid configuration. Game configuration for 'g%d' not found.", i)
|
log.error("Invalid configuration. Game configuration for 'g%d' not found.", i)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.sessions = {} # {sid:laststae}
|
self.sessions = {} # {serverid:{sessionid:laststate}}
|
||||||
manager.subscribeServerCallbacks(self, servers)
|
manager.subscribeServerCallbacks(self, servers)
|
||||||
manager.subscribeMetaCallbacks(self, servers)
|
manager.subscribeMetaCallbacks(self, servers)
|
||||||
|
|
||||||
def disconnected(self): pass
|
def disconnected(self): pass
|
||||||
|
|
||||||
#
|
#
|
||||||
#--- Server callback functions
|
#--- Module specific state handling code
|
||||||
#
|
#
|
||||||
|
|
||||||
def update_state(self, server, oldstate, newstate):
|
def update_state(self, server, oldstate, newstate):
|
||||||
log = self.log()
|
log = self.log()
|
||||||
sid = server.id()
|
sid = server.id()
|
||||||
@@ -235,24 +234,29 @@ class bf2(MumoModule):
|
|||||||
def handle(self, server, state):
|
def handle(self, server, state):
|
||||||
cfg = self.cfg()
|
cfg = self.cfg()
|
||||||
log = self.log()
|
log = self.log()
|
||||||
|
sid = server.id()
|
||||||
update = False
|
update = False
|
||||||
|
|
||||||
state.is_linked = False
|
state.is_linked = False
|
||||||
|
|
||||||
if state.session in self.sessions:
|
if sid not in self.sessions:
|
||||||
if state.identity != self.sessions[state.session].identity:
|
self.sessions[sid] = {}
|
||||||
|
|
||||||
|
if state.session in self.sessions[sid]:
|
||||||
|
if state.identity != self.sessions[sid][state.session].identity:
|
||||||
update = True
|
update = True
|
||||||
|
|
||||||
if state.context != self.sessions[state.session].context:
|
if state.context != self.sessions[sid][state.session].context:
|
||||||
update = True
|
update = True
|
||||||
else:
|
else:
|
||||||
if state.identity or state.context:
|
if state.identity or state.context:
|
||||||
self.sessions[state.session] = None
|
self.sessions[sid][state.session] = None
|
||||||
update = True
|
update = True
|
||||||
else:
|
else:
|
||||||
self.sessions[state.session] = state
|
self.sessions[sid][state.session] = state
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
if update:
|
if update:
|
||||||
if state.context.startswith("Battlefield 2\0"):
|
if state.context.startswith("Battlefield 2\0"):
|
||||||
state.is_linked = True
|
state.is_linked = True
|
||||||
@@ -309,12 +313,17 @@ class bf2(MumoModule):
|
|||||||
state.parsedcontext = {}
|
state.parsedcontext = {}
|
||||||
|
|
||||||
|
|
||||||
self.update_state(server, self.sessions[state.session], state)
|
self.update_state(server, self.sessions[sid][state.session], state)
|
||||||
self.sessions[state.session] = state
|
self.sessions[sid][state.session] = state
|
||||||
|
|
||||||
|
#
|
||||||
|
#--- Server callback functions
|
||||||
|
#
|
||||||
|
|
||||||
def userDisconnected(self, server, state, context = None):
|
def userDisconnected(self, server, state, context = None):
|
||||||
try:
|
try:
|
||||||
del self.sessions[state.session]
|
sid = server.id()
|
||||||
|
del self.sessions[sid][state.session]
|
||||||
except KeyError: pass
|
except KeyError: pass
|
||||||
|
|
||||||
def userStateChanged(self, server, state, context = None):
|
def userStateChanged(self, server, state, context = None):
|
||||||
@@ -331,5 +340,8 @@ class bf2(MumoModule):
|
|||||||
#--- Meta callback functions
|
#--- Meta callback functions
|
||||||
#
|
#
|
||||||
|
|
||||||
def started(self, server, context = None): pass
|
def started(self, server, context = None):
|
||||||
def stopped(self, server, context = None): pass
|
self.sessions[server.id()] = {}
|
||||||
|
|
||||||
|
def stopped(self, server, context = None):
|
||||||
|
self.sessions[server.id()] = {}
|
||||||
|
Reference in New Issue
Block a user