work
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DocumentationFile></DocumentationFile>
|
||||
<DocumentationFile>D:\GIT\ASCKU_PC\DataClient\DataClient.xml</DocumentationFile>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
221
DataClient/DataClient.xml
Normal file
221
DataClient/DataClient.xml
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>DataClient</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:DataClient.NETClient.Status">
|
||||
<summary>
|
||||
Статус процесса выполнения запроса.
|
||||
Предполагается использовать только на больших
|
||||
загрузках и в ассинхронных задачах
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:DataClient.NETClient.Code">
|
||||
<summary>Коды для работы с СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.Ip">
|
||||
<summary>IP адрес СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.Port">
|
||||
<summary>Порт СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.RetryCount">
|
||||
<summary>Количество попыток переподключения.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.RetryInterval">
|
||||
<summary>Время в секундах между попытками переподключения.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.#ctor">
|
||||
<summary>Основной конструктор класса NetClient. Ip-адрес - 127.0.0.1; Порт - 1070;</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.#ctor(System.String,System.Int32)">
|
||||
<summary>Конструктор класса NetClient с параметрами.</summary><param name="ip">Ip-адрес сервера.</param><param name="port">Порт сервера.</param>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytesFull(System.Net.Sockets.NetworkStream,System.Int32,System.Int32)">
|
||||
<summary>Получение неопределенного количество байт с сервера. Количество ограничено максимальным значением типа UInt.</summary><param name="ns">Открытый сетевой поток.</param><param name="awaitInterval">Время ожидания между проверками буфера.</param><param name="tryCounts">Количество проверок буфера.</param><returns>Массив байт.</returns><exception cref="T:System.InvalidOperationException">
|
||||
Соединение с сервером закрыто.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для Чтения.
|
||||
</exception><exception cref="T:System.TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytesFixSize(System.Net.Sockets.NetworkStream,System.UInt32,System.Int32,System.Int32)">
|
||||
<summary>Получение определенного количество байт с сервера.</summary><param name="ns">Открытый сетевой поток.</param><param name="size">Кол-во получаемых байт.</param><param name="awaitInterval">Время ожидания между проверками буфера.</param><param name="tryCounts">Количество проверок буфера.</param><returns>Массив байт. Может быть меньше заданного количества.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception><exception cref="T:System.TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.SendBytes(System.Net.Sockets.NetworkStream,System.Byte[])">
|
||||
<summary>Отправка массива байт на СТП.</summary><param name="ns">Открытый сетевой поток.</param><param name="arr">Массив байт.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.CreateCode(System.UInt32,System.String,System.Byte[],System.Byte[])">
|
||||
<summary>Формирование массива байт на отправку.</summary><param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param><param name="val">Передаваемая строка.</param><param name="prefix">Байты перед передаваемой строкой.</param><param name="postfix">Байты после передаваемой строкой.</param><returns>Массив байт для отправки на СТП.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Connect">
|
||||
<summary>Открытие соединения к серверу.</summary><remarks>Информирует только о подключении к серверу. Исключения опускает.</remarks><returns>Состояние подключения.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Connected">
|
||||
<summary>Проверка подключения.</summary><returns>Состояние подключения.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Close">
|
||||
<summary>Закрыть подключение.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.SendBytes(System.Byte[])">
|
||||
<summary>Отправка массива байт на СТП.</summary><param name="send">Массив байт для отправки.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytes">
|
||||
<summary>Получение неизвестного количество байт.</summary><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytes(System.UInt32)">
|
||||
<summary>Получение определенного количество байт.</summary><param name="size">Количество байт.</param><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт определенного размера. Может массив быть меньше, если в буфере не будет достаточно данных.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.My_Connect">
|
||||
<summary>Внутренняя функция для создания подключения.</summary><returns>Возвращает флаг необходимости закрытия соединения.</returns><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.My_Close(System.Boolean)">
|
||||
<summary>Внетренняя функция для закрытия соединения.</summary><param name="needClose">Флаг о необходимости закрыть соединение.</param>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.GetFile(DataClient.NETClient.Code,System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Внутренняя функция получения файлов.</summary><param name="code">Код, который будет отправлен на сервер.</param><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><returns>Массив байт, соответствующий запрашиваемому файлу.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Download_NH(System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Download(System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_By_Name(System.String)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="val">Название команды.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив байт, соответствующий этой команде. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Dir_Browse(System.String)">
|
||||
<summary>Получение структуры файлов и папок в запрашиваемой директории.</summary><param name="dir">Путь, структуру которого надо отобразить.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив строк. Полные пути к файлам и папкам. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный флаг окончания строки.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="T:DataClient.STPClient">
|
||||
<summary>
|
||||
Класс для связи с СТП. Содержит все инструменты, для получения данных.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.STPClient.UseServer">
|
||||
<summary>Номер сервера, используемого по умолчанию.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.STPClient.ListServers">
|
||||
<summary>Массив серверов, инициализированных в экземпляре класса.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.GetServerIdByName(System.String)">
|
||||
<summary>Получение номера сервера по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<returns>Номер сервера в списке серверов.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.GetServerNameById(System.Int32)">
|
||||
<summary>Получение название сервера по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<returns>Название сервера.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.CheckDataServer(System.String,System.Int32,System.String)">
|
||||
<summary>Проверка параметров серевера перед их добавлением в список.</summary>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.AddServer(System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Добавление сервера в список серверов.</summary>
|
||||
<param name="name">Название сервера</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.ChangeServerById(System.Int32,System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Изменение сервера в списке серверов по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<param name="name">Название сервера.</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.ChangeServerByName(System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Изменение сервера в списке серверов по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.RemoveServerById(System.Int32)">
|
||||
<summary>Удаление сервера из списка серверов по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.RemoveServerByName(System.String)">
|
||||
<summary>Удаление сервера из списка серверов по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.Config">
|
||||
<summary>Чтение конфигурационнного файла и установка параметров по умолчанию.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.#ctor">
|
||||
<summary>Создание экземпляра класса.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.#ctor(System.String)">
|
||||
<summary>Создание экземпляра класса с указанием конфигурационного файла.</summary>
|
||||
<param name="confDir">Путь к файлу конфигурации.</param>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
240
DataClient/DataClientSrc.xml
Normal file
240
DataClient/DataClientSrc.xml
Normal file
@@ -0,0 +1,240 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<docs>
|
||||
<NET>
|
||||
<m n="Close">
|
||||
<summary>Закрыть подключение.</summary>
|
||||
</m>
|
||||
<m n="Code">
|
||||
<summary>Коды для работы с СТП.</summary>
|
||||
</m>
|
||||
<m n="Connect">
|
||||
<summary>Открытие соединения к серверу.</summary>
|
||||
<remarks>Информирует только о подключении к серверу. Исключения опускает.</remarks>
|
||||
<returns>Состояние подключения.</returns>
|
||||
</m>
|
||||
<m n="Connected">
|
||||
<summary>Проверка подключения.</summary>
|
||||
<returns>Состояние подключения.</returns>
|
||||
</m>
|
||||
<m n="CreateCode">
|
||||
<summary>Формирование массива байт на отправку.</summary>
|
||||
<param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param>
|
||||
<param name="val">Передаваемая строка.</param>
|
||||
<param name="prefix">Байты перед передаваемой строкой.</param>
|
||||
<param name="postfix">Байты после передаваемой строкой.</param>
|
||||
<returns>Массив байт для отправки на СТП.</returns>
|
||||
</m>
|
||||
<m n="Full_Download">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
<param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param>
|
||||
<param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
<param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
<remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks>
|
||||
<returns>Обработанный массив байт.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="Full_Download_NH">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
<param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param>
|
||||
<param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
<param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
<remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks>
|
||||
<returns>Обработанный массив байт.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="GetFile">
|
||||
<summary>Внутренняя функция получения файлов.</summary>
|
||||
<param name="code">Код, который будет отправлен на сервер.</param>
|
||||
<param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param>
|
||||
<param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
<param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
<returns>Массив байт, соответствующий запрашиваемому файлу.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
|
||||
</m>
|
||||
<m n="Ip">
|
||||
<summary>IP адрес СТП.</summary>
|
||||
</m>
|
||||
<m n="My_Close">
|
||||
<summary>Внетренняя функция для закрытия соединения.</summary>
|
||||
<param name="needClose">Флаг о необходимости закрыть соединение.</param>
|
||||
</m>
|
||||
<m n="My_Connect">
|
||||
<summary>Внутренняя функция для создания подключения.</summary>
|
||||
<returns>Возвращает флаг необходимости закрытия соединения.</returns>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="NETClient1">
|
||||
<summary>Основной конструктор класса NetClient. Ip-адрес - 127.0.0.1; Порт - 1070;</summary>
|
||||
</m>
|
||||
<m n="NETClient2">
|
||||
<summary>Конструктор класса NetClient с параметрами.</summary>
|
||||
<param name="ip">Ip-адрес сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
</m>
|
||||
<m n="Port">
|
||||
<summary>Порт СТП.</summary>
|
||||
</m>
|
||||
<m n="ReceiveBytes1">
|
||||
<summary>Получение неизвестного количество байт.</summary>
|
||||
<remarks>Возвращает null, если что-то пошло не так.</remarks>
|
||||
<returns>Массив байт.</returns>
|
||||
</m>
|
||||
<m n="ReceiveBytes2">
|
||||
<summary>Получение определенного количество байт.</summary>
|
||||
<param name="size">Количество байт.</param>
|
||||
<remarks>Возвращает null, если что-то пошло не так.</remarks>
|
||||
<returns>Массив байт определенного размера. Может массив быть меньше, если в буфере не будет достаточно данных.</returns>
|
||||
</m>
|
||||
<m n="ReceiveBytesFixSize">
|
||||
<summary>Получение определенного количество байт с сервера.</summary>
|
||||
<param name="ns">Открытый сетевой поток.</param>
|
||||
<param name="size">Кол-во получаемых байт.</param>
|
||||
<param name="awaitInterval">Время ожидания между проверками буфера.</param>
|
||||
<param name="tryCounts">Количество проверок буфера.</param>
|
||||
<returns>Массив байт. Может быть меньше заданного количества.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="ReceiveBytesFull">
|
||||
<summary>Получение неопределенного количество байт с сервера. Количество ограничено максимальным значением типа UInt.</summary>
|
||||
<param name="ns">Открытый сетевой поток.</param>
|
||||
<param name="awaitInterval">Время ожидания между проверками буфера.</param>
|
||||
<param name="tryCounts">Количество проверок буфера.</param>
|
||||
<returns>Массив байт.</returns>
|
||||
<exception cref="InvalidOperationException">
|
||||
Соединение с сервером закрыто.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Стрим недоступен для Чтения.
|
||||
</exception>
|
||||
<exception cref="TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="RetryCount">
|
||||
<summary>Количество попыток переподключения.</summary>
|
||||
</m>
|
||||
<m n="RetryInterval">
|
||||
<summary>Время в секундах между попытками переподключения.</summary>
|
||||
</m>
|
||||
<m n="SendBytes1">
|
||||
<summary>Отправка массива байт на СТП.</summary>
|
||||
<param name="ns">Открытый сетевой поток.</param>
|
||||
<param name="arr">Массив байт.</param>
|
||||
<returns>Результат отправки.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="SendBytes2">
|
||||
<summary>Отправка массива байт на СТП.</summary>
|
||||
<param name="send">Массив байт для отправки.</param>
|
||||
<returns>Результат отправки.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
</m>
|
||||
<m n="Status">
|
||||
<summary>
|
||||
Статус процесса выполнения запроса.
|
||||
Предполагается использовать только на больших
|
||||
загрузках и в ассинхронных задачах
|
||||
</summary>
|
||||
</m>
|
||||
<m n="Full_By_Name">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
<param name="val">Название команды.</param>
|
||||
<remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks>
|
||||
<returns>Массив байт, соответствующий этой команде. Может вернуть null.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Неверный флаг во время получения файла.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</m>
|
||||
|
||||
<m n="Full_Dir_Browse">
|
||||
<summary>Получение структуры файлов и папок в запрашиваемой директории.</summary>
|
||||
<param name="dir">Путь, структуру которого надо отобразить.</param>
|
||||
<remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks>
|
||||
<returns>Массив строк. Полные пути к файлам и папкам. Может вернуть null.</returns>
|
||||
<exception cref="ArgumentException">
|
||||
Неверный флаг окончания строки.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception>
|
||||
<exception cref="IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
<exception cref="InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</m>
|
||||
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
<m n=""></m>
|
||||
</NET>
|
||||
</docs>
|
@@ -7,6 +7,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NLog;
|
||||
using DataClient.Struct;
|
||||
using System.IO;
|
||||
|
||||
namespace DataClient
|
||||
{
|
||||
@@ -15,8 +16,7 @@ namespace DataClient
|
||||
private Logger log = LogManager.GetCurrentClassLogger();
|
||||
private Encoding enc;
|
||||
private TcpClient tcpC = null;
|
||||
/// <summary>Статус процесса выполнения запроса.
|
||||
/// Предполагается использовать только на больших загрузках и в ассинхронных задачах.</summary>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Status"]/*' />
|
||||
public double Status
|
||||
{
|
||||
get
|
||||
@@ -31,7 +31,6 @@ namespace DataClient
|
||||
}
|
||||
}
|
||||
private NetStatus stat = new NetStatus();
|
||||
/// <summary>Коды для работы с СТП.</summary>
|
||||
/*
|
||||
0x00 0x00 0x00 0x00 - 0000 - version
|
||||
0x01 0x00 0x00 0x00 - 0001 - file list
|
||||
@@ -40,7 +39,7 @@ namespace DataClient
|
||||
0x05 0x00 0x00 0x00 - 0005 - pasp find
|
||||
0x06 0x00 0x00 0x00 - 0006 - prog list
|
||||
0x07 0x00 0x00 0x00 - 0007 - prog download
|
||||
0x08 0x00 0x00 0x00 - 0008 - server time
|
||||
|
||||
0x09 0x00 0x00 0x00 - 0009 - download usov
|
||||
0x0A 0x00 0x00 0x00 - 0010 - slit history
|
||||
0x0B 0x00 0x00 0x00 - 0011 - keep alive
|
||||
@@ -54,7 +53,6 @@ namespace DataClient
|
||||
- pasp browse2
|
||||
- arch history
|
||||
- download usov nhv
|
||||
0x17 0x00 0x00 0x00 - 0023 - dir browse
|
||||
- vdp sim med
|
||||
- vdp flags
|
||||
0x1A 0x00 0x00 0x00 - 0026 - user flags
|
||||
@@ -109,14 +107,15 @@ namespace DataClient
|
||||
- by name
|
||||
- test
|
||||
*/
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Code"]/*' />
|
||||
public enum Code : uint
|
||||
{
|
||||
download = 2,
|
||||
server_time = 8,
|
||||
download_nh = 21,
|
||||
|
||||
dir_browse = 23,
|
||||
by_name = uint.MaxValue,
|
||||
|
||||
|
||||
TCP_COM_VERSION = 0,
|
||||
TCP_COM_FILE_LIST = 1,
|
||||
TCP_COM_PASP_BROWSE = 3,
|
||||
@@ -124,7 +123,7 @@ namespace DataClient
|
||||
TCP_COM_PASP_FIND = 5,
|
||||
TCP_COM_PROG_LIST = 6,
|
||||
TCP_COM_PROG_DOWNLOAD = 7,
|
||||
TCP_COM_SERVER_TIME = 8,
|
||||
|
||||
TCP_COM_DOWNLOAD_USOV = 9,
|
||||
TCP_COM_SLIT_HISTORY = 10,
|
||||
TCP_COM_KEEP_ALIVE = 11,
|
||||
@@ -138,7 +137,6 @@ namespace DataClient
|
||||
TCP_COM_PASP_BROWSE2 = 19,
|
||||
TCP_COM_ARCH_HISTORY = 20,
|
||||
TCP_COM_DOWNLOAD_USOV_NH = 22,
|
||||
TCP_COM_DIR_BROWSE = 23,
|
||||
TCP_COM_VDP_SIM_MED = 24,
|
||||
TCP_COM_VDP_FLAGS = 25,
|
||||
TCP_COM_USER_FLAGS = 26,
|
||||
@@ -191,28 +189,28 @@ namespace DataClient
|
||||
TCP_COM_GET_CUR_PARAMS_5 = 73,
|
||||
TCP_COM_FIX_DB_CYCLE = 74,
|
||||
}
|
||||
/// <summary>IP адрес СТП.</summary>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Ip"]/*' />
|
||||
public string Ip
|
||||
{
|
||||
get { return ip; }
|
||||
set { ip = (IPAddress.TryParse(value, out _)) ? value : ip; }
|
||||
}
|
||||
private string ip = "127.0.0.1";
|
||||
/// <summary>Порт СТП.</summary>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Port"]/*' />
|
||||
public int Port
|
||||
{
|
||||
get { return port; }
|
||||
set { port = (value < 1) ? 1 : (value > 65535) ? 65535 : value; }
|
||||
}
|
||||
private int port = 1070;
|
||||
/// <summary>Количество попыток переподключения.</summary>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="RetryCount"]/*' />
|
||||
public int RetryCount
|
||||
{
|
||||
get { return retryCount; }
|
||||
set { retryCount = value < 1 ? 1 : value; }
|
||||
}
|
||||
private int retryCount = 3;
|
||||
/// <summary>Время в секундах между попытками переподключения.</summary>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="RetryInterval"]/*' />
|
||||
public int RetryInterval
|
||||
{
|
||||
get { return retryInterval; }
|
||||
@@ -220,14 +218,15 @@ namespace DataClient
|
||||
}
|
||||
private int retryInterval = 1;
|
||||
|
||||
|
||||
//Construction
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="NETClient1"]/*' />
|
||||
public NETClient()
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
enc = Encoding.GetEncoding(866);
|
||||
tcpC = new TcpClient(new IPEndPoint(IPAddress.Parse(ip), port));
|
||||
}
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="NETClient2"]/*' />
|
||||
public NETClient(string ip, int port)
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
@@ -238,89 +237,52 @@ namespace DataClient
|
||||
}
|
||||
|
||||
//Work with socket functions
|
||||
/// <summary>Получить неизвестное количество байт.</summary>
|
||||
/// <param name="ns">Открытый сетевой поток.</param>
|
||||
/// <param name="awaitInterval">Время ожидания между проверккми буфера.</param>
|
||||
/// <param name="tryCounts">Количество проверок буфера.</param>
|
||||
/// <returns>Массив байт.</returns>
|
||||
private byte[] ReceiveBytesUnknown(NetworkStream ns, int awaitInterval = 1, int tryCounts = 3)
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="ReceiveBytesFull"]/*' />
|
||||
private byte[] ReceiveBytesFull(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 InvalidOperationException("NetworkStream not access to Read.");
|
||||
if (!ns.Socket.Connected) throw new InvalidOperationException("NetworkStream not connected to server.");
|
||||
|
||||
int tryCount = 0;
|
||||
do
|
||||
{
|
||||
if (!ns.Socket.Connected) throw new InvalidOperationException("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();
|
||||
try{ return ReceiveBytesFixSize(ns, uint.MaxValue, awaitInterval, tryCounts); }
|
||||
catch { throw; }
|
||||
}
|
||||
/// <summary>Получить определенное количество байт.</summary>
|
||||
/// <param name="ns">Открытый сетевой поток.</param>
|
||||
/// <param name="size">Кол-во получаемый байт.</param>
|
||||
/// <returns>Массив байт, равный заданному кол-ву.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="ReceiveBytesFixSize"]/*' />
|
||||
private byte[] ReceiveBytesFixSize(NetworkStream ns, uint size, int awaitInterval = 1, int tryCounts = 3)
|
||||
{
|
||||
tryCounts = (tryCounts < 1) ? 1 : tryCounts;
|
||||
awaitInterval = (awaitInterval < 1) ? 1 : awaitInterval;
|
||||
if (size == 0) throw new ArgumentException("Size can't be zero.");
|
||||
if (!ns.CanRead) throw new InvalidOperationException("NetworkStream not access to Read.");
|
||||
if (!ns.Socket.Connected) throw new InvalidOperationException("NetworkStream not connected to server.");
|
||||
var res = new byte[size];
|
||||
var countSize = 0;
|
||||
|
||||
if (!ns.CanRead) throw new IOException("NetworkStream not access to Read.");
|
||||
var res = new List<byte>();
|
||||
int tryCount = 0;
|
||||
do
|
||||
{
|
||||
if (!ns.Socket.Connected) throw new InvalidOperationException("Server drop connection.");
|
||||
if (!ns.Socket.Connected) throw new TimeoutException("Server drop connection.");
|
||||
if (!ns.DataAvailable)
|
||||
{
|
||||
tryCount++;
|
||||
Task.Delay(awaitInterval * 1000).Wait();
|
||||
tryCount++;
|
||||
continue;
|
||||
}
|
||||
tryCount = 0;
|
||||
var buf = new byte[size - countSize];
|
||||
var sz = ((size - res.Count) > 1024) ? 1024 : (size - res.Count);
|
||||
var buf = new byte[sz];
|
||||
var length = ns.Read(buf, 0, buf.Length);
|
||||
for (var i = 0; i < length; i++) res[countSize++] = buf[i];
|
||||
if (countSize == size)
|
||||
return res;
|
||||
for (var i = 0; i < length; i++) res.Add(buf[i]);
|
||||
if (res.Count == size) return res.ToArray();
|
||||
} while (tryCount < tryCounts);
|
||||
return res;
|
||||
return res.ToArray();
|
||||
}
|
||||
/// <summary>Отправить массив байт на СТП.</summary>
|
||||
/// <param name="ns">Открытый сетевой поток.</param>
|
||||
/// <param name="arr">Массив байт.</param>
|
||||
/// <returns>Результат отправки.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="SendBytes1"]/*' />
|
||||
private bool SendBytes(NetworkStream ns, byte[] arr)
|
||||
{
|
||||
if (!ns.CanWrite) throw new InvalidOperationException("NetworkStream not access to Write.");
|
||||
if (!ns.Socket.Connected) throw new InvalidOperationException("NetworkStream not connected to server.");
|
||||
if (!ns.CanWrite) throw new IOException("NetworkStream not access to Write.");
|
||||
try { ns.Write(arr, 0, arr.Length); }
|
||||
catch { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
//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>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="CreateCode"]/*' />
|
||||
public byte[] CreateCode(uint code, string val = null, byte[] prefix = null, byte[] postfix = null)
|
||||
{
|
||||
var res = new List<byte>();
|
||||
@@ -339,8 +301,7 @@ namespace DataClient
|
||||
}
|
||||
|
||||
//Main functions
|
||||
/// <summary>Открыть подключение.</summary>
|
||||
/// <returns>Результат выполнения функции.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Connect"]/*' />
|
||||
public bool Connect()
|
||||
{
|
||||
if (Connected()) return true;
|
||||
@@ -349,80 +310,61 @@ namespace DataClient
|
||||
catch { return false; }
|
||||
return Connected();
|
||||
}
|
||||
/// <summary>Проверка подключения.</summary>
|
||||
/// <returns>Возвращает состояние подключения.</returns>
|
||||
public bool Connected()
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Connected"]/*' />
|
||||
public bool Connected() { return (tcpC != null && tcpC.Connected); }
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Close"]/*' />
|
||||
public void Close() { if (tcpC != null && !tcpC.Connected) tcpC.Close(); }
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="SendBytes2"]/*' />
|
||||
public bool SendBytes(byte[] send)
|
||||
{
|
||||
return (tcpC != null && tcpC.Connected);
|
||||
if (!Connected()) return false;
|
||||
try { return SendBytes(tcpC.GetStream(), send); }
|
||||
catch { throw; }
|
||||
}
|
||||
/// <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 InvalidOperationException("Connection not exist.");
|
||||
var ns = tcpC.GetStream();
|
||||
SendBytes(ns, send);
|
||||
}
|
||||
/// <summary>Получить неизвестное количество байт.</summary>
|
||||
/// <returns>Массив байт.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="ReceiveBytes1"]/*' />
|
||||
public byte[] ReceiveBytes()
|
||||
{
|
||||
var res = new List<byte>();
|
||||
if (!Connected()) throw new InvalidOperationException("Connection not exist.");
|
||||
var ns = tcpC.GetStream();
|
||||
res.AddRange(ReceiveBytesUnknown(ns));
|
||||
return res.ToArray();
|
||||
if (!Connected()) return null;
|
||||
try { return ReceiveBytesFull(tcpC.GetStream()); }
|
||||
catch { return null; }
|
||||
}
|
||||
/// <summary>Получить определенное количество байт.</summary>
|
||||
/// <param name="size">Количество байт.</param>
|
||||
/// <returns>Массив байт.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="ReceiveBytes2"]/*' />
|
||||
public byte[] ReceiveBytes(uint 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();
|
||||
if (!Connected()) return null;
|
||||
try { return ReceiveBytesFixSize(tcpC.GetStream(), size); }
|
||||
catch { return null; }
|
||||
}
|
||||
|
||||
//SubMain functions
|
||||
/// <summary>Внутренняя функция получения файлов.</summary>
|
||||
/// <param name="code">Код, который будет отправлен на сервер.</param>
|
||||
/// <param name="date">Дата. Из неё формируется строка в формате YYYMMDD</param>
|
||||
/// <param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
/// <param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
/// <returns></returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="My_Connect"]/*' />
|
||||
private bool My_Connect()
|
||||
{
|
||||
if (stat.stat == NetStatus.Status.in_progress) throw new IOException("Previous method not finished.");
|
||||
stat.stat = NetStatus.Status.in_progress;
|
||||
if (Connected()) return false;
|
||||
if (!Connect()) { throw new InvalidOperationException("Can't create connection."); }
|
||||
return true;
|
||||
}
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="My_Close"]/*' />
|
||||
private void My_Close(bool needClose)
|
||||
{
|
||||
if (needClose) Close();
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
}
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="GetFile"]/*' />
|
||||
private byte[] GetFile(Code code, DateTime date, int vdp, int idx)
|
||||
{
|
||||
if (code != Code.download_nh && code != Code.download)
|
||||
throw new ArgumentException("Wrong code for this method.");
|
||||
if (stat.stat == NetStatus.Status.in_progress)
|
||||
throw new InvalidOperationException("Previous method not finished.");
|
||||
stat.stat = NetStatus.Status.in_progress;
|
||||
bool flag_connection = !Connected();
|
||||
if (flag_connection) Connect();
|
||||
if (!Connected())
|
||||
{
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
throw new InvalidOperationException("Can't create connection.");
|
||||
}
|
||||
if (code != Code.download_nh && code != Code.download) throw new ArgumentException("Wrong code for this method.");
|
||||
bool needCloseConeection = false;
|
||||
try { needCloseConeection = My_Connect(); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
var str = date.ToString("yyyyMMdd") + "." + vdp.ToString("D2") + (idx % 16).ToString("X1");
|
||||
try { SendBytes(CreateCode((uint)code, str)); }
|
||||
catch (Exception e)
|
||||
{
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
if (flag_connection) Close();
|
||||
throw new InvalidOperationException("Can't send code.", e);
|
||||
}
|
||||
|
||||
try { if(SendBytes(CreateCode((uint)code, str))) throw new IOException("Can't send bytes to server."); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
var res = new List<byte>();
|
||||
var flag_end = false;
|
||||
var endCycle = false;
|
||||
try
|
||||
{
|
||||
do
|
||||
@@ -431,86 +373,138 @@ namespace DataClient
|
||||
switch (tmp[0])
|
||||
{
|
||||
case 0x00:
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
flag_end = true;
|
||||
case 0xff:
|
||||
endCycle = true;
|
||||
break;
|
||||
case 0x01:
|
||||
var blockSize = BitConverter.ToUInt32(ReceiveBytes(4));
|
||||
res.AddRange(ReceiveBytes(blockSize));
|
||||
res.AddRange(ReceiveBytes(BitConverter.ToUInt32(ReceiveBytes(4))));
|
||||
stat.size = (uint)res.Count;
|
||||
break;
|
||||
case 0x02:
|
||||
var fullSize = BitConverter.ToUInt32(ReceiveBytes(4));
|
||||
stat.fullSize = fullSize;
|
||||
break;
|
||||
case 0xff:
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
flag_end = true;
|
||||
stat.fullSize = BitConverter.ToUInt32(ReceiveBytes(4));
|
||||
break;
|
||||
default:
|
||||
ReceiveBytes();
|
||||
throw new ArgumentException("Wront flag when get files.");
|
||||
}
|
||||
} while (!flag_end);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new InvalidOperationException("Can't download file.", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
stat.stat = NetStatus.Status.complete;
|
||||
if (flag_connection) Close();
|
||||
} while (!endCycle);
|
||||
}
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
finally { My_Close(needCloseConeection); }
|
||||
return res.ToArray();
|
||||
}
|
||||
|
||||
//COMMANDS FUNCTIONS
|
||||
/// <summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
/// <param name="date">Дата. Из неё формируется строка в формате YYYMMDD</param>
|
||||
/// <param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
/// <param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
/// <returns>Обработанный массив байт.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Full_Download_NH"]/*' />
|
||||
public byte[] Full_Download_NH(DateTime date, int vdp, int idx)
|
||||
{
|
||||
try { return GetFile(Code.download_nh, date, vdp, idx); }
|
||||
catch { throw; }
|
||||
}
|
||||
/// <summary>Получение файла данных (байтами) с СТП.</summary>
|
||||
/// <param name="date">Дата. Из неё формируется строка в формате YYYMMDD</param>
|
||||
/// <param name="vdp">Номер печи. 00 - общецеховые параметры.</param>
|
||||
/// <param name="idx">Индекс файла. От 0 до 15.</param>
|
||||
/// <returns>Обработанный массив байт.</returns>
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Full_Download"]/*' />
|
||||
public byte[] Full_Download(DateTime date, int vdp, int idx)
|
||||
{
|
||||
try { return GetFile(Code.download, date, vdp, idx); }
|
||||
catch { throw; }
|
||||
}
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Full_By_Name"]/*' />
|
||||
public byte[] Full_By_Name(string val)
|
||||
{
|
||||
if (string.IsNullOrEmpty(val)) return null;
|
||||
bool flag_connection = !Connected();
|
||||
if (flag_connection) Connect();
|
||||
if (!Connected()) { throw new InvalidOperationException("Can't create connection."); }
|
||||
try { SendBytes(CreateCode((uint)Code.by_name, val)); }
|
||||
catch (Exception e)
|
||||
{
|
||||
if (flag_connection) Close();
|
||||
throw new InvalidOperationException("Can't send code.", e);
|
||||
}
|
||||
bool needCloseConeection = false;
|
||||
try { needCloseConeection = My_Connect(); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
|
||||
try { if(!SendBytes(CreateCode((uint)Code.by_name, val))) throw new IOException("Can't send bytes to server."); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
|
||||
byte[] res = null;
|
||||
try
|
||||
{
|
||||
var tmp = ReceiveBytes(1);
|
||||
return tmp[0] switch
|
||||
switch (tmp[0])
|
||||
{
|
||||
0x00 => null,
|
||||
0x01 => ReceiveBytes(4),
|
||||
_ => throw new InvalidOperationException("Wrong answer from server."),
|
||||
case 0x00: break;
|
||||
case 0x01: res = ReceiveBytes(4); break;
|
||||
default: ReceiveBytes(); break;
|
||||
};
|
||||
}
|
||||
catch (Exception e) { throw new InvalidOperationException("Can't receive code.", e); }
|
||||
finally { if (flag_connection) Close(); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
finally { My_Close(needCloseConeection); }
|
||||
return res;
|
||||
}
|
||||
public string[] Full_Dir_Browse(string dir)
|
||||
/// <include file='DataClientSrc.xml' path='docs/NET/m[@n="Full_Dir_Browse"]/*' />
|
||||
public string[] Full_Dir_Browse(string dir = "")
|
||||
{
|
||||
dir = (string.IsNullOrEmpty(dir)) ? "" : dir;
|
||||
|
||||
bool needCloseConeection = false;
|
||||
try { needCloseConeection = My_Connect(); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
|
||||
try { if (!SendBytes(CreateCode((uint)Code.dir_browse, dir, new byte[] { 0x00 }))) throw new IOException("Can't send bytes to server."); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
|
||||
var res = new List<string>();
|
||||
try
|
||||
{
|
||||
bool endCycle = false;
|
||||
do
|
||||
{
|
||||
var tmp = ReceiveBytes(1);
|
||||
switch (tmp[0])
|
||||
{
|
||||
case 0x00:
|
||||
res = null;
|
||||
endCycle = true;
|
||||
break;
|
||||
case 0x01:
|
||||
var str = enc.GetString(ReceiveBytes(BitConverter.ToUInt32(ReceiveBytes(4))));
|
||||
if (str != "." && str != ".." && str != "error")
|
||||
if (dir == "") res.Add(str);
|
||||
else res.Add(dir + "/" + str);
|
||||
tmp = ReceiveBytes(1);
|
||||
if (tmp[0] != 0x00) throw new ArgumentException("Wrong get end line.");
|
||||
break;
|
||||
case 0xff:
|
||||
endCycle = true;
|
||||
break;
|
||||
default:
|
||||
res = null;
|
||||
ReceiveBytes();
|
||||
endCycle = true;
|
||||
break;
|
||||
}
|
||||
} while (!endCycle);
|
||||
}
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
finally { My_Close(needCloseConeection); }
|
||||
return res?.ToArray();
|
||||
}
|
||||
|
||||
public DateTime Full_Server_Time()
|
||||
{
|
||||
bool needCloseConeection = false;
|
||||
try { needCloseConeection = My_Connect(); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
|
||||
try { if (!SendBytes(CreateCode((uint)Code.server_time))) throw new IOException("Can't send bytes to server."); }
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
int year, month, day, hour, minute, second;
|
||||
try
|
||||
{
|
||||
var buf = ReceiveBytes(2);
|
||||
year = buf[0] | buf[1] << 8;
|
||||
month = ReceiveBytes(1)[0];
|
||||
day = ReceiveBytes(1)[0];
|
||||
hour = ReceiveBytes(1)[0];
|
||||
minute = ReceiveBytes(1)[0];
|
||||
second = ReceiveBytes(1)[0];
|
||||
}
|
||||
catch { My_Close(needCloseConeection); throw; }
|
||||
finally { My_Close(needCloseConeection); }
|
||||
return new DateTime(year, month, day, hour, minute, second);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
221
DataClient/bin/Debug/net5.0/DataClient.xml
Normal file
221
DataClient/bin/Debug/net5.0/DataClient.xml
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>DataClient</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:DataClient.NETClient.Status">
|
||||
<summary>
|
||||
Статус процесса выполнения запроса.
|
||||
Предполагается использовать только на больших
|
||||
загрузках и в ассинхронных задачах
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:DataClient.NETClient.Code">
|
||||
<summary>Коды для работы с СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.Ip">
|
||||
<summary>IP адрес СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.Port">
|
||||
<summary>Порт СТП.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.RetryCount">
|
||||
<summary>Количество попыток переподключения.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.NETClient.RetryInterval">
|
||||
<summary>Время в секундах между попытками переподключения.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.#ctor">
|
||||
<summary>Основной конструктор класса NetClient. Ip-адрес - 127.0.0.1; Порт - 1070;</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.#ctor(System.String,System.Int32)">
|
||||
<summary>Конструктор класса NetClient с параметрами.</summary><param name="ip">Ip-адрес сервера.</param><param name="port">Порт сервера.</param>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytesFull(System.Net.Sockets.NetworkStream,System.Int32,System.Int32)">
|
||||
<summary>Получение неопределенного количество байт с сервера. Количество ограничено максимальным значением типа UInt.</summary><param name="ns">Открытый сетевой поток.</param><param name="awaitInterval">Время ожидания между проверками буфера.</param><param name="tryCounts">Количество проверок буфера.</param><returns>Массив байт.</returns><exception cref="T:System.InvalidOperationException">
|
||||
Соединение с сервером закрыто.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для Чтения.
|
||||
</exception><exception cref="T:System.TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytesFixSize(System.Net.Sockets.NetworkStream,System.UInt32,System.Int32,System.Int32)">
|
||||
<summary>Получение определенного количество байт с сервера.</summary><param name="ns">Открытый сетевой поток.</param><param name="size">Кол-во получаемых байт.</param><param name="awaitInterval">Время ожидания между проверками буфера.</param><param name="tryCounts">Количество проверок буфера.</param><returns>Массив байт. Может быть меньше заданного количества.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception><exception cref="T:System.TimeoutException">
|
||||
Сервер сбросил соединение.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.SendBytes(System.Net.Sockets.NetworkStream,System.Byte[])">
|
||||
<summary>Отправка массива байт на СТП.</summary><param name="ns">Открытый сетевой поток.</param><param name="arr">Массив байт.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Стрим недоступен для записи.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.CreateCode(System.UInt32,System.String,System.Byte[],System.Byte[])">
|
||||
<summary>Формирование массива байт на отправку.</summary><param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param><param name="val">Передаваемая строка.</param><param name="prefix">Байты перед передаваемой строкой.</param><param name="postfix">Байты после передаваемой строкой.</param><returns>Массив байт для отправки на СТП.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Connect">
|
||||
<summary>Открытие соединения к серверу.</summary><remarks>Информирует только о подключении к серверу. Исключения опускает.</remarks><returns>Состояние подключения.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Connected">
|
||||
<summary>Проверка подключения.</summary><returns>Состояние подключения.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Close">
|
||||
<summary>Закрыть подключение.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.SendBytes(System.Byte[])">
|
||||
<summary>Отправка массива байт на СТП.</summary><param name="send">Массив байт для отправки.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
|
||||
Размер байт не должен равняться нулю.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Поток недоступен для записи.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytes">
|
||||
<summary>Получение неизвестного количество байт.</summary><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.ReceiveBytes(System.UInt32)">
|
||||
<summary>Получение определенного количество байт.</summary><param name="size">Количество байт.</param><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт определенного размера. Может массив быть меньше, если в буфере не будет достаточно данных.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.My_Connect">
|
||||
<summary>Внутренняя функция для создания подключения.</summary><returns>Возвращает флаг необходимости закрытия соединения.</returns><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.My_Close(System.Boolean)">
|
||||
<summary>Внетренняя функция для закрытия соединения.</summary><param name="needClose">Флаг о необходимости закрыть соединение.</param>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.GetFile(DataClient.NETClient.Code,System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Внутренняя функция получения файлов.</summary><param name="code">Код, который будет отправлен на сервер.</param><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><returns>Массив байт, соответствующий запрашиваемому файлу.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Download_NH(System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Download(System.DateTime,System.Int32,System.Int32)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный код, для получения файла.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_By_Name(System.String)">
|
||||
<summary>Получение файла данных (байтами) с СТП.</summary><param name="val">Название команды.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив байт, соответствующий этой команде. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="M:DataClient.NETClient.Full_Dir_Browse(System.String)">
|
||||
<summary>Получение структуры файлов и папок в запрашиваемой директории.</summary><param name="dir">Путь, структуру которого надо отобразить.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив строк. Полные пути к файлам и папкам. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
|
||||
Неверный флаг окончания строки.
|
||||
Неверный флаг во время получения файла.
|
||||
</exception><exception cref="T:System.IO.IOException">
|
||||
Предыдущий запрос не закончен.
|
||||
Поток недоступен для записи.
|
||||
</exception><exception cref="T:System.InvalidOperationException">
|
||||
Не получилось соединиться с сервером.
|
||||
</exception>
|
||||
</member>
|
||||
<member name="T:DataClient.STPClient">
|
||||
<summary>
|
||||
Класс для связи с СТП. Содержит все инструменты, для получения данных.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.STPClient.UseServer">
|
||||
<summary>Номер сервера, используемого по умолчанию.</summary>
|
||||
</member>
|
||||
<member name="P:DataClient.STPClient.ListServers">
|
||||
<summary>Массив серверов, инициализированных в экземпляре класса.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.GetServerIdByName(System.String)">
|
||||
<summary>Получение номера сервера по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<returns>Номер сервера в списке серверов.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.GetServerNameById(System.Int32)">
|
||||
<summary>Получение название сервера по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<returns>Название сервера.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.CheckDataServer(System.String,System.Int32,System.String)">
|
||||
<summary>Проверка параметров серевера перед их добавлением в список.</summary>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.AddServer(System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Добавление сервера в список серверов.</summary>
|
||||
<param name="name">Название сервера</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.ChangeServerById(System.Int32,System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Изменение сервера в списке серверов по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<param name="name">Название сервера.</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.ChangeServerByName(System.String,System.String,System.Int32,System.String)">
|
||||
<summary>Изменение сервера в списке серверов по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<param name="ip">IP адресс сервера.</param>
|
||||
<param name="port">Порт сервера.</param>
|
||||
<param name="dir">Путь к архиву.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.RemoveServerById(System.Int32)">
|
||||
<summary>Удаление сервера из списка серверов по его номеру.</summary>
|
||||
<param name="id">Номер сервера в списке серверов.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.RemoveServerByName(System.String)">
|
||||
<summary>Удаление сервера из списка серверов по его названию.</summary>
|
||||
<param name="name">Название сервера.</param>
|
||||
<returns>Результат выполнения функции.</returns>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.Config">
|
||||
<summary>Чтение конфигурационнного файла и установка параметров по умолчанию.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.#ctor">
|
||||
<summary>Создание экземпляра класса.</summary>
|
||||
</member>
|
||||
<member name="M:DataClient.STPClient.#ctor(System.String)">
|
||||
<summary>Создание экземпляра класса с указанием конфигурационного файла.</summary>
|
||||
<param name="confDir">Путь к файлу конфигурации.</param>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
Binary file not shown.
@@ -3,7 +3,6 @@ D:\GIT\ASCKU_PC\DataClient\bin\Debug\net5.0\DataClient.deps.json
|
||||
D:\GIT\ASCKU_PC\DataClient\bin\Debug\net5.0\DataClient.dll
|
||||
D:\GIT\ASCKU_PC\DataClient\bin\Debug\net5.0\ref\DataClient.dll
|
||||
D:\GIT\ASCKU_PC\DataClient\bin\Debug\net5.0\DataClient.pdb
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.csprojAssemblyReference.cache
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.GeneratedMSBuildEditorConfig.editorconfig
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.AssemblyInfoInputs.cache
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.AssemblyInfo.cs
|
||||
@@ -11,3 +10,5 @@ D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.csproj.CoreCompileInputs.
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.dll
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\ref\DataClient.dll
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.pdb
|
||||
D:\GIT\ASCKU_PC\DataClient\bin\Debug\net5.0\DataClient.xml
|
||||
D:\GIT\ASCKU_PC\DataClient\obj\Debug\net5.0\DataClient.csprojAssemblyReference.cache
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user