You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import socketserver
|
|
import time
|
|
import threading
|
|
|
|
class Controller:
|
|
def __init__(self, fp):
|
|
self.fp = fp
|
|
|
|
def get_handler(self):
|
|
class HandleRequest(socketserver.BaseRequestHandler):
|
|
fp = self.fp
|
|
|
|
def handle(self):
|
|
self.request.sendall("FieldPOC interactive controller\n".encode("utf-8"))
|
|
while True:
|
|
self.request.sendall("> ".encode("utf-8"))
|
|
data = self.request.recv(1024).decode("utf-8").strip()
|
|
|
|
if data == "help":
|
|
self.request.sendall("""Availiable commands:
|
|
help Show this info
|
|
exit Disconnect
|
|
""".encode("utf-8"))
|
|
elif data == "quit" or data == "exit":
|
|
break
|
|
else:
|
|
self.request.sendall("Unknown command, type 'help'\n".encode("utf-8"))
|
|
|
|
self.request.sendall("disconnecting\n".encode("utf-8"))
|
|
|
|
return HandleRequest
|
|
|
|
|
|
def run(self):
|
|
with socketserver.ThreadingTCPServer((self.fp.config.controller.host, self.fp.config.controller.port), self.get_handler()) as server:
|
|
|
|
threading.Thread(target=server.serve_forever).start()
|
|
|
|
while True:
|
|
msg = self.fp.queues["controller"].get()
|
|
|
|
if msg.get("type") == "stop":
|
|
server.shutdown()
|
|
break
|