using UnityEngine;
|
using System.Collections;
|
using System.Collections.Generic;
|
|
/** 重复发包控制 */
|
public class NetRepeatSender : MonoBehaviour {
|
|
/** Socket控制器引用 */
|
public ClientSocketController father;
|
/** 需要重复发送的包 */
|
List<SingleRepeatPack> packs = new List<SingleRepeatPack>();
|
/** 当前应用真实运行时长 */
|
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;
|
}
|
|
}
|
|
}
|