Ejemplo n.º 1
0
        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)));
        }
Ejemplo n.º 2
0
        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");*/
        }