first commit
This commit is contained in:
commit
a5a0434432
1126 changed files with 439481 additions and 0 deletions
123
Software/Scratch/wstosgh.py
Executable file
123
Software/Scratch/wstosgh.py
Executable file
|
|
@ -0,0 +1,123 @@
|
|||
import array
|
||||
import itertools
|
||||
import socket
|
||||
import struct
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
from websocket_server import WebsocketServer
|
||||
|
||||
|
||||
def rcv_from_sgh():
|
||||
global s,c,server
|
||||
dataPrevious = ""
|
||||
while True:
|
||||
print "listening for data from sgh"
|
||||
# time.sleep(1)
|
||||
data = dataPrevious + c.recv(8192)
|
||||
print "data length" , len(data)
|
||||
if data != "":
|
||||
print "Data received from sgh", data
|
||||
#print ("datalen: %s", len(data))
|
||||
|
||||
if len(data) > 0: # Connection still valid so process the data received
|
||||
|
||||
dataIn = data
|
||||
|
||||
datawithCAPS = data
|
||||
# dataOut = ""
|
||||
dataList = [] # used to hold series of broadcasts or sensor updates
|
||||
dataPrefix = "" # data to be re-added onto front of incoming data
|
||||
while len(dataIn) > 0: # loop thru data
|
||||
if len(dataIn) < 4: # If whole length not received then break out of loop
|
||||
# print "<4 chrs received"
|
||||
dataPrevious = dataIn # store data and tag it onto next data read
|
||||
break
|
||||
sizeInfo = dataIn[0:4]
|
||||
size = struct.unpack(">L", sizeInfo)[0] # get size of Scratch msg
|
||||
# print "size:", size
|
||||
if size > 0:
|
||||
# print dataIn[4:size + 4]
|
||||
dataMsg = dataIn[4:size + 4].lower() # turn msg into lower case
|
||||
|
||||
if len(dataMsg) < size: # if msg recieved is too small
|
||||
# print "half msg found"
|
||||
# print size, len(dataMsg)
|
||||
dataPrevious = dataIn # store data and tag it onto next data read
|
||||
break
|
||||
#print "msg:",dataMsg
|
||||
dataList.append(dataMsg)
|
||||
dataIn = dataIn[size + 4:] # cut data down that's been processed
|
||||
|
||||
# print "previous:", dataPrevious
|
||||
print "datalist:",dataList
|
||||
for msg in dataList:
|
||||
#print "msg:",msg[0:13]
|
||||
if msg[0:13] == 'sensor-update':
|
||||
msgsplit = msg[14:].replace('"','').split(' ')
|
||||
print "split",msgsplit
|
||||
#for loop in range(int(len(msgsplit) / 2)):
|
||||
# server.send_message_to_all(msgsplit[loop * 2] + ':' + msgsplit[(loop * 2) + 1])
|
||||
server.send_message_to_all(msgsplit[0] + ':' + msgsplit[1])
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
|
||||
|
||||
# Called for every client connecting (after handshake)
|
||||
def new_client(client, server):
|
||||
print("New client connected and was given id %d" % client['id'])
|
||||
#server.send_message_to_all("Hey all, a new client has joined us")
|
||||
|
||||
|
||||
# Called for every client disconnecting
|
||||
def client_left(client, server):
|
||||
print("Client(%d) disconnected" % client['id'])
|
||||
|
||||
|
||||
# Called when a client sends a message
|
||||
def message_received(client, server, message):
|
||||
if len(message) > 200:
|
||||
message = message[:200]+'..'
|
||||
print("Client(%d) said: %s" % (client['id'], message))
|
||||
dataOut = message
|
||||
|
||||
n = len(dataOut)
|
||||
b = (chr((n >> 24) & 0xFF)) + (chr((n >> 16) & 0xFF)) + (chr((n >> 8) & 0xFF)) + (
|
||||
chr(n & 0xFF))
|
||||
c.send(b + dataOut)
|
||||
print "Data sent to sgh", dataOut
|
||||
|
||||
|
||||
|
||||
|
||||
# For Scratch 3 handle long as int
|
||||
if sys.version > '3':
|
||||
long = int
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
s = socket.socket() #Create a socket object
|
||||
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
#host = socket.gethostname() #Get the local machine name
|
||||
port = 42001 # Reserve a port for your service
|
||||
s.bind(('127.0.0.1',port)) #Bind to the port
|
||||
|
||||
s.listen(5) #Wait for the client connection
|
||||
print "wstosgh listening to scratchGPIO_handler"
|
||||
c,addr = s.accept() #Establish a connection with the client
|
||||
print "Got connection from ScratchGPIOHandler", addr
|
||||
|
||||
|
||||
PORT=8000
|
||||
server = WebsocketServer(PORT)
|
||||
server.set_fn_new_client(new_client)
|
||||
server.set_fn_client_left(client_left)
|
||||
server.set_fn_message_received(message_received)
|
||||
d = threading.Thread(name='rcv_from_sgh', target=rcv_from_sgh)
|
||||
d.setDaemon(True)
|
||||
d.start()
|
||||
server.run_forever()
|
||||
Loading…
Add table
Add a link
Reference in a new issue