Arquivos

81 linhas
2.2 KiB
Python
Arquivo Executável

"""A server that handles a connection with an OpenBCI board and serves that
data over both a UDP socket server and a WebSocket server.
Requires:
- pyserial
- asyncio
- websockets
"""
import cPickle as pickle
import json
import socket
import plugin_interface as plugintypes
# class PluginPrint(IPlugin):
# # args: passed by command line
# def activate(self, args):
# print("Print activated")
# # tell outside world that init went good
# return True
# def deactivate(self):
# print("Print Deactivated")
# def show_help(self):
# print("I do not need any parameter, just printing stuff.")
# # called with each new sample
# def __call__(self, sample):
# sample_string = "ID: %f\n%s\n%s" %(sample.id, str(sample.channel_data)[1:-1], str(sample.aux_data)[1:-1])
# print("---------------------------------")
# print(sample_string)
# print("---------------------------------")
# # DEBBUGING
# # try:
# # sample_string.decode('ascii')
# # except UnicodeDecodeError:
# # print("Not a ascii-encoded unicode string")
# # else:
# # print(sample_string)
class UDPServer(plugintypes.IPluginExtended):
def __init__(self, ip='localhost', port=8888):
self.ip = ip
self.port = port
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def activate(self):
print("udp_server plugin")
print(self.args)
if len(self.args) > 0:
self.ip = self.args[0]
if len(self.args) > 1:
self.port = int(self.args[1])
# init network
print("Selecting raw UDP streaming. IP: " + self.ip + ", port: " + str(self.port))
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
print("Server started on port " + str(self.port))
def __call__(self, sample):
self.send_data(json.dumps(sample.channel_data))
def send_data(self, data):
self.server.sendto(data, (self.ip, self.port))
# From IPlugin: close sockets, send message to client
def deactivate(self):
self.server.close();
def show_help(self):
print("""Optional arguments: [ip [port]]
\t ip: target IP address (default: 'localhost')
\t port: target port (default: 12345)""")