From ff774e36f66edd7c40017843c7a22e6dfcf2feaf Mon Sep 17 00:00:00 2001 From: Jan Luebbe <jluebbe@debian.org> Date: Sat, 3 May 2014 04:39:06 +0200 Subject: [PATCH] Update python code for multi messages and test-server for blit. --- python/client.py | 12 +++++++++--- python/gol-client.py | 4 +++- python/test-client.py | 24 ++++-------------------- python/test-server.py | 26 +++++++++++++++++++++----- 4 files changed, 37 insertions(+), 29 deletions(-) mode change 100755 => 100644 python/client.py diff --git a/python/client.py b/python/client.py old mode 100755 new mode 100644 index 01e7c14..4df46b8 --- a/python/client.py +++ b/python/client.py @@ -21,9 +21,15 @@ socket = context.socket(zmq.REQ) socket.connect(SERVER) def set_pixel(x, y, v): - tx = bytearray(9) - struct.pack_into('iiB', tx, 0, x, y, v) - socket.send(tx) + tx = struct.pack('<BiiB', 0, x, y, v) + socket.send_multipart([tx, b'']) rx = socket.recv() #print("Received reply %s [%r]" % ((x, y, v), rx)) +def set_pixels(pixels): + msg = [] + for x, y, v in pixels: + msg.append(struct.pack('<BiiB', 0, x, y, v)) + socket.send_multipart(msg + [b'']) + rx = socket.recv() + diff --git a/python/gol-client.py b/python/gol-client.py index 11f1afa..14396c4 100755 --- a/python/gol-client.py +++ b/python/gol-client.py @@ -7,10 +7,12 @@ SIZE = 1 import time def rect(x,y,w,h,r,g,b): + pixels = [] for i in xrange(x,x+w): for j in xrange(y,y+h): #pixel(i,j,r,g,b) - client.set_pixel(i, j, r) + pixels.append((i, j, r)) + client.set_pixels(pixels) def draw(x, y, v): rect(x*SIZE, y*SIZE, SIZE, SIZE, 255*v, 255*v, 255*v) diff --git a/python/test-client.py b/python/test-client.py index f9977ae..a984b6f 100755 --- a/python/test-client.py +++ b/python/test-client.py @@ -1,44 +1,28 @@ #!/usr/bin/python -import sys +import sys, client -SERVER = "tcp://localhost:5571" XOFF = 0 YOFF = 0 TEXT = "Hello World!" if __name__=="__main__": - if len(sys.argv) >= 2: - SERVER = sys.argv[1] if len(sys.argv) >= 4: XOFF = int(sys.argv[2]) YOFF = int(sys.argv[3]) if len(sys.argv) >= 5: TEXT = sys.argv[4] -import struct -import zmq - -# Prepare our context and sockets -context = zmq.Context() -socket = context.socket(zmq.REQ) -socket.connect(SERVER) - -def set_pixel(x, y, v): - tx = bytearray(9) - struct.pack_into('iiB', tx, 0, x, y, v) - socket.send(tx) - rx = socket.recv() - #print("Received reply %s [%r]" % ((x, y, v), rx)) - import pygame pygame.init() font = pygame.font.Font("/usr/share/fonts/X11/misc/5x7.pcf.gz", 7) text = font.render(TEXT, True, (255, 255, 255), (0, 0, 0)) pxarray = pygame.PixelArray(text) +pixels = [] for x in range(text.get_width()): for y in range(text.get_height()): - set_pixel(XOFF+x, YOFF+y, pxarray[x][y]) + pixels.append((XOFF+x, YOFF+y, pxarray[x][y])) del pxarray +client.set_pixels(pixels) diff --git a/python/test-server.py b/python/test-server.py index a2b920f..89ef86b 100755 --- a/python/test-server.py +++ b/python/test-server.py @@ -42,8 +42,24 @@ while True: pygame.display.update() continue - message = socket.recv() - x, y, v = struct.unpack_from('iiB', message) - # print("Received request: %r, %r, %r" % (x, y, v)) - set_pixel(x, y, v) - socket.send(b"") + messages = socket.recv_multipart() + #print("New multimessage") + for message in messages: + if not message: + break + cmd, = struct.unpack_from('<B', message) + #print repr(message) + if cmd == 0: # set pixel + cmd, x, y, v = struct.unpack_from('<BiiB', message) + #print("Received set pixel: %r, %r, %r, %r" % (cmd, x, y, v)) + set_pixel(x, y, v) + elif cmd == 1: # blit + cmd, x, y, w, h = struct.unpack_from('<Biiii', message) + #print("Received blit: %r, %r, %r, %r, %r" % (cmd, x, y, w, h)) + for r in range(h): + for c in range(w): + set_pixel(x+c, y+r, ord(message[17+r*w+c])) + else: + cmd, = struct.unpack_from('<B', message) + print("Received unknown: %r" % (cmd,)) + socket.send(b'') -- GitLab