dart-app-core/lib/socket/protobuf_server.dart
2023-11-25 04:06:29 +09:00

47 lines
1.2 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';
abstract class ProtobufServer
{
late ServerSocket _server;
List<ProtobufClient> _clientList = [];
final String _host;
final int _port;
final ProtobufClient Function(Socket) _createNewClient;
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);
});
}
//implement in child
void onClientConnected(ProtobufClient client);
void onDisconnectedClient(ProtobufClient client)
{
_clientList.remove(client);
client.dispose();
print('Client disconnected');
}
void onTemplateData(TemplateData data)
{
print(data.message);
var template = TemplateData();
template.index = 3125;
template.message = 'This message from flutter';
_clientList[0].send(template);
}
}