aboutsummaryrefslogtreecommitdiff
path: root/host/matelight/listeners.py
diff options
context:
space:
mode:
authorjaseg <jaseg@jaseg.net>2013-12-29 22:35:31 +0100
committerjaseg <jaseg@jaseg.net>2013-12-29 22:35:31 +0100
commit493863fcc0d0bc52a27631eeb76a85446f3e6760 (patch)
treed3193c448c12723ad7b8a11cf3e3eda3d443579d /host/matelight/listeners.py
parent7e2c51dc2645c4dffe7cc33e8533f0667b8775a6 (diff)
downloadmatelight-493863fcc0d0bc52a27631eeb76a85446f3e6760.tar.gz
matelight-493863fcc0d0bc52a27631eeb76a85446f3e6760.tar.bz2
matelight-493863fcc0d0bc52a27631eeb76a85446f3e6760.zip
More advanced network IF with direct buffer support
Diffstat (limited to 'host/matelight/listeners.py')
-rwxr-xr-xhost/matelight/listeners.py55
1 files changed, 37 insertions, 18 deletions
diff --git a/host/matelight/listeners.py b/host/matelight/listeners.py
index 91175cf..f390389 100755
--- a/host/matelight/listeners.py
+++ b/host/matelight/listeners.py
@@ -1,11 +1,15 @@
#!/usr/bin/env python3
from socketserver import *
+import socket
import threading
import zlib
+import random
import struct
import host
import numpy as np
import time
+import sys
+import traceback
import renderers
from PIL import Image, ImageSequence
from config import *
@@ -15,28 +19,40 @@ frame = np.array(img.convert('RGB').getdata(), dtype=np.uint8).reshape((DISPLAY_
host.sendframe(frame)
from font import *
+UDP_THRES = 1.0
+
class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
-default_renderer = renderers.TextRenderer('\x1B[91mFeed \x1B[92mme via \x1B[93mTCP on \x1B[94;101mml.jaseg.net:1337\x1B[0;91m ! \x1B[95mI can\x1B[96m parse\x1B[97m ANSI\x1B[92m color\x1B[93m codes\x1B[91m!\x1B[38;5;207m http://github.com/jaseg/matelight')
+default_renderers = [renderers.TextRenderer('\x1B[92mMate Light\x1B[93m@\x1B[92mPlay store or \x1B[94;101mtcp://ml.jaseg.net:1337\x1B[0;91m ♥ '),
+ renderers.TextRenderer('\x1B[92mMate Light\x1B[0;91m ♥ \x1B[92mUnicode'),
+ renderers.TextRenderer('\x1B[92mMate Light\x1B[0m powered by \x1B[95mMicrosoft™ \x1B[96mMarquee Manager® Pro')]
global renderer, count
-renderer = default_renderer
+renderer = default_renderers[0]
count = 0
+lastudp = 0
class MateLightUDPHandler(BaseRequestHandler):
def handle(self):
- data = self.request[0].strip()
- if len(data) != FRAME_SIZE: #+4
- raise ValueError('Invalid frame size: Expected {}, got {}'.format(FRAME_SIZE, len(frame))) #+4
- frame = data[:-4]
- #crc1, = struct.unpack('!I', data[-4:])
- crc2 = zlib.crc32(frame),
- if crc1 != crc2:
- raise ValueError('Invalid frame CRC checksum: Expected {}, got {}'.format(crc2, crc1))
- #socket.sendto(b'ACK', self.client_address)
- a = np.array(frame, dtype=np.uint8)
- a.reshape((DISPLAY_HEIGHT, DISPLAY_WIDTH, 3))
- host.sendframe(a)
+ try:
+ global lastudp
+ data = self.request[0].strip()
+ if len(data) != FRAME_SIZE+4:
+ #raise ValueError('Invalid frame size: Expected {}, got {}'.format(FRAME_SIZE+4, len(data)))
+ return
+ frame = data[:-4]
+ crc1, = struct.unpack('!I', data[-4:])
+ crc2, = zlib.crc32(frame, 0),
+ #if crc1 != crc2:
+ # raise ValueError('Invalid frame CRC checksum: Expected {}, got {}'.format(crc2, crc1))
+ #socket.sendto(b'ACK', self.client_address)
+ a = np.array(list(frame), dtype=np.uint8)
+ lastudp = time.time()
+ host.sendframe(a.reshape((DISPLAY_HEIGHT, DISPLAY_WIDTH, 3)))
+ except Exception as e:
+ print('Error receiving UDP frame:', e)
+ ex_type, ex, tb = sys.exc_info()
+ traceback.print_tb(tb)
class MateLightTCPTextHandler(BaseRequestHandler):
def handle(self):
@@ -66,14 +82,17 @@ t.daemon = True
t.start()
while True:
- global renderer, count
+ global renderer, count, lastudp
foo = renderer
if count == 0:
- renderer = default_renderer
+ renderer = random.choice(default_renderers)
else:
count = count - 1
for frame, delay in foo.frames():
#print(list(frame.flatten()))
- host.sendframe(np.swapaxes(frame, 0, 1))
- #time.sleep(delay)
+ now = time.time()
+ if now-lastudp > UDP_THRES:
+ host.sendframe(np.swapaxes(frame, 0, 1))
+ else:
+ time.sleep(0.1)