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