OneFrameMessagesHandler.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. using System;
  2. namespace ET.Client
  3. {
  4. [MessageHandler(SceneType.Client)]
  5. public class OneFrameMessagesHandler: AMHandler<OneFrameMessages>
  6. {
  7. protected override async ETTask Run(Session session, OneFrameMessages message)
  8. {
  9. Room room = session.DomainScene().GetComponent<Room>();
  10. FrameBuffer frameBuffer = room.FrameBuffer;
  11. if (message.Frame != frameBuffer.RealFrame + 1)
  12. {
  13. throw new Exception($"recv oneframeMessage frame error: {message.Frame} {frameBuffer.RealFrame}");
  14. }
  15. // 服务端返回来的消息,跟预测消息对比
  16. OneFrameMessages predictionMessage = frameBuffer.GetFrame(message.Frame);
  17. ++frameBuffer.RealFrame;
  18. if (message != predictionMessage)
  19. {
  20. message.CopyTo(predictionMessage);
  21. // 回滚到frameBuffer.RealFrame
  22. LSHelper.Rollback(room, frameBuffer.RealFrame);
  23. }
  24. await ETTask.CompletedTask;
  25. }
  26. }
  27. }