using UnityEngine; using System.Collections; using System.Collections.Generic; /** 重复发包控制 */ public class NetRepeatSender : MonoBehaviour { /** Socket控制器引用 */ public ClientSocketController father; /** 需要重复发送的包 */ List packs = new List(); /** 当前应用真实运行时长 */ float curRealTime; void Update () { if (packs.Count > 0 && father.Connected) { curRealTime = Time.realtimeSinceStartup; foreach (SingleRepeatPack vSingle in packs) { if ((curRealTime - vSingle.stepTime) > vSingle.lastSendTime) { vSingle.lastSendTime = curRealTime; father.SendInfo (vSingle.CreatePack ()); } } } } /** 添加定时发包 */ public void AddRepeatSend (int vCmds, float vStepTime) { packs.Add (new SingleRepeatPack (vCmds, vStepTime)); } /** 添加定时发包 */ public void AddRepeatSend (GameNetPackBasic vPack, float vStepTime) { packs.Add (new SingleRepeatPack (vPack, vStepTime)); } /** 单个重复包的结构 */ class SingleRepeatPack { /** 协议 */ public int cmds; /** 发包时间间隔 */ public float stepTime = 1f; /** 记录最近一次发包的真实运行时长值 */ public float lastSendTime = 0; public GameNetPackBasic pack; public SingleRepeatPack (int vCmds, float vStepTime) { cmds = vCmds; stepTime = vStepTime; } public SingleRepeatPack (GameNetPackBasic vPack, float vStepTime) { pack = vPack; stepTime = vStepTime; } public GameNetPackBasic CreatePack () { if (pack == null) { if (cmds == 0x0104) { //C0104_tagCOnlineReturn vSend_0104 = new C0104_tagCOnlineReturn (); //vSend_0104.Type = 0; //pack = vSend_0104; } } return pack; } } }