ActorComponent.cs 921 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Threading.Tasks;
  3. namespace Model
  4. {
  5. public class ActorMessageInfo
  6. {
  7. public Session Session;
  8. public ActorRequest Message;
  9. }
  10. /// <summary>
  11. /// 挂上这个组件表示该Entity是一个Actor, 它会将Entity位置注册到Location Server, 接收的消息将会队列处理
  12. /// </summary>
  13. public class ActorComponent: Component
  14. {
  15. public IEntityActorHandler entityActorHandler;
  16. public long actorId;
  17. // 队列处理消息
  18. public EQueue<ActorMessageInfo> queue;
  19. public TaskCompletionSource<ActorMessageInfo> tcs;
  20. public override void Dispose()
  21. {
  22. try
  23. {
  24. if (this.Id == 0)
  25. {
  26. return;
  27. }
  28. base.Dispose();
  29. var t = this.tcs;
  30. this.tcs = null;
  31. t?.SetResult(null);
  32. Game.Scene.GetComponent<ActorManagerComponent>().Remove(actorId);
  33. }
  34. catch (Exception)
  35. {
  36. Log.Error($"unregister actor fail: {this.actorId}");
  37. }
  38. }
  39. }
  40. }