| 410 | self._loadRoomsCallback(rooms) |
| 411 | |
| 412 | class RoomManager(object): |
| 413 | def __init__(self, roomsdbfile=None, permanentRooms=[]): |
| 414 | self._roomsDbFile = roomsdbfile |
| 415 | self._rooms = {} |
| 416 | self._permanentRooms = permanentRooms |
| 417 | if self._roomsDbFile is not None: |
| 418 | self._roomsDbHandle = RoomDBManager(self._roomsDbFile, self.loadRooms) |
| 419 | self._roomsDbHandle.connect() |
| 420 | else: |
| 421 | self._roomsDbHandle = None |
| 422 | |
| 423 | def loadRooms(self, rooms): |
| 424 | roomsLoaded = [] |
| 425 | for roomDetails in rooms: |
| 426 | roomName = truncateText(roomDetails[0], constants.MAX_ROOM_NAME_LENGTH) |
| 427 | room = Room(roomDetails[0], self._roomsDbHandle) |
| 428 | room.loadRoom(roomDetails) |
| 429 | if roomName in self._permanentRooms: |
| 430 | room.setPermanent(True) |
| 431 | self._rooms[roomName] = room |
| 432 | roomsLoaded.append(roomName) |
| 433 | for roomName in self._permanentRooms: |
| 434 | if roomName not in roomsLoaded: |
| 435 | roomDetails = (roomName, "", 0, 0, 0) |
| 436 | room = Room(roomName, self._roomsDbHandle) |
| 437 | room.loadRoom(roomDetails) |
| 438 | room.setPermanent(True) |
| 439 | self._rooms[roomName] = room |
| 440 | |
| 441 | def broadcastRoom(self, sender, whatLambda): |
| 442 | room = sender.getRoom() |
| 443 | if room and room.getName() in self._rooms: |
| 444 | for receiver in room.getWatchers(): |
| 445 | whatLambda(receiver) |
| 446 | |
| 447 | def broadcast(self, sender, whatLambda): |
| 448 | for room in self._rooms.values(): |
| 449 | for receiver in room.getWatchers(): |
| 450 | whatLambda(receiver) |
| 451 | |
| 452 | def getAllWatchersForUser(self, sender): |
| 453 | watchers = [] |
| 454 | for room in self._rooms.values(): |
| 455 | for watcher in room.getWatchers(): |
| 456 | watchers.append(watcher) |
| 457 | return watchers |
| 458 | |
| 459 | def getPersistentRooms(self, sender): |
| 460 | persistentRooms = [] |
| 461 | for room in self._rooms.values(): |
| 462 | if room.isPersistent(): |
| 463 | persistentRooms.append(room.getName()) |
| 464 | return persistentRooms |
| 465 | |
| 466 | def getEmptyPersistentRooms(self): |
| 467 | emptyPersistentRooms = [] |
| 468 | for room in self._rooms.values(): |
| 469 | if len(room.getWatchers()) == 0: |