// 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 _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); } }