Описание
EventService — это одноэлементная реализация ChannelClient, которая работает на всех экземплярах Unity. Он подключен к каналу "events" и позволяет экземпляру Unity отправлять сообщения JSON другим EventService во внешнем процессе или другим экземплярам Unity.
EventService может отправлять сообщения типа "выстрелил и забыл" (см. EventService.Emit), либо запрашивать информацию, либо от одного клиента (см. EventService.Request).
using UnityEditor;
using UnityEngine;
using UnityEditor.MPE;
using System;
public static class EventServiceDocExample
{
static Action s_CustomLogEventDisconnect;
static Action s_PingPongEventDisconnect;
[MenuItem("EventServiceDoc/Step 0")]
static void StartChannelService()
{
if (!ChannelService.IsRunning())
{
ChannelService.Start();
}
Debug.Log($"[Step 0] ChannelService Running: {ChannelService.GetAddress()}:{ChannelService.GetPort()}");
}
[MenuItem("EventServiceDoc/Step 1")]
static void SetupEventServiceHandlers()
{
Debug.Log("[Step 1] Setup handlers");
s_CustomLogEventDisconnect = EventService.RegisterEventHandler("custom_log", (eventType, args) => {
Debug.Log($"Log a {eventType} {args[0]}");
});
s_PingPongEventDisconnect = EventService.RegisterEventHandler("pingpong", (eventType, args) =>
{
Debug.Log($"Receive a {eventType} {args[0]}");
return "pong!";
});
}
[MenuItem("EventServiceDoc/Step 2")]
static void EmitMessage()
{
Debug.Log("[Step 2] Emitting a custom log");
EventService.Emit("custom_log", "Hello world!", -1, EventDataSerialization.JsonUtility);
}
[MenuItem("EventServiceDoc/Step 3")]
static void SendRequest()
{
Debug.Log("[Step 3] Sending a request");
EventService.Request("pingpong", (err, data) =>
{
Debug.Log($"Request fulfilled: {data[0]}");
},
"ping", -1, EventDataSerialization.JsonUtility);
}
[MenuItem("EventServiceDoc/Step 4")]
static void CloseHandlers()
{
Debug.Log("[Step 4] Closing all Event handlers");
s_CustomLogEventDisconnect();
s_PingPongEventDisconnect();
}
}
/*
When you execute the five menu items one after the other, Unity prints the following messages to the Console window:
[Step 0] ChannelService Running: 127.0.0.1:65000
[Step 1] Setup handlers
[Step 2] Emitting a custom log
Log a custom_log Hello world!
[Step 3] Sending a request
Receive a pingpong ping
Request fulfilled: pong!
[Step 4] Closing all Event handlers
*/
Статические Свойства
isConnected | EventService подключен к каналу «событий» ChannelService. |
Статические Методы
CancelRequest | Проверяет наличие ожидающего запроса на определенное событие и, если есть, отменяет его. Дополнительные сведения о запросе см. в разделе EventService.Request. |
Clear | Удалить все ожидающие запросы. |
Close | Закрывает EventService, разрывает соединения с ChannelService и гарантирует, что обработчики больше не обрабатываются. |
Emit | Отправляет сообщение "запустил и забыл" всем ChannelClient, подключенным к маршруту "events". |
IsRequestPending | Проверяет, ожидает ли запрос определенного события. Дополнительные сведения о запросе см. в разделе EventService.Request. |
Log | Отправляет сообщение журнала в ChannelService. Сообщения журнала выводятся в окно консоли. |
RegisterEventHandler | Регистрирует обработчик для определенного типа события. Обработчик вызывается всякий раз, когда отправляется сообщение указанного типа. Сообщения отправляются с помощью EventService.Emit или EventService.Request. |
Request | Отправляет запрос всем подключенным клиентам по каналу "events". |
Start | Запускает службу EventService, чтобы она прослушивала новые сообщения. |
Tick | Отмечает EventService. Это обрабатывает все входящие и исходящие сообщения. По умолчанию EventService помечен для каждого EditorApplication.update. |
UnregisterEventHandler | Отменяет регистрацию обработчика определенного события. |