Exemple #1
0
 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)