RU/triggerServerEvent

From Multi Theft Auto: Wiki
Jump to navigation Jump to search

Эта функция позволяет вызвать срабатывание события, предварительно созданного на сервере. Она относится к основным средствам обмена информацией между сервером и клиентом. На серверной стороне существует аналогичная функция 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 если указаны некорректные аргументы.

Пример

В этом примере клиент передает серверу сообщение "Превед медвед!".

Click to collapse [-]
Server
function greetingHandler ( message )
    outputChatBox ( "The client says: " .. message, source )
end
addEvent( "onGreeting", true )
addEventHandler( "onGreeting", getRootElement(), greetingHandler )
Click to collapse [-]
Client
function greetingCommand ( commandName )
    triggerServerEvent ( "onGreeting", getLocalPlayer(), "Превед медвед!" ) 
    --использование getLocalPlayer вместо getRootElement делает этого клиента источником (source) события, благодаря чему нам не надо дополнительно передавать параметр, содержащий указатель на этого клиента.
end
addCommandHandler ( "greet", greetingCommand )

Когда выполняется консольная команда "greet" (вводится через консоль сервера или игрока), на стороне клиента вызывается функция greetingCommand. Она вызывает срабатывание на стороне сервера события onGreeting с параметром "Превед медвед!". В результате вызывается функция-обработчик greetingHandler, которая и пишет полученное от клиента сообщение ему же в чат.

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