#! /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) try: server = SocketServer.TCPServer(LISTEN_ON, RequestHandler) server.serve_forever() except KeyboardInterrupt: server.shutdown() server.server_close() except: 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]() print("message: ".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()