ФормыДляОдноСкрипта.ПриОшибкеСервера (OneScriptForms.ErrorServer) Свойство

Использование

Чтение и запись.

Значение

Тип: Действие (Action).

Возвращает или задает код для выполнения при возникновении ошибки или предупреждения на сервере.

Примечание

Пример

Ф.ПриОшибкеСервера = Ф.Действие(ЭтотОбъект, "Сервер_ПриОшибкеСервера");
Полный пример кода



// Это пример запуска сервера не блокирующего сценарий. // Можно создавать формы для управления сервером. // В качестве клиента удобно будет использовать TCPКлиент (TCPClient) Перем Ф, Сервер; Процедура Сервер_ПриПодключенииКлиента() Экспорт АргументыСобытия = Ф.АргументыСобытия; Сообщить("Клиент подключился: " + АргументыСобытия.ИдентификаторКлиента); Сообщить("Активных клиентов: " + Сервер.КоличествоАктивныхКлиентов); Сообщить("========================"); КонецПроцедуры Процедура Сервер_ПриОтключенииКлиента() Экспорт АргументыСобытия = Ф.АргументыСобытия; Сообщить("Клиент отключился: " + АргументыСобытия.ИдентификаторКлиента); Сообщить("Активных клиентов: " + Сервер.КоличествоАктивныхКлиентов); Сообщить("========================"); КонецПроцедуры Процедура Сервер_СерверПолучилДанные() Экспорт АргументыСобытия = Ф.АргументыСобытия; Данные = АргументыСобытия.Данные; // Данные, полученные сервером, доступны нам как тип БуферДвоичныхДанных (BinaryDataBuffer) из OneScript. // Если с сервером будет взаимодействовать клиент, который формирует сообщения по оговоренным заранее правилам, // появляется возможность делить данные на отдельные сообщения и кроме того узнать тип данных отдельного сообщения. // Как частный случай можно на стороне клиента отправлять в сетевой поток сначала размер сообщения (четыре байта) // а затем само сообщение. ВывестиСообщение(Данные, АргументыСобытия.ИдентификаторКлиента); // Отправим БуферДвоичныхДанных. БДД = ПолучитьБуферДвоичныхДанныхИзСтроки("!!!Всем подключенным клиентам, ПРИВЕТ от " + АргументыСобытия.ИдентификаторКлиента); Сервер.ОтправитьВсем(БДД); // Отправим строку. Сервер.ОтправитьВсем(Символы.ПС + "Всем подключенным клиентам, ПРИВЕТ!!! от " + АргументыСобытия.ИдентификаторКлиента); // Отправим строку. Сервер.ОтправитьКлиенту(АргументыСобытия.ИдентификаторКлиента, "От сервера клиенту " + АргументыСобытия.ИдентификаторКлиента + ": " + Символы.ПС + ПолучитьСтрокуИзБуфераДвоичныхДанных(Данные)); Сообщить("========================"); КонецПроцедуры Процедура Сервер_ПриОшибкеСервера() Экспорт АргументыСобытия = Ф.АргументыСобытия; Сообщить("ОшибкаСервера: " + АргументыСобытия.ОшибкаСервера); Сообщить("========================"); КонецПроцедуры Процедура ВывестиСообщение(Данные, ИдентификаторКлиента) Попытка // В случае передачи в потоке перед самим сообщением размера сообщения используем этот вариант. РазмерДанных = Данные.ПрочитатьЦелое32(0); ДанныеСообщения = Данные.Прочитать(4, РазмерДанных); ДД = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ДанныеСообщения); ОтдельноеСообщение = ПолучитьСтрокуИзДвоичныхДанных(ДД, КодировкаТекста.UTF8); Сообщить("Сообщение от " + ИдентификаторКлиента + " (" + РазмерДанных + " байт):" + Символы.ПС + ОтдельноеСообщение); Если (Данные.Размер - 4 - РазмерДанных) > 0 Тогда ОстатокДанных = Данные.Прочитать(4 + РазмерДанных, Данные.Размер - 4 - РазмерДанных); // Продолжаем делить данные на отдельные сообщения. ВывестиСообщение(ОстатокДанных, ИдентификаторКлиента); КонецЕсли; Исключение // В случае передачи в потоке никак не разделенных байтов используем этот вариант. ДанныеСообщения = Данные.Прочитать(0, Данные.Размер); ДД = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ДанныеСообщения); ОтдельноеСообщение = ПолучитьСтрокуИзДвоичныхДанных(ДД, КодировкаТекста.UTF8); Сообщить("Сообщение от " + ИдентификаторКлиента + " (" + Данные.Размер + " байт):" + Символы.ПС + ОтдельноеСообщение); КонецПопытки; // Можно предусмотреть другие способы разделения потока байтов на отдельные сообщения, например посылка символа перевода строки. КонецПроцедуры Процедура ЗапускМногопоточногоСервера(параметр1) Экспорт Контекст = Новый Структура(); Контекст.Вставить("Сервер", параметр1); Стр = " | |Процедура Сервер_ПриПодключенииКлиента() Экспорт | Сервер.ОбработатьПриПодключенииКлиента(Сервер.АргументыСобытия); |КонецПроцедуры | |Процедура Сервер_ПриОтключенииКлиента() Экспорт | Сервер.ОбработатьПриОтключенииКлиента(Сервер.АргументыСобытия); |КонецПроцедуры | |Процедура Сервер_СерверПолучилДанные() Экспорт | Сервер.ОбработатьСерверПолучилДанные(Сервер.АргументыСобытия); |КонецПроцедуры | |Процедура Сервер_ПриОшибкеСервера() Экспорт | Сервер.ОбработатьПриОшибкеСервера(Сервер.АргументыСобытия); |КонецПроцедуры | |Сервер.ПриПодключенииКлиента = Сервер.Действие(ЭтотОбъект, ""Сервер_ПриПодключенииКлиента""); |Сервер.ПриОтключенииКлиента = Сервер.Действие(ЭтотОбъект, ""Сервер_ПриОтключенииКлиента""); |Сервер.СерверПолучилДанные = Сервер.Действие(ЭтотОбъект, ""Сервер_СерверПолучилДанные""); |Сервер.ПриОшибкеСервера = Сервер.Действие(ЭтотОбъект, ""Сервер_ПриОшибкеСервера""); |Сервер.Начать(); | |Пока Сервер.Продолжать Цикл | Сервер.ПолучитьСобытие().Выполнить(); |КонецЦикла; |"; ЗагрузитьСценарийИзСтроки(Стр, Контекст); КонецПроцедуры ПодключитьВнешнююКомпоненту("C:\444\111\OneScriptForms\OneScriptForms\bin\Debug\OneScriptForms.dll"); Ф = Новый ФормыДляОдноСкрипта(); Сервер = Ф.МногопоточныйTCPСервер(8080); Сервер.ПроверятьАктивностьКлиента = Истина; МассивПараметров = Новый Массив(1); МассивПараметров[0] = Сервер; Задание = ФоновыеЗадания.Выполнить(ЭтотОбъект, "ЗапускМногопоточногоСервера", МассивПараметров); Ф.ПриПодключенииКлиента = Ф.Действие(ЭтотОбъект, "Сервер_ПриПодключенииКлиента"); Ф.ПриОтключенииКлиента = Ф.Действие(ЭтотОбъект, "Сервер_ПриОтключенииКлиента"); Ф.СерверПолучилДанные = Ф.Действие(ЭтотОбъект, "Сервер_СерверПолучилДанные"); Ф.ПриОшибкеСервера = Ф.Действие(ЭтотОбъект, "Сервер_ПриОшибкеСервера"); Ф.ЗапуститьОбработкуСобытий();

Смотрите также

ФормыДляОдноСкрипта (OneScriptForms) Класс | Библиотека OneScriptForms