Added Channels (pretty much a rewrite)

This commit is contained in:
PhilipTrauner 2016-01-31 20:41:02 +01:00
parent 5dda052ed5
commit f77f2df105

View file

@ -1,16 +1,47 @@
class Broadcast: class Broadcast:
class ChannelError(IndexError):
def __init__(self, channel):
super(Broadcast.ChannelError, self).__init__("channel '%s' does not exist" % channel)
def __init__(self): def __init__(self):
self.socks = [] self.channels = {}
def broadcast(self, data, exclude=[]): def broadcast(self, data, channel, exclude=[]):
for sock in self.socks: if channel in self.channels:
if not sock in exclude: for sock in self.channels[channel]:
sock.send(data) if not sock in exclude:
sock.send(data)
else:
raise Broadcast.ChannelError(channel)
def remove(self, sock): def remove(self, sock, channel):
if sock in self.socks: if channel in self.channels:
del self.socks[self.socks.index(sock)] if sock in self.channels[channel]:
del self.channels[channel][self.channels[channel].index(sock)]
else:
raise Broadcast.ChannelError(channel)
def add(self, sock): def add(self, sock, channel):
if not sock in self.socks: if channel in self.channels:
self.socks.append(sock) if not sock in self.channels[channel]:
self.channels[channel].append(sock)
else:
raise Broadcast.ChannelError(channel)
def add_channel(self, channel):
self.channels[channel] = []
def remove_channel(self, channel):
if channel in self.channels:
del self.channels[channel]
else:
raise Broadcast.ChannelError(channel)
def __repr__(self):
out = "Channels:\n"
for channel in self.channels:
out += "%s: %d socks\n" % (channel, len(self.channels[channel]))
return out.rstrip("\n")
def __str__(self):
return self.__repr__()