Documentation: - Add detailed README files for all services (auth, character, database, launcher, packet, utils, world) - Create API documentation for the database service with detailed endpoint specifications - Document database schema and relationships - Add service architecture overviews and configuration instructions Unit Tests: - Implement comprehensive test suite for database repositories (user, character, session) - Add gRPC service tests for database interactions - Create tests for packet service components (bufferpool, connection, packets) - Add utility service tests (health check, logging, load balancer, redis cache, service discovery) - Implement auth service user tests - Add character service tests Code Structure: - Reorganize test files into a more consistent structure - Create a dedicated tests crate for integration testing - Add test helpers and mock implementations for easier testing
108 lines
3.1 KiB
Markdown
108 lines
3.1 KiB
Markdown
# Packet Service
|
|
|
|
The Packet Service handles communication between game clients and the MMORPG server using a custom binary packet protocol.
|
|
|
|
## Overview
|
|
|
|
The Packet Service is responsible for:
|
|
- Accepting TCP connections from game clients
|
|
- Parsing binary packet data
|
|
- Routing packets to appropriate handlers
|
|
- Sending response packets back to clients
|
|
- Managing client connection state
|
|
|
|
## Architecture
|
|
|
|
The service is built using the following components:
|
|
|
|
- **TCP Server**: Accepts client connections
|
|
- **Buffer Pool**: Efficiently manages memory for packet processing
|
|
- **Packet Router**: Routes packets to appropriate handlers
|
|
- **Connection Service**: Manages client connection state
|
|
- **Packet Handlers**: Process specific packet types
|
|
- **Auth/Character Clients**: Communicate with other services
|
|
|
|
## Packet Structure
|
|
|
|
Each packet follows a standard binary format:
|
|
|
|
```
|
|
+----------------+----------------+----------------+----------------+
|
|
| Packet Size | Packet Type | Packet CRC | Payload |
|
|
| (2 bytes) | (2 bytes) | (2 bytes) | (variable) |
|
|
+----------------+----------------+----------------+----------------+
|
|
```
|
|
|
|
- **Packet Size**: Total size of the packet in bytes (including header)
|
|
- **Packet Type**: Identifies the packet type (see `packet_type.rs`)
|
|
- **Packet CRC**: Checksum for packet validation
|
|
- **Payload**: Packet-specific data
|
|
|
|
## Packet Types
|
|
|
|
The service supports numerous packet types for different game operations:
|
|
|
|
- **Authentication**: Login, logout, server selection
|
|
- **Character**: Character creation, deletion, selection
|
|
- **Chat**: Normal chat, whispers, shouts, party chat
|
|
- **Movement**: Position updates, teleportation
|
|
- **Combat**: Attacks, skills, damage
|
|
- **Items**: Inventory management, equipment
|
|
- **Party**: Party formation, invitations
|
|
- **Trade**: Item trading between players
|
|
- **Shop**: NPC shop interactions
|
|
|
|
See `packet_type.rs` for a complete list of supported packet types.
|
|
|
|
## Connection State
|
|
|
|
The service maintains state for each client connection, including:
|
|
|
|
- User ID
|
|
- Session ID
|
|
- Character ID
|
|
- Character list
|
|
- Additional session data
|
|
|
|
## Metrics
|
|
|
|
The service exposes Prometheus metrics for monitoring:
|
|
|
|
- Active connections
|
|
- Packets received/sent
|
|
- Packet processing time
|
|
|
|
## Configuration
|
|
|
|
The service can be configured using environment variables:
|
|
|
|
- `LISTEN_ADDR`: The address to listen on (default: "0.0.0.0")
|
|
- `SERVICE_PORT`: The port to listen on (default: "29000")
|
|
- `PACKET_METRICS_PORT`: Port for Prometheus metrics (default: "9102")
|
|
- `MAX_CONCURRENT_CONNECTIONS`: Maximum allowed concurrent connections
|
|
- `BUFFER_POOL_SIZE`: Size of the packet buffer pool
|
|
- `LOG_LEVEL`: Logging level (default: "info")
|
|
|
|
## Running the Service
|
|
|
|
### Local Development
|
|
|
|
```bash
|
|
cargo run
|
|
```
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
docker build -t packet-service .
|
|
docker run -p 29000:29000 -p 9102:9102 packet-service
|
|
```
|
|
|
|
## Integration with External Systems
|
|
|
|
The Packet Service integrates with:
|
|
|
|
- **Auth Service**: For user authentication and session validation
|
|
- **Character Service**: For character management
|
|
- **World Service**: For game world interactions
|