IPConnection.ListenUSR1

From SunFlurry wiki
Revision as of 08:51, 7 February 2021 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  ListenUSR1 (Серверные соединения)
Объект:Объект IP
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число, системная ошибка
Визуальность:Нет

Функция создает USR1 TCP/IP сервер на указанном порту. После установки внешнего соединения, система инициирует вызов указанной функции. Функция будет выполнена в корневом потоке. Если корневой поток в это время будет занят, система будет ожидать его освобождения, по время ожидания, принятие новых соединений будет приостановлено, соединения будут ждать в очереди операционной системы (размер очереди задан системой по умолчанию). Вызов Disconnect или удаление объекта из системы автоматически закрывает сервер и освобождает порт. См. также статью USR1 протокол.

Синтаксис

IPConnection.ListenUSR1(<Порт сокета (INT)>,<Пароль USR1 соединения (STRING)>,<Функция глобального модуля, вызываемая при установке соединения (STRING)>,<Тип соединения (INT)>=0):<Объект сервера (IPOBJECT)>

Аргументы

  • <Порт сокета (INT)> - Номер порта, для которого открывается серверный сокет. Номер может принимать значения от 1 до 65535. Если порт уже занят в системе (сервером или клиентом), он не может быть повторно открыт, в таком случае, функция вызовет исключение. Один и тот же порт может быть открыт одновременно для IPv4 и IPv6.
  • <Пароль USR1 соединения (STRING)> - USR1 соединение использует простой пароль для аутентификации.
  • <Функция глобального модуля, вызываемая при установке соединения (STRING)> - Аргумент задает наименование функции из любого из глобальных модулей, которая будет вызвана в момент появления в очереди нового соединения. Функция имеет три параметра и является функцией OnUsr1Connection.
  • <Тип соединения (INT)> - (необязательный аргумент) Указывает на тип (протокол) соединения. Доступны следующие значения аргумента:
    • 0 (по умолчанию) -- Будет использован протокол IPv4
    • 1 -- Будет использован протокол IPv6

Возвращаемое значение

Возвращается новый серверный объект IP. В момент удаления этого объекта из системы, сервер будет также удален и удерживаемый порт освобожден.

Примеры

//Пример USR1 серверной части обмена.

Function OnUsr1Connection(Соединение,Параметр,спФайлы) Export
  If Параметр="GETPRINTERS" Then //Запрос на список принтеров от клиента
    Соединение.SendCmd("OK  ");
    
    //Получаем список принтеров
    Стр:=GetDefaultPrinter;
    Стр0:=Uppercase(Стр);
    Try
      aList:=GetInstalledPrinters();
      For i:=1 To aList.Size() Do
        If Стр0<>Uppercase(aList.Get(i)) Then
          Стр:=Стр+?(Стр<>"",_NEWLINE)+aList.Get(i);
        EndIf;  
      EndDo;
    Except EndTry;
    Соединение.SendStr(Стр);
    Соединение.Disconnect();
    Exit;
  ElseIf
...

  EndIf;

  //Неизвестный режим, разрываем связь
  Соединение.SendCmd("BAD ");
  Соединение.Disconnect();
EndFunction;

аСервер:=IPConnection.OnUsr1Connection(8000,"Pass123","OnUSR1Connection");
//Вечный цикл, во время которого можно выполнять другие действия (к примеру, сервер консоли), в данном случае, мы ожидаем новые соединения.
While 1 Do
  Sleep(100);
EndDo;