Files
2026-03-09 17:50:20 +08:00

234 lines
6.8 KiB
Markdown

# Codely Bridge
Codely Bridge is a lightweight TCP socket server implementation for Unity Editor that provides networking capabilities with port management and client handling.
## Features
### 🚀 TCP Socket Server
- **Modern Architecture**: Built with async/await patterns for Unity Editor
- **Automatic Port Management**: Smart port allocation with project-specific persistence
- **Client Connection Handling**: Multi-client support with proper connection management
- **Socket Configuration**: Optimized socket options for reliable connections
### ⚙️ Port Management
- **Dynamic Port Allocation**: Automatically finds available ports starting from default (25916)
- **Project-Specific Storage**: Remembers port settings per Unity project
- **Port Conflict Resolution**: Handles port conflicts gracefully with fallback options
- **Cross-Platform Support**: Works on Windows, macOS, and Linux
### 🔧 TCP Features
- **Keep-Alive Support**: Configurable socket keep-alive for stable connections
- **Connection Timeout**: Prevents hanging connections with configurable timeouts
- **Multi-Client Support**: Handles multiple simultaneous client connections
- **Graceful Shutdown**: Proper cleanup on Unity Editor shutdown or assembly reload
### 🎛️ Unity Editor Integration
- **Control Window**: Full-featured TCP bridge management interface (`Tools > Codely Bridge > Control Window`)
- **Status Window**: Compact dockable status monitor (`Tools > Codely Bridge > Status Window`)
- **Menu Items**: Quick actions via Unity menu (`Tools > Codely Bridge`)
- **Real-time Status**: Live server status updates and port information
- **Debug Controls**: Toggle debug logging and port management tools
## Installation
### Requirements
- Unity 2021.3 or later
### Setup
1. Add this package to your Unity project
2. The TCP server will start automatically when Unity loads
3. Check Unity Console for server startup confirmation and port information
## Usage
### Basic TCP Server
The TCP server starts automatically when Unity loads and listens for client connections. By default:
- **Default Port**: 25916 (automatically managed)
- **Protocol**: Basic TCP with welcome message
- **Echo Server**: Currently configured as an echo server (sends received data back to client)
### Using the Unity Editor UI
Access the TCP Bridge controls through Unity's menu system:
1. **Control Window**: `Tools > Codely Bridge > Control Window`
- Complete server management interface
- Real-time status monitoring
- Server start/stop/restart controls
- Port management and configuration
- Debug logging controls
2. **Status Window**: `Tools > Codely Bridge > Status Window`
- Compact status display (can be docked)
- Quick start/stop buttons
- Shows current port and connection status
3. **Menu Actions**: `Tools > Codely Bridge > [Action]`
- Quick server operations
- Port discovery and management
- Debug logging toggle
### Connecting to the Server
```bash
# Example using telnet (replace 25916 with actual port shown in Unity Console or UI)
telnet localhost 25916
```
### Customizing the Protocol
The current implementation includes a basic echo server. To customize for your needs:
1. Modify the `HandleClientAsync` method in `UnityTcpBridge.cs`
2. Replace the echo logic with your custom protocol handling
3. Update the welcome message format if needed
### Port Management
```csharp
// Get the current port
int port = UnityTcpBridge.GetCurrentPort();
// Check if server is running
bool isRunning = UnityTcpBridge.IsRunning;
// Manually start/stop (usually automatic)
UnityTcpBridge.Start();
UnityTcpBridge.Stop();
```
## Architecture
### TCP Server Implementation
```
External TCP Client → Codely Bridge Server → Custom Protocol Handler
```
### Key Components
- **UnityTcpBridge**: Main TCP server with lifecycle management
- **PortManager**: Dynamic port allocation and persistence
- **TcpLog**: Logging utility for TCP operations
### Performance Features
- **Async Operations**: Non-blocking I/O operations
- **Connection Pooling**: Efficient client connection management
- **Resource Cleanup**: Automatic cleanup on Unity lifecycle events
## Configuration
### Debug Logging
Enable detailed logging for troubleshooting:
```csharp
// In Unity Editor, set this EditorPref:
EditorPrefs.SetBool("UnityTcp.DebugLogs", true);
```
### Port Configuration
The server automatically manages ports, but you can access port management:
```csharp
// Check if a port is available
bool available = PortManager.IsPortAvailable(25916);
// Get port with fallback
int port = PortManager.GetPortWithFallback();
// Discover a new port
int newPort = PortManager.DiscoverNewPort();
```
## Development
### Building from Source
1. Clone this repository
2. Open in Unity 2021.3 or later
3. The TCP server will start automatically
4. Check Unity Console for server status
### Customizing the Protocol
To implement your custom TCP protocol:
1. **Modify HandleClientAsync**: Replace the echo server logic
2. **Update Welcome Message**: Change the initial handshake
3. **Add Message Parsing**: Implement your message format
4. **Error Handling**: Add appropriate error handling for your protocol
Example customization:
```csharp
// In HandleClientAsync method, replace echo logic with:
while (!token.IsCancellationRequested && client.Connected)
{
// Read client message
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, token);
if (bytesRead == 0) break;
// Parse your custom message format
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
// Process the message according to your protocol
string response = ProcessCustomMessage(message);
// Send response
byte[] responseBytes = Encoding.UTF8.GetBytes(response);
await stream.WriteAsync(responseBytes, 0, responseBytes.Length, token);
}
```
## Troubleshooting
### Common Issues
**Port Already in Use**
- The server will automatically find an alternative port
- Check Unity Console for the actual port being used
- Use `PortManager.DiscoverNewPort()` to force a new port
**Server Won't Start**
- Verify Unity project is loaded properly
- Check Unity Console for error messages
- Ensure no firewall is blocking the port
**Client Can't Connect**
- Verify the server is running (check Unity Console)
- Use the correct port number shown in Unity Console
- Ensure localhost connectivity
**Connection Drops**
- Check if client is sending data within timeout period (60 seconds default)
- Enable debug logging to see connection details
- Verify client is properly handling the welcome message
### Debug Logging
Enable detailed logging to get comprehensive information about:
- Server startup and port allocation
- Client connections and disconnections
- Data transmission and errors
- Port management decisions
## License
This project is licensed under the MIT License.