You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

104 lines
2.5 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using HslCommunication.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace HslCommunication.ModBus
{
/// <summary>
/// ModBus的异步状态信息
/// </summary>
internal class ModBusState
{
#region Constructor
/// <summary>
/// 实例化一个对象
/// </summary>
public ModBusState( )
{
hybirdLock = new SimpleHybirdLock( );
ConnectTime = DateTime.Now;
HeadByte = new byte[6];
}
#endregion
/// <summary>
/// 连接的时间
/// </summary>
public DateTime ConnectTime { get; private set; }
/// <summary>
/// 远端的地址
/// </summary>
public IPEndPoint IpEndPoint { get; internal set; }
/// <summary>
/// 远端的Ip地址
/// </summary>
public string IpAddress { get; internal set; }
/// <summary>
/// 工作套接字
/// </summary>
public Socket WorkSocket = null;
/// <summary>
/// 消息头的缓存
/// </summary>
public byte[] HeadByte = new byte[6];
/// <summary>
/// 消息头的接收长度
/// </summary>
public int HeadByteReceivedLength = 0;
/// <summary>
/// 内容数据缓存
/// </summary>
public byte[] Content = null;
/// <summary>
/// 内容数据接收长度
/// </summary>
public int ContentReceivedLength = 0;
/// <summary>
/// 回发信息的同步锁
/// </summary>
internal SimpleHybirdLock hybirdLock;
/// <summary>
/// 指示客户端是否下线已经下线则为1
/// </summary>
private int isSocketOffline = 0;
/// <summary>
/// 判断当前的客户端是否已经下线下线成功的话就返回True
/// </summary>
/// <returns></returns>
public bool IsModbusOffline( )
{
int tmp = System.Threading.Interlocked.CompareExchange( ref isSocketOffline, 1, 0 );
return tmp == 0;
}
/// <summary>
/// 清除原先的接收状态
/// </summary>
public void Clear( )
{
Array.Clear( HeadByte, 0, 6 );
HeadByteReceivedLength = 0;
Content = null;
ContentReceivedLength = 0;
}
}
}