dart-app-core/lib/socket/protobuf_server.dart
build@lguplus.co.kr 2af436382e update server file
2024-01-11 15:52:13 +09:00

66 lines
1.7 KiB
Dart

// ignore_for_file: avoid_print, prefer_final_fields
import 'dart:io';
import 'package:dart_framework/socket/packets/message_common.pb.dart';
import 'package:dart_framework/socket/protobuf_client.dart';
import 'package:dart_framework/utils/system_util.dart';
import 'package:protobuf/protobuf.dart';
abstract class ProtobufServer
{
List<ProtobufClient> _clientList = [];
bool _started = false;
late ServerSocket? _server;
final String _host;
final int _port;
final ProtobufClient Function(Socket) _createNewClient;
bool get started => _started;
ProtobufServer(this._host, this._port, this._createNewClient);
Future start() async
{
_server = await ServerSocket.bind(_host, _port);
_server?.listen((Socket socket) {
var client = _createNewClient(socket);
client.addDisconnectListener(onDisconnectedClient);
client.addListener(onTemplateData);
_clientList.add(client);
onClientConnected(client);
_started = true;
});
return simpleFuture;
}
//implement in child
void onClientConnected(ProtobufClient client);
void onDisconnectedClient(ProtobufClient client)
{
_clientList.remove(client);
client.dispose();
print('Client disconnected');
}
void onTemplateData(TestData data)
{
print(data.message);
var template = TestData();
template.index = 3125;
template.message = 'This message from flutter';
_clientList[0].send(template);
}
Future broadcast<T extends GeneratedMessage>(T data) async {
for(var client in _clientList) {
await client.send(data);
}
}
Future stop() async {
await _server?.close();
_started = false;
return simpleFuture;
}
}