6.4 KiB
DarkflameServer SimClient
A simulation client for testing and load testing the DarkflameServer.
Overview
The SimClient is a headless client that can simulate multiple player connections to test server performance, stability, and functionality. It's designed for:
- Load Testing: Simulate many concurrent users
- Performance Testing: Measure server response under load
- Regression Testing: Automated testing of server functionality
- Development Testing: Quick connectivity and feature testing
Features
- Multiple Client Simulation: Spawn many simulated clients
- Configurable Behaviors: Movement, chat, random actions
- Network Statistics: Track packets, bytes, connection stats
- Flexible Configuration: File-based and command-line configuration
- Different Test Modes: Basic, load, stress, movement, chat tests
- Real-time Monitoring: Live statistics and status updates
Building
The SimClient is built as part of the normal DarkflameServer build process:
mkdir build && cd build
cmake ..
make SimClient # or build SimClient target in Visual Studio
Usage
Basic Usage
# Run with default settings (1 client)
./SimClient
# Run load test with 10 clients
./SimClient -n 10 -t load
# Run with verbose logging
./SimClient -v -n 5
# Connect to remote server
./SimClient -a 192.168.1.100:1001 -w 192.168.1.100:2000
Command Line Options
-h, --help
- Show help message-c, --config <file>
- Configuration file (default: simclient.ini)-n, --clients <count>
- Number of clients to simulate-a, --auth <ip:port>
- Auth server address-w, --world <ip:port>
- World server address-v, --verbose
- Enable verbose logging-t, --test <type>
- Test type (basic, load, stress, movement, chat)
Test Types
- basic - Single client connectivity test
- load - Multiple client load test
- stress - High-load stress test (2x client count)
- movement - Movement simulation test
- chat - Chat functionality test
Configuration File
Create simclient.ini
to configure default settings:
# Server Settings
auth_server_ip=127.0.0.1
auth_server_port=1001
world_server_ip=127.0.0.1
world_server_port=2000
# Simulation Settings
client_count=5
spawn_delay_ms=2000
tick_rate_ms=16
# Behavior Settings
enable_movement=1
enable_chat=0
enable_random_actions=1
action_interval_ms=5000
# Test Accounts
test_account_1=testuser1:testpass1
test_account_2=testuser2:testpass2
Simulated Behaviors
Movement Simulation
- Random movement within zones
- Configurable movement patterns (random, circular, linear)
- Position updates sent to server
- Collision-free pathfinding
Chat Simulation
- Predefined message sets (normal, spam, roleplay)
- Configurable chat intervals
- Multiple chat channels support
Connection Management
- Automatic reconnection on failures
- Graceful disconnection handling
- Connection state tracking
- Error reporting and recovery
Statistics Tracking
- Packets sent/received per client
- Bytes sent/received per client
- Connection success/failure rates
- Real-time performance metrics
Use Cases
Load Testing
Test server performance under various loads:
# Test with 50 concurrent users
./SimClient -t load -n 50
# Stress test with 100 users
./SimClient -t stress -n 50 # Will actually use 100 (2x)
Development Testing
Quick testing during development:
# Basic connectivity test
./SimClient -t basic
# Test movement system
./SimClient -t movement -n 3
Automated Testing
Integrate into CI/CD pipelines:
#!/bin/bash
# Start server
./MasterServer &
./AuthServer &
./WorldServer &
sleep 5
# Run automated tests
./SimClient -t basic || exit 1
./SimClient -t load -n 10 || exit 1
# Cleanup
killall MasterServer AuthServer WorldServer
Performance Monitoring
Monitor server performance over time:
# Long-running load test with statistics
./SimClient -t load -n 25 -v > load_test_$(date +%Y%m%d_%H%M%S).log
Architecture
Components
- SimClient - Main executable and command-line interface
- SimConfig - Configuration management
- SimWorld - Simulation coordinator and statistics
- SimUser - Individual client simulation
- SimBehavior - Behavior patterns and actions
Network Protocol
The SimClient implements a simplified version of the DarkflameServer client protocol:
-
Authentication Flow
- Connect to AuthServer
- Send login credentials
- Receive session token
- Get world server info
-
World Connection
- Connect to WorldServer
- Send session validation
- Load character/world data
- Enter simulation mode
-
Simulation Loop
- Send position updates
- Process server messages
- Execute configured behaviors
- Maintain connection health
Error Handling
- Automatic retry on connection failures
- Graceful degradation on partial failures
- Detailed error logging and reporting
- Recovery strategies for different error types
Troubleshooting
Common Issues
Connection Refused
- Ensure servers are running and accessible
- Check firewall settings
- Verify IP addresses and ports
Authentication Failures
- Verify test account credentials
- Check database connectivity
- Review auth server logs
High Memory Usage
- Reduce client count for available RAM
- Monitor for memory leaks
- Use 64-bit build for large tests
Performance Issues
- Adjust tick rate and spawn delays
- Monitor server resource usage
- Check network bandwidth limits
Debugging
Enable verbose logging to see detailed operations:
./SimClient -v -n 1 -t basic
Check log files in the logs/
directory for detailed information.
Contributing
When adding new features to SimClient:
- Follow existing code patterns
- Add appropriate error handling
- Update configuration options
- Add command-line parameters as needed
- Update this documentation
- Test with various scenarios
Future Enhancements
Potential improvements for SimClient:
- Protocol Coverage: Support more game messages and features
- Behavior Scripting: Lua or Python scripting for custom behaviors
- Performance Profiling: Built-in server performance monitoring
- Web Interface: Real-time web dashboard for monitoring
- Distributed Testing: Coordinate multiple SimClient instances
- Recording/Playback: Record real client sessions and replay them