Version 0.2.3, One click updater from github, Clean FileServer and UiServer shutdown, Count UiServer http connections to clean close, serverUpdate WrapperAPI command, randomize peers before work start and publish, switched to upnpc-shared it has better virustotal reputation
This commit is contained in:
parent
68e3ee158c
commit
531bf68ddd
12 changed files with 157 additions and 36 deletions
|
@ -11,20 +11,25 @@ from Debug import Debug
|
|||
# Skip websocket handler if not necessary
|
||||
class UiWSGIHandler(WSGIHandler):
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.server = args[2]
|
||||
super(UiWSGIHandler, self).__init__(*args, **kwargs)
|
||||
self.ws_handler = WebSocketHandler(*args, **kwargs)
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
|
||||
|
||||
def run_application(self):
|
||||
self.server.sockets[self.client_address] = self.socket
|
||||
if "HTTP_UPGRADE" in self.environ: # Websocket request
|
||||
self.ws_handler.__dict__ = self.__dict__ # Match class variables
|
||||
self.ws_handler.run_application()
|
||||
ws_handler = WebSocketHandler(*self.args, **self.kwargs)
|
||||
ws_handler.__dict__ = self.__dict__ # Match class variables
|
||||
ws_handler.run_application()
|
||||
else: # Standard HTTP request
|
||||
#print self.application.__class__.__name__
|
||||
try:
|
||||
return super(UiWSGIHandler, self).run_application()
|
||||
except Exception, err:
|
||||
logging.debug("UiWSGIHandler error: %s" % err)
|
||||
del self.server.sockets[self.client_address]
|
||||
|
||||
|
||||
class UiServer:
|
||||
|
@ -89,4 +94,27 @@ class UiServer:
|
|||
browser = webbrowser.get(config.open_browser)
|
||||
browser.open("http://%s:%s" % (config.ui_ip, config.ui_port), new=2)
|
||||
|
||||
WSGIServer((self.ip, self.port), handler, handler_class=UiWSGIHandler, log=self.log).serve_forever()
|
||||
self.server = WSGIServer((self.ip, self.port), handler, handler_class=UiWSGIHandler, log=self.log)
|
||||
self.server.sockets = {}
|
||||
self.server.serve_forever()
|
||||
self.log.debug("Stopped.")
|
||||
|
||||
def stop(self):
|
||||
# Close WS sockets
|
||||
for client in self.server.clients.values():
|
||||
client.ws.close()
|
||||
# Close http sockets
|
||||
sock_closed = 0
|
||||
for sock in self.server.sockets.values():
|
||||
try:
|
||||
sock._sock.close()
|
||||
sock.close()
|
||||
sock_closed += 1
|
||||
except Exception, err:
|
||||
pass
|
||||
self.log.debug("Socket closed: %s" % sock_closed)
|
||||
|
||||
self.server.socket.close()
|
||||
self.server.stop()
|
||||
time.sleep(1)
|
||||
|
||||
|
|
|
@ -121,6 +121,8 @@ class UiWebsocket:
|
|||
func = self.actionSiteSetLimit
|
||||
elif cmd == "channelJoinAllsite" and "ADMIN" in permissions:
|
||||
func = self.actionChannelJoinAllsite
|
||||
elif cmd == "serverUpdate" and "ADMIN" in permissions:
|
||||
func = self.actionServerUpdate
|
||||
# Unknown command
|
||||
else:
|
||||
self.response(req["id"], "Unknown command: %s" % cmd)
|
||||
|
@ -361,3 +363,12 @@ class UiWebsocket:
|
|||
self.site.saveSettings()
|
||||
self.response(to, "Site size limit changed to %sMB" % size_limit)
|
||||
self.site.download()
|
||||
|
||||
|
||||
def actionServerUpdate(self, to):
|
||||
import sys
|
||||
self.cmd("updating")
|
||||
sys.modules["src.main"].update_after_shutdown = True
|
||||
sys.modules["src.main"].file_server.stop()
|
||||
sys.modules["src.main"].ui_server.stop()
|
||||
|
||||
|
|
|
@ -46,6 +46,9 @@ class Wrapper
|
|||
@sendInner message # Pass to inner frame
|
||||
if message.params.address == window.address # Current page
|
||||
@setSiteInfo message.params
|
||||
else if cmd == "updating" # Close connection
|
||||
@ws.ws.close()
|
||||
@ws.onCloseWebsocket(null, 4000)
|
||||
else
|
||||
@sendInner message # Pass message to inner frame
|
||||
|
||||
|
@ -166,7 +169,7 @@ class Wrapper
|
|||
@wrapperWsInited = false
|
||||
setTimeout (=> # Wait a bit, maybe its page closing
|
||||
@sendInner {"cmd": "wrapperClosedWebsocket"} # Send to inner frame
|
||||
if e.code == 1000 # Server error please reload page
|
||||
if e and e.code == 1000 and e.wasClean == false # Server error please reload page
|
||||
@ws_error = @notifications.add("connection", "error", "UiServer Websocket error, please reload the page.")
|
||||
else if not @ws_error
|
||||
@ws_error = @notifications.add("connection", "error", "Connection with <b>UiServer Websocket</b> was lost. Reconnecting...")
|
||||
|
|
|
@ -120,17 +120,20 @@
|
|||
}
|
||||
};
|
||||
|
||||
ZeroWebsocket.prototype.onCloseWebsocket = function(e) {
|
||||
ZeroWebsocket.prototype.onCloseWebsocket = function(e, reconnect) {
|
||||
if (reconnect == null) {
|
||||
reconnect = 10000;
|
||||
}
|
||||
this.log("Closed", e);
|
||||
if (e.code === 1000) {
|
||||
this.log("Server error, please reload the page");
|
||||
if (e && e.code === 1000 && e.wasClean === false) {
|
||||
this.log("Server error, please reload the page", e.wasClean);
|
||||
} else {
|
||||
setTimeout(((function(_this) {
|
||||
return function() {
|
||||
_this.log("Reconnecting...");
|
||||
return _this.connect();
|
||||
};
|
||||
})(this)), 10000);
|
||||
})(this)), reconnect);
|
||||
}
|
||||
if (this.onClose != null) {
|
||||
return this.onClose(e);
|
||||
|
@ -780,6 +783,9 @@ jQuery.extend( jQuery.easing,
|
|||
if (message.params.address === window.address) {
|
||||
return this.setSiteInfo(message.params);
|
||||
}
|
||||
} else if (cmd === "updating") {
|
||||
this.ws.ws.close();
|
||||
return this.ws.onCloseWebsocket(null, 4000);
|
||||
} else {
|
||||
return this.sendInner(message);
|
||||
}
|
||||
|
@ -947,7 +953,7 @@ jQuery.extend( jQuery.easing,
|
|||
_this.sendInner({
|
||||
"cmd": "wrapperClosedWebsocket"
|
||||
});
|
||||
if (e.code === 1000) {
|
||||
if (e && e.code === 1000 && e.wasClean === false) {
|
||||
return _this.ws_error = _this.notifications.add("connection", "error", "UiServer Websocket error, please reload the page.");
|
||||
} else if (!_this.ws_error) {
|
||||
return _this.ws_error = _this.notifications.add("connection", "error", "Connection with <b>UiServer Websocket</b> was lost. Reconnecting...");
|
||||
|
|
|
@ -66,15 +66,15 @@ class ZeroWebsocket
|
|||
if @onError? then @onError(e)
|
||||
|
||||
|
||||
onCloseWebsocket: (e) =>
|
||||
onCloseWebsocket: (e, reconnect=10000) =>
|
||||
@log "Closed", e
|
||||
if e.code == 1000
|
||||
@log "Server error, please reload the page"
|
||||
if e and e.code == 1000 and e.wasClean == false
|
||||
@log "Server error, please reload the page", e.wasClean
|
||||
else # Connection error
|
||||
setTimeout (=>
|
||||
@log "Reconnecting..."
|
||||
@connect()
|
||||
), 10000
|
||||
), reconnect
|
||||
if @onClose? then @onClose(e)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue