diff --git a/lib/socket/protobuf_client.dart b/lib/socket/protobuf_client.dart index 4eeeb06..9304a9c 100644 --- a/lib/socket/protobuf_client.dart +++ b/lib/socket/protobuf_client.dart @@ -2,6 +2,7 @@ // ignore_for_file: avoid_init_to_null, prefer_final_fields, avoid_print import 'dart:io'; +import 'dart:async'; import 'dart:typed_data'; import 'package:dart_framework/utils/system_util.dart'; @@ -12,14 +13,17 @@ import 'package:dart_framework/socket/packets/message_common.pb.dart'; abstract class ProtobufClient extends Communicator { final int _headerSize = 4; + final int _heartbeatBuffer = 10; + final int _heartbeatTime; final Socket _socket; + late Timer? _heartbeatTimer = null; int? _length = null; bool _isAlive = false; late List _arrivedData = []; List _onDisconnectListenerList = []; - ProtobufClient(this._socket, Map)> parserMap) + ProtobufClient(this._socket, this._heartbeatTime, Map)> parserMap) { print('Connected New Client'); _isAlive = true; @@ -31,11 +35,20 @@ abstract class ProtobufClient extends Communicator addListener(onHeartBeat); _socket.listen(onData, onError: onError) .asFuture().then(onDisconnected); + // waitHeartbeat(); + } + + void waitHeartbeat() + { + _heartbeatTimer = Timer(Duration(seconds: _heartbeatTime + _heartbeatBuffer), () { + dispose(); + }); } void onHeartBeat(HeartBeat data) { - + _heartbeatTimer?.cancel(); + waitHeartbeat(); } void addDisconnectListener(void Function(ProtobufClient) handler) @@ -129,6 +142,7 @@ abstract class ProtobufClient extends Communicator void dispose() { + _isAlive = false; _socket.close(); } }