From 461eadf47a7cc13070879d8a33989a87dc4659da Mon Sep 17 00:00:00 2001 From: John Shaver Date: Wed, 4 Apr 2018 14:41:12 -0700 Subject: [PATCH] Simple (non-threaded) messaging socket server. --- service/service.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 service/service.py diff --git a/service/service.py b/service/service.py new file mode 100644 index 0000000..2f490b7 --- /dev/null +++ b/service/service.py @@ -0,0 +1,82 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +from pulsectl import Pulse +import SocketServer +from threading import Thread + +LISTEN_ON = ("10.0.0.4", 2000) + +def main(): + pulse = Pulse('mic-control') + + sources = pulse.source_list() + + sourceNumber = getSourceSelection(sources) + + server = SocketServer.TCPServer(LISTEN_ON, RequestHandler) + + try: + server.serve_forever() + except KeyboardInterrupt: + server.shutdown() + server.server_close() + + +def getSourceSelection(sources): + sourceCount = len(sources) - 1 + error = False + while True: + message = error if error else "Please select a source: " + print(message) + for i, source in enumerate(sources): + print "%i: %s" % (i, source.description) + selection = raw_input("Enter a number[0-%i]:" % sourceCount) + print("") + try : + return getInt(selection, sourceCount) + except InputError as e: + error = e.message + +def getInt(value, sourceCount): + + number = 0 + try: + number = int(value) + except ValueError as e: + raise InputError("Enter only a number...") + + if number not in range(0, sourceCount): + raise InputError("Not a valid option...") + + return number + +class RequestHandler(SocketServer.StreamRequestHandler): + def handle(self): + + for line in self.rfile: + message = line.strip() + if message in messageTypes: + messageTypes[message]() + self.wfile.write(message) + print("Closed!") + self.request.close() + + +def buttonPressed(): + print("down!") + +def buttonReleased(): + print("up!") + +messageTypes = { + 'button_press': buttonPressed, + 'button_release': buttonReleased, +} + +class InputError(Exception): + def __init__(self, message): + self.message = message + + +main()