def on_join(self, lobby_id): """Join lobby""" lobby = Lobby.query.get(lobby_id) if g.player: # Leave or delete old lobbies lobby_deletes = leave_or_delete_all_lobbies(g.player) lobby.join(g.player) db.session.commit() # Broadcast update to the joined lobby and lobby listing self.broadcast_event('/lobby/', 'update', make_lobby_item_dict(lobby)) self.broadcast_event('/lobby/%d' % lobby_id, 'update', make_lobby_dict(lobby)) # Send leave or deletes [self.broadcast_leave_or_delete(*l_d) for l_d in lobby_deletes] # Update ACL self.add_acl_method('on_set_team') self.del_acl_method('on_create_lobby') self.del_acl_method('on_join') if lobby.owner == g.player: self.add_acl_method('on_kick') self.add_acl_method('on_set_lobby_name') self.add_acl_method('on_set_team_name') self.add_acl_method('on_leave') # Set lobby id and start listening on redis self.lobby_id = lobby_id self.subscribe('/lobby/%d' % lobby_id) current_app.logger.info('Player %s joined Lobby %d', (g.player.id if g.player else 'Anonymous', lobby_id)) return True, make_lobby_dict(lobby)
def on_join(self, lobby_id): """Join lobby""" lobby_id = int(lobby_id) lobby = Lobby.query.get(lobby_id) if g.player: # Leave or delete old lobbies lobby_deletes = leave_or_delete_all_lobbies(g.player) lobby.join(g.player) db.session.commit() # Broadcast update to the joined lobby and lobby listing self.broadcast_event('/lobby/', 'update', make_lobby_item_dict(lobby)) self.broadcast_event('/lobby/%d' % lobby_id, 'update', make_lobby_dict(lobby)) # Send leave or deletes [self.broadcast_leave_or_delete(*l_d) for l_d in lobby_deletes] # Update ACL self.add_acl_method('on_set_team') self.del_acl_method('on_create_lobby') self.del_acl_method('on_join') if lobby.owner == g.player: self.add_acl_method('on_kick') self.add_acl_method('on_set_lobby_name') self.add_acl_method('on_set_team_name') self.add_acl_method('on_leave') # Set lobby id and start listening on redis self.lobby_id = lobby_id self.subscribe('/lobby/%d' % lobby_id) current_app.logger.info('Player %s joined Lobby %d', (g.player.id if g.player else 'Anonymous', lobby_id)) return True, make_lobby_dict(lobby)
def on_create_lobby(self, name, server_address, rcon_password, game_map, game_type): """Create and join lobby""" assert g.player assert not self.lobby_id # Check server if current_app.config.get('RCON_CHECK_SERVER', True): try: sr = connect_rcon(server_address, rcon_password) sq = connect_query(server_address) except RconException: return False, 'bad_rcon_pass' except Exception: return False, 'server_error' else: if not check_map(sr): return False, 'map_dne' # TODO: ask if you want to kick players if not check_players(sq): return False, 'players' sr.close() sq.close() # Leave or delete old lobbies lobby_deletes = leave_or_delete_all_lobbies(g.player) # TODO: pull/generate password from list if game_type == 'highlander': lobby = HighlanderLobby(name, g.player, server_address, game_map, 'password') elif game_type == 'sixes': lobby = SixesLobby(name, g.player, server_address, game_map, 'password') else: return False, 'bad_game_type' lobby.join(g.player) db.session.add(lobby) db.session.commit() # Send event to redis self.broadcast_event('/lobby/', 'create', make_lobby_item_dict(lobby)) # Send leave or deletes [self.broadcast_leave_or_delete(*l_d) for l_d in lobby_deletes] # Update ACL self.add_acl_method('on_set_team') self.add_acl_method('on_leave') self.del_acl_method('on_create_lobby') self.del_acl_method('on_join') self.add_acl_method('on_kick') self.add_acl_method('on_set_lobby_name') self.add_acl_method('on_set_team_name') # Set lobby id and start listening on redis self.lobby_id = lobby.id self.subscribe('/lobby/%d' % lobby.id) current_app.logger.info('Player: %d created Lobby %d' % (g.player.id, lobby.id)) return True, lobby.id
def _callFUT(self, player): from lobbypy.controllers import leave_or_delete_all_lobbies return leave_or_delete_all_lobbies(player)