From b5d7f5c066d7ca666d63a71a57b8f9d65c739535 Mon Sep 17 00:00:00 2001 From: Jan Klopper Date: Wed, 2 Mar 2016 12:21:03 +0100 Subject: [PATCH] First version of PixelVloed, a UDP/Binary PixelFlut server/client --- client.py | 56 ++++++++++++++++++++++++++++++++++++++ vloed.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100755 client.py create mode 100755 vloed.py diff --git a/client.py b/client.py new file mode 100755 index 0000000..476cc03 --- /dev/null +++ b/client.py @@ -0,0 +1,56 @@ +#!/usr/bin/python +"""This is a udp / binary client + +Inspired by the PixelFlut beamer on eth0:winter 2016 and +code from https://github.com/defnull/pixelflut/ +""" + +__version__ = 0.1 +__author__ = "Jan Klopper " + +import socket +import struct +import random + +def RGBPixel(x, y, r, g, b, a=None): # pylint: disable=C0103 + """Generates the packed data for a pixel""" + if a: + return struct.pack("<2H4B", x, y, r, g, b, a) + return struct.pack("<2H3B", x, y, r, g, b) + +def SetRGBAMode(mode): + """Generate the rgb/rgba bit""" + return struct.pack("" + +import pygame +import socket +import struct + +def main(): + """Runs a pixelvloed server""" + PixelVloed(debug=True) + +class PixelVloed(object): + """PixelVloed server class""" + + def __init__(self, udp_ip="127.0.0.1", udp_port=5005, debug=False): + """Init the pixelVloed server""" + self.debug = debug + self.pixeloffset = 2 + self.screen = None + self.canvas() + self.set_title() + self.Socket(udp_ip, udp_port) + + @staticmethod + def set_title(text=None): + """Sets the window title""" + title = 'PixelVloed %0.02f' % __version__ + if text: + title += ' ' + text + pygame.display.set_caption(title) + + def canvas(self, width=640, height=480): + """Init the pygame canvas""" + pygame.init() + self.screen = pygame.display.set_mode((width, height)) + + def clear(self, r=0, g=0, b=0): # pylint: disable=C0103 + """ Fill the entire screen with a solid colour (default: black)""" + self.screen.fill((r, g, b)) + + def Pixel(self, x, y, r, g, b, a=255): # pylint: disable=C0103 + """Print a pixel to the screen""" + self.screen.set_at((x, y), (r, g, b, a)) + + def Socket(self, ipaddress, port): + """Sets up a udp listening socket and handles the incoming binary data""" + sock = socket.socket(socket.AF_INET, # Internet + socket.SOCK_DGRAM) # UDP + sock.bind((ipaddress, port)) + + while True: + data, addr = sock.recvfrom(1024) + preamble = struct.unpack_from("