From d2f5f854eeac2c24424ced0e8e3bf11709598282 Mon Sep 17 00:00:00 2001 From: "build@lguplus.co.kr" Date: Fri, 15 Dec 2023 19:51:58 +0900 Subject: [PATCH] =?UTF-8?q?=ED=95=98=ED=8A=B8=EB=B9=84=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/socket/protobuf_client.dart | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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(); } }