mirror of
https://github.com/evennia/evennia.git
synced 2026-04-03 14:37:17 +02:00
Web client users are now notified if the server is shut down forcefully (Ctrl-C, reboot etc)
This commit is contained in:
parent
0eb5d29560
commit
7f3633c70a
3 changed files with 14 additions and 6 deletions
|
|
@ -20,7 +20,7 @@ import time
|
|||
from hashlib import md5
|
||||
|
||||
from twisted.web import server, resource
|
||||
from twisted.internet import defer
|
||||
from twisted.internet import defer, reactor
|
||||
|
||||
from django.utils import simplejson
|
||||
from django.utils.functional import Promise
|
||||
|
|
@ -64,6 +64,7 @@ class WebClient(resource.Resource):
|
|||
def __init__(self):
|
||||
self.requests = {}
|
||||
self.databuffer = {}
|
||||
reactor.addSystemEventTrigger('before', 'shutdown',self._forced_disconnect)
|
||||
|
||||
def getChild(self, path, request):
|
||||
"""
|
||||
|
|
@ -77,7 +78,15 @@ class WebClient(resource.Resource):
|
|||
self.requests.get(suid, []).remove(request)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
|
||||
def _forced_disconnect(self):
|
||||
"""
|
||||
Callback launched when webserver is closing forcefully (Ctrl-C, reboot etc)
|
||||
All we do is make sure the connected clients are notitifed.
|
||||
"""
|
||||
for suid in self.requests.keys():
|
||||
self.lineSend(suid, parse_html("{rThe MUD server shut down. You were disconnected.{n"))
|
||||
|
||||
def lineSend(self, suid, string, data=None):
|
||||
"""
|
||||
This adds the data to the buffer and/or sends it to
|
||||
|
|
@ -95,7 +104,7 @@ class WebClient(resource.Resource):
|
|||
dataentries = self.databuffer.get(suid, [])
|
||||
dataentries.append(jsonify({'msg':string, 'data':data}))
|
||||
self.databuffer[suid] = dataentries
|
||||
|
||||
|
||||
def disconnect(self, suid):
|
||||
"Disconnect session with given suid."
|
||||
sess = SESSIONS.session_from_suid(suid)
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class DjangoWebRoot(resource.Resource):
|
|||
pool = threadpool.ThreadPool()
|
||||
pool.start()
|
||||
# Set it up so the pool stops after e.g. Ctrl-C kills the server
|
||||
reactor.addSystemEventTrigger('after', 'shutdown', pool.stop)
|
||||
reactor.addSystemEventTrigger('after', 'shutdown', pool.stop)
|
||||
# combine twisted's wsgi resource with django's wsgi handler
|
||||
wsgi_resource = WSGIResource(reactor, pool, WSGIHandler())
|
||||
return wsgi_resource
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ function webclient_input(){
|
|||
$('#inputform')[0].reset(); // clear input field
|
||||
},
|
||||
error: function(XMLHttpRequest, textStatus, errorThrown){
|
||||
msg_display("err", "Error: Server returned an error or timed out. Try resending.");
|
||||
msg_display("err", "Error: Server returned an error or timed out. Try resending or reloading the page.");
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
@ -145,7 +145,6 @@ function webclient_close(){
|
|||
},
|
||||
error: function(XMLHttpRequest, textStatus, errorThrown){
|
||||
CLIENT_HASH = '0';
|
||||
alert("There was an error disconnecting from the mud server.");
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue