47 lines
1.2 KiB
Dart
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);
|
|
}
|
|
}
|