proto-socket/README.md
toki 240239682c Initial commit: Dart implementation of toki-socket protocol
- Protobuf-based binary TCP socket library
- ProtobufClient / ProtobufServer abstract classes with heartbeat
- Type-based message routing via Communicator
- 4-byte big-endian length-prefixed framing protocol
- 8 integration tests (all passing)
- PROTOCOL.md wire format specification
- VSCode launch.json for test runner

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 13:44:04 +09:00

84 lines
1.8 KiB
Markdown

# Toki Socket
Binary TCP socket protocol library for bidirectional, heterogeneous communication across languages and platforms.
Built on Protocol Buffers with a fixed 4-byte length-prefixed framing, type-based message routing, and built-in heartbeat.
---
## Protocol
See [PROTOCOL.md](PROTOCOL.md) for the full wire format specification.
```
[4-byte big-endian length] [PacketBase protobuf bytes]
```
---
## Implementations
| Language | Status | Path | Use case |
|----------|--------|------|----------|
| Dart | Available | [dart/](dart/) | Flutter, Dart server |
| C# | Planned | `csharp/` | Unity, .NET |
| Kotlin | Planned | `kotlin/` | Android |
| Swift | Planned | `swift/` | iOS, macOS |
---
## Quick Start (Dart)
```dart
import 'package:toki_socket/toki_socket.dart';
// 1. Define your message in message_common.proto, generate with protoc
// 2. Implement a client
class MyClient extends ProtobufClient {
MyClient(Socket socket) : super(socket, 30, 10, {
MyMessage.getDefault().info_.qualifiedMessageName: MyMessage.fromBuffer,
});
}
// 3. Implement a server
class MyServer extends ProtobufServer {
MyServer() : super('0.0.0.0', 9090, (socket) => MyClient(socket));
@override
void onClientConnected(ProtobufClient client) {
client.addListener<MyMessage>((msg) => print('Received: ${msg}'));
}
}
// 4. Start
final server = MyServer();
await server.start();
// 5. Connect and send
final socket = await Socket.connect('localhost', 9090);
final client = MyClient(socket);
await client.send(MyMessage()..text = 'hello');
```
---
## Adding Message Types
Edit `dart/lib/src/packets/message_common.proto` and regenerate:
```bash
cd dart
dart pub global activate protoc_plugin
protoc --dart_out=lib/src/packets lib/src/packets/message_common.proto
```
---
## Running Tests
```bash
cd dart
dart pub get
dart test
```