Fixes for Chrome clients of webclient.
webclient.py now maintains a mapping of suid->single request as opposed to a mapp of suid->list of requests. Since the evennia_webclient.js client only has one valid request outstanding at all times, this should be safe.
This commit is contained in:
parent
5e8f077eb5
commit
965be0a84f
1 changed files with 10 additions and 13 deletions
|
|
@ -72,8 +72,8 @@ class WebClient(resource.Resource):
|
||||||
def _responseFailed(self, failure, suid, request):
|
def _responseFailed(self, failure, suid, request):
|
||||||
"callback if a request is lost/timed out"
|
"callback if a request is lost/timed out"
|
||||||
try:
|
try:
|
||||||
self.requests.get(suid, []).remove(request)
|
del self.requests[suid]
|
||||||
except ValueError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def lineSend(self, suid, string, data=None):
|
def lineSend(self, suid, string, data=None):
|
||||||
|
|
@ -81,13 +81,12 @@ class WebClient(resource.Resource):
|
||||||
This adds the data to the buffer and/or sends it to
|
This adds the data to the buffer and/or sends it to
|
||||||
the client as soon as possible.
|
the client as soon as possible.
|
||||||
"""
|
"""
|
||||||
requests = self.requests.get(suid, None)
|
request = self.requests.get(suid)
|
||||||
if requests:
|
if request:
|
||||||
request = requests.pop(0)
|
|
||||||
# we have a request waiting. Return immediately.
|
# we have a request waiting. Return immediately.
|
||||||
request.write(jsonify({'msg':string, 'data':data}))
|
request.write(jsonify({'msg':string, 'data':data}))
|
||||||
request.finish()
|
request.finish()
|
||||||
self.requests[suid] = requests
|
del self.requests[suid]
|
||||||
else:
|
else:
|
||||||
# no waiting request. Store data in buffer
|
# no waiting request. Store data in buffer
|
||||||
dataentries = self.databuffer.get(suid, [])
|
dataentries = self.databuffer.get(suid, [])
|
||||||
|
|
@ -99,8 +98,7 @@ class WebClient(resource.Resource):
|
||||||
Disconnect session with given suid.
|
Disconnect session with given suid.
|
||||||
"""
|
"""
|
||||||
if self.requests.has_key(suid):
|
if self.requests.has_key(suid):
|
||||||
for request in self.requests.get(suid, []):
|
self.requests[suid].finish()
|
||||||
request.finish()
|
|
||||||
del self.requests[suid]
|
del self.requests[suid]
|
||||||
if self.databuffer.has_key(suid):
|
if self.databuffer.has_key(suid):
|
||||||
del self.databuffer[suid]
|
del self.databuffer[suid]
|
||||||
|
|
@ -119,7 +117,6 @@ class WebClient(resource.Resource):
|
||||||
if suid == '0':
|
if suid == '0':
|
||||||
# creating a unique id hash string
|
# creating a unique id hash string
|
||||||
suid = md5(str(time.time())).hexdigest()
|
suid = md5(str(time.time())).hexdigest()
|
||||||
self.requests[suid] = []
|
|
||||||
self.databuffer[suid] = []
|
self.databuffer[suid] = []
|
||||||
|
|
||||||
sess = WebClientSession()
|
sess = WebClientSession()
|
||||||
|
|
@ -160,10 +157,10 @@ class WebClient(resource.Resource):
|
||||||
dataentries = self.databuffer.get(suid, [])
|
dataentries = self.databuffer.get(suid, [])
|
||||||
if dataentries:
|
if dataentries:
|
||||||
return dataentries.pop(0)
|
return dataentries.pop(0)
|
||||||
reqlist = self.requests.get(suid, [])
|
|
||||||
request.notifyFinish().addErrback(self._responseFailed, suid, request)
|
request.notifyFinish().addErrback(self._responseFailed, suid, request)
|
||||||
reqlist.append(request)
|
if self.requests.has_key(suid):
|
||||||
self.requests[suid] = reqlist
|
self.requests[suid].finish() # Clear any stale request.
|
||||||
|
self.requests[suid] = request
|
||||||
return server.NOT_DONE_YET
|
return server.NOT_DONE_YET
|
||||||
|
|
||||||
def mode_close(self, request):
|
def mode_close(self, request):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue