61 lines
1.6 KiB
Dart
61 lines
1.6 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 = [];
|
|
late ServerSocket? _server;
|
|
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);
|
|
});
|
|
return simpleFuture;
|
|
}
|
|
|
|
//implement in child
|
|
void onClientConnected(ProtobufClient client);
|
|
|
|
void onDisconnectedClient(ProtobufClient client)
|
|
{
|
|
client.removeDisconnectListener(onDisconnectedClient);
|
|
_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();
|
|
}
|
|
}
|