1
This commit is contained in:
@@ -3,6 +3,7 @@ using Assets.MyGame.Scripts.Net.WebResponses;
|
||||
using Assets.MyGame.Scripts.Net.WebResponses.ChineseChess;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
@@ -215,20 +216,105 @@ public partial class WebSocketSendList
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数据同步
|
||||
/// 同步等级常量(秒)
|
||||
/// </summary>
|
||||
public const float SYNC_LV1 = 0.2f;
|
||||
public const float SYNC_LV2 = 0.5f;
|
||||
public const float SYNC_LV3 = 1f;
|
||||
|
||||
// 队列
|
||||
private static float _syncLv1Timer;
|
||||
private static float _syncLv2Timer;
|
||||
private static float _syncLv3Timer;
|
||||
private static Dictionary<int, SyncGameData> _syncLv1Cover = new Dictionary<int, SyncGameData>();
|
||||
private static List<SyncGameData> _syncLv1Append = new List<SyncGameData>();
|
||||
private static List<SyncGameData> _syncLv2Append = new List<SyncGameData>();
|
||||
private static List<SyncGameData> _syncLv3Append = new List<SyncGameData>();
|
||||
|
||||
/// <summary>数据同步(自动按类型分级入队)</summary>
|
||||
public static void SyncGameData(object obj)
|
||||
{
|
||||
WebSocketSendList sendObj = new WebSocketSendList
|
||||
var sgd = obj as SyncGameData;
|
||||
if (sgd == null)
|
||||
{
|
||||
SendImmediate(JsonConvert.SerializeObject(obj));
|
||||
return;
|
||||
}
|
||||
|
||||
switch (sgd.frameType)
|
||||
{
|
||||
case FrameDataType.fireBullet:
|
||||
SendImmediate(BuildJson(sgd));
|
||||
return;
|
||||
|
||||
case FrameDataType.rotateTurrect:
|
||||
case FrameDataType.changeAutoTarget:
|
||||
_syncLv1Cover[sgd.sitPos] = sgd;
|
||||
return;
|
||||
case FrameDataType.randomDieFish:
|
||||
_syncLv1Append.Add(sgd);
|
||||
return;
|
||||
|
||||
case FrameDataType.createFish:
|
||||
case FrameDataType.changeTurretState:
|
||||
case FrameDataType.changeTurret:
|
||||
case FrameDataType.freezeFish:
|
||||
_syncLv2Append.Add(sgd);
|
||||
return;
|
||||
|
||||
default:
|
||||
_syncLv3Append.Add(sgd);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>每帧调用,由 GameMainPanel.Update 驱动</summary>
|
||||
public static void FlushSyncQueues(float dt)
|
||||
{
|
||||
_syncLv1Timer += dt;
|
||||
if (_syncLv1Timer >= SYNC_LV1) { _syncLv1Timer = 0f; FlushLv1(); }
|
||||
_syncLv2Timer += dt;
|
||||
if (_syncLv2Timer >= SYNC_LV2) { _syncLv2Timer = 0f; FlushLv2(); }
|
||||
_syncLv3Timer += dt;
|
||||
if (_syncLv3Timer >= SYNC_LV3) { _syncLv3Timer = 0f; FlushLv3(); }
|
||||
}
|
||||
|
||||
private static void FlushLv1()
|
||||
{
|
||||
foreach (var kv in _syncLv1Cover) SendImmediate(BuildJson(kv.Value));
|
||||
foreach (var sgd in _syncLv1Append) SendImmediate(BuildJson(sgd));
|
||||
_syncLv1Cover.Clear();
|
||||
_syncLv1Append.Clear();
|
||||
}
|
||||
private static void FlushLv2()
|
||||
{
|
||||
foreach (var sgd in _syncLv2Append) SendImmediate(BuildJson(sgd));
|
||||
_syncLv2Append.Clear();
|
||||
}
|
||||
private static void FlushLv3()
|
||||
{
|
||||
foreach (var sgd in _syncLv3Append) SendImmediate(BuildJson(sgd));
|
||||
_syncLv3Append.Clear();
|
||||
}
|
||||
|
||||
private static void SendImmediate(string json)
|
||||
{
|
||||
WebSocketManager.Instance.Send(SocketType.game, json);
|
||||
}
|
||||
|
||||
private static string BuildJson(object obj)
|
||||
{
|
||||
var sendObj = new WebSocketSendList
|
||||
{
|
||||
type = 1,
|
||||
invocationId = "1",
|
||||
target = "SyncGameData",
|
||||
arguments = new System.Collections.Generic.List<object>()
|
||||
arguments = new System.Collections.Generic.List<object>
|
||||
{
|
||||
GameManager.Instance.gameData.currRoomData.roomId,
|
||||
obj
|
||||
}
|
||||
};
|
||||
|
||||
sendObj.arguments.Add(GameManager.Instance.gameData.currRoomData.roomId);
|
||||
sendObj.arguments.Add(obj);
|
||||
WebSocketManager.Instance.Send(SocketType.game, JsonConvert.SerializeObject(sendObj));
|
||||
return JsonConvert.SerializeObject(sendObj);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user