simplify server logic with assignment expressions
This commit is contained in:
parent
da28f045a3
commit
5a0abfea54
@ -141,88 +141,87 @@ def set_username(sid, username):
|
|||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
@bang_handler
|
@bang_handler
|
||||||
def get_me(sid, room):
|
def get_me(sid, data):
|
||||||
if isinstance(sio.get_session(sid), Player):
|
if isinstance(sio.get_session(sid), Player):
|
||||||
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
||||||
if sio.get_session(sid).game:
|
if sio.get_session(sid).game:
|
||||||
sio.get_session(sid).game.notify_room()
|
sio.get_session(sid).game.notify_room()
|
||||||
else:
|
else:
|
||||||
dt = room["discord_token"] if 'discord_token' in room else None
|
dt = data["discord_token"] if 'discord_token' in data else None
|
||||||
sio.save_session(sid, Player('player', sid, discord_token=dt))
|
sio.save_session(sid, Player('player', sid, discord_token=dt))
|
||||||
if 'replay' in room and room['replay'] != None:
|
if 'replay' in data and data['replay'] != None:
|
||||||
create_room(sid, room['replay'])
|
create_room(sid, data['replay'])
|
||||||
sid = sio.get_session(sid)
|
sid = sio.get_session(sid)
|
||||||
sid.game.is_hidden = True
|
sid.game.is_hidden = True
|
||||||
eventlet.sleep(0.5)
|
eventlet.sleep(0.5)
|
||||||
response = requests.get(f"https://hastebin.com/raw/{room['replay']}")
|
response = requests.get(f"https://hastebin.com/raw/{data['replay']}")
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
sio.emit('chat_message', room=sid, data={'color': f'green','text':f'Invalid replay code'})
|
sio.emit('chat_message', room=sid, data={'color': f'green','text':f'Invalid replay code'})
|
||||||
return
|
return
|
||||||
log = response.text.splitlines()
|
log = response.text.splitlines()
|
||||||
sid.game.spectators.append(sid)
|
sid.game.spectators.append(sid)
|
||||||
if 'ffw' not in room:
|
if 'ffw' not in data:
|
||||||
sid.game.replay(log)
|
sid.game.replay(log)
|
||||||
else:
|
else:
|
||||||
sid.game.replay(log, speed=0, fast_forward=int(room['ffw']))
|
sid.game.replay(log, speed=0, fast_forward=int(data['ffw']))
|
||||||
return
|
return
|
||||||
de_games = [g for g in games if g.name == room['name']]
|
if (room := next((g for g in games if g.name == data['name']), None)) is not None:
|
||||||
if len(de_games) == 1 and not de_games[0].started:
|
if not room.started:
|
||||||
join_room(sid, room)
|
join_room(sid, data)
|
||||||
elif len(de_games) == 1 and de_games[0].started:
|
elif room.started:
|
||||||
print('room exists')
|
print('room exists')
|
||||||
if room['username'] != None and any((p.name == room['username'] for p in de_games[0].players if (p.is_bot or (dt != None and p.discord_token == dt) or p.sid == None))):
|
if data['username'] != None and any((p.name == data['username'] for p in room.players if (p.is_bot or (dt != None and p.discord_token == dt) or p.sid == None))):
|
||||||
print('getting inside the bot')
|
print('getting inside the bot')
|
||||||
bot = [p for p in de_games[0].players if (p.is_bot or (dt != None and p.discord_token == dt) or p.sid == None) and p.name == room['username']][0]
|
bot = [p for p in room.players if (p.is_bot or (dt != None and p.discord_token == dt) or p.sid == None) and p.name == data['username']][0]
|
||||||
bot.sid = sid
|
bot.sid = sid
|
||||||
bot.is_bot = False
|
bot.is_bot = False
|
||||||
sio.enter_room(sid, de_games[0].name)
|
sio.enter_room(sid, room.name)
|
||||||
sio.save_session(sid, bot)
|
sio.save_session(sid, bot)
|
||||||
de_games[0].notify_room(sid)
|
room.notify_room(sid)
|
||||||
eventlet.sleep(0.1)
|
eventlet.sleep(0.1)
|
||||||
de_games[0].notify_all()
|
room.notify_all()
|
||||||
de_games[0].notify_scrap_pile(sid)
|
room.notify_scrap_pile(sid)
|
||||||
sio.emit('role', room=sid, data=json.dumps(bot.role, default=lambda o: o.__dict__))
|
sio.emit('role', room=sid, data=json.dumps(bot.role, default=lambda o: o.__dict__))
|
||||||
bot.notify_self()
|
bot.notify_self()
|
||||||
if len(bot.available_characters) > 0:
|
if len(bot.available_characters) > 0:
|
||||||
bot.set_available_character(bot.available_characters)
|
bot.set_available_character(bot.available_characters)
|
||||||
else: #spectate
|
else: #spectate
|
||||||
de_games[0].spectators.append(sio.get_session(sid))
|
room.spectators.append(sio.get_session(sid))
|
||||||
sio.get_session(sid).game = de_games[0]
|
sio.get_session(sid).game = room
|
||||||
sio.enter_room(sid, de_games[0].name)
|
sio.enter_room(sid, room.name)
|
||||||
de_games[0].notify_room(sid)
|
room.notify_room(sid)
|
||||||
eventlet.sleep(0.1)
|
eventlet.sleep(0.1)
|
||||||
|
room.notify_event_card(sid)
|
||||||
de_games[0].notify_event_card(sid)
|
room.notify_scrap_pile(sid)
|
||||||
de_games[0].notify_scrap_pile(sid)
|
room.notify_all()
|
||||||
de_games[0].notify_all()
|
room.notify_gold_rush_shop()
|
||||||
de_games[0].notify_gold_rush_shop()
|
room.notify_event_card()
|
||||||
de_games[0].notify_event_card()
|
|
||||||
else:
|
else:
|
||||||
create_room(sid, room['name'])
|
create_room(sid, data['name'])
|
||||||
if sio.get_session(sid).game == None:
|
if (p := sio.get_session(sid)).game is None:
|
||||||
sio.emit('me', data={'error':'Wrong password/Cannot connect'}, room=sid)
|
sio.emit('me', data={'error':'Wrong password/Cannot connect'}, room=sid)
|
||||||
else:
|
else:
|
||||||
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
sio.emit('me', data=p.name, room=sid)
|
||||||
if room['username'] == None or any((p.name == room['username'] for p in sio.get_session(sid).game.players if not ((dt != None and p.discord_token == dt) or p.sid == None))):
|
if data['username'] == None or any((pl.name == data['username'] for pl in p.game.players if not ((dt != None and pl.discord_token == dt) or pl.sid == None))):
|
||||||
sio.emit('change_username', room=sid)
|
sio.emit('change_username', room=sid)
|
||||||
else:
|
else:
|
||||||
sio.emit('chat_message', room=sio.get_session(sid).game.name, data=f"_change_username|{sio.get_session(sid).name}|{room['username']}")
|
sio.emit('chat_message', room=p.game.name, data=f"_change_username|{p.name}|{data['username']}")
|
||||||
sio.get_session(sid).name = room['username']
|
p.name = data['username']
|
||||||
sio.emit('me', data=sio.get_session(sid).name, room=sid)
|
sio.emit('me', data=p.name, room=sid)
|
||||||
if not sio.get_session(sid).game.started:
|
if not p.game.started:
|
||||||
sio.get_session(sid).game.notify_room()
|
p.game.notify_room()
|
||||||
|
|
||||||
@sio.event
|
@sio.event
|
||||||
@bang_handler
|
@bang_handler
|
||||||
def disconnect(sid):
|
def disconnect(sid):
|
||||||
global online_players
|
global online_players
|
||||||
online_players -= 1
|
online_players -= 1
|
||||||
if sio.get_session(sid):
|
if (p := sio.get_session(sid)) is not None:
|
||||||
sio.emit('players', room='lobby', data=online_players)
|
sio.emit('players', room='lobby', data=online_players)
|
||||||
if sio.get_session(sid).game and sio.get_session(sid).disconnect():
|
if p.game and p.disconnect():
|
||||||
sio.close_room(sio.get_session(sid).game.name)
|
sio.close_room(p.game.name)
|
||||||
if sio.get_session(sid).game in games:
|
if p.game in games:
|
||||||
games.pop(games.index(sio.get_session(sid).game))
|
games.pop(games.index(p.game))
|
||||||
print('disconnect ', sid)
|
print('disconnect ', sid)
|
||||||
advertise_lobbies()
|
advertise_lobbies()
|
||||||
Metrics.send_metric('online_players', points=[online_players])
|
Metrics.send_metric('online_players', points=[online_players])
|
||||||
@ -230,13 +229,13 @@ def disconnect(sid):
|
|||||||
@sio.event
|
@sio.event
|
||||||
@bang_handler
|
@bang_handler
|
||||||
def create_room(sid, room_name):
|
def create_room(sid, room_name):
|
||||||
if sio.get_session(sid).game == None:
|
if (p := sio.get_session(sid)).game is None:
|
||||||
while any((g.name == room_name for g in games)):
|
while any((g.name == room_name for g in games)):
|
||||||
room_name += f'_{random.randint(0,100)}'
|
room_name += f'_{random.randint(0,100)}'
|
||||||
sio.leave_room(sid, 'lobby')
|
sio.leave_room(sid, 'lobby')
|
||||||
sio.enter_room(sid, room_name)
|
sio.enter_room(sid, room_name)
|
||||||
g = Game(room_name)
|
g = Game(room_name)
|
||||||
g.add_player(sio.get_session(sid))
|
g.add_player(p)
|
||||||
if room_name in blacklist:
|
if room_name in blacklist:
|
||||||
g.is_hidden = True
|
g.is_hidden = True
|
||||||
games.append(g)
|
games.append(g)
|
||||||
@ -458,8 +457,6 @@ def chat_message(sid, msg, pl=None):
|
|||||||
for msg in commands:
|
for msg in commands:
|
||||||
if '/addbot' in msg and not ses.game.started:
|
if '/addbot' in msg and not ses.game.started:
|
||||||
if len(msg.split()) > 1:
|
if len(msg.split()) > 1:
|
||||||
# for _ in range(int(msg.split()[1])):
|
|
||||||
# ses.game.add_player(Player(f'AI_{random.randint(0,1000)}', 'bot', bot=True))
|
|
||||||
sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'Only 1 bot at the time'})
|
sio.emit('chat_message', room=ses.game.name, data={'color': f'red','text':f'Only 1 bot at the time'})
|
||||||
else:
|
else:
|
||||||
bot = Player(f'AI_{random.randint(0,10)}', 'bot', bot=True)
|
bot = Player(f'AI_{random.randint(0,10)}', 'bot', bot=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user