Commit 1c83e7ff 顾剑亮

添加日志

1 个父辈 dafcb7e7
此文件类型无法预览
...@@ -32,6 +32,9 @@ ...@@ -32,6 +32,9 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="log4net">
<HintPath>..\..\..\DLL\log4net.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
......
...@@ -9,65 +9,155 @@ using System.Threading.Tasks; ...@@ -9,65 +9,155 @@ using System.Threading.Tasks;
namespace Asa.RFID namespace Asa.RFID
{ {
/// <summary>
/// 读取所有RFID
/// </summary>
public class ReadAll public class ReadAll
{ {
/// <summary>
/// 接收数据包事件
/// </summary>
/// <param name="ip"></param>
/// <param name="id"></param>
public delegate void ReceivedEvent(string ip, string id); public delegate void ReceivedEvent(string ip, string id);
/// <summary>
/// 接收数据包
/// </summary>
public event ReceivedEvent Received; public event ReceivedEvent Received;
/// <summary>
/// 接收网卡缓存事件
/// </summary>
/// <param name="ip"></param>
/// <param name="buffer"></param>
public delegate void ReceiveBufferEvent(string ip, byte[] buffer); public delegate void ReceiveBufferEvent(string ip, byte[] buffer);
/// <summary>
/// 接收网卡缓存
/// </summary>
public event ReceiveBufferEvent ReceiveBuffer; public event ReceiveBufferEvent ReceiveBuffer;
public delegate void LogEvent(string ip, string log);
public event LogEvent Log;
private bool _loop; private bool _loop;
private Socket _server; //服务端 private Socket _server; //服务端
private List<Client> _client; //所有客户端 private List<Client> _client; //所有客户端
private Thread tListenClient; //监听客户端连接 private Thread tListenClient; //监听客户端连接
private Dictionary<string, string> _id; //RFID编号 private Dictionary<string, string> _id; //RFID编号
private log4net.ILog log;
private const int CLIENT_SLEEP = 10; private const int CLIENT_SLEEP = 10;
public ReadAll()
/// <summary>
/// 读取所有RFID
/// </summary>
/// <param name="logName">日志名称</param>
public ReadAll(string logName)
{ {
_id = new Dictionary<string, string>(); _id = new Dictionary<string, string>();
log = log4net.LogManager.GetLogger(logName);
} }
/// <summary>
/// 开启
/// </summary>
/// <param name="port">RFID设备的端口</param>
public void Start(int port = 13000) public void Start(int port = 13000)
{ {
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port); try
_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); {
_server.Bind(localEP); IPEndPoint localEP = new IPEndPoint(IPAddress.Any, port);
_server.Listen(100); _server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_server.Bind(localEP);
_loop = true; _server.Listen(100);
_client = new List<Client>();
tListenClient = new Thread(new ThreadStart(ListenClient)); _loop = true;
tListenClient.Start(); _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() public void Stop()
{ {
_loop = false; _loop = false;
for (int i = 0; i < _client.Count; i++) for (int i = 0; i < _client.Count; i++)
ClientClose(i);
try
{ {
_client[i].Loop = false; _id.Clear();
_client[i].IsConn = false; _server.Close();
_client[i].Socket.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) public string Read(string ip)
{ {
if (_id.TryGetValue(ip, out string value)) if (_id.TryGetValue(ip, out string value))
{
log.Info("Read " + ip + " -> " + value);
return value; return value;
}
else else
{
log.Info("Read " + ip + " not exist, return 000");
return "000"; return "000";
}
} }
/// <summary>
/// 清除缓存
/// </summary>
/// <param name="ip"></param>
public void Clear(string ip) 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() private void ListenClient()
...@@ -99,24 +189,25 @@ namespace Asa.RFID ...@@ -99,24 +189,25 @@ namespace Asa.RFID
_client[idx].IsConn = false; _client[idx].IsConn = false;
_client[idx].Loop = false; _client[idx].Loop = false;
_client[idx].Socket.Close(); _client[idx].Socket.Close();
Log?.Invoke(_client[idx].IP, "offline");
_client.RemoveAt(idx); _client.RemoveAt(idx);
log.Info(_client[idx].IP + " 重连,删除重复。");
} }
//添加到数组 //添加到数组
if (!_id.ContainsKey(client.IP)) if (!_id.ContainsKey(client.IP))
_id.Add(client.IP, "000"); _id.Add(client.IP, "000");
_client.Add(client); _client.Add(client);
Log?.Invoke(client.IP, "online"); log.Info(client.IP + " 连接");
listen.Start(_client.Count - 1); listen.Start(_client.Count - 1);
} }
catch (SocketException) catch (SocketException)
{ {
//关闭连接,退出阻塞Accept //关闭连接,退出阻塞Accept
log.Error("Socket Close");
} }
catch (Exception ex) catch (Exception ex)
{ {
log.Error("ListenClient", ex);
} }
} }
} }
...@@ -140,32 +231,44 @@ namespace Asa.RFID ...@@ -140,32 +231,44 @@ namespace Asa.RFID
byte[] temp = new byte[count]; byte[] temp = new byte[count];
Array.Copy(buff, 0, temp, 0, count); Array.Copy(buff, 0, temp, 0, count);
receive.AddRange(temp); receive.AddRange(temp);
log.Debug("Receive: " + HexBuff(temp));
Task.Run(() => ReceiveBuffer?.Invoke(client.IP, temp)); Task.Run(() => ReceiveBuffer?.Invoke(client.IP, temp));
int idx = receive.FindIndex(n => n == 0x5A); do
if (idx == -1)
{ {
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) int len = idx + LENGTH + 1; //一个系统自带的0
continue; if (len > receive.Count) break;
if (receive[len - 3] == 0x4A) //一个系统的0,两个校验位 //查找包尾
{ if (receive[len - 3] == 0x4A) //一个系统的0,两个校验位
byte[] arr = new byte[LENGTH]; {
receive.CopyTo(idx, arr, 0, 4); byte[] arr = new byte[LENGTH];
receive.CopyTo(idx + 5, arr, 4, 4); receive.CopyTo(idx, arr, 0, 4);
Task.Run(() => TriggerEvent(client.IP, arr)); receive.CopyTo(idx + 5, arr, 4, 4);
} log.Info("Packet: " + HexBuff(arr));
receive.RemoveRange(0, len); Task.Run(() => TriggerEvent(client.IP, arr));
}
else
{
log.Debug("指定字节没有包尾," + HexBuff(receive, idx, 9));
}
receive.RemoveRange(0, len);
} while (true);
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
//client.Loop = false; log.Error("ListenNet", ex);
} }
} }
...@@ -175,18 +278,43 @@ namespace Asa.RFID ...@@ -175,18 +278,43 @@ namespace Asa.RFID
{ {
string s; string s;
if (buff[1] == 0) if (buff[1] == 0)
{
s = "000"; s = "000";
log.Info(ip + " byte 0");
}
else else
{
s = (char)buff[1] + buff[2].ToString(); s = (char)buff[1] + buff[2].ToString();
}
if (!_id[ip].Equals(s)) if (!_id[ip].Equals(s))
{ {
_id[ip] = s; _id[ip] = s;
Log?.Invoke(ip, s); log.Info("Trigger " + ip + " -> " + s);
Received?.Invoke(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 private class Client
{ {
public bool Loop; public bool Loop;
...@@ -194,6 +322,7 @@ namespace Asa.RFID ...@@ -194,6 +322,7 @@ namespace Asa.RFID
public bool IsConn; public bool IsConn;
public Socket Socket; public Socket Socket;
public Thread ListenNet; public Thread ListenNet;
} }
......
...@@ -4,5 +4,64 @@ ...@@ -4,5 +4,64 @@
<name>Asa.RFID</name> <name>Asa.RFID</name>
</assembly> </assembly>
<members> <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> </members>
</doc> </doc>
此文件类型无法预览
9b68bc78b009177994d766ec5b467f71d6022fba 69c039e606bb9165e14128328c07bf92dd159bcc
...@@ -4,3 +4,6 @@ D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\RFID.csproj ...@@ -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.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID\obj\Debug\Asa.RFID.pdb 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\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" ?> <?xml version="1.0" encoding="utf-8" ?>
<configuration> <configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <configSections>
</startup> <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> </configuration>
\ No newline at end of file \ No newline at end of file
...@@ -31,9 +31,8 @@ namespace RFID_Debug ...@@ -31,9 +31,8 @@ namespace RFID_Debug
private void Form1_Load(object sender, EventArgs e) private void Form1_Load(object sender, EventArgs e)
{ {
read = new Asa.RFID.ReadAll(); read = new Asa.RFID.ReadAll("RollingLogFileAppender");
//read.Received += Read_Received; //read.Received += Read_Received;
read.Log += Read_Log;
read.ReceiveBuffer += Read_ReceiveBuffer; read.ReceiveBuffer += Read_ReceiveBuffer;
} }
......
using System; using log4net.Config;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
...@@ -14,6 +15,7 @@ namespace RFID_Debug ...@@ -14,6 +15,7 @@ namespace RFID_Debug
[STAThread] [STAThread]
static void Main() static void Main()
{ {
XmlConfigurator.Configure();
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); Application.Run(new Form1());
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants> <DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
...@@ -33,6 +34,10 @@ ...@@ -33,6 +34,10 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <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" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
......
...@@ -4,5 +4,64 @@ ...@@ -4,5 +4,64 @@
<name>Asa.RFID</name> <name>Asa.RFID</name>
</assembly> </assembly>
<members> <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> </members>
</doc> </doc>
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<configuration> <configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> <configSections>
</startup> <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> </configuration>
\ No newline at end of file \ 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_ ...@@ -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.dll
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\Asa.RFID.pdb 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\Asa.RFID.xml
D:\OneDrive - 上海挚锦科技有限公司\SMD\RFID\RFID_Debug\bin\Debug\log4net.dll
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!