private IEnumerator PingConnect(string ip, NetPingCallBack callback) { if (Config.Detail_Debug_Log()) { Debug.Log("----------net ping 1->" + ip); } state = PingState.PingNotConnect; if (ip == null) { if (callback != null) { callback(false, -1); } yield break; } state = PingState.PingIng; Ping ping = new Ping(ip); int nTime = 0; if (Config.Detail_Debug_Log()) { Debug.Log("----------net ping 2->" + ip); } while (!ping.isDone) { yield return(new WaitForSeconds(0.1f)); if (nTime > 20) //2秒 { nTime = 0; state = PingState.PingNotConnect; if (callback != null) { callback(false, -1); } yield break; } nTime++; } if (Config.Detail_Debug_Log()) { Debug.Log("----------net ping 3->" + ip + "^" + ping.isDone + "^" + ping.time); } if (ping.isDone) { state = PingState.PingOK; if (callback != null) { callback(true, ping.time); } yield break; } }
public static void Ping(string ip, NetPingCallBack callback) { if (callback == null) { return; } NetPing ping = GenPing(); if (ping == null) { Debug.LogError("ping num is to much"); return; } CoroutineHelper.CreateCoroutineHelper(ping.PingConnect(ip, (state, delay) => { ping.index = -1; callback(state, delay); })); }