2018-01-05 Update 3 Add passive message return event.
This commit is contained in:
@@ -90,11 +90,11 @@ namespace Modbus.Net
|
||||
/// <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>
|
||||
/// 增加传输控制器
|
||||
@@ -140,19 +140,10 @@ namespace Modbus.Net
|
||||
/// 接收消息单独线程停止
|
||||
/// </summary>
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
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);
|
||||
|
||||
/// <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);
|
||||
duplicatedMessages = duplicatedMessages ?? new List<byte[]> {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;
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace Modbus.Net
|
||||
/// </summary>
|
||||
/// <param name="receiveMessage">返回的信息</param>
|
||||
/// <returns>是否正常确认</returns>
|
||||
ICollection<bool> ConfirmMessage(byte[] receiveMessage);
|
||||
ICollection<(byte[], bool)> ConfirmMessage(byte[] receiveMessage);
|
||||
|
||||
/// <summary>
|
||||
/// 没有任何返回时强行删除等待队列上的信息
|
||||
|
||||
Reference in New Issue
Block a user