From 8b9a3183c3dcb3de01389016e5d7188c61b6135f Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Fri, 5 Jan 2018 13:56:07 +0800 Subject: [PATCH] 2018-01-05 Update 3 Add passive message return event. --- .../Modbus.Net/Connector/BaseConnector.cs | 25 +++++----------- .../Modbus.Net/Connector/ComConnector.cs | 2 +- .../Modbus.Net/Connector/MessageEventArgs.cs | 20 +++++++++++++ .../Connector/SocketMessageEventArgs.cs | 29 ------------------- .../Modbus.Net/Connector/TcpConnector.cs | 7 ++++- .../Modbus.Net/Connector/UdpConnector.cs | 7 ++++- .../Modbus.Net/Controller/BaseController.cs | 8 ++--- .../Modbus.Net/Interface/IController.cs | 2 +- 8 files changed, 46 insertions(+), 54 deletions(-) create mode 100644 Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs delete mode 100644 Modbus.Net/Modbus.Net/Connector/SocketMessageEventArgs.cs diff --git a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs index 3335596..1ee7781 100644 --- a/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/BaseConnector.cs @@ -90,11 +90,11 @@ namespace Modbus.Net /// /// 基础的协议连接类 /// - public abstract class BaseConnector : IConnector + public abstract class BaseConnector : IConnector where TParamIn : class { - //protected delegate MessageReturnCallbackArgs MessageReturnDelegate(object sender, MessageReturnArgs args); + public delegate MessageReturnCallbackArgs MessageReturnDelegate(object sender, MessageReturnArgs args); - //protected event MessageReturnDelegate MessageReturn; + public event MessageReturnDelegate MessageReturn; /// /// 增加传输控制器 @@ -140,19 +140,10 @@ namespace Modbus.Net /// 接收消息单独线程停止 /// protected abstract void ReceiveMsgThreadStop(); + + protected TParamIn InvokeReturnMessage(TParamOut receiveMessage) + { + return MessageReturn?.Invoke(this, new MessageReturnArgs{ReturnMessage = receiveMessage})?.SendMessage; + } } - - /*public class MessageReturnArgs - { - public byte[] ReturnMessage { get; set; } - - public string MessageKey { get; set; } - } - - public class MessageReturnCallbackArgs - { - public bool ShouldLockSender { get; set; } = false; - - public bool ShouldReleaseSender { get; set; } = false; - }*/ } \ No newline at end of file diff --git a/Modbus.Net/Modbus.Net/Connector/ComConnector.cs b/Modbus.Net/Modbus.Net/Connector/ComConnector.cs index 895c111..3fa7d0f 100644 --- a/Modbus.Net/Modbus.Net/Connector/ComConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/ComConnector.cs @@ -491,7 +491,7 @@ namespace Modbus.Net var isMessageConfirmed = Controller.ConfirmMessage(returnBytes); foreach (var confirmed in isMessageConfirmed) { - if (confirmed == false) + if (confirmed.Item2 == false) { //主动传输事件 } diff --git a/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs b/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs new file mode 100644 index 0000000..f3f3c82 --- /dev/null +++ b/Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Modbus.Net +{ + public class MessageReturnArgs + { + public TParamOut ReturnMessage { get; set; } + } + + + + public class MessageReturnCallbackArgs + { + public TParamIn SendMessage { get; set; } + } +} diff --git a/Modbus.Net/Modbus.Net/Connector/SocketMessageEventArgs.cs b/Modbus.Net/Modbus.Net/Connector/SocketMessageEventArgs.cs deleted file mode 100644 index 78431e1..0000000 --- a/Modbus.Net/Modbus.Net/Connector/SocketMessageEventArgs.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Modbus.Net -{ - /* - /// - /// Socket收到的数据 - /// - public class SocketMessageEventArgs : EventArgs - { - /// - /// 构造器 - /// - /// 需要返回的信息 - public SocketMessageEventArgs(byte[] message) - { - Message = message; - } - - /// - /// 返回的信息 - /// - public byte[] Message { get; } - }*/ -} diff --git a/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs b/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs index 7de16e5..68a2181 100644 --- a/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/TcpConnector.cs @@ -241,9 +241,14 @@ namespace Modbus.Net var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes); foreach (var confirmed in isMessageConfirmed) { - if (confirmed == false) + if (confirmed.Item2 == false) { + var sendMessage = InvokeReturnMessage(confirmed.Item1); //主动传输事件 + if (sendMessage != null) + { + await SendMsgWithoutConfirm(sendMessage); + } } } diff --git a/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs b/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs index 2d2702c..cb62b49 100644 --- a/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs +++ b/Modbus.Net/Modbus.Net/Connector/UdpConnector.cs @@ -222,9 +222,14 @@ namespace Modbus.Net var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes); foreach (var confirmed in isMessageConfirmed) { - if (confirmed == false) + if (confirmed.Item2 == false) { + var sendMessage = InvokeReturnMessage(confirmed.Item1); //主动传输事件 + if (sendMessage != null) + { + await SendMsgWithoutConfirm(sendMessage); + } } } } diff --git a/Modbus.Net/Modbus.Net/Controller/BaseController.cs b/Modbus.Net/Modbus.Net/Controller/BaseController.cs index b87452d..80642ce 100644 --- a/Modbus.Net/Modbus.Net/Controller/BaseController.cs +++ b/Modbus.Net/Modbus.Net/Controller/BaseController.cs @@ -104,9 +104,9 @@ namespace Modbus.Net protected abstract (string,string)? GetKeyFromMessage(byte[] message); /// - public ICollection ConfirmMessage(byte[] receiveMessage) + public ICollection<(byte[], bool)> ConfirmMessage(byte[] receiveMessage) { - var ans = new List(); + var ans = new List<(byte[], bool)>(); var duplicatedMessages = DuplicateFunc?.Invoke(receiveMessage); duplicatedMessages = duplicatedMessages ?? new List {receiveMessage}; foreach (var message in duplicatedMessages) @@ -120,9 +120,9 @@ namespace Modbus.Net WaitingMessages.Remove(def); } def.ReceiveMutex.Set(); - ans.Add(true); + ans.Add((message, true)); } - ans.Add(false); + ans.Add((message, false)); } return ans; } diff --git a/Modbus.Net/Modbus.Net/Interface/IController.cs b/Modbus.Net/Modbus.Net/Interface/IController.cs index f911966..0c4306c 100644 --- a/Modbus.Net/Modbus.Net/Interface/IController.cs +++ b/Modbus.Net/Modbus.Net/Interface/IController.cs @@ -34,7 +34,7 @@ namespace Modbus.Net /// /// صϢ /// Ƿȷ - ICollection ConfirmMessage(byte[] receiveMessage); + ICollection<(byte[], bool)> ConfirmMessage(byte[] receiveMessage); /// /// ûκηʱǿɾȴϵϢ