Last active
July 25, 2020 11:38
-
-
Save kyubuns/ad91f543d8c0ab44e87961952caab901 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
{ | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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