Simple (non-threaded) messaging socket server.
This commit is contained in:
parent
0ac94b5b31
commit
461eadf47a
1 changed files with 82 additions and 0 deletions
82
service/service.py
Normal file
82
service/service.py
Normal file
|
@ -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()
|
Loading…
Reference in a new issue