ClientFrameComponent.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Generic;
  3. using Google.Protobuf;
  4. namespace ETModel
  5. {
  6. public struct SessionFrameMessage
  7. {
  8. public Session Session;
  9. public FrameMessage FrameMessage;
  10. }
  11. [ObjectSystem]
  12. public class ClientFrameComponentUpdateSystem : UpdateSystem<ClientFrameComponent>
  13. {
  14. public override void Update(ClientFrameComponent self)
  15. {
  16. self.Update();
  17. }
  18. }
  19. public class ClientFrameComponent: Component
  20. {
  21. public int Frame;
  22. public Queue<SessionFrameMessage> Queue = new Queue<SessionFrameMessage>();
  23. public int count = 1;
  24. public int waitTime = 100;
  25. public const int maxWaitTime = 100;
  26. public void Add(Session session, FrameMessage frameMessage)
  27. {
  28. this.Queue.Enqueue(new SessionFrameMessage() {Session = session, FrameMessage = frameMessage});
  29. }
  30. public void Update()
  31. {
  32. if (this.Queue.Count == 0)
  33. {
  34. return;
  35. }
  36. SessionFrameMessage sessionFrameMessage = this.Queue.Dequeue();
  37. this.Frame = sessionFrameMessage.FrameMessage.Frame;
  38. for (int i = 0; i < sessionFrameMessage.FrameMessage.Message.Count; ++i)
  39. {
  40. OneFrameMessage oneFrameMessage = sessionFrameMessage.FrameMessage.Message[i];
  41. Session session = sessionFrameMessage.Session;
  42. OpcodeTypeComponent opcodeTypeComponent = session.Network.Entity.GetComponent<OpcodeTypeComponent>();
  43. ushort opcode = (ushort) oneFrameMessage.Op;
  44. object instance = opcodeTypeComponent.GetInstance(opcode);
  45. byte[] bytes = ByteString.Unsafe.GetBuffer(oneFrameMessage.AMessage);
  46. IMessage message = (IMessage)session.Network.MessagePacker.DeserializeFrom(instance, bytes, 0, bytes.Length);
  47. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(sessionFrameMessage.Session, new MessageInfo((ushort)oneFrameMessage.Op, message));
  48. }
  49. }
  50. }
  51. }