import socket import struct import ctypes class OutOfRange(Exception): pass class Beleuchtung(object): def __init__(self, segments, addr): if len(segments) == 0: raise OutOfRange if len(addr) == 0: raise OutOfRange self.segments = segments num_of_leds = 0 for i in segments: num_of_leds += i self.data = [0,0,0] * num_of_leds self.addr = addr self.s = [socket.socket(socket.AF_INET, socket.SOCK_DGRAM) for i in addr] def __del__(self): del self.s def get_num_of_segments(self): return len(self.segments) def set_segment(self, num, data): if num < 0 or num >= len(self.segments): raise OutOfRange i = 0 for j in self.segments[:num]: i += j i *= 3 self.data = self.data[:i] + data * self.segments[num] + self.data[i+self.segments[num]*3:] def send(self): for i in range(len(self.addr)): self.s[i].sendto(b'r' + struct.pack(">H", len(self.data) + 2) + b'\x00\x00' + bytes(self.data), self.addr[i])