Here’s the complete function code with all event handlers:
Python (Cloud Function)
async def on_connect(): """Called when a player connects""" player_name = request.get('player_name', 'Guest') # Join a room (auto-created if doesn't exist) room.join(request.get('room_id', 'lobby'), max_players=10) # Initialize room state on first player if not room.state: room.state = {'players': {}} # Add player to state room.state['players'][session.player_id] = { 'name': player_name, 'x': 400, 'y': 300, 'color': '#ff6b6b' } # Broadcast join event to all players await room.broadcast({ 'type': 'player_joined', 'player_id': session.player_id, 'player_name': player_name }) # Return welcome message to connecting player return { 'type': 'welcome', 'your_id': session.player_id, 'players': room.state['players'] }async def on_message(): """Called when a player sends a message""" action = request.get('action') if action == 'move': # Update player position x = request.get('x', 0) y = request.get('y', 0) if session.player_id in room.state['players']: room.state['players'][session.player_id]['x'] = x room.state['players'][session.player_id]['y'] = y # Broadcast movement to all other players await room.broadcast({ 'type': 'player_moved', 'player_id': session.player_id, 'x': x, 'y': y }, exclude=[session.player_id])async def on_disconnect(): """Called when a player disconnects""" if session.player_id in room.state['players']: player_name = room.state['players'][session.player_id]['name'] del room.state['players'][session.player_id] await room.broadcast({ 'type': 'player_left', 'player_id': session.player_id, 'player_name': player_name })