| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- from flask_socketio import emit
- from extensions import socketio, db
- from models import Event, Inventory
- from flask import request
- import json
- from dateutil import parser
- from datetime import datetime
- @socketio.on('connect')
- def handle_connect():
- print('Client connected')
- emit('clear_events')
-
- # Send history
- try:
- recent_events = Event.query.order_by(Event.timestamp.desc()).limit(30).all()
- print(f"Sending history: {len(recent_events)} events")
- for event in reversed(recent_events):
- emit('game_event', event.to_dict())
- except Exception as e:
- print(f"Error sending history: {e}")
- @socketio.on('disconnect')
- def handle_disconnect():
- print('Client disconnected')
- @socketio.on('game_event')
- def handle_game_event(data):
- # data = {type: 'CHAT', player: 'Name', content: 'Message', ...}
- print(f"Received event: {data}")
-
- # Save to DB
- try:
- if not data.get('type'):
- print(f"Error: Missing event type in {data}")
- return
- event_timestamp = None
- if data.get('timestamp'):
- try:
- event_timestamp = parser.parse(data.get('timestamp'))
- except Exception as e:
- print(f"Error parsing timestamp: {e}")
- event_timestamp = datetime.utcnow()
- event = Event(
- event_type=data.get('type'),
- player_uuid=data.get('uuid'),
- player_name=data.get('player'),
- content=data.get('content'),
- location=data.get('location'),
- timestamp=event_timestamp or datetime.utcnow()
- )
- db.session.add(event)
- db.session.commit()
- print(f"Event saved to DB: {event.id}")
- # If inventory data is present, save it
- if 'inventory' in data:
- inventory = Inventory(
- event_id=event.id,
- player_uuid=data.get('uuid'),
- items=json.dumps(data.get('inventory'))
- )
- db.session.add(inventory)
- db.session.commit()
- print(f"Inventory saved for event {event.id}")
-
- except Exception as e:
- print(f"Error saving event to DB: {str(e)}")
- db.session.rollback()
- # Broadcast to admin dashboard
- print(f"Broadcasting event: {data}")
- emit('game_event', data, broadcast=True)
- @socketio.on("*")
- def handle_any_event(event, methods=None, data=None):
- if event not in ['connect', 'disconnect']:
- print(f"Server received event: {event} with data: {data}")
|