Написана по технологии Native
Настоящая ВК является немного урезанной версией ВК, работающей в нашем холдинге в базе 1С в связке со специальными службами, установленными на каждом из компьютеров холдинга (в первую очередь используется для подачи команд службам).
Написана по технологии Native, т.е. не требует регистрации в реестре и особых прав пользователя.
В архиве находится файл тестовой базы 1Cv8.1CD, собственно файл ВК NetNative.dll и пара внешних тестовых обработок.
Поключение ВК:
ПодключитьВнешнююКомпоненту(ПолноеИмяФайлаВК,»NetNative»,AddInType.Native);
Создание экземпляра класса:
Сеть = Новый(«AddIn.NetNative.V8Net»); // слева — любая глобальная переменная
МЕТОДЫ ВК:
UDP_Создать(НомерПорта), например:
СлушаемПорт=Сеть.UDP_Создать(10000);
Ставит UDP-порт на прослушивание.
При получении входящего UDP-сообщения генерирует внешнее событие «UDP_READ»,
данные — текст сообщения.
Возвращает номер порта на прослушивании.
Очень важные нюансы:
На одном компьютере невозможно подключить на прослушивание один и тот же порт из разных экземпляров одной и той же программы или разных программ. Поэтому был доработан модуль IdSocketHandle таким образом, чтобы не генерировалось исключение, а занимался следующий по порядку свободный порт. Т.е. при попытке занять уже занятый порт 10000, на прослушивание встанет ближайший по порядку свободный, например, 10001, который и вернет метод UDP_Создать.
Вышеизложенное несколько усложняет создание UDP-чата при использовании на терминале, или при запуске некольких копий 1С на отдельном компьютере. В тестовой базе применен туповато-лобовой вариант: создан справочник СетевыеПользователи, каждому пользователю назначен свой стартовый порт, с интервалом 10 от предыдущего.
Таким образом, для каждого пользователя существут возможность запуска до 10 копий 1С на одном компьютере.
При отсылке UDP-сообщения методом UDP_Сообщение (см. ниже), сообщение посылается на все 10 возможных портов.
Другие варианты обхода проблемы занятых портов: «разруливающая» база на 1С, или «разруливающая» программа с компонентом TIdUDPServer.
UDP_Сообщение (ТекстСообщения,НомерПорта,Компьютер)
ТекстСообщения Компьютер — строки, НомерПорта — число.
Компьютер — Имя или IP, необязательный, если пусто — широковещательное сообщение по всем компьютерам подсети.
Нюанс — при посылке широковещательного сообщения его получат только компьютеры той подсети, где расположен посылающий компьютер,
например, получат компьютеры подсети 192.168.100.ХХХ, и не получат компьютеры подсети 192.168.200.ХХХ.
Поэтому лучше указывать конкретный Компьютер.
IP2Name(IP) — возвращает имя компьютера по IP-адресу.
Name2IP(Имя) — возвращает IP-адрес по имени компьютера.
Пинг(Компьютер,ИнтервалОжидания) — возвращает Истина или Ложь.
Компьютер — имя или IP-адрес, строка
ИнтервалОжидания — число, мс, необязательный, по умолчанию 2500
СетевойПользователь() — возвращает сетевое (не 1С-кое) имя пользователя.
ШифроватьСтроку(Строка), ДешифроватьСтроку(Строка) — возвращает соответственно зашифрованную и расшифрованную строки. Значение одной и той же шифрованной строки всегда различно, дешифровка — однозначна.
Примечание: в моей базе используется для шифрования UDP- команд службам (на всякий случай)
Задержка(Интервал), мс. — ненагружающая задержка выполнения.
Таймер(Интервал), мс. — устанавливает таймер.
При срабатывании таймер генерирует событие «MAIN_TIMER_EVENT»
Свойство
ИнтервалТаймера — считывает/устанавливает интервал таймера
MD5Файла(ПолноеИмяФайла) — вычисляет MD5 содержимого указанного файла.
Примечание: я использую для определения изменился ли список всех файлов exe на компьютере с установленной службой.
БоковаяПанель(Ширина)
Устанавливает левую панель на MDI-окно. Только для толстого клиента.
Следующие методы только для установленной в толстом клиенте боковой панели:
ДобавитьСтрокуВПанель(Строка) — добавляет строку в панель.
ОчиститьПанель() — очищает весь текст в панели.
Прогресс(Позиция) — устанавливает позицию прогресс-бара в боковой панели.
СохранитьСодержимоеПанели(ИмяФайлаДляСохранения) — сохраняет содержимое панели в указанный файл
Просто и понятно — как для (
тупых) меня :). В копилку…(1) wunderland, спасибо, именно «просто и понятно» я и хотел 😉
+1
Хм. А применить сие дело к работе с именованными каналами (named pipes) можно?
На сервере работает или как многие другие только на клиенте?
(4) wondermaker,
В выходные перевожу одного клиента на 1с-сервер — клиент, вот и проверю. Не на чем было проверять…
Есть в планах сделать полноценного клиента для tcp-сервера из этой ВК?
Чтобы можно было подключаться с серверу по адресу:порту и слушать ответы от него (к примеру в двоичных данных).
Присоединюсь к предыдущему вопросу: будет ли TCP-сервер?
(7) fd13, Автор, к сожалению, уже давно не топчет эту планету
(7) Вот здесь есть примеры использования Tcp/IP
Охренеть какая зачетная штука