Логирование, багфиксы, добавил мониторин /proc/mdstat. Юнит для systemd

This commit is contained in:
ftc
2020-08-30 09:15:43 +03:00
parent 092cba1cee
commit bbb0f9c63e
10 changed files with 241 additions and 79 deletions
+27 -6
View File
@@ -1,4 +1,5 @@
using System;
using NLog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
@@ -20,11 +21,14 @@ namespace Barsik
internal void Run()
{
var logger = LogManager.GetCurrentClassLogger();
logger.Info("Accepting connections on port " + Port);
var listener = new TcpListener(IPAddress.Any, Port);
listener.Start();
while (true)
{
var client = listener.AcceptTcpClient();
logger.Info("Accepted connection from " + client.Client.RemoteEndPoint);
var worker = new ModbusServerWorker(registers, client);
Thread clientThread = new Thread(new ThreadStart(worker.Run));
clientThread.Start();
@@ -38,6 +42,7 @@ namespace Barsik
private RegistersContainer registers;
private TcpClient client;
private static Logger logger = LogManager.GetCurrentClassLogger();
public ModbusServerWorker(RegistersContainer registers, TcpClient client)
{
this.registers = registers;
@@ -52,6 +57,7 @@ namespace Barsik
public void Run()
{
logger.Debug("Working with client");
received = new List<byte>();
try
{
@@ -63,11 +69,13 @@ namespace Barsik
readCompleted.Reset();
stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(this.OnReadCompleted), this);
readCompleted.WaitOne();
if (currentReceived < 0)
if (currentReceived <= 0)
{
logger.Debug("Received no data, closing ");
client.Close();
return;
}
logger.Debug("ProcessReceivedData of " + received.Count);
ProcessReceivedData();
}
}
@@ -75,6 +83,11 @@ namespace Barsik
{
client.Close();
}
finally
{
if (stream != null) stream.Dispose();
client.Dispose();
}
}
private void ProcessReceivedData()
@@ -123,12 +136,20 @@ namespace Barsik
private void OnReadCompleted(IAsyncResult ar)
{
currentReceived = stream.EndRead(ar);
lock (received)
try
{
for (int i = 0; i < currentReceived; i++) received.Add(buffer[i]);
currentReceived = stream.EndRead(ar);
lock (received)
{
for (int i = 0; i < currentReceived; i++) received.Add(buffer[i]);
}
readCompleted.Set();
}
catch (IOException e)
{
logger.Info("Error receiving " + e);
currentReceived = -1;
}
readCompleted.Set();
}
}
}