// 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 _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 data) async { for(var client in _clientList) { await client.send(data); } } Future stop() async { await _server?.close(); _started = false; return simpleFuture; } }