MailBoxComponent.cs 770 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. namespace ETModel
  4. {
  5. public struct ActorMessageInfo
  6. {
  7. public Session Session;
  8. public object Message;
  9. }
  10. /// <summary>
  11. /// 挂上这个组件表示该Entity是一个Actor,接收的消息将会队列处理
  12. /// </summary>
  13. public class MailBoxComponent: Component
  14. {
  15. // 拦截器类型,默认没有拦截器
  16. public string ActorInterceptType;
  17. // 队列处理消息
  18. public Queue<ActorMessageInfo> Queue = new Queue<ActorMessageInfo>();
  19. public ETTaskCompletionSource<ActorMessageInfo> Tcs;
  20. public override void Dispose()
  21. {
  22. if (this.IsDisposed)
  23. {
  24. return;
  25. }
  26. base.Dispose();
  27. var t = this.Tcs;
  28. this.Tcs = null;
  29. t?.SetResult(new ActorMessageInfo());
  30. }
  31. }
  32. }