mirror of
https://github.com/Pecusx/piradio-mini.git
synced 2026-05-20 22:33:44 +02:00
initial commit
This commit is contained in:
Executable
+118
@@ -0,0 +1,118 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Raspberry Pi TCPIP server class
|
||||
# $Id: udp_server_class.py,v 1.5 2015/11/08 09:29:05 bob Exp $
|
||||
#
|
||||
# Author : Bob Rathbone
|
||||
# Site : http://www.bobrathbone.com
|
||||
#
|
||||
# This program uses the Python socket server
|
||||
# See https://docs.python.org/2/library/socketserver.html
|
||||
#
|
||||
# License: GNU V3, See https://www.gnu.org/copyleft/gpl.html
|
||||
#
|
||||
# Disclaimer: Software is provided as is and absolutly no warranties are implied or given.
|
||||
# The authors shall not be liable for any loss or damage however caused.
|
||||
#
|
||||
|
||||
import socket
|
||||
import sys
|
||||
import time
|
||||
import threading
|
||||
import SocketServer
|
||||
from log_class import Log
|
||||
|
||||
log = Log()
|
||||
|
||||
PORT = 5100
|
||||
HOST = '0.0.0.0'
|
||||
callback = None
|
||||
client_data = ""
|
||||
|
||||
# Class to handle the data requests
|
||||
class RequestHandler(SocketServer.BaseRequestHandler):
|
||||
# Client connection event
|
||||
def setup(self):
|
||||
log.message("UDP server client connect", log.DEBUG)
|
||||
|
||||
# Handle the data request
|
||||
def handle(self):
|
||||
global callback
|
||||
global client_data
|
||||
socket = None
|
||||
try:
|
||||
client_data = self.request[0].strip()
|
||||
socket = self.request[1]
|
||||
log.message("UDP Server received: " + client_data, Log.DEBUG)
|
||||
callback() # Call the get data routine
|
||||
socket.sendto('OK', self.client_address)
|
||||
except:
|
||||
log.message("UDP RequestHandler error", Log.ERROR)
|
||||
socket.sendto('NOTOK', self.client_address)
|
||||
return
|
||||
|
||||
# Handle client disconnect
|
||||
def finish(self):
|
||||
log.message("UDP server client disconnect", Log.DEBUG)
|
||||
|
||||
# Handle time out
|
||||
def handle_timeout(self):
|
||||
log.message("UDP server server timeout", Log.DEBUG)
|
||||
|
||||
class UDPServer(SocketServer.ThreadingMixIn, SocketServer.UDPServer):
|
||||
pass # We will override class methods
|
||||
port = PORT
|
||||
host = HOST
|
||||
|
||||
# Listen for incomming connections
|
||||
def listen(self,server, mycallback):
|
||||
global log
|
||||
log.init('radio')
|
||||
global callback
|
||||
callback = mycallback # Set up the callback
|
||||
# Start a thread with the server
|
||||
server_thread = threading.Thread(target=server.serve_forever)
|
||||
# Exit the server thread when the main thread terminates
|
||||
server_thread.daemon = True
|
||||
server_thread.name = 'remote'
|
||||
server_thread.timeout = 2
|
||||
server_thread.start()
|
||||
msg = "UDP listen:" + server_thread.name + " " + str(self.host) + " port " + str(self.port)
|
||||
log.message(msg, Log.INFO)
|
||||
return
|
||||
|
||||
def getServerAddress(self):
|
||||
return (self.host,self.port)
|
||||
|
||||
def getData(self):
|
||||
global client_data
|
||||
data = client_data
|
||||
client_data = ''
|
||||
return data
|
||||
|
||||
# Test UDP server class
|
||||
if __name__ == "__main__":
|
||||
|
||||
server = None
|
||||
|
||||
# Call back routine to get data event
|
||||
def callback():
|
||||
global server
|
||||
print "Data =", server.getData()
|
||||
return
|
||||
|
||||
server = UDPServer((HOST, PORT), RequestHandler)
|
||||
server.serve_forever()
|
||||
print "Listening", server.fileno()
|
||||
|
||||
server.listen(server,callback)
|
||||
try:
|
||||
while True:
|
||||
time.sleep(0.1)
|
||||
except KeyboardInterrupt:
|
||||
server.shutdown()
|
||||
server.server_close()
|
||||
log.message("Exiting remote listener", Log.INFO)
|
||||
sys.exit(0)
|
||||
|
||||
# End of class
|
||||
Reference in New Issue
Block a user