genesis 1 class Channel(object):
genesis 2 def __init__(self, server, name):
genesis 3 self.server = server
genesis 4 self.name = name
genesis 5 self.members = set()
genesis 6 self._topic = ""
genesis 7 self._key = None
genesis 8 if self.server.statedir:
genesis 9 self._state_path = "%s/%s" % (
genesis 10 self.server.statedir,
genesis 11 name.replace("_", "__").replace("/", "_"))
genesis 12 self._read_state()
genesis 13 else:
genesis 14 self._state_path = None
genesis 15
genesis 16 def add_member(self, client):
genesis 17 self.members.add(client)
genesis 18
genesis 19 def get_topic(self):
genesis 20 return self._topic
genesis 21
genesis 22 def set_topic(self, value):
genesis 23 self._topic = value
genesis 24 self._write_state()
genesis 25
genesis 26 topic = property(get_topic, set_topic)
genesis 27
genesis 28 def get_key(self):
genesis 29 return self._key
genesis 30
genesis 31 def set_key(self, value):
genesis 32 self._key = value
genesis 33 self._write_state()
genesis 34
genesis 35 key = property(get_key, set_key)
genesis 36
genesis 37 def remove_client(self, client):
genesis 38 self.members.discard(client)
genesis 39 if not self.members:
genesis 40 self.server.remove_channel(self)
genesis 41
genesis 42 def _read_state(self):
genesis 43 if not (self._state_path and os.path.exists(self._state_path)):
genesis 44 return
genesis 45 data = {}
genesis 46 exec(open(self._state_path), {}, data)
genesis 47 self._topic = data.get("topic", "")
genesis 48 self._key = data.get("key")
genesis 49
genesis 50 def _write_state(self):
genesis 51 if not self._state_path:
genesis 52 return
genesis 53 (fd, path) = tempfile.mkstemp(dir=os.path.dirname(self._state_path))
genesis 54 fp = os.fdopen(fd, "w")
genesis 55 fp.write("topic = %r\n" % self.topic)
genesis 56 fp.write("key = %r\n" % self.key)
genesis 57 fp.close()
genesis 58 os.rename(path, self._state_path)
genesis 59
genesis 60