OneFrameMessagesHandler.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  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. Log.Debug($"recv diff:");
  21. Log.Debug($"recv diff1----: {message.ToJson()}");
  22. Log.Debug($"recv diff2----: {predictionMessage.ToJson()}");
  23. message.CopyTo(predictionMessage);
  24. // 回滚到frameBuffer.RealFrame
  25. LSHelper.Rollback(room, frameBuffer.RealFrame);
  26. }
  27. await ETTask.CompletedTask;
  28. }
  29. }
  30. }