void DownloadFileFromServer(int version, string fileName, string localPath, Action <string> callback)
    {
        //string md5FileName = _serverRootXML.SelectSingleNode("/root/Version").Attributes["md5url"].Value;
        networkUrl = URLs.GetVersionPath(version, fileName);
        var t = new Thread(LogIpAddressAndMobileIP);

        t.Start();
        Logger.Log("[DownloadFileFromServer] " + networkUrl);

        SetupUI.instance.SetHint("更新" + fileName + "版本至 " + version);
        StartCoroutine(LoadFileForm(networkUrl,
                                    (p) =>
        {
            SetupUI.instance.SetProgress(p);
            Logger.Log("program updating ..." + p);
        },
                                    (www, errorInfo) =>
        {
            if (www == null || !string.IsNullOrEmpty(errorInfo))
            {
                Logger.Error("download file bytes empty error:" + errorInfo);

                PluginMsgAction.Instance.ShowMsgBox("download " + networkUrl + " error:" + errorInfo, "确定", "取消", () =>
                {
                    PluginMsgAction.Instance.HideMsgBox();
                    Application.Quit();
                },
                                                    () =>
                {
                    Application.Quit();
                });

                return;
            }
            errorInfo = SaveFile(www.bytes, localPath, true);
            callback.Invoke(errorInfo);
        }));
    }