public IEnumerator 非同期送受信テスト_GlobalMessagePipe() { // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある GlobalMessagePipe.SetProvider(_container.AsServiceProvider()); // 非同期用のPublisher/Subscriberを生成する var asyncSubscriber = GlobalMessagePipe.GetAsyncSubscriber <MyEvent>(); var asyncPublisher = GlobalMessagePipe.GetAsyncPublisher <MyEvent>(); var cts = new CancellationTokenSource(); var task1 = UniTask.Create(async() => { Debug.Log("イベント受信"); // イベントを受ける方 var ev = await asyncSubscriber.FirstAsync(cts.Token); Debug.Log($"イベント受信完了 : {ev.Message}"); }); var task2 = UniTask.Create(async() => { Debug.Log("イベント送信"); // イベントを投げる方 await asyncPublisher.PublishAsync(new MyEvent { Message = "イベント" }, cts.Token); Debug.Log("イベント送信完了"); }); return(UniTask.ToCoroutine(async() => await UniTask.WhenAll(task1, task2))); }
public void GrobalScope() { _container1 = new DiContainer(); _container2 = new DiContainer(); // Grobalに設定する前に必要 var option = _container1.BindMessagePipe(); _container1.BindMessageBroker <string>(option); _container2.BindMessageBroker <string>(_container2.BindMessagePipe()); // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある GlobalMessagePipe.SetProvider(_container1.AsServiceProvider()); var p = GlobalMessagePipe.GetPublisher <string>(); var s = GlobalMessagePipe.GetSubscriber <string>(); var d = s.Subscribe(x => Debug.Log(x)); var service2 = _container2.Instantiate <Subscriber>(); service2.Setup("Container2"); p.Publish("10"); p.Publish("20"); // Disposeしたら購読ができなくなる d.Dispose(); p.Publish("30"); /* * _container1.BindMessageBroker<string>(_container1.BindMessagePipe()); * _container2.BindMessageBroker<string>(_container2.BindMessagePipe()); * * // イベントを受ける方 * var service1 = _container1.Instantiate<Subscriber>(); * service1.Setup("Container1"); * * var service2 = _container2.Instantiate<Subscriber>(); * service2.Setup("Container2"); * * // イベントを投げる方 * var publisher1 = _container1.Instantiate<Publisher>(); * publisher1.Send("Test");*/ }