UniRx.MessageBrokerを日々 悪用 活用してるので、便利かも!って作ったクラスを公開しておきます。
TypedMessageBroker
MessageBrokerのPublish/Subscribeに型で制限をつける。
用途
- Brokerがたくさんあるので、送り先を間違えるのを防ぐ。
サンプル
public void Start() { var broker1 = new TypedMessageBroker<IMessageType>(); broker1.Publish(new Message1()); // broker1.Publish(new Message2()); // IMessageTypeじゃないのでビルドエラー } public interface IMessageType {} public class Message1 : IMessageType {} public class Message2 {}
コード
https://github.com/kyubuns/UniRxSandbox/blob/master/Assets/TypedMessageBroker/TypedMessageBroker.cs
QueueAsyncMessageBroker
PublishしたMessageの処理が全て終わるまで、次のMessageのPublishを待つ。
用途
- アニメーション処理を全部Publishしておいたら良い感じに再生される
サンプル
var broker = new QueueAsyncMessageBroker(); broker.Subscribe<Message>(x => Observable.Timer(TimeSpan.FromSeconds(x.Value)).AsUnitObservable()).AddTo(this); broker.Subscribe<Message>(x => { Debug.Log($"{Time.time} Receive Message {x.Value}"); return Observable.ReturnUnit(); }).AddTo(this); broker.Publish(new Message(3)); broker.Publish(new Message(1)); broker.Publish(new Message(2));
0 Receive Message 3 3 Receive Message 1 4 Receive Message 2
コード
欠点
- Subscribeの中で例外吐いた時にcall stackが死んでる