2018-01-05 Update 3 Add passive message return event.

This commit is contained in:
parallelbgls
2018-01-05 13:56:07 +08:00
parent 5f6175098c
commit 8b9a3183c3
8 changed files with 46 additions and 54 deletions

View File

@@ -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();
}
/*public class MessageReturnArgs
protected TParamIn InvokeReturnMessage(TParamOut receiveMessage)
{
public byte[] ReturnMessage { get; set; }
public string MessageKey { get; set; }
return MessageReturn?.Invoke(this, new MessageReturnArgs<TParamOut>{ReturnMessage = receiveMessage})?.SendMessage;
}
}
public class MessageReturnCallbackArgs
{
public bool ShouldLockSender { get; set; } = false;
public bool ShouldReleaseSender { get; set; } = false;
}*/
}

View File

@@ -491,7 +491,7 @@ namespace Modbus.Net
var isMessageConfirmed = Controller.ConfirmMessage(returnBytes);
foreach (var confirmed in isMessageConfirmed)
{
if (confirmed == false)
if (confirmed.Item2 == false)
{
//主动传输事件
}

View 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; }
}
}

View File

@@ -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; }
}*/
}

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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;
}

View File

@@ -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>
/// 没有任何返回时强行删除等待队列上的信息