Настоящая ВК является немного урезанной версией ВК, работающей в нашем холдинге в базе 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-окно. Только для толстого клиента.
Следующие методы только для установленной в толстом клиенте боковой панели:
ДобавитьСтрокуВПанель(Строка) - добавляет строку в панель.
ОчиститьПанель() - очищает весь текст в панели.
Прогресс(Позиция) - устанавливает позицию прогресс-бара в боковой панели.
СохранитьСодержимоеПанели(ИмяФайлаДляСохранения) - сохраняет содержимое панели в указанный файл