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);
///
/// ûκηʱǿɾȴϵϢ