From 7680ba81034fa830631695fe123b1fe7cae8f5de Mon Sep 17 00:00:00 2001 From: "build@lguplus.co.kr" Date: Sat, 25 Nov 2023 04:06:29 +0900 Subject: [PATCH] =?UTF-8?q?heart=20beat=20=EC=9E=91=EC=97=85=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/csharp/MessageCommon.cs | 110 +++++++++++++++++- assets/protobuf/message_common.proto | 2 + lib/socket/packets/message_common.pb.dart | 32 +++++ lib/socket/packets/message_common.pbjson.dart | 9 ++ lib/socket/protobuf_client.dart | 6 + lib/socket/protobuf_server.dart | 27 +++-- 6 files changed, 171 insertions(+), 15 deletions(-) diff --git a/assets/csharp/MessageCommon.cs b/assets/csharp/MessageCommon.cs index a78a427..8bc7fd6 100644 --- a/assets/csharp/MessageCommon.cs +++ b/assets/csharp/MessageCommon.cs @@ -23,13 +23,14 @@ public static partial class MessageCommonReflection { byte[] descriptorData = global::System.Convert.FromBase64String( string.Concat( "ChRtZXNzYWdlX2NvbW1vbi5wcm90byI7CgpQYWNrZXRCYXNlEhAKCHR5cGVO", - "YW1lGAEgASgJEg0KBW5vbmNlGAIgASgFEgwKBGRhdGEYAyABKAwiLgoMVGVt", - "cGxhdGVEYXRhEg0KBWluZGV4GAEgASgFEg8KB21lc3NhZ2UYAiABKAliBnBy", - "b3RvMw==")); + "YW1lGAEgASgJEg0KBW5vbmNlGAIgASgFEgwKBGRhdGEYAyABKAwiCwoJSGVh", + "cnRCZWF0Ii4KDFRlbXBsYXRlRGF0YRINCgVpbmRleBgBIAEoBRIPCgdtZXNz", + "YWdlGAIgASgJYgZwcm90bzM=")); descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData, new pbr::FileDescriptor[] { }, new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::PacketBase), global::PacketBase.Parser, new[]{ "TypeName", "Nonce", "Data" }, null, null, null, null), + new pbr::GeneratedClrTypeInfo(typeof(global::HeartBeat), global::HeartBeat.Parser, null, null, null, null, null), new pbr::GeneratedClrTypeInfo(typeof(global::TemplateData), global::TemplateData.Parser, new[]{ "Index", "Message" }, null, null, null, null) })); } @@ -222,6 +223,107 @@ public sealed partial class PacketBase : pb::IMessage { } +public sealed partial class HeartBeat : pb::IMessage { + private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new HeartBeat()); + private pb::UnknownFieldSet _unknownFields; + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pb::MessageParser Parser { get { return _parser; } } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public static pbr::MessageDescriptor Descriptor { + get { return global::MessageCommonReflection.Descriptor.MessageTypes[1]; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + pbr::MessageDescriptor pb::IMessage.Descriptor { + get { return Descriptor; } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeartBeat() { + OnConstruction(); + } + + partial void OnConstruction(); + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeartBeat(HeartBeat other) : this() { + _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public HeartBeat Clone() { + return new HeartBeat(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override bool Equals(object other) { + return Equals(other as HeartBeat); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public bool Equals(HeartBeat other) { + if (ReferenceEquals(other, null)) { + return false; + } + if (ReferenceEquals(other, this)) { + return true; + } + return Equals(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override int GetHashCode() { + int hash = 1; + if (_unknownFields != null) { + hash ^= _unknownFields.GetHashCode(); + } + return hash; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public override string ToString() { + return pb::JsonFormatter.ToDiagnosticString(this); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void WriteTo(pb::CodedOutputStream output) { + if (_unknownFields != null) { + _unknownFields.WriteTo(output); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public int CalculateSize() { + int size = 0; + if (_unknownFields != null) { + size += _unknownFields.CalculateSize(); + } + return size; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(HeartBeat other) { + if (other == null) { + return; + } + _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute] + public void MergeFrom(pb::CodedInputStream input) { + uint tag; + while ((tag = input.ReadTag()) != 0) { + switch(tag) { + default: + _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input); + break; + } + } + } + +} + public sealed partial class TemplateData : pb::IMessage { private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new TemplateData()); private pb::UnknownFieldSet _unknownFields; @@ -230,7 +332,7 @@ public sealed partial class TemplateData : pb::IMessage { [global::System.Diagnostics.DebuggerNonUserCodeAttribute] public static pbr::MessageDescriptor Descriptor { - get { return global::MessageCommonReflection.Descriptor.MessageTypes[1]; } + get { return global::MessageCommonReflection.Descriptor.MessageTypes[2]; } } [global::System.Diagnostics.DebuggerNonUserCodeAttribute] diff --git a/assets/protobuf/message_common.proto b/assets/protobuf/message_common.proto index 0aa0cc3..54acc92 100644 --- a/assets/protobuf/message_common.proto +++ b/assets/protobuf/message_common.proto @@ -6,6 +6,8 @@ message PacketBase { bytes data = 3; } +message HeartBeat {} + message TemplateData { int32 index = 1; string message = 2; diff --git a/lib/socket/packets/message_common.pb.dart b/lib/socket/packets/message_common.pb.dart index e9ac75a..9c63a57 100644 --- a/lib/socket/packets/message_common.pb.dart +++ b/lib/socket/packets/message_common.pb.dart @@ -91,6 +91,38 @@ class PacketBase extends $pb.GeneratedMessage { void clearData() => clearField(3); } +class HeartBeat extends $pb.GeneratedMessage { + factory HeartBeat() => create(); + HeartBeat._() : super(); + factory HeartBeat.fromBuffer($core.List<$core.int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r); + factory HeartBeat.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r); + + static final $pb.BuilderInfo _i = $pb.BuilderInfo(_omitMessageNames ? '' : 'HeartBeat', createEmptyInstance: create) + ..hasRequiredFields = false + ; + + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.deepCopy] instead. ' + 'Will be removed in next major version') + HeartBeat clone() => HeartBeat()..mergeFromMessage(this); + @$core.Deprecated( + 'Using this can add significant overhead to your binary. ' + 'Use [GeneratedMessageGenericExtensions.rebuild] instead. ' + 'Will be removed in next major version') + HeartBeat copyWith(void Function(HeartBeat) updates) => super.copyWith((message) => updates(message as HeartBeat)) as HeartBeat; + + $pb.BuilderInfo get info_ => _i; + + @$core.pragma('dart2js:noInline') + static HeartBeat create() => HeartBeat._(); + HeartBeat createEmptyInstance() => create(); + static $pb.PbList createRepeated() => $pb.PbList(); + @$core.pragma('dart2js:noInline') + static HeartBeat getDefault() => _defaultInstance ??= $pb.GeneratedMessage.$_defaultFor(create); + static HeartBeat? _defaultInstance; +} + class TemplateData extends $pb.GeneratedMessage { factory TemplateData({ $core.int? index, diff --git a/lib/socket/packets/message_common.pbjson.dart b/lib/socket/packets/message_common.pbjson.dart index 386b6cb..ee7be7b 100644 --- a/lib/socket/packets/message_common.pbjson.dart +++ b/lib/socket/packets/message_common.pbjson.dart @@ -28,6 +28,15 @@ final $typed_data.Uint8List packetBaseDescriptor = $convert.base64Decode( 'CgpQYWNrZXRCYXNlEhoKCHR5cGVOYW1lGAEgASgJUgh0eXBlTmFtZRIUCgVub25jZRgCIAEoBV' 'IFbm9uY2USEgoEZGF0YRgDIAEoDFIEZGF0YQ=='); +@$core.Deprecated('Use heartBeatDescriptor instead') +const HeartBeat$json = { + '1': 'HeartBeat', +}; + +/// Descriptor for `HeartBeat`. Decode as a `google.protobuf.DescriptorProto`. +final $typed_data.Uint8List heartBeatDescriptor = $convert.base64Decode( + 'CglIZWFydEJlYXQ='); + @$core.Deprecated('Use templateDataDescriptor instead') const TemplateData$json = { '1': 'TemplateData', diff --git a/lib/socket/protobuf_client.dart b/lib/socket/protobuf_client.dart index a447850..92a4b69 100644 --- a/lib/socket/protobuf_client.dart +++ b/lib/socket/protobuf_client.dart @@ -24,10 +24,16 @@ class ProtobufClient extends Communicator super.initialize({ (TemplateData).toString() : TemplateData.fromBuffer }); + addListener(onHeartBeat); _socket.listen(onData, onError: onError) .asFuture().then(onDisconnected); } + void onHeartBeat(HeartBeat data) + { + + } + void addDisconnectListener(void Function(ProtobufClient) handler) { if(!_onDisconnectListenerList.contains(handler)) diff --git a/lib/socket/protobuf_server.dart b/lib/socket/protobuf_server.dart index 0cc3053..69b52e7 100644 --- a/lib/socket/protobuf_server.dart +++ b/lib/socket/protobuf_server.dart @@ -4,26 +4,31 @@ import 'dart:io'; import 'package:dart_framework/socket/packets/message_common.pb.dart'; import 'package:dart_framework/socket/protobuf_client.dart'; -class ProtobufServer +abstract class ProtobufServer { late ServerSocket _server; List _clientList = []; - String _host; - int _port; + final String _host; + final int _port; + final ProtobufClient Function(Socket) _createNewClient; - ProtobufServer(this._host, this._port); + ProtobufServer(this._host, this._port, this._createNewClient); Future start() async { _server = await ServerSocket.bind(_host, _port); _server.listen((Socket socket) { - var client = ProtobufClient(socket); + var client = _createNewClient(socket); client.addDisconnectListener(onDisconnectedClient); - client.addListener(onTestSocket); + client.addListener(onTemplateData); _clientList.add(client); + onClientConnected(client); }); } + //implement in child + void onClientConnected(ProtobufClient client); + void onDisconnectedClient(ProtobufClient client) { _clientList.remove(client); @@ -31,12 +36,12 @@ class ProtobufServer print('Client disconnected'); } - void onTestSocket(TemplateData data) + void onTemplateData(TemplateData data) { print(data.message); - var test = TemplateData(); - test.index = 3125; - test.message = 'This message from flutter'; - _clientList[0].send(test); + var template = TemplateData(); + template.index = 3125; + template.message = 'This message from flutter'; + _clientList[0].send(template); } }