Spaces:
Runtime error
Runtime error
| #!/usr/bin/env python3 | |
| """ | |
| Final corrected debug script to test keyboard controls and private chat functionality. | |
| """ | |
| import time | |
| import requests | |
| from src.facades.game_facade import GameFacade | |
| from src.core.game_engine import get_game_engine | |
| def test_keyboard_functionality(): | |
| """Test keyboard controls with detailed logging.""" | |
| print("🎮 Testing Keyboard Controls Functionality") | |
| print("=" * 60) | |
| try: | |
| # Initialize game facade | |
| facade = GameFacade() | |
| # Create test player | |
| player_id = facade.join_game("KeyboardDebugger") | |
| print(f"✅ Test player created: {player_id}") | |
| # Get initial player stats - handle the actual return format | |
| try: | |
| initial_stats = facade.get_player_stats(player_id) | |
| print(f"📍 Initial stats retrieved: {type(initial_stats)} - {initial_stats}") | |
| except Exception as e: | |
| print(f"⚠️ Could not get player stats: {e}") | |
| # Test all movement directions | |
| movements = [ | |
| ("up", "🔼", "w"), | |
| ("down", "🔽", "s"), | |
| ("left", "◀️", "a"), | |
| ("right", "▶️", "d") | |
| ] | |
| print("\n🎯 Testing movement commands (backend):") | |
| for direction, icon, key in movements: | |
| try: | |
| print(f" {icon} Testing {direction} movement (key: {key})...") | |
| result = facade.move_player(player_id, direction) | |
| if isinstance(result, tuple) and len(result) == 3: | |
| success, new_position, events = result | |
| if success: | |
| print(f" ✅ Success - New position: {new_position}") | |
| if events: | |
| print(f" 📝 Events: {events}") | |
| else: | |
| print(f" ❌ Failed - Movement blocked") | |
| elif result: | |
| print(f" ✅ Success - Result: {result}") | |
| else: | |
| print(f" ❌ Failed - Movement blocked or invalid") | |
| time.sleep(0.5) # Small delay between movements | |
| except Exception as e: | |
| print(f" ❌ Error: {str(e)}") | |
| # Test action command (spacebar) | |
| print(f"\n⚡ Testing special action (spacebar)...") | |
| try: | |
| if hasattr(facade, 'handle_action'): | |
| result = facade.handle_action(player_id) | |
| print(f" ✅ Action result: {result}") | |
| else: | |
| print(f" ⚠️ handle_action method not available") | |
| except Exception as e: | |
| print(f" ❌ Error: {str(e)}") | |
| # Cleanup | |
| facade.leave_game(player_id) | |
| print(f"\n🧹 Cleanup: Player {player_id} removed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Keyboard test failed: {str(e)}") | |
| return False | |
| def test_private_chat_functionality(): | |
| """Test private chat with detailed logging.""" | |
| print("\n💬 Testing Private Chat Functionality") | |
| print("=" * 60) | |
| try: | |
| # Initialize services correctly | |
| facade = GameFacade() | |
| engine = get_game_engine() | |
| # Get chat service from engine (with proper initialization) | |
| chat_service = engine.get_chat_service() | |
| # Create test players | |
| player1_id = facade.join_game("ChatTester1") | |
| player2_id = facade.join_game("ChatTester2") | |
| print(f"✅ Test players created: {player1_id}, {player2_id}") | |
| # Test private message sending using facade | |
| print(f"\n📤 Testing private message sending (via facade)...") | |
| try: | |
| result = facade.send_private_message( | |
| sender_id=player1_id, | |
| target_id=player2_id, | |
| message="Hello from final debug test!" | |
| ) | |
| print(f" {'✅ Message sent successfully' if result else '❌ Message failed to send'}") | |
| except Exception as e: | |
| print(f" ❌ Send error: {str(e)}") | |
| # Test message retrieval using facade | |
| print(f"\n📥 Testing private message retrieval (via facade)...") | |
| try: | |
| messages = facade.get_private_messages(player1_id, player2_id) | |
| print(f" ✅ Retrieved {len(messages)} messages") | |
| for i, msg in enumerate(messages[-3:], 1): # Show last 3 messages | |
| timestamp = msg.get('timestamp', 'no-time') | |
| sender = msg.get('sender_id', 'unknown') | |
| content = msg.get('message', 'no-message') | |
| print(f" {i}. [{timestamp}] {sender}: {content}") | |
| except Exception as e: | |
| print(f" ❌ Retrieval error: {str(e)}") | |
| # Test direct chat service methods (properly initialized) | |
| print(f"\n📤 Testing private message sending (via chat service)...") | |
| try: | |
| success, result_msg = chat_service.send_private_message( | |
| sender_id=player1_id, | |
| target_id=player2_id, | |
| message="Direct chat service test message!" | |
| ) | |
| print(f" {'✅ Message sent successfully' if success else '❌ Message failed to send'}: {result_msg}") | |
| except Exception as e: | |
| print(f" ❌ Direct send error: {str(e)}") | |
| # Test proximity detection | |
| print(f"\n👥 Testing proximity detection...") | |
| try: | |
| proximity = facade.get_proximity_info(player1_id) | |
| nearby = proximity.get("nearby_entities", []) | |
| print(f" ✅ Found {len(nearby)} nearby entities") | |
| for entity in nearby: | |
| print(f" - {entity.get('id', 'unknown')} ({entity.get('type', 'unknown')})") | |
| except Exception as e: | |
| print(f" ❌ Proximity detection error: {str(e)}") | |
| # Test public chat | |
| print(f"\n📢 Testing public chat...") | |
| try: | |
| result = facade.send_chat_message(player1_id, "Hello from final debug test!") | |
| print(f" {'✅ Public message sent' if result else '❌ Public message failed'}") | |
| history = facade.get_chat_history(3) | |
| print(f" ✅ Retrieved {len(history)} chat records") | |
| except Exception as e: | |
| print(f" ❌ Public chat error: {str(e)}") | |
| # Cleanup | |
| facade.leave_game(player1_id) | |
| facade.leave_game(player2_id) | |
| print(f"\n🧹 Cleanup: Test players removed") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Private chat test failed: {str(e)}") | |
| return False | |
| def test_server_connectivity(): | |
| """Test server connectivity and UI availability.""" | |
| print("\n🌐 Testing Server Connectivity") | |
| print("=" * 60) | |
| try: | |
| # Test main application URL | |
| print("📡 Testing main application...") | |
| response = requests.get("http://localhost:7865", timeout=10) | |
| print(f" Status: {'✅ Online' if response.status_code == 200 else '❌ Error'}") | |
| print(f" Response time: {response.elapsed.total_seconds():.2f}s") | |
| print(f" Content length: {len(response.content)} bytes") | |
| # Check if Gradio interface is responding | |
| print("\n🖥️ Testing Gradio interface...") | |
| if "gradio" in response.text.lower() or "interface" in response.text.lower(): | |
| print(" ✅ Gradio interface detected") | |
| else: | |
| print(" ⚠️ Gradio interface not clearly detected") | |
| # Check for keyboard script presence | |
| print("\n⌨️ Checking keyboard script integration...") | |
| if any(keyword in response.text.lower() for keyword in ["gamekeyboard", "wasd", "keydown", "keyup", "addEventListener"]): | |
| print(" ✅ Keyboard controls detected in page") | |
| else: | |
| print(" ❌ Keyboard controls not found in page") | |
| # Check for private chat elements | |
| print("\n💬 Checking private chat integration...") | |
| if "private" in response.text.lower() and "chat" in response.text.lower(): | |
| print(" ✅ Private chat elements detected") | |
| else: | |
| print(" ❌ Private chat elements not clearly detected") | |
| return True | |
| except Exception as e: | |
| print(f"❌ Server connectivity test failed: {str(e)}") | |
| return False | |
| def main(): | |
| """Run comprehensive debug tests.""" | |
| print("🔍 MMORPG Features Debug Test (FINAL)") | |
| print("=" * 60) | |
| print("Testing keyboard controls and private chat functionality...") | |
| # Run all tests | |
| keyboard_ok = test_keyboard_functionality() | |
| chat_ok = test_private_chat_functionality() | |
| server_ok = test_server_connectivity() | |
| # Summary | |
| print("\n" + "=" * 60) | |
| print("📊 FINAL TEST SUMMARY") | |
| print("=" * 60) | |
| print(f"🎮 Keyboard Controls: {'✅ PASS' if keyboard_ok else '❌ FAIL'}") | |
| print(f"💬 Private Chat: {'✅ PASS' if chat_ok else '❌ FAIL'}") | |
| print(f"🌐 Server Connectivity: {'✅ PASS' if server_ok else '❌ FAIL'}") | |
| if all([keyboard_ok, chat_ok, server_ok]): | |
| print("\n🎉 ALL BACKEND FEATURES WORKING!") | |
| print("\n💡 Since all backend tests pass, the issues are in frontend integration:") | |
| print(" 1. Keyboard controls: JavaScript may not be executing properly") | |
| print(" 2. Private chat: UI may not be connecting to backend correctly") | |
| print(" 3. Both features work in backend - it's a UI/JavaScript issue") | |
| print("\n🚀 NEXT STEPS:") | |
| print(" 1. Open browser at: http://localhost:7865") | |
| print(" 2. Open browser Developer Tools (F12)") | |
| print(" 3. Check Console tab for JavaScript errors") | |
| print(" 4. Try using keyboard controls and check if events are firing") | |
| print(" 5. Try private chat and check network requests") | |
| else: | |
| print("\n⚠️ Some backend features have issues - need to fix these first.") | |
| print("=" * 60) | |
| if __name__ == "__main__": | |
| main() | |