ClientFrameComponent.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.Collections.Generic;
  2. namespace Model
  3. {
  4. [ObjectEvent]
  5. public class ClientFrameComponentEvent : ObjectEvent<ClientFrameComponent>, IUpdate
  6. {
  7. public void Update()
  8. {
  9. this.Get().Update();
  10. }
  11. }
  12. public class ClientFrameComponent: Component
  13. {
  14. public int Frame;
  15. public Queue<FrameMessage> Queue = new Queue<FrameMessage>();
  16. public int count = 1;
  17. public void Add(FrameMessage frameMessage)
  18. {
  19. this.Queue.Enqueue(frameMessage);
  20. }
  21. public void Update()
  22. {
  23. int queueCount = this.Queue.Count;
  24. if (queueCount == 0)
  25. {
  26. return;
  27. }
  28. this.count = 1 + (queueCount + 3) / 5;
  29. for (int i = 0; i < this.count; i++)
  30. {
  31. this.UpdateFrame();
  32. }
  33. }
  34. private void UpdateFrame()
  35. {
  36. FrameMessage frameMessage = this.Queue.Dequeue();
  37. this.Frame = frameMessage.Frame;
  38. for (int i = 0; i < frameMessage.Messages.Count; ++i)
  39. {
  40. AFrameMessage message = frameMessage.Messages[i];
  41. ushort opcode = Game.Scene.GetComponent<OpcodeTypeComponent>().GetOpcode(message.GetType());
  42. Game.Scene.GetComponent<MessageDispatherComponent>().Handle(new MessageInfo() { Opcode= opcode, Message = message });
  43. }
  44. Game.Scene.GetComponent<CrossComponent>().Run(CrossIdType.FrameUpdate);
  45. }
  46. }
  47. }