Commit 1c83e7ff 顾剑亮

添加日志

1 个父辈 dafcb7e7
此文件类型无法预览
......@@ -32,6 +32,9 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net">
<HintPath>..\..\..\DLL\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
......
......@@ -9,65 +9,155 @@ using System.Threading.Tasks;
namespace Asa.RFID
{
/// <summary>
/// 读取所有RFID
/// </summary>
public class ReadAll
{
/// <summary>
/// 接收数据包事件
/// </summary>
/// <param name="ip"></param>
/// <param name="id"></param>
public delegate void ReceivedEvent(string ip, string id);
/// <summary>
/// 接收数据包
/// </summary>
public event ReceivedEvent Received;
/// <summary>
/// 接收网卡缓存事件
/// </summary>
/// <param name="ip"></param>
/// <param name="buffer"></param>
public delegate void ReceiveBufferEvent(string ip, byte[] buffer);
/// <summary>
/// 接收网卡缓存
/// </summary>
public event ReceiveBufferEvent ReceiveBuffer;
public delegate void LogEvent(string ip, string log);
public event LogEvent Log;
private bool _loop;
private Socket _server; //服务端
private List<Client> _client; //所有客户端
private Thread tListenClient; //监听客户端连接
private Dictionary<string, string> _id; //RFID编号
private log4net.ILog log;
private const int CLIENT_SLEEP = 10;
public ReadAll()
/// <summary>
/// 读取所有RFID
/// </summary>
/// <param name="logName">日志名称</param>
public ReadAll(string logName)
{
_id = new Dictionary<string, string>();
log = log4net.LogManager.GetLogger(logName);
}
/// <summary>
/// 开启
/// </summary>
/// <param name="port">RFID设备的端口</param>
public void Start(int port = 13000)
{
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_server.Bind(localEP);
_server.Listen(100);
_loop = true;
_client = new List<Client>();
tListenClient = new Thread(new ThreadStart(ListenClient));
tListenClient.Start();
try
{
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_server.Bind(localEP);
_server.Listen(100);
_loop = true;
_client = new List<Client>();
tListenClient = new Thread(new ThreadStart(ListenClient));
tListenClient.Start();
log.Info("Server Start");
}
catch (Exception ex)
{
log.Error("Start", ex);
}
}
/// <summary>
/// 停止
/// </summary>
public void Stop()
{
_loop = false;
for (int i = 0; i < _client.Count; i++)
ClientClose(i);
try
{
_client[i].Loop = false;
_client[i].IsConn = false;
_client[i].Socket.Close();
_id.Clear();
_server.Close();
_client = null;
log.Info("Server Stop");
}
catch (Exception ex)
{
log.Error("Stop", ex);
}
_id.Clear();
_server.Close();
_client = null;
}
/// <summary>
/// 读取ID号
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public string Read(string ip)
{
if (_id.TryGetValue(ip, out string value))
{
log.Info("Read " + ip + " -> " + value);
return value;
}
else
{
log.Info("Read " + ip + " not exist, return 000");
return "000";
}
}
/// <summary>
/// 清除缓存
/// </summary>
/// <param name="ip"></param>
public void Clear(string ip)
{
_id[ip] = "000";
if (_id.ContainsKey(ip))
{
_id[ip] = "000";
log.Info("Clear " + ip);
}
else
{
log.Info("Clear " + ip + " not exist");
}
}
private void ClientClose(int idx)
{
try
{
_client[idx].Loop = false;
_client[idx].IsConn = false;
_client[idx].Socket.Close();
log.Info(_client[idx].IP + " Close");
}
catch (Exception ex)
{
log.Error("ClientClose", ex);
}
}
private void ListenClient()
......@@ -99,24 +189,25 @@ namespace Asa.RFID
_client[idx].IsConn = false;
_client[idx].Loop = false;
_client[idx].Socket.Close();
Log?.Invoke(_client[idx].IP, "offline");
_client.RemoveAt(idx);
log.Info(_client[idx].IP + " 重连,删除重复。");
}
//添加到数组
if (!_id.ContainsKey(client.IP))
_id.Add(client.IP, "000");
_client.Add(client);
Log?.Invoke(client.IP, "online");
log.Info(client.IP + " 连接");
listen.Start(_client.Count - 1);
}
catch (SocketException)
{
//关闭连接,退出阻塞Accept
log.Error("Socket Close");
}
catch (Exception ex)
{
log.Error("ListenClient", ex);
}
}
}
......@@ -140,32 +231,44 @@ namespace Asa.RFID
byte[] temp = new byte[count];
Array.Copy(buff, 0, temp, 0, count);
receive.AddRange(temp);
log.Debug("Receive: " + HexBuff(temp));
Task.Run(() => ReceiveBuffer?.Invoke(client.IP, temp));
int idx = receive.FindIndex(n => n == 0x5A);
if (idx == -1)
do
{
receive.Clear();
continue;
}
//查找包头
int idx = receive.FindIndex(n => n == 0x5A);
if (idx == -1)
{
receive.Clear();
log.Debug("整个缓存没有找到包头0x5A,清除缓存。");
break;
}
int len = idx + LENGTH + 1; //一个系统自带的0
if (len > receive.Count)
continue;
//长度不够,半个包
int len = idx + LENGTH + 1; //一个系统自带的0
if (len > receive.Count) break;
if (receive[len - 3] == 0x4A) //一个系统的0,两个校验位
{
byte[] arr = new byte[LENGTH];
receive.CopyTo(idx, arr, 0, 4);
receive.CopyTo(idx + 5, arr, 4, 4);
Task.Run(() => TriggerEvent(client.IP, arr));
}
receive.RemoveRange(0, len);
//查找包尾
if (receive[len - 3] == 0x4A) //一个系统的0,两个校验位
{
byte[] arr = new byte[LENGTH];
receive.CopyTo(idx, arr, 0, 4);
receive.CopyTo(idx + 5, arr, 4, 4);
log.Info("Packet: " + HexBuff(arr));
Task.Run(() => TriggerEvent(client.IP, arr));
}
else
{
log.Debug("指定字节没有包尾," + HexBuff(receive, idx, 9));
}
receive.RemoveRange(0, len);
} while (true);
}
}
catch (Exception ex)
{
//client.Loop = false;
log.Error("ListenNet", ex);
}
}
......@@ -175,18 +278,43 @@ namespace Asa.RFID
{
string s;
if (buff[1] == 0)
{
s = "000";
log.Info(ip + " byte 0");
}
else
{
s = (char)buff[1] + buff[2].ToString();
}
if (!_id[ip].Equals(s))
{
_id[ip] = s;
Log?.Invoke(ip, s);
log.Info("Trigger " + ip + " -> " + s);
Received?.Invoke(ip, s);
}
}
private string HexBuff(byte[] buff)
{
string s = "";
if (buff == null) return s;
for (int i = 0; i < buff.Length; i++)
s += buff[i].ToString("X2") + " ";
return s;
}
private string HexBuff(List<byte> buff, int start, int len)
{
string s = "";
if (buff == null) return s;
for (int i = 0; i < len; i++)
s += buff[i + start].ToString("X2") + " ";
return s;
}
private class Client
{
public bool Loop;
......@@ -194,6 +322,7 @@ namespace Asa.RFID
public bool IsConn;
public Socket Socket;
public Thread ListenNet;
}
......
......@@ -4,5 +4,64 @@
<name>Asa.RFID</name>
</assembly>
<members>
<member name="T:Asa.RFID.ReadAll">
<summary>
读取所有RFID
</summary>
</member>
<member name="T:Asa.RFID.ReadAll.ReceivedEvent">
<summary>
接收数据包事件
</summary>
<param name="ip"></param>
<param name="id"></param>
</member>
<member name="E:Asa.RFID.ReadAll.Received">
<summary>
接收数据包
</summary>
</member>
<member name="T:Asa.RFID.ReadAll.ReceiveBufferEvent">
<summary>
接收网卡缓存事件
</summary>
<param name="ip"></param>
<param name="buffer"></param>
</member>
<member name="E:Asa.RFID.ReadAll.ReceiveBuffer">
<summary>
接收网卡缓存
</summary>
</member>
<member name="M:Asa.RFID.ReadAll.#ctor(System.String)">
<summary>
读取所有RFID
</summary>
<param name="logName">日志名称</param>
</member>
<member name="M:Asa.RFID.ReadAll.Start(System.Int32)">
<summary>
开启
</summary>
<param name="port">RFID设备的端口</param>
</member>
<member name="M:Asa.RFID.ReadAll.Stop">
<summary>
停止
</summary>
</member>
<member name="M:Asa.RFID.ReadAll.Read(System.String)">
<summary>
读取ID号
</summary>
<param name="ip"></param>
<returns></returns>
</member>
<member name="M:Asa.RFID.ReadAll.Clear(System.String)">
<summary>
清除缓存
</summary>
<param name="ip"></param>
</member>
</members>
</doc>
此文件类型无法预览
9b68bc78b009177994d766ec5b467f71d6022fba
69c039e606bb9165e14128328c07bf92dd159bcc
......@@ -4,3 +4,6 @@ D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\RFID.csproj
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\Asa.RFID.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\Asa.RFID.pdb
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\bin\Debug\Asa.RFID.xml
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\bin\Debug\log4net.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\RFID.csproj.CopyComplete
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\RFID.csprojAssemblyReference.cache
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/ACStore-RC29-1.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<root>
<level value="Debug"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>
\ No newline at end of file
......@@ -31,9 +31,8 @@ namespace RFID_Debug
private void Form1_Load(object sender, EventArgs e)
{
read = new Asa.RFID.ReadAll();
read = new Asa.RFID.ReadAll("RollingLogFileAppender");
//read.Received += Read_Received;
read.Log += Read_Log;
read.ReceiveBuffer += Read_ReceiveBuffer;
}
......
using System;
using log4net.Config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
......@@ -14,6 +15,7 @@ namespace RFID_Debug
[STAThread]
static void Main()
{
XmlConfigurator.Configure();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
......
......@@ -22,6 +22,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
......@@ -33,6 +34,10 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\DLL\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
......
......@@ -4,5 +4,64 @@
<name>Asa.RFID</name>
</assembly>
<members>
<member name="T:Asa.RFID.ReadAll">
<summary>
读取所有RFID
</summary>
</member>
<member name="T:Asa.RFID.ReadAll.ReceivedEvent">
<summary>
接收数据包事件
</summary>
<param name="ip"></param>
<param name="id"></param>
</member>
<member name="E:Asa.RFID.ReadAll.Received">
<summary>
接收数据包
</summary>
</member>
<member name="T:Asa.RFID.ReadAll.ReceiveBufferEvent">
<summary>
接收网卡缓存事件
</summary>
<param name="ip"></param>
<param name="buffer"></param>
</member>
<member name="E:Asa.RFID.ReadAll.ReceiveBuffer">
<summary>
接收网卡缓存
</summary>
</member>
<member name="M:Asa.RFID.ReadAll.#ctor(System.String)">
<summary>
读取所有RFID
</summary>
<param name="logName">日志名称</param>
</member>
<member name="M:Asa.RFID.ReadAll.Start(System.Int32)">
<summary>
开启
</summary>
<param name="port">RFID设备的端口</param>
</member>
<member name="M:Asa.RFID.ReadAll.Stop">
<summary>
停止
</summary>
</member>
<member name="M:Asa.RFID.ReadAll.Read(System.String)">
<summary>
读取ID号
</summary>
<param name="ip"></param>
<returns></returns>
</member>
<member name="M:Asa.RFID.ReadAll.Clear(System.String)">
<summary>
清除缓存
</summary>
<param name="ip"></param>
</member>
</members>
</doc>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/ACStore-RC29-1.log"/>
<param name="Encoding" value="UTF-8"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyy-MM-dd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date][%t]%-5p %m%n"/>
</layout>
</appender>
<root>
<level value="Debug"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
</configuration>
\ No newline at end of file
此文件类型无法预览
[2020-05-18 19:26:35,552][1]INFO aa
[2020-05-18 19:26:46,230][1]INFO Server Start
[2020-05-18 19:26:53,811][1]INFO Server Stop
[2020-05-18 19:26:53,836][3]ERROR Socket Close
[2020-05-18 20:01:28,262][1]INFO Server Start
[2020-05-18 20:02:26,513][1]INFO Server Start
[2020-05-18 20:02:31,438][1]INFO Server Stop
[2020-05-18 20:02:31,457][3]ERROR Socket Close
[2020-05-18 20:03:21,924][1]INFO Server Start
[2020-05-18 20:03:44,909][1]INFO Server Stop
[2020-05-18 20:03:44,926][3]ERROR Socket Close
[2020-05-18 20:05:17,709][1]INFO Server Start
[2020-05-18 20:05:20,758][1]INFO Server Stop
[2020-05-18 20:05:20,776][3]ERROR Socket Close
c107594abc8768a75e43d8a5b4db3a9ad5bd2203
dae59b7058d208e5ffe3231183ee4d194d58f1db
......@@ -12,3 +12,4 @@ D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\obj\Debug\RFID_
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\Asa.RFID.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\Asa.RFID.pdb
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\Asa.RFID.xml
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\log4net.dll
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!