work
This commit is contained in:
parent
c633df4ff3
commit
0250037f11
Binary file not shown.
@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Sockets;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
@ -13,44 +14,51 @@ namespace DataClient
|
||||
private Logger log = LogManager.GetCurrentClassLogger();
|
||||
private Encoding enc;
|
||||
private string ip = "127.0.0.1";
|
||||
/// <summary>IP адрес СТП.</summary>
|
||||
public string Ip
|
||||
{
|
||||
get { return ip; }
|
||||
set
|
||||
{
|
||||
if (!IPAddress.TryParse(value, out _))
|
||||
throw new Exception("Wrong ip address.");
|
||||
else
|
||||
ip = value;
|
||||
}
|
||||
set { ip = (IPAddress.TryParse(value, out _)) ? value : ip; }
|
||||
}
|
||||
private int port = 1070;
|
||||
/// <summary>Порт СТП.</summary>
|
||||
public int Port
|
||||
{
|
||||
get { return port; }
|
||||
set
|
||||
{
|
||||
if (value < 1 && value > 65535)
|
||||
throw new Exception("Wrong port.");
|
||||
else
|
||||
port = value;
|
||||
}
|
||||
set { port = (value < 1) ? 1 : (value > 65535) ? 65535 : value; }
|
||||
}
|
||||
|
||||
private enum Code : uint
|
||||
private int retryCount = 3;
|
||||
/// <summary>Количество попыток переподключения.</summary>
|
||||
public int RetryCount
|
||||
{
|
||||
check_command = 4294967295,
|
||||
get { return retryCount; }
|
||||
set { retryCount = value < 1 ? 1 : value; }
|
||||
}
|
||||
private int retryInterval = 1;
|
||||
/// <summary>Время в секундах между попытками переподключения.</summary>
|
||||
public int RetryInterval
|
||||
{
|
||||
get { return retryInterval; }
|
||||
set { retryInterval = (value < 1) ? 1 : value; }
|
||||
}
|
||||
private TcpClient tcpC = null;
|
||||
/// <summary>Коды для работы с СТП.</summary>
|
||||
public enum Code : uint
|
||||
{
|
||||
check_command = uint.MaxValue,
|
||||
version = 0,
|
||||
pasp_download = 4,
|
||||
download_nh = 21,
|
||||
dir_browse = 23,
|
||||
user_flags = 26
|
||||
}
|
||||
|
||||
//Construction
|
||||
public NETClient()
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
enc = Encoding.GetEncoding(866);
|
||||
tcpC = new TcpClient(new IPEndPoint(IPAddress.Parse(ip), port));
|
||||
}
|
||||
public NETClient(string ip, int port)
|
||||
{
|
||||
@ -58,21 +66,158 @@ namespace DataClient
|
||||
enc = Encoding.GetEncoding(866);
|
||||
Ip = ip;
|
||||
Port = port;
|
||||
tcpC = new TcpClient();
|
||||
}
|
||||
|
||||
|
||||
//Work with socket functions
|
||||
public byte[] CreateCode(uint code, byte[] prefix = null, string val = null, byte[] postfix = null)
|
||||
/// <summary>Получить неизвестное количество байт.</summary>
|
||||
/// <param name="socket">Открытый сетевой поток.</param>
|
||||
/// <returns>Массив байт.</returns>
|
||||
private byte[] ReceiveBytesUnknown(NetworkStream ns, int awaitInterval = 1, int tryCounts = 3)
|
||||
{
|
||||
tryCounts = (tryCounts < 1) ? 1 : tryCounts;
|
||||
awaitInterval = (awaitInterval < 1) ? 1 : awaitInterval;
|
||||
var res = new List<byte>();
|
||||
if (!ns.CanRead) throw new Exception("NetworkStream not access to Read.");
|
||||
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||
|
||||
int tryCount = 0;
|
||||
do
|
||||
{
|
||||
if (!ns.Socket.Connected) throw new Exception("Server drop connection.");
|
||||
if (!ns.DataAvailable)
|
||||
{
|
||||
tryCount++;
|
||||
Task.Delay(awaitInterval * 1000).Wait();
|
||||
continue;
|
||||
}
|
||||
tryCount = 0;
|
||||
var buf = new byte[1024];
|
||||
var length = ns.Read(buf, 0, buf.Length);
|
||||
for (var i = 0; i < length; i++) res.Add(buf[i]);
|
||||
} while (tryCount < tryCounts);
|
||||
return res.ToArray();
|
||||
}
|
||||
/// <summary>Получить определенное количество байт.</summary>
|
||||
/// <param name="ns">Открытый сетевой поток.</param>
|
||||
/// <param name="size">Кол-во получаемый байт.</param>
|
||||
/// <returns>Массив байт, равный заданному кол-ву.</returns>
|
||||
private byte[] ReceiveBytesFixSize(NetworkStream ns, int size, int awaitInterval = 1, int tryCounts = 3)
|
||||
{
|
||||
tryCounts = (tryCounts < 1) ? 1 : tryCounts;
|
||||
awaitInterval = (awaitInterval < 1) ? 1 : awaitInterval;
|
||||
if (size <= 0) throw new Exception("Size can't be less or zero.");
|
||||
if (!ns.CanRead) throw new Exception("NetworkStream not access to Read.");
|
||||
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||
var res = new byte[size];
|
||||
var countSize = 0;
|
||||
|
||||
int tryCount = 0;
|
||||
do
|
||||
{
|
||||
if (!ns.Socket.Connected) throw new Exception("Server drop connection.");
|
||||
if (!ns.DataAvailable)
|
||||
{
|
||||
tryCount++;
|
||||
Task.Delay(awaitInterval * 1000).Wait();
|
||||
continue;
|
||||
}
|
||||
tryCount = 0;
|
||||
var buf = new byte[size - countSize];
|
||||
var length = ns.Read(buf, 0, buf.Length);
|
||||
for (var i = 0; i < length; i++) res[countSize++] = buf[i];
|
||||
if (countSize == size)
|
||||
return res;
|
||||
} while (tryCount < tryCounts);
|
||||
throw new Exception("Can't get all bytes.");
|
||||
}
|
||||
|
||||
//Support functions
|
||||
|
||||
/// <summary>Формирование массива байт на отправку.</summary>
|
||||
/// <param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param>
|
||||
/// <param name="prefix">Байты перед передаваемой строкой.</param>
|
||||
/// <param name="val">Передаваемая строка.</param>
|
||||
/// <param name="postfix">Байты после передаваемой строкой.</param>
|
||||
/// <returns>Массив байт для отправки на СТП.</returns>
|
||||
public byte[] CreateCode(uint code, byte[] prefix = null, string val = null, byte[] postfix = null)
|
||||
{
|
||||
var res = new List<byte>();
|
||||
res.AddRange(BitConverter.GetBytes(code));
|
||||
if (prefix != null)
|
||||
res.AddRange(prefix);
|
||||
if(val != null)
|
||||
{
|
||||
res.AddRange(BitConverter.GetBytes((uint)val.Length));
|
||||
res.AddRange(enc.GetBytes(val));
|
||||
res.Add(0x00);
|
||||
}
|
||||
if (postfix != null)
|
||||
res.AddRange(postfix);
|
||||
return res.ToArray();
|
||||
}
|
||||
|
||||
//Main functions
|
||||
/// <summary>Открыть подключение.</summary>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
public bool Connect()
|
||||
{
|
||||
if (Connected()) return true;
|
||||
if (tcpC == null) tcpC = new TcpClient();
|
||||
try { tcpC.Connect(new IPEndPoint(IPAddress.Parse(ip), port)); }
|
||||
catch { return false; }
|
||||
return Connected();
|
||||
}
|
||||
/// <summary>Проверка подключения.</summary>
|
||||
/// <returns>Возвращает состояние подключения.</returns>
|
||||
public bool Connected()
|
||||
{
|
||||
return (tcpC != null && tcpC.Connected);
|
||||
}
|
||||
/// <summary>Закрыть подключение.</summary>
|
||||
public void Close()
|
||||
{
|
||||
if (tcpC != null && !tcpC.Connected)
|
||||
tcpC.Close();
|
||||
}
|
||||
/// <summary>Отправка массива байт на СТП.</summary>
|
||||
/// <param name="send">Массив байт для отправки.</param>
|
||||
public void SendBytes(byte[] send)
|
||||
{
|
||||
if (!Connected()) throw new Exception("Connection not exist.");
|
||||
var ns = tcpC.GetStream();
|
||||
if (!ns.CanWrite) throw new Exception("NetworkStream not access to Write.");
|
||||
if (!ns.Socket.Connected) throw new Exception("NetworkStream not connected to server.");
|
||||
ns.Write(send, 0, send.Length);
|
||||
}
|
||||
public byte[] ReceiveBytes()
|
||||
{
|
||||
var res = new List<byte>();
|
||||
if (!Connected()) throw new Exception("Connection not exist.");
|
||||
var ns = tcpC.GetStream();
|
||||
res.AddRange(ReceiveBytesUnknown(ns));
|
||||
return res.ToArray();
|
||||
}
|
||||
public byte[] ReceiveBytes(int size)
|
||||
{
|
||||
var res = new List<byte>();
|
||||
if (!Connected()) throw new Exception("Connection not exist.");
|
||||
var ns = tcpC.GetStream();
|
||||
res.AddRange(ReceiveBytesFixSize(ns, size));
|
||||
return res.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
/// <param name="date">Дата. Из неё формируется строка в формате YYYMMDD</param>
|
||||
/// <param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
/// <param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
/// <returns>Обработанный массив байт.</returns>
|
||||
public byte[] GetFile(DateTime date, int vdp, int idx)
|
||||
{
|
||||
if (!Connected()) throw new Exception("Connection not exist.");
|
||||
var res = new List<byte>();
|
||||
var str = date.ToString("yyyyMMdd") + vdp.ToString("D2") + (idx % 16).ToString("X1");
|
||||
|
||||
return res.ToArray();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ namespace DataClients
|
||||
{
|
||||
public class NetClient
|
||||
{
|
||||
private string ServerStr = "10.10.45.152";
|
||||
private string ServerStr = "10.10.45.151";
|
||||
private int PortStr = 1070;
|
||||
private IPEndPoint IpPoint;
|
||||
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -369,8 +369,8 @@ namespace Tests
|
||||
static void test14()
|
||||
{
|
||||
var total = new List<(ushort, Protect)>();
|
||||
var ts = new DateTime(2021, 05, 17);
|
||||
var te = new DateTime(2021, 05, 28);
|
||||
var ts = new DateTime(2021, 05, 28);
|
||||
var te = new DateTime(2021, 06, 02);
|
||||
var a = new STPClient();
|
||||
var vdp = new ushort[] { 3, 4, 5, 6, 8, 10, 17, 18, 33, 39, 40, 43, 44 };
|
||||
foreach(var v in vdp)
|
||||
|
@ -1,18 +1,10 @@
|
||||
2021-05-17 22:19:34.5 035 Отс. связь ГМП 01
|
||||
2021-05-17 22:19:36.2 035 Отс. связь ГМП 00
|
||||
2021-05-18 14:42:13.5 035 Отс. связь ГМП 01
|
||||
2021-05-18 14:42:19.0 035 Отс. связь ГМП 00
|
||||
2021-05-18 20:24:00.3 035 Отс. связь ГМП 01
|
||||
2021-05-18 20:24:05.8 035 Отс. связь ГМП 00
|
||||
2021-05-22 19:44:46.4 035 Отс. связь ГМП 01
|
||||
2021-05-23 03:12:37.2 035 Отс. связь ГМП 00
|
||||
2021-05-24 20:56:41.0 035 Отс. связь ГМП 01
|
||||
2021-05-24 20:56:46.5 035 Отс. связь ГМП 00
|
||||
2021-05-25 20:42:30.1 035 Отс. связь ГМП 01
|
||||
2021-05-25 20:42:35.6 035 Отс. связь ГМП 00
|
||||
2021-05-26 00:00:00.3 105 Отс. связь AB 01
|
||||
2021-05-26 00:00:00.6 105 Отс. связь AB 00
|
||||
2021-05-27 06:42:07.1 035 Отс. связь ГМП 01
|
||||
2021-05-27 06:42:12.6 035 Отс. связь ГМП 00
|
||||
2021-05-27 14:51:46.2 035 Отс. связь ГМП 01
|
||||
2021-05-27 14:51:51.7 035 Отс. связь ГМП 00
|
||||
2021-05-28 00:27:18.7 035 Отс. связь ГМП 01
|
||||
2021-05-28 00:27:24.2 035 Отс. связь ГМП 00
|
||||
2021-05-28 13:42:09.7 035 Отс. связь ГМП 01
|
||||
2021-05-28 13:42:24.0 035 Отс. связь ГМП 00
|
||||
2021-05-30 11:50:55.4 105 Отс. связь AB 01
|
||||
2021-05-30 11:50:55.8 105 Отс. связь AB 00
|
||||
2021-06-01 03:51:51.6 035 Отс. связь ГМП 01
|
||||
2021-06-01 03:51:57.1 035 Отс. связь ГМП 00
|
||||
2021-06-01 11:45:01.7 035 Отс. связь ГМП 01
|
||||
2021-06-01 11:45:07.2 035 Отс. связь ГМП 00
|
||||
|
@ -1,2 +0,0 @@
|
||||
2021-05-26 11:44:42.8 035 Отс. связь ГМП 01
|
||||
2021-05-26 11:44:43.4 035 Отс. связь ГМП 00
|
@ -1,8 +1,8 @@
|
||||
2021-05-17 09:58:39.9 035 Отс. связь ГМП 01
|
||||
2021-05-17 10:07:04.5 035 Отс. связь ГМП 00
|
||||
2021-05-22 01:00:38.6 035 Отс. связь ГМП 01
|
||||
2021-05-22 01:00:44.1 035 Отс. связь ГМП 00
|
||||
2021-05-22 12:14:53.7 035 Отс. связь ГМП 01
|
||||
2021-05-22 12:14:59.2 035 Отс. связь ГМП 00
|
||||
2021-05-25 14:01:20.3 035 Отс. связь ГМП 01
|
||||
2021-05-25 14:01:32.1 035 Отс. связь ГМП 00
|
||||
2021-05-28 14:44:43.7 035 Отс. связь ГМП 01
|
||||
2021-05-28 14:48:39.7 035 Отс. связь ГМП 00
|
||||
2021-05-28 14:49:13.8 035 Отс. связь ГМП 01
|
||||
2021-05-28 14:49:57.0 035 Отс. связь ГМП 00
|
||||
2021-05-31 16:33:30.7 035 Отс. связь ГМП 01
|
||||
2021-05-31 16:33:46.1 035 Отс. связь ГМП 00
|
||||
2021-06-01 11:08:32.1 035 Отс. связь ГМП 01
|
||||
2021-06-01 11:08:39.0 035 Отс. связь ГМП 00
|
||||
|
@ -1,2 +0,0 @@
|
||||
2021-05-17 11:25:48.1 035 Отс. связь ГМП 01
|
||||
2021-05-17 11:25:52.7 035 Отс. связь ГМП 00
|
@ -1,2 +0,0 @@
|
||||
2021-05-21 09:32:21.8 035 Отс. связь ГМП 01
|
||||
2021-05-21 09:32:23.9 035 Отс. связь ГМП 00
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,32 +1,18 @@
|
||||
2021-05-17 09:58:39.9 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-17 10:07:04.5 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-17 11:25:48.1 035 Отс. связь ГМП 01 <- vdp17
|
||||
2021-05-17 11:25:52.7 035 Отс. связь ГМП 00 <- vdp17
|
||||
2021-05-17 22:19:34.5 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-17 22:19:36.2 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-18 14:42:13.5 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-18 14:42:19.0 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-18 20:24:00.3 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-18 20:24:05.8 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-21 09:32:21.8 035 Отс. связь ГМП 01 <- vdp33
|
||||
2021-05-21 09:32:23.9 035 Отс. связь ГМП 00 <- vdp33
|
||||
2021-05-22 01:00:38.6 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-22 01:00:44.1 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-22 12:14:53.7 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-22 12:14:59.2 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-22 19:44:46.4 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-23 03:12:37.2 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-24 20:56:41.0 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-24 20:56:46.5 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-25 14:01:20.3 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-25 14:01:32.1 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-25 20:42:30.1 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-25 20:42:35.6 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-26 00:00:00.3 105 Отс. связь AB 01 <- vdp03
|
||||
2021-05-26 00:00:00.6 105 Отс. связь AB 00 <- vdp03
|
||||
2021-05-26 11:44:42.8 035 Отс. связь ГМП 01 <- vdp04
|
||||
2021-05-26 11:44:43.4 035 Отс. связь ГМП 00 <- vdp04
|
||||
2021-05-27 06:42:07.1 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-27 06:42:12.6 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-27 14:51:46.2 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-27 14:51:51.7 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-28 00:27:18.7 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-28 00:27:24.2 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-28 13:42:09.7 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-05-28 13:42:24.0 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-05-28 14:44:43.7 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-28 14:48:39.7 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-28 14:49:13.8 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-28 14:49:57.0 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-05-30 11:50:55.4 105 Отс. связь AB 01 <- vdp03
|
||||
2021-05-30 11:50:55.8 105 Отс. связь AB 00 <- vdp03
|
||||
2021-05-31 16:33:30.7 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-05-31 16:33:46.1 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-06-01 03:51:51.6 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-06-01 03:51:57.1 035 Отс. связь ГМП 00 <- vdp03
|
||||
2021-06-01 11:08:32.1 035 Отс. связь ГМП 01 <- vdp10
|
||||
2021-06-01 11:08:39.0 035 Отс. связь ГМП 00 <- vdp10
|
||||
2021-06-01 11:45:01.7 035 Отс. связь ГМП 01 <- vdp03
|
||||
2021-06-01 11:45:07.2 035 Отс. связь ГМП 00 <- vdp03
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user