cli nearly don
This commit is contained in:
@@ -29,7 +29,7 @@ SocketHandler::SocketHandler(StreamSocket streamSocket, std::shared_ptr<InputDri
|
|||||||
|
|
||||||
void SocketHandler::run()
|
void SocketHandler::run()
|
||||||
{
|
{
|
||||||
StreamSocket& streamSocket = socket();
|
StreamSocket& streamSocket = socket(); // todo ?
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
|
|||||||
42
cli/FlippR_Networking.py
Normal file
42
cli/FlippR_Networking.py
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
import requests_unixsocket as req
|
||||||
|
import socket
|
||||||
|
|
||||||
|
class Networking:
|
||||||
|
output_session = req.Session()
|
||||||
|
input_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
server_address = ""
|
||||||
|
|
||||||
|
def __init__(self, output_server_address, input_socket_address):
|
||||||
|
self.server_address = "http+unix://" + output_server_address.replace("/", "%2F")
|
||||||
|
self.input_socket.connect(input_socket_address)
|
||||||
|
|
||||||
|
def get(self, path):
|
||||||
|
response = self.output_session.get(self.server_address + path)
|
||||||
|
assert response.status_code == 200
|
||||||
|
return response
|
||||||
|
|
||||||
|
def getSolenoids(self):
|
||||||
|
return self.get("/solenoids").json()
|
||||||
|
def getSounds(self):
|
||||||
|
return self.get("/sounds").json()
|
||||||
|
def getLamps(self):
|
||||||
|
return self.get("/lamps").json()
|
||||||
|
def getDisplays(self):
|
||||||
|
return self.get("/displays").json()
|
||||||
|
|
||||||
|
def triggerSolenoid(self, solenoid):
|
||||||
|
self.get("/solenoids" + solenoid + "/trigger")
|
||||||
|
|
||||||
|
def playSound(self, sound):
|
||||||
|
self.get("/sounds/" + sound + "/play")
|
||||||
|
|
||||||
|
def activateLamp(self, lamp):
|
||||||
|
self.get("/lamps/" + lamp + "/activate")
|
||||||
|
def deactivateLamp(self, lamp):
|
||||||
|
self.get("/lamps/" + lamp + "/deactivate")
|
||||||
|
def lampStatus(self, lamp):
|
||||||
|
return self.get("/lamps/" + lamp + "/status").json()
|
||||||
|
|
||||||
|
def writeDisplayScore(self, display, score):
|
||||||
|
self.get("/displays" + display + "/write_score/" + str(score))
|
||||||
|
|
||||||
73
cli/main.py
Normal file
73
cli/main.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
from cursesmenu import *
|
||||||
|
from cursesmenu.items import *
|
||||||
|
from FlippR_Networking import Networking
|
||||||
|
|
||||||
|
networking = Networking("/tmp/S.output", "/tmp/S.input") # todo sock name
|
||||||
|
|
||||||
|
def create_menu():
|
||||||
|
menu = CursesMenu("FlippR")
|
||||||
|
|
||||||
|
solenoids = networking.getSolenoids()
|
||||||
|
sol_menu = create_submenu("Solenoids", solenoids, networking.triggerSolenoid)
|
||||||
|
sol_menu_item = SubmenuItem("Solenoids", sol_menu, menu)
|
||||||
|
menu.append_item(sol_menu_item)
|
||||||
|
|
||||||
|
sounds = networking.getSounds()
|
||||||
|
sound_menu = create_submenu("Sounds", sounds, networking.playSound)
|
||||||
|
sound_menu_item = SubmenuItem("Sounds", sound_menu, menu)
|
||||||
|
menu.append_item(sound_menu_item)
|
||||||
|
|
||||||
|
displays = networking.getDisplays()
|
||||||
|
display_menu = create_displays_submenu(displays)
|
||||||
|
display_menu_item = SubmenuItem("Displays", display_menu, menu)
|
||||||
|
menu.append_item(display_menu_item)
|
||||||
|
|
||||||
|
lamps = networking.getLamps()
|
||||||
|
lamp_menu = create_lamps_submenu(lamps)
|
||||||
|
lamp_menu_item = SubmenuItem("Lamps", display_menu, menu)
|
||||||
|
menu.append_item(lamp_menu_item)
|
||||||
|
|
||||||
|
# todo inputs
|
||||||
|
|
||||||
|
menu.show()
|
||||||
|
|
||||||
|
|
||||||
|
def create_lamps_submenu(lamps):
|
||||||
|
menu = CursesMenu("Output", "Lamps")
|
||||||
|
for lamp in lamps:
|
||||||
|
lamp_submenu = create_lamp_submenu(lamp)
|
||||||
|
sub_item = SubmenuItem(lamp['name'], lamp_submenu, menu)
|
||||||
|
menu.append_item(sub_item)
|
||||||
|
return menu
|
||||||
|
|
||||||
|
def create_lamp_submenu(lamp):
|
||||||
|
menu = CursesMenu("Lamps", lamp['name'])
|
||||||
|
activate_item = FunctionItem("Activate", networking.activateLamp, lamp['name'])
|
||||||
|
deactivate_item = FunctionItem("Deactivate", networking.deactivateLamp, lamp['name'])
|
||||||
|
status_item = FunctionItem("Status", print_lamp_status, lamp['name'])
|
||||||
|
menu.append_item(activate_item)
|
||||||
|
menu.append_item(deactivate_item)
|
||||||
|
menu.append_item(status_item)
|
||||||
|
return menu
|
||||||
|
|
||||||
|
def print_lamp_status(lamp):
|
||||||
|
status = networking.lampStatus(lamp)
|
||||||
|
print(status)
|
||||||
|
|
||||||
|
def create_displays_submenu(displays):
|
||||||
|
menu = CursesMenu("Output", "Displays")
|
||||||
|
for display in displays:
|
||||||
|
fun_item = FunctionItem(display["name"], write_display_score, args=display["name"])
|
||||||
|
menu.append_item(fun_item)
|
||||||
|
return menu
|
||||||
|
|
||||||
|
def write_display_score(display):
|
||||||
|
score = input("Score: ")
|
||||||
|
networking.writeDisplayScore(display, score)
|
||||||
|
|
||||||
|
def create_submenu(title, items, fun):
|
||||||
|
menu = CursesMenu("Output", title)
|
||||||
|
for item in items:
|
||||||
|
fun_item = FunctionItem(item["name"], fun, args=item["name"])
|
||||||
|
menu.append_item(fun_item)
|
||||||
|
return menu
|
||||||
Reference in New Issue
Block a user