Added reboot support to Wallaby Control

This commit is contained in:
Philip Trauner 2016-02-20 10:04:09 +01:00
parent d04a29c018
commit 6bc587c575
3 changed files with 19 additions and 36 deletions

View file

@ -26,46 +26,23 @@ import webbrowser
def plugin_unloaded():
observer.stop()
try:
fl0w.sock.close()
fl0w.connected = False
fl0w.invoke_disconnect()
except:
pass
print("Observer stopped!")
class HandledESock:
def __init__(self, sock, disconnect):
self._sock = sock
self.disconnect = disconnect
def __getattr__(self, attr):
if attr == "send":
return self.send
return getattr(self._sock, attr)
def send(self, data, route):
try:
self._sock.send(data, route)
except OSError:
self._sock.close()
self.disconnect()
_thread.exit()
def recv(self):
try:
return self._sock.recv()
except OSError:
self._sock.close()
self.disconnect()
_thread.exit()
def sock_handler(sock, routes, handler):
sock.send("st", "set_type")
while 1:
data = sock.recv()
if data[1] in routes:
routes[data[1]].run(data[0], handler)
try:
data = sock.recv()
if data[1] in routes:
routes[data[1]].run(data[0], handler)
except (OSError, socket.error):
handler.invoke_disconnect()
break
class ReloadHandler(FileSystemEventHandler):
@ -127,7 +104,7 @@ class Fl0w:
def wallaby_control_submenu(self, wallaby):
menu = Menu(subtitles=False)
for command in ("Stop", "Restart", "Disconnect"):
for command in ("Stop", "Restart", "Reboot", "Disconnect"):
menu.add(Entry(command, action=self.sock.send, kwargs={"data" : {wallaby : command.lower()}, "route" : "wallaby_control"}))
menu.invoke(self.window)
@ -167,7 +144,7 @@ class Fl0w:
connect_details = connect_details.split(":")
if len(connect_details) == 2:
try:
self.sock = HandledESock(ESock(socket.create_connection((connect_details[0], int(connect_details[1])))), self.invoke_disconnect)
self.sock = ESock(socket.create_connection((connect_details[0], int(connect_details[1]))), disconnect_callback=self.invoke_disconnect)
sublime.status_message("Connected to %s:%s." % (connect_details[0], connect_details[1]))
self.connected = True
_thread.start_new_thread(sock_handler, (self.sock, {"error_report": Fl0w.ErrorReport(), "info" : Fl0w.Info(), "wallaby_control" : Fl0w.WallabyControl()}, self))