private void CallResult(PingRuntimeData runtimeData) { int time = runtimeData.ping == null ? -1 : runtimeData.ping.time; bool isSuccess = runtimeData.errorReason == ErrorReason.None ? true : false; PingResult result = new PingResult(isSuccess, runtimeData.errorReason, runtimeData.host, runtimeData.ip, time); pingResults.Add(result); if (runtimeData.ping != null) { runtimeData.ping.DestroyPing(); } if (s_pingResultCallback != null) { s_pingResultCallback(result); } if (pingRuntimeDatas.Count <= 0) { if (s_OnComplete != null) { s_OnComplete(pingResults.ToArray()); } Destroy(this.gameObject, 0.5f); } }
private void StartRun(string host, float timeOut, int runTimes) { if (runTimes <= 0) { Debug.LogError("Ping runTimes cant < 1, now:" + runTimes); Destroy(gameObject, 1f); return; } AddressFamily af; string ip = ResolveHostNameToIP(host, out af); Debug.Log("host :" + host + " to ip :" + ip + " AddressFamily:" + af); network = Application.internetReachability; for (int i = 0; i < runTimes; i++) { PingRuntimeData runtimeData = new PingRuntimeData(); runtimeData.ip = ip; runtimeData.host = host; runtimeData.s_timeout = timeOut; runtimeData.currentUseTime = 0; runtimeData.delayStartTime = 0.05f * (i + 1); if (string.IsNullOrEmpty(ip)) { runtimeData.isFinish = true; runtimeData.errorReason = ErrorReason.UnreachableAddress; } pingRuntimeDatas.Add(runtimeData); } }
private void RunPingAction(PingRuntimeData runtimeData) { switch (network) { case NetworkReachability.ReachableViaCarrierDataNetwork: // 3G/4G case NetworkReachability.ReachableViaLocalAreaNetwork: // WIFI { if (runtimeData.ping.isDone) { runtimeData.isFinish = true; if (runtimeData.ping.time == -1) { runtimeData.errorReason = ErrorReason.TimeOut; } } else { if (runtimeData.currentUseTime >= runtimeData.s_timeout) { runtimeData.isFinish = true; network = Application.internetReachability; if (network == NetworkReachability.NotReachable) { runtimeData.errorReason = ErrorReason.NetNotReachable; } else { runtimeData.errorReason = ErrorReason.TimeOut; } } else { runtimeData.currentUseTime += Time.unscaledDeltaTime; } } } break; case NetworkReachability.NotReachable: // 网络不可用 default: { runtimeData.isFinish = true; runtimeData.errorReason = ErrorReason.NetNotReachable; // CallResult(PingState.NetNotReachable, -1); network = Application.internetReachability; } break; } }