Skip to content

Instantly share code, notes, and snippets.

@kyubuns
Last active July 25, 2020 11:38
Show Gist options
  • Save kyubuns/ad91f543d8c0ab44e87961952caab901 to your computer and use it in GitHub Desktop.
Save kyubuns/ad91f543d8c0ab44e87961952caab901 to your computer and use it in GitHub Desktop.
using System;
using Cysharp.Threading.Tasks;
using Extensions;
using UnityEngine;
public class MessageTest : MonoBehaviour
{
public void Start() => Test().Forget();
private async UniTask Test()
{
var messageBroker = new TaskMessageBroker();
messageBroker.Subscribe<TestMessage, ITestMessageInterface>(x =>
{
Debug.Log("Receive TestMessage");
return UniTask.CompletedTask;
});
ITestMessageInterface a = new TestMessage();
await messageBroker.PublishAsync(a);
}
}
public static class TaskMessageBrokerExtensions
{
public static IDisposable Subscribe<T1, T2>(this TaskMessageBroker self, Func<T1, UniTask> asyncMessageReceiver) where T1 : T2
{
return self.Subscribe<T2>(x =>
{
if (x is T1 t) return asyncMessageReceiver(t);
return UniTask.CompletedTask;
});
}
}
public interface ITestMessageInterface
{
}
public class TestMessage : ITestMessageInterface
{
}
using System;
using Cysharp.Threading.Tasks;
using Extensions;
using UnityEngine;
public class MessageTest : MonoBehaviour
{
public void Start() => Test().Forget();
private async UniTask Test()
{
var messageBroker = new TaskMessageBroker();
messageBroker.Subscribe<TestMessage>(x =>
{
Debug.Log("Receive TestMessage");
return UniTask.CompletedTask;
});
messageBroker.Subscribe<ITestMessageInterface>(x =>
{
Debug.Log("Receive ITestMessageInterface"); // こっちが呼ばれる
return UniTask.CompletedTask;
});
ITestMessageInterface a = new TestMessage();
await messageBroker.PublishAsync(a);
}
}
public interface ITestMessageInterface
{
}
public class TestMessage : ITestMessageInterface
{
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment