Example #1
0
def set_players_speaking(player_ids, speaking):
    for player_id in player_ids:
        old_player = _.head(_speaking_players.where(id=player_id))
        if speaking and not old_player:
            new_player = DataObject(id=player_id)
            _speaking_players.insert(new_player)
            messages.publish(PlayerSpeakingMessage("added", new_player))
        elif not speaking and old_player:
            _speaking_players.remove(old_player)
            messages.publish(PlayerSpeakingMessage("removed", old_player))
Example #2
0
def insert_user(id, name, game_name, unique_id, speaking, is_me, my_channel):
    if _users.where(id=id):
        return
    new_user = DataObject(id=id,
                          name=name,
                          game_name=game_name,
                          unique_id=unique_id,
                          speaking=speaking,
                          is_me=is_me,
                          my_channel=my_channel)
    _users.insert(new_user)
    messages.publish(UserMessage("added", new_user))
Example #3
0
def update_user(id, name, game_name, unique_id, speaking, is_me, my_channel):
    old_user = _.head(_users.where(id=id))
    if old_user:
        _users.remove(old_user)
        new_user = DataObject(id=id,
                              name=name,
                              game_name=game_name,
                              unique_id=unique_id,
                              speaking=speaking,
                              is_me=is_me,
                              my_channel=my_channel)
        _users.insert(new_user)
        messages.publish(UserMessage("modified", new_user))
Example #4
0
def insert_pairing(user_unique_id, player_id):
    if not _pairings.where(user_unique_id=user_unique_id, player_id=player_id):
        # Insert pairing
        pairing = DataObject(user_unique_id=user_unique_id,
                             player_id=player_id)
        _pairings.insert(pairing)
        # Insert pair's user to cache
        user = _.head(_users.where(unique_id=user_unique_id))
        if user:
            _cached_users.delete(unique_id=user.unique_id)
            _cached_users.insert(
                DataObject(unique_id=user.unique_id, name=user.name))
        # Insert pair's player to cache
        result = _battle_players.where(id=player_id)
        if not result:
            result = _prebattle_players.where(id=player_id)
        if not result:
            result = _me_player.where(id=player_id)
        player = _.head(result)
        if player:
            _cached_players.delete(id=player.id)
            _cached_players.insert(DataObject(id=player.id, name=player.name))
        # Notify listeners
        messages.publish(PairingMessage("added", pairing))
Example #5
0
def insert_prebattle_player(id, name):
    if not _prebattle_players.where(id=id):
        player = DataObject(id=id, name=name)
        _prebattle_players.insert(player)
        messages.publish(PrebattlePlayerMessage("added", player))
Example #6
0
def update_vehicle(id, player_id, is_alive):
    if _vehicles.delete(id=id):
        vehicle = DataObject(id=id, player_id=player_id, is_alive=is_alive)
        _vehicles.insert(vehicle)
        messages.publish(VehicleMessage("modified", vehicle))
Example #7
0
def insert_vehicle(id, player_id, is_alive):
    if not _vehicles.where(id=id):
        vehicle = DataObject(id=id, player_id=player_id, is_alive=is_alive)
        _vehicles.insert(vehicle)
        messages.publish(VehicleMessage("added", vehicle))
Example #8
0
def set_me_player(id, name):
    _me_player.remove_many(_me_player)
    player = DataObject(id=id, name=name)
    _me_player.insert(player)
    messages.publish(PlayerMeMessage("added", player))
Example #9
0
def migrate_user_cache_0_6_to_0_7(source_dirpath, dest_dirpath):
	"""
	This function migrates tessu_mod_cache.ini to following files:
	 * users_cache.v1.json
	 * players_cache.v1.json
	 * pairings_cache.v1.json
	"""
	source_filepath   = os.path.join(source_dirpath, "tessu_mod_cache.ini")
	users_filepath    = os.path.join(dest_dirpath, constants.USERS_CACHE_FILE)
	players_filepath  = os.path.join(dest_dirpath, constants.PLAYERS_CACHE_FILE)
	pairings_filepath = os.path.join(dest_dirpath, constants.PAIRINGS_CACHE_FILE)
	backup_filepath   = os.path.join(dest_dirpath, "tessu_mod_cache.ini.old-0.6")

	source_exists = os.path.isfile(source_filepath)
	dest_exists = all(map(os.path.isfile, [users_filepath, players_filepath, pairings_filepath]))

	if source_exists and not dest_exists:
		logger.info("Migrating caches from version 0.6 to 0.7")

		# Schema for new caches
		users = Table()
		users.create_index('unique_id', unique=True)
		players = Table()
		players.create_index('id', unique=True)
		pairings = Table()
		pairings.create_index('player_id')
		pairings.create_index('user_unique_id')

		# Load old 0.6.x cache file
		parser = ConfigParser.ConfigParser()
		with open(source_filepath, "rb") as file:
			parser.readfp(file)

		# Build new cache structures
		users.insert_many(DataObject(unique_id=id, name=name) for name, id in parser.items("TeamSpeakUsers"))
		players.insert_many(DataObject(id=int(id), name=name) for name, id in parser.items("GamePlayers"))
		for user_name, player_names in parser.items("UserPlayerPairings"):
			userid = _.head(users.where(name=user_name)).unique_id
			for player_name in list(csv.reader([player_names]))[0]:
				playerid = _.head(players.where(name=player_name)).id
				pairings.insert(DataObject(player_id=int(playerid), user_unique_id=userid))

		# Remove users & players which do not exist in pairings
		for user in users.clone():
			if not pairings.where(user_unique_id=user.unique_id):
				users.remove(user)
		for player in players.clone():
			if not pairings.where(player_id=player.id):
				players.remove(player)

		# create destination directory if it doesn't exist yet
		if not os.path.isdir(dest_dirpath):
			os.makedirs(dest_dirpath)

		# write out the new cache files
		users.json_export(users_filepath)
		players.json_export(players_filepath)
		pairings.json_export(pairings_filepath)

		# backup and remove old cache file
		backup_filepath = os.path.join(dest_dirpath, os.path.basename(source_filepath)) + ".old-0.6"
		if os.path.isfile(backup_filepath):
			os.remove(backup_filepath)
		os.rename(source_filepath, backup_filepath)