RU/triggerServerEvent: Difference between revisions
(Blanked the page) |
m (Изменено описание параметра функции) |
||
(One intermediate revision by one other user not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | |||
{{RU/Client function}} | |||
Эта функция позволяет вызвать срабатывание события, предварительно созданного на сервере. Она относится к основным средствам обмена информацией между сервером и клиентом. На серверной стороне существует аналогичная функция [[RU/triggerClientEvent|triggerClientEvent]] работающая в противоположном направлении. Эту функцию можно рассматривать как асинхронный вызов функции с использованием [[RU/triggerClientEvent|triggerClientEvent]] для получения ответа\результата, если таковой требуется. | |||
Передавать можно почти любые типы данных, включая элементы ([[element]]) и сложные вложенные таблицы ([[table]]). Данные неэлементных типов МТА, например указатели на xml (xmlNodes) или указатели на ресурсы не могут быть переданы, поскольку у них может и не существовать какого-либо представления на стороне клиента. | |||
Вызовы посылаются надежно, поэтому клиенты их получат, однако возможны (хотя, как правило, незначительные) задержки в получении, что также следует принимать во внимание. Также следует учитывать вопросы пропускной способности канала - не отправляйте большой объем данных без необходимости. Отправка одного большого вызова ненамного эффективнее отправки нескольких маленьких. | |||
==Синтаксис== | |||
<syntaxhighlight lang="lua"> | |||
bool triggerServerEvent ( string event, element theElement, [arguments...] ) | |||
</syntaxhighlight> | |||
===Required Arguments=== | |||
*'''event:''' Название события на стороне сервера. Оно должно быть зарегистрировано на стороне сервера с помощью [[RU/addEvent|addEvent]] и иметь хотя бы один обработчик, добавленный с помощью [[RU/addEventHandler|addEventHandler]]. | |||
*'''theElement:''' Элемент, который будет источником [[Event system#Event handlers|source]] события. Это может быть, например, другой игрок, или корень (root element), если это непринципиально. | |||
===Optional Arguments=== | |||
*'''arguments...:''' Список аргументов, которые будут передаваться вместе с событием. Можно передавать любые типы lua (кроме функций), а также любые элементы ([[element]]). | |||
===Вывод=== | |||
Возвращает ''true'' если вызов события был успешно сделан, ''false'' если указаны некорректные аргументы. | |||
===Пример=== | |||
В этом примере клиент передает серверу сообщение "Превед медвед!". | |||
<section name="Server" class="server" show="true"> | |||
<syntaxhighlight lang="lua"> | |||
function greetingHandler ( message ) | |||
outputChatBox ( "The client says: " .. message, source ) | |||
end | |||
addEvent( "onGreeting", true ) | |||
addEventHandler( "onGreeting", getRootElement(), greetingHandler ) | |||
</syntaxhighlight> | |||
</section> | |||
<section name="Client" class="client" show="true"> | |||
<syntaxhighlight lang="lua"> | |||
function greetingCommand ( commandName ) | |||
triggerServerEvent ( "onGreeting", getLocalPlayer(), "Превед медвед!" ) | |||
--использование getLocalPlayer вместо getRootElement делает этого клиента источником (source) события, благодаря чему нам не надо дополнительно передавать параметр, содержащий указатель на этого клиента. | |||
end | |||
addCommandHandler ( "greet", greetingCommand ) | |||
</syntaxhighlight> | |||
</section> | |||
Когда выполняется консольная команда "greet" (вводится через консоль сервера или игрока), на стороне клиента вызывается функция ''greetingCommand''. Она вызывает срабатывание на стороне сервера события ''onGreeting'' с параметром "Превед медвед!". В результате вызывается функция-обработчик ''greetingHandler'', которая и пишет полученное от клиента сообщение ему же в чат. | |||
==Смотрите также== | |||
{{RU/Client_event_functions}} | |||
[[en:triggerServerEvent]] |
Latest revision as of 14:28, 26 July 2020
Эта функция позволяет вызвать срабатывание события, предварительно созданного на сервере. Она относится к основным средствам обмена информацией между сервером и клиентом. На серверной стороне существует аналогичная функция triggerClientEvent работающая в противоположном направлении. Эту функцию можно рассматривать как асинхронный вызов функции с использованием triggerClientEvent для получения ответа\результата, если таковой требуется.
Передавать можно почти любые типы данных, включая элементы (element) и сложные вложенные таблицы (table). Данные неэлементных типов МТА, например указатели на xml (xmlNodes) или указатели на ресурсы не могут быть переданы, поскольку у них может и не существовать какого-либо представления на стороне клиента.
Вызовы посылаются надежно, поэтому клиенты их получат, однако возможны (хотя, как правило, незначительные) задержки в получении, что также следует принимать во внимание. Также следует учитывать вопросы пропускной способности канала - не отправляйте большой объем данных без необходимости. Отправка одного большого вызова ненамного эффективнее отправки нескольких маленьких.
Синтаксис
bool triggerServerEvent ( string event, element theElement, [arguments...] )
Required Arguments
- event: Название события на стороне сервера. Оно должно быть зарегистрировано на стороне сервера с помощью addEvent и иметь хотя бы один обработчик, добавленный с помощью addEventHandler.
- theElement: Элемент, который будет источником source события. Это может быть, например, другой игрок, или корень (root element), если это непринципиально.
Optional Arguments
- arguments...: Список аргументов, которые будут передаваться вместе с событием. Можно передавать любые типы lua (кроме функций), а также любые элементы (element).
Вывод
Возвращает true если вызов события был успешно сделан, false если указаны некорректные аргументы.
Пример
В этом примере клиент передает серверу сообщение "Превед медвед!".
function greetingHandler ( message ) outputChatBox ( "The client says: " .. message, source ) end addEvent( "onGreeting", true ) addEventHandler( "onGreeting", getRootElement(), greetingHandler )
function greetingCommand ( commandName ) triggerServerEvent ( "onGreeting", getLocalPlayer(), "Превед медвед!" ) --использование getLocalPlayer вместо getRootElement делает этого клиента источником (source) события, благодаря чему нам не надо дополнительно передавать параметр, содержащий указатель на этого клиента. end addCommandHandler ( "greet", greetingCommand )
Когда выполняется консольная команда "greet" (вводится через консоль сервера или игрока), на стороне клиента вызывается функция greetingCommand. Она вызывает срабатывание на стороне сервера события onGreeting с параметром "Превед медвед!". В результате вызывается функция-обработчик greetingHandler, которая и пишет полученное от клиента сообщение ему же в чат.
Смотрите также
- triggerLatentServerEvent - аналог triggerServerEvent, но скорость передачи может быть ограничена
- triggerServerEvent - позволяет вызвать срабатывание события, предварительно созданного на сервере