def on_create_lobby(self, name, server_address, rcon_password, game_map): """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_pass' except Exception: return False, 'server_issue' 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 lobby = Lobby(name, g.player, server_address, rcon_password, game_map, 'password') 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.listener_job = self.spawn(self.listener, '/lobby/%d' % lobby.id) current_app.logger.info('Player %d created Lobby %d' % (g.player.id, lobby.id)) return True, lobby.id
def test_on_leave(self, magic_make, magic_item_make, magic_broadcast): instance = self._makeOne() o = Player('') l = Lobby('', o, '', '', '', '') p = Player('0') l.join(p) db.session.add(o) db.session.add(l) db.session.add(p) db.session.commit() instance.lobby_id = l.id instance.ctx.g.player = p instance.allowed_methods = set(['on_leave', 'recv_connect', 'on_set_team']) instance.listener_job = MagicMock() instance.on_leave() self.assertEqual(instance.allowed_methods, set(['on_join', 'on_create_lobby', 'recv_connect'])) self.assertTrue(instance.lobby_id is None) self.assertEqual(len(l.spectators), 0) instance.listener_job.kill.assert_called_once()
def test_on_set_team(self, magic_make, magic_item_make, magic_broadcast): instance = self._makeOne() o = Player('') l = Lobby('', o, '', '', '', '') t = Team('Red') l.teams.append(t) p = Player('0') l.join(p) db.session.add(o) db.session.add(l) db.session.add(t) db.session.add(p) db.session.commit() instance.lobby_id = l.id instance.ctx.g.player = p instance.allowed_methods = set(['on_leave', 'recv_connect', 'on_set_team']) instance.on_set_team(0) self.assertEqual(instance.allowed_methods, set(['on_leave', 'recv_connect', 'on_set_class', 'on_toggle_ready', 'on_set_team'])) self.assertEqual(l.teams[0].players[0].player, p)