public override void InstallBindings() { var option = Container.BindMessagePipe(); // GlobalMessagePipeを使用する前にSetProviderに設定する必要がある GlobalMessagePipe.SetProvider(Container.AsServiceProvider()); }
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 SimpelePush() { var resolver = TestHelper.BuildBuiltin((builder) => { builder.AddMessageBroker <int>(); }); GlobalMessagePipe.SetProvider(resolver); var pub = resolver.GetRequiredService <IPublisher <int> >(); var sub1 = resolver.GetRequiredService <ISubscriber <int> >(); var sub2 = resolver.GetRequiredService <ISubscriber <int> >(); var list = new List <int>(); var d1 = sub1.Subscribe(x => list.Add(x)); var d2 = sub2.Subscribe(x => list.Add(x)); pub.Publish(10); pub.Publish(20); CollectionAssert.AreEqual(list, new[] { 10, 10, 20, 20 }); list.Clear(); d1.Dispose(); pub.Publish(99); CollectionAssert.AreEqual(list, new[] { 99 }); }
public MessagePipeDemo(IPublisher <int> publisher, ISubscriber <int> subscriber, IObjectResolver resolver) { this.publisher = publisher; this.subscriber = subscriber; GlobalMessagePipe.SetProvider(resolver.AsServiceProvider()); }
public void Start() { var builder = new BuiltinContainerBuilder(); builder.AddMessagePipe(x => { x.EnableCaptureStackTrace = true; }); builder.AddMessageBroker <int>(); var resolver = builder.BuildServiceProvider(); GlobalMessagePipe.SetProvider(resolver); publisher = resolver.GetRequiredService <IPublisher <int> >(); subscriber = resolver.GetRequiredService <ISubscriber <int> >(); button1.onClick.AddListener(FooSubscribe); button2.onClick.AddListener(BarSubscribe); button3.onClick.AddListener(() => { disposable = DisposableBag.Create(disposable, subscriber.Subscribe(x => Debug.Log($"{id}:Baz"))); }); button4.onClick.AddListener(UnSubscribeAll); disposable = DisposableBag.Empty; Forever().Forget(); }
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");*/ }