2018-01-05 Update 3 Add passive message return event.
This commit is contained in:
@@ -90,11 +90,11 @@ namespace Modbus.Net
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 基础的协议连接类
|
/// 基础的协议连接类
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class BaseConnector<TParamIn, TParamOut> : IConnector<TParamIn, TParamOut>
|
public abstract class BaseConnector<TParamIn, TParamOut> : IConnector<TParamIn, TParamOut> where TParamIn : class
|
||||||
{
|
{
|
||||||
//protected delegate MessageReturnCallbackArgs MessageReturnDelegate(object sender, MessageReturnArgs args);
|
public delegate MessageReturnCallbackArgs<TParamIn> MessageReturnDelegate(object sender, MessageReturnArgs<TParamOut> args);
|
||||||
|
|
||||||
//protected event MessageReturnDelegate MessageReturn;
|
public event MessageReturnDelegate MessageReturn;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 增加传输控制器
|
/// 增加传输控制器
|
||||||
@@ -140,19 +140,10 @@ namespace Modbus.Net
|
|||||||
/// 接收消息单独线程停止
|
/// 接收消息单独线程停止
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected abstract void ReceiveMsgThreadStop();
|
protected abstract void ReceiveMsgThreadStop();
|
||||||
|
|
||||||
|
protected TParamIn InvokeReturnMessage(TParamOut receiveMessage)
|
||||||
|
{
|
||||||
|
return MessageReturn?.Invoke(this, new MessageReturnArgs<TParamOut>{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;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
@@ -491,7 +491,7 @@ namespace Modbus.Net
|
|||||||
var isMessageConfirmed = Controller.ConfirmMessage(returnBytes);
|
var isMessageConfirmed = Controller.ConfirmMessage(returnBytes);
|
||||||
foreach (var confirmed in isMessageConfirmed)
|
foreach (var confirmed in isMessageConfirmed)
|
||||||
{
|
{
|
||||||
if (confirmed == false)
|
if (confirmed.Item2 == false)
|
||||||
{
|
{
|
||||||
//主动传输事件
|
//主动传输事件
|
||||||
}
|
}
|
||||||
|
|||||||
20
Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs
Normal file
20
Modbus.Net/Modbus.Net/Connector/MessageEventArgs.cs
Normal file
@@ -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<TParamOut>
|
||||||
|
{
|
||||||
|
public TParamOut ReturnMessage { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class MessageReturnCallbackArgs<TParamIn>
|
||||||
|
{
|
||||||
|
public TParamIn SendMessage { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace Modbus.Net
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
/// <summary>
|
|
||||||
/// Socket收到的数据
|
|
||||||
/// </summary>
|
|
||||||
public class SocketMessageEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// 构造器
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="message">需要返回的信息</param>
|
|
||||||
public SocketMessageEventArgs(byte[] message)
|
|
||||||
{
|
|
||||||
Message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 返回的信息
|
|
||||||
/// </summary>
|
|
||||||
public byte[] Message { get; }
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
@@ -241,9 +241,14 @@ namespace Modbus.Net
|
|||||||
var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes);
|
var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes);
|
||||||
foreach (var confirmed in isMessageConfirmed)
|
foreach (var confirmed in isMessageConfirmed)
|
||||||
{
|
{
|
||||||
if (confirmed == false)
|
if (confirmed.Item2 == false)
|
||||||
{
|
{
|
||||||
|
var sendMessage = InvokeReturnMessage(confirmed.Item1);
|
||||||
//主动传输事件
|
//主动传输事件
|
||||||
|
if (sendMessage != null)
|
||||||
|
{
|
||||||
|
await SendMsgWithoutConfirm(sendMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -222,9 +222,14 @@ namespace Modbus.Net
|
|||||||
var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes);
|
var isMessageConfirmed = Controller.ConfirmMessage(receiveBytes);
|
||||||
foreach (var confirmed in isMessageConfirmed)
|
foreach (var confirmed in isMessageConfirmed)
|
||||||
{
|
{
|
||||||
if (confirmed == false)
|
if (confirmed.Item2 == false)
|
||||||
{
|
{
|
||||||
|
var sendMessage = InvokeReturnMessage(confirmed.Item1);
|
||||||
//主动传输事件
|
//主动传输事件
|
||||||
|
if (sendMessage != null)
|
||||||
|
{
|
||||||
|
await SendMsgWithoutConfirm(sendMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,9 +104,9 @@ namespace Modbus.Net
|
|||||||
protected abstract (string,string)? GetKeyFromMessage(byte[] message);
|
protected abstract (string,string)? GetKeyFromMessage(byte[] message);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public ICollection<bool> ConfirmMessage(byte[] receiveMessage)
|
public ICollection<(byte[], bool)> ConfirmMessage(byte[] receiveMessage)
|
||||||
{
|
{
|
||||||
var ans = new List<bool>();
|
var ans = new List<(byte[], bool)>();
|
||||||
var duplicatedMessages = DuplicateFunc?.Invoke(receiveMessage);
|
var duplicatedMessages = DuplicateFunc?.Invoke(receiveMessage);
|
||||||
duplicatedMessages = duplicatedMessages ?? new List<byte[]> {receiveMessage};
|
duplicatedMessages = duplicatedMessages ?? new List<byte[]> {receiveMessage};
|
||||||
foreach (var message in duplicatedMessages)
|
foreach (var message in duplicatedMessages)
|
||||||
@@ -120,9 +120,9 @@ namespace Modbus.Net
|
|||||||
WaitingMessages.Remove(def);
|
WaitingMessages.Remove(def);
|
||||||
}
|
}
|
||||||
def.ReceiveMutex.Set();
|
def.ReceiveMutex.Set();
|
||||||
ans.Add(true);
|
ans.Add((message, true));
|
||||||
}
|
}
|
||||||
ans.Add(false);
|
ans.Add((message, false));
|
||||||
}
|
}
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace Modbus.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="receiveMessage">返回的信息</param>
|
/// <param name="receiveMessage">返回的信息</param>
|
||||||
/// <returns>是否正常确认</returns>
|
/// <returns>是否正常确认</returns>
|
||||||
ICollection<bool> ConfirmMessage(byte[] receiveMessage);
|
ICollection<(byte[], bool)> ConfirmMessage(byte[] receiveMessage);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 没有任何返回时强行删除等待队列上的信息
|
/// 没有任何返回时强行删除等待队列上的信息
|
||||||
|
|||||||
Reference in New Issue
Block a user