737 lines
46 KiB
C#
737 lines
46 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
using System.IO;
|
|
using FairyGUI;
|
|
using MiniJSON;
|
|
using UnityEngine.Networking;
|
|
using taurus.unity;
|
|
using System.Text;
|
|
using System;
|
|
using taurus.client;
|
|
|
|
public class VerCheck : MonoBehaviour
|
|
{
|
|
GComponent _version_view;
|
|
public static VerCheck Instance { get; private set; }
|
|
public securityConnection conn;
|
|
public bool isGFF = false;
|
|
public bool isDXYGFF = true;
|
|
|
|
void Awake()
|
|
{
|
|
Instance = this;
|
|
}
|
|
|
|
// Use this for initialization
|
|
void Start()
|
|
{
|
|
GameApplication.Instance.isAndroid64bit = IsAndroid64bit();
|
|
CreateVersionView();
|
|
StartCoroutine(CheckNet());
|
|
}
|
|
|
|
internal void ResetGame()
|
|
{
|
|
CreateVersionView();
|
|
StartCoroutine(__WaitReset());
|
|
}
|
|
|
|
IEnumerator __WaitReset()
|
|
{
|
|
var _luaClient = GameApplication.Instance.GetComponent<DSLuaClient>();
|
|
UnityEngine.Object.Destroy(_luaClient);
|
|
System.GC.Collect();
|
|
FontManager.Clear();
|
|
UIPackage.RemoveAllPackages();
|
|
ResourcesManager.DestroyAll();
|
|
CreateVersionView();
|
|
yield return null;
|
|
StartCoroutine(CheckNet());
|
|
}
|
|
|
|
void CreateVersionView()
|
|
{
|
|
ResourcesManager.ReadAssetConfig("base/embed");
|
|
UIPackage.AddPackage("base/embed/ui/Hotupdate");
|
|
if (_version_view != null) _version_view.Dispose();
|
|
_version_view = null;
|
|
_version_view = UIPackage.CreateObjectFromURL("ui://Hotupdate/Version").asCom;
|
|
GRoot.inst.AddChildAt(_version_view,0);
|
|
_version_view.width = GRoot.inst.width;
|
|
_version_view.height = GRoot.inst.height;
|
|
_version_view.x = (GRoot.inst.width - _version_view.width) / 2;
|
|
Debug.LogError(Application.persistentDataPath);
|
|
}
|
|
|
|
|
|
public bool IsAndroid64bit()
|
|
{
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
if (IntPtr.Size == 8)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
#else
|
|
return false;
|
|
#endif
|
|
|
|
}
|
|
|
|
IEnumerator CheckNet()
|
|
{
|
|
string json_data = string.Empty;
|
|
|
|
|
|
|
|
isDXYGFF= false;
|
|
isGFF = false;
|
|
|
|
|
|
|
|
//公用
|
|
|
|
string init_url = "http://8.148.151.16:19898/NewFK/config/init2_1.json";
|
|
|
|
|
|
|
|
if (isGFF==false&&isDXYGFF==false)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
if (isGFF)
|
|
{
|
|
int rc = AppVest.init("8ef91e7e799b5851a8ce810aae0c697c", "U5ayF4voVvRh1ElqBIVUCR9dSFskPGvCkfreFxdxzi39hoU0faqZWjFzC90Cta50egaQatCbPxm6XTlvi2+o++PrSozoZ+HUUY0y8tBloMWaOYQX59SAhjA/DyIDHJgGbE1I");
|
|
if (rc != 0)
|
|
{
|
|
// Debug.LogError("init failed");
|
|
ShowTip("GF init failed!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
|
|
}
|
|
|
|
// Debug.LogError("init successful");
|
|
|
|
|
|
conn.ip = "";
|
|
conn.port = 0;
|
|
int rc1 = AppVest.getServerIPAndPort(ref conn, "", 5021);
|
|
if (rc1 != 0)
|
|
{
|
|
ShowTip("getServerIPAndPort failed!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
yield break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// string key = "yejrC7W28wGjORAAAFUw4C2/BDBkvh6yEbdXN0Ap2JSozUt3H1sh+IE4x4ZrwrB1hgeT+xJFrT99Sbn8X7y/eg15VpAJt8HRngquLPWXRk0H4LA5lduCYh8L+dShI5nDd0148GwgbM1FwF0HloFI5ANs9X0MhuQx9vJw/L3sMHpv6bOoHlTg5Xd3pQkaNq1JoTjJ1Ltkg2pBf/f9zgjAN9lE+CvXLoDEifBIeIcXMG5qBNbWqbJSgaDtH6wcLYIdLX0jVAJmRPcV1Aw2Ng8zr2R4+aQTEz1vsq3YZusGTHzUblRy2YewWD1b5zqpCivMF7dJhvU7NivZen01p1+eAlo3sWyUrkjD+QVInwjRSMgPdlkH33LO6HYENClhl4SbDyGfmvD6Qrab3s/4FlQuV3WpUq5CzZ0iccKxqDBa/BTtpFQiYh/VYmSWU9TQ3IBIEqPlXYx8xKhzmUMIvMgZfupSy9WQfDlDwb0YilD7qotLgELPWyPRMSv6z9tAOZ7hYouAnev4CAm5fz+p2/D4Yxw6NnksByNrB2DLXVrtxbreXWmzETw/xuffqY4H/EeUyQ5YLuIomAOqIukFkxrk+DAmUzsJOv9av1Zho8aallN0OhcpV1VevK1qTMj9cUnlo4Y5QDpmlY1mRmGKEVs/PHQP06fkGRNAk5gze8U0NA4qKrGarclJ8F06p1NhBhy/0opKwHbrj5iVkHdUWDlLc5UoaVxmg3BjCZLGxzGSWVkrbCzBWDa5ztFHbZV1vlGY/cFpzJTj2i1FdhxHyDHITqJGpXKmL4hGFPJEd7AXri0j5JgUMvZCmdXO4VyeBfrscQXRFoJSTx0VxNOcA6p32KDZ0SkivRS2dMsSZdJ20Ya4IUdQgs5HOXat+tIO1/n9VLYAGlsM6PLV8/ThaJhcz/ls9Y9CF2wqdcZr5HU4Ijg4lRVrIu8Nd8ZEKlXWKsXV5hSDheXCUuGzMWTy24Q7bydWP8UmAJxiTqQOXK26iovYDe8VeAdE5ITS///wWQ8VGrga3XF4CVOjnEOanQJKK1QWKuLSOCShIfQVJKxOw2bM5p+2MFQsnNQSR8+nMAeK5AbHyl+9OAf7RHJOvIj/JIIoSGvJZaY4tie18PQMDEk/ch15FIStraY42PYcgeKjArRNISXjqMwWVOSI5eN5VfUovKXvelBx6eq0SqtKtrzKBeXrUK/NBSTDjRtHm+XOAuvC6c9HA4lkOxcVbLteS6HEwoFVj5p5vhfAmzSjqJcL1Ul9XCBkB3wzCeREMvkhKEFEkrkRDabGd76JEWcywyum9LWhh1m7ph1a114dZO9MQjkvhw7nRixJ0FEYsRj74+wbTwCQOZMnFGeazbPS3f4vrDM5wXqbslkRY0UKR1UQASQTzRHP8QBYRTtT8IwZU6QV7gTOJMFnsxkFVa7SxsJuBSMsw8H/7tr9p4EVgdJ5k/kML4yROcw1AA6kU1a1wwUX58O/XgANErbdcRbkolSfXWnnzYZK3zgyUNb5rfXba8OUADQ/l/XWJ/TRJiEwsCwzmvk+ai8smDNDlzP7P8ljMYxyywXwDfTsF1GGtAFVGuMHtLOat4YKq7FbvlRGuXhxwm+igC+MuENqEfxSGWPEnrpqbpW+IedVhVpcPwVNAObOtHVg0aZxu7LGkdi/Lo6dkWWY09RzXwpiMbN6kUH0gXUf6+GV0TSOMql94O9aqP3j2TwJhJ1bfx9snfi0YBy7j2+BuYXEleUXFTZ7llGb8mQQiXpV0RXPbztX4qK0kCUgYgA8UwqhQkmEifJ+d6GLVb6PgEvpDgmNuFjV1KurSnsdOLq+E8BRfaWP/ZJIf6dZv9MF4BgSEXehQp+vCoIRBYZ3pZWLdjvHa9GBdaG6xM2rvgKqdE0wzkVZjsgDQEuknRpKM/41Z7/IkmhhXSXj+hdwkuMlHIXheSamnCxXaxV1NT6pW1M+E+pFABB0SI3aNL/PVcC1NYKn1poxt5zASs1Wn+Pbuve2UGVBu7yydogUEtT+YZdAAb3mLvorP0ufhJ+55BRdnEerppEqPgMV8R1VkjG+UC0nTJCZfBALWEc/HpoYgWgaG/1UPRVu02Kkps5jGQZHcOR8wl3h4wMxMlrERE0xr3AAzK7DfHUw46s9NfzdGuV2GuGQXT/1WxBFJtBNCqRai7up/m0u05YNaRerZuJR/RbQ390acEUQfX58XsWP7Ot/jhQoC8tXmKe7IPwWSFGQw1annLgv3sZrohadwmekul7/JpO9+c4wFN1fhgf2mZak2VQk+/FIsVNVSp2aBm1sR0NRd/UwrRyqjQOT37BycVz5+eXYH6sdsAyPNIlk42fMGoD8UkgpCvz1zyZ0cx0V/weMjd51c5RyZVdovW/r51JyscUMZhw2MsH0Vm0bXjwX269v3KceTS9CGMXgCC4Wa2ux0vzD+IizJ2UTMfR9VKuaEzyRXvIhqRALAWKXNMPKEATOcIfn7gEHCMrBNKg2d4BDr5Rial4WCfAUhXB1IeNcbHjOrXXe5a8qIKJcsCsUFDhuZDNy4srS/+Iz5HM1CEo5bCONNulLnJkwud0jQhbkFm4+rIojcky+L4CcH1HejNjtRGe8VthgQ7GRuP7Qy0hA+sYuKcrggTL17phq8prlbDCw6j7c80oFhpEgOXA7rufl3H7Fl+WSfQmjMoZS9SiauEbg3yn8Dj0wPx9ad9gj32Y8S/V36hJ2ErIdF7FTumGHYxxrQT1BCYZvhYQH3exhqP+eNpmgRAgNRWFiNX2NqO+aNUxErfRkdlQJM/xhxk/LHLVT5nHYTVUXjop83fq9JkwKhUt+Jfbnf9z4J0mJxHa/cO7+azEzWayEQ9EwNced37pYU0lBYb7TbPIrKaDjxO9DLipiAU59AxfZIzV69Y1UyoxixUo4zo/IzHkTGQ+7jLJhj6oeswBWX03C6epRUFqdjpZuCFK20miMgSP6Q444gmwCXq/tevm8IXsuLDZgSAuz8QTDMAhnwKwmWGdGlqSmMjQXI/IgZJ03eZwyotcN1CWDTP+QKIJ1E5UzTlJxEL8ZQvyZA4TrmSYLfa4EZNO5H+y8MerYaN0j+DP+VzPvLddvzQ5bhUCYv58witAivEuQdLr9pjw5vyckYsC0KFLDBIpzkXryMgb2JD6FevJDEx2STs9gBjV7ueIOcLwzZlOXNUQTsHJo0oflmMRN9UAnM0K2n2mW+n6kAI6teIf5cDnaKE+s96hHR2csIi0u4Ojbd5mC8Ki3JFeE5m9lWcVQ0ZhRc+lnLL7qFcPIaaj4Of96OcoEirskw4WoWq7FXjc8j+n30qs1fy34bwbFXh311Cie8Ovic/qUKIaNVIozB1gdBGRsHPL4ClsCL08Jf1J386oXSDTUOeAfruxZ6bULLv+jGXfVlog0apum8evXcSaq5kfEEAdKskbRR+jk1F1TRFWiGh5QGZGMxq9ABFnCllpmO0/492F7vdKMVJfGZE1b4pCc7t1PqtIhvW8LrFRaeHfAmxhp/sjhAE1HM5oVoCJo1pFjFwIo4vGkFoP4hL3MyM6RAzCeZ5E/zQqV70FgbIZtq5C9et0RLkg/ny2XqAfJQ0zo/gd5T+qz2OkOBtc4IDMcrxdat5UJnHu3knSVVPr8bab3k8ZA6it5my+2KlFr6abGWGCLP3KX2dTzILAFwF1qqRLKs6yWVf57f0JP3ZQn7iNbZVF4FzWgDzE1AtHUk0N2c2eJv9bShCcLm0khJQLswuyXwFMBIkyCQ9/NiVJcbMFEKGa1L6xPRsvsqscIYzSLWid4VWGitTt4zQElb4ponS0T+q3Uw6wuDu2WUznvTCmWWp2TzN5FsbXm4S64i1fLk2K2tesxjpyHPmQEpi9U0U4eomOzFkyM2zs93Jitt44dIKss2f16q2MGcMbyW3N9XMh5ereMqAekUxJlTAYUVrDufZhqNLZ+EvYEKTLvrqRJa4tCJfMgl4BGp+Cd0v83pGdUyr29UW2kXzrjfj9PiO4OeAgqkiTabFj+p6tk89QOOBjiprvFB8adNnvJZMaXGSvwNXVApLnfRUO5R82cEKOzx/fkt8MKCeDra4W0o8pO6K5vbjMzzHUCaR2ogn2V0MJUiAmovYdbTh+Hkd8jx94nlA8MGgHkPgKarZA59dELCD9vDqCPRrwEME/VVLpB0REI3ApQ5Og3hklaoeTf4dzrn6HKwQ5ji2bEf3Slq43ptCplIIeSH9K/poEyqMeWlSMkW8J51oUifFGGed7+N2UAzTNaGrpQEY44/flFAKSMte9AIjLZ+lnyz5W453TmPuusSaGzKlK8SZuAvwMPEhH5HLqvcufdvDkJpNrvT8+OWfhE2IhNEvuxudoVIRzV8AuxmPyNwOm7f6wGNnUdRAPtepQjt3p2UgXHV0s1tc72PxajZj/PJq4gd3u7gVR5RwwxnqVHH5aP6Z+AePyrB9NsgqRQmA9NkecYR+azB9yXL5A5lQErC+xnXNKSJ1g0yLYlRlksJMIFhebVLu2O1dtDCUSFTQR9dE+bMlfSvbSUXZo8wNz/fubXf9dvXAfWzP+DbbCQJPxBJYnBf+EqUnfyh5AYkRcG06yndfw5IxDpcNUgdBs97E/DyqVoHV6PFqp62g8oARyYpHOOUgTU0rjXNAY1Q0LPdHE5/3pfAd1yKXWetNlwzCyrY61yyaSw5DPQgD/UnQxAvcT7iaXCzEWUP2dkkgqDT8ZMBSB/87QO5zsMRoPsW16clc6adJxwZreuxmxnBBP9XER5qohIwSGp/O03gdyi5gIxnq3YiHD2l41Q/syig5dCosoQegq1WFvDDyQSxpZR73hfxAk78KCb31Uendl3ed1osA9mY/Ytu0v1Kx8nSqMYlYFz4wch7BR04fPTfXrLncIU0DUsHLfvaEf4eK9uD1eQ4peszJ7GrYoQCCmSELJ8J9E6qBv6TVMxwkDWWmc2BtGbQprhH88jTSOpHBOOXVeUfFHcM2Y8lJVEegle7lIi2AJW9swXmQgCF1v2UTA/omXoQt0WWNJrXqwFnaPFw13PhkMRN2WJfOFI2RsKRENkBdeidaxzC38v6ZgfEvpjO1L8J8nsLWoAXsT7zX22YBlpn5jLIk6vW3rC4UzMaWnl5J7HDR15d9Zsohbndz0BeIl+tXFilxkETMpOKkoeMvRbFeje7VP77ijBX383x+I9wGnCTrL2g0yFw79RK0yLTW8hjGJUIok1gsZJoDeYy4TnEGngWuNBY5GbWSmTqcPaNREPFjuA553ejcrrreIU6/c7aRriqvKL3ijPuMdgodcDbWomibRIZijKAcwYVbSuhm0xWD+o94kdgjcSsC/Ufurx50B37WFC8QPxGKgmcohzITJaLkmXWXTfCAZ9NbX49IHgJW1zNpcL7mU8tt/g9hCtno77elChWo3LluVaw7tN9yImREwbAOqZTz/iW6KU/hD1z5Ym+3oxPsrep56xsCqp7r28ubHDkZ2jYisRvf3qNpfUZPMkJvun9AaAPFhL550UOWvj10VdMT74gplOIIDM83AH20s2hIgAAADADQAA2gkAAABQAAAAUAAAAFAAAJoQAAAzYzExYTcyMGE5OGQ0MGIyMzI2OGYzN2U3NTc0NDYwM2EzYTQ5MTliZTJhMGEyODl4AwAA3woAACYKAADBBAAARQEAAI4EAACRAQAAUwYAAKgIAAAZCwAA+wEAAKYLAAAQAwAARQkAAP4DAADMDAAA7wgAAJIDAADfAAAAlAUAAOUAAAByAgAAYQIAAIsFAAAyCwAAjg0AAJwJAACuDAAAcAEAAP4BAACcAAAAfAYAABMBAAC1CwAAsgYAAAsGAAAwCQAAtwsAAAgNAAAHBAAADQsAAN8CAABZBQAAjAUAABgJAAA8AAAAMgMAAHENAAAXBAAAkQsAAOcHAACPAAAAPQQAALsLAAA1AwAABQEAAH0IAACaBAAAQAcAAGgBAACkCAAAlAIAAOMEAACpBgAAfAoAAJMKAAAMBQAAkwIAAKQLAACbAwAA6goAADsEAACJCgAAOQgAALgLAADLCgAAhgoAACUKAAD1CgAAXAoAANwJAACXCAAAkAMAAMgHAAANAAAAPwIAAAkDAAB/CAAArAUAAD8LAACWBAAAdgQAAJ8LAAAVCQAAeQgAAK0LAABhDAAAwggAAAAAAAAAAFlZhSg0KADhi2bCZFLrMKbeajvTRHi6KxeLnpreXOrFpBLI5+csRZqcD7qPY/a333MTcHsAo37fnloQqIhkAy96/L9AI0e9sSSfNjS8KsYg0r4nyutvxACT50iNHJwSOAyLFWY3d7srVL1WX21JInSS79TIPDdCCze+qzr9L5WHjfwnMBRg6FoC+3YtGGSRScTT+SzGSPvUSQoud8qBLSUoztFwIfFfMQZ5xj/AFfHSLGJ0KjRpwEQBUuYKMnCPgM5QBUmSISjSc8glTIG7FDMXW0toDALvvQ2Mbs4KVf6U6UVwbxCoPwo5obZrRHPCRD2y8tYlJnPLYEY7BrFYxx3Jj2I7SqQjbRtALmpLhHmZyCmQVmIobsLQpA/IbTlY39iYobMRhvmYj4S65PcJf9vMoTyIx3C6oCCeaqWVWgDh502QsuHEiEIv98bcbInKxiQy+sr7zhhn3ACScRxUAzWE1/ypeMz4Bxj5WM+p3TSW06KBYl405Bg1KNXhMhcm2vORWJOMIU5WOfKyAnZIvf3L+5x40Z/VT/Hkc1D2F9QB033aF4WfCrJUKilqgeKg7GrWFTV5rAhTugihpqz9XyEdsC74bKV4LPHpJKd2aswPQ4bkIAGfhid0hlx8/WIFVsoHTdC0p3/DXehDj4hg3FA7kWMmGD4ffSkHg+VJ+y6O5Mzbbx37WZoGIcEYW/aeFKkLQWv93T6M5s6mrSOZeWG6s6m6hGwyPjjHIPV7ByEyaG87PbrBjweOT4dOVat2bKZgXKdM4o482AIyNrxHEN6sdEWzXTym9yOiKzTk4+iMULNPG6p55ITf/mS3j1lJRz+ooN9lwg5quWODqbdaV/MZpeQJ9/QzM4/A0l7W7mjIWeP0O0MIJo2k42FG9TvLhaZwneh0P05KdGxQo+6uksr5uU/TZRuwEH5WYxOT7D1U8022ZlB/VBqUqsbVt4Gd9VGVTDvq9yCLv41pHto6tocv+66h9yx5emU1PrlU2Vj7uG3B/KABaPstK6bCFTY+WfM/prrS+/wkG9DVtbhlNuQ0bWRseLnmLpOydMuEtmUu9uPFFTOdKbtvnODOKrJDx/PAjabQ0OA5V3cnH4Yxn2Rqp73TniGxlkOn/NrXFwPfb6zWwii9XSUDi7y6dQk1Pvx7Y4LzbijSD/ZjKNMFYUBzRq/ZWds7rEmX0BJk9SA5cr3dW7KA6wCDBLMxWjVR/Sp7Ri5ZWuQhQLY4W50WbRjVKbQWJwWM8lqvVlQoCVEURtLm56/x3xjXuxv6R49ibJaaWjB/O9Ul7VLSqAOP+DdkJBXKL4Ro40icPWrpkavKTOi9jK0hlAr7wPlcHjYUSMLjlSN6lj0RMXbm4v1qO1ymCFwa0WuIQ48KzW2KDMQSh/OmBfqHULSrrFs3ObAMkIWctBbZ+XZXWlKTb8jPhSSw1FoJwzVhHrambiQPUQrd/T3m7VeuN419T6mn8+Dr2iY2hWNWAsxPO5VeM4tRRwlItHGL55fMAp3MinOKuCrVuZL918qlh/pvlrLATwQBLAegXz5uYPGOaYPFiHZYxIFriHj3U24+oS12G1DkC7GYyl5s6VjqZlifb25H3/2DFtEwVMaKCdeXYr0Q90SgqF3QLL0Y69kpgCEfWOMA9cAv8QV9tLbqDsGF1IeZ2W4U/sURdrJAayr3B9OlarDzl2v74AU/IvOm5R76kRZSjqaxC1gd7X8O7obZhazhRKIRkD0bnfdo09vQao+URNgTpXgt8l5X1ajr7fF9ZZxGw6B66QDYNu+tSDd8TIPueamtxd80tFFEubqTL68G6W4+iqXuGVrXOW+Hfqkn2Ykk+3NHz568Eg9PNjBFRQZAp13IPcHcAF9P1IxwrDWmHN4wbjM7vRrOgXeWnuEpkvNoRtZLXZvHR/oT9/kSTGXYpxlQFNXSBelD+LtJRmB9JUKXB2VeWr5DaCc3J8QfvDUSvfbI2H0dlEDsCGPffgCZldK3eUT+ek1aDautm90kIzyGNodps0vEenIkcVFaY+gmnJDxZ0PwEkOobcvQbvdix+QnWUd4MOCG8v7Q2gj6AKjChw==";
|
|
string key = "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";
|
|
int rc = DxyVest.Start(key);//AppVest.init("553c12676eb80b82183e0944df97cd19", "K8N/nk3cAxhGo7Oy0yoP/Ye5jcQUaMf+8+AutonLIoCXTbHXSHJ/D8W3/iIBHJq/4SABnAF7RvIeNRnF+x+wjB6cB1TEwIUviviQlofNvM4qJFLH55ON85n2pFBhSGW3qLF/");
|
|
if (rc != 150)
|
|
{
|
|
Debug.LogError("wwwwwwwwwwwwwwwwwwwwwww init failed");
|
|
ShowTip("GF init failed!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
|
|
}
|
|
|
|
// Debug.LogError("init successful");
|
|
|
|
|
|
conn.ip = "127.0.0.1";
|
|
conn.port = 18080;
|
|
//int rc1 = AppVest.getServerIPAndPort(ref conn, "", 8077);
|
|
//if (rc1 != 0)
|
|
//{
|
|
// ShowTip("getServerIPAndPort failed!", () =>
|
|
// {
|
|
// StartCoroutine(CheckNet());
|
|
// });
|
|
// yield break;
|
|
//}
|
|
}
|
|
|
|
|
|
|
|
|
|
init_url = "http://" + conn.ip + ":" + conn.port + "/NewFK/config/init2_1.json";
|
|
Debug.LogError("init_url : " + init_url);
|
|
}
|
|
// Debug.LogError("开始下载资源===>>>");
|
|
// Debug.LogError(init_url);
|
|
//Debug.LogError("init_url============================ "+ init_url);
|
|
float downTimeOut = 5;
|
|
using (WWW request1 = new WWW(init_url))
|
|
{
|
|
float timeOut = Time.time;
|
|
float process = request1.progress;
|
|
while (request1!=null && request1.isDone==false)
|
|
{
|
|
//Debug.LogError("wwwwwwwwwwwwwwwwwww11111111111111111111111");
|
|
if(process<request1.progress)
|
|
{
|
|
timeOut = Time.time;
|
|
process = request1.progress;
|
|
}
|
|
|
|
if(Time.time-timeOut>downTimeOut)
|
|
{
|
|
ShowTip("配置文件下载失败,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
yield break;
|
|
}
|
|
|
|
yield return null;
|
|
|
|
}
|
|
|
|
yield return request1;
|
|
// Debug.LogError("request1.error"+request1.error);
|
|
if (string.IsNullOrEmpty(request1.error))
|
|
{
|
|
//Debug.LogError("wwwwwwwwwwwwwwwww222222222222222222222222");
|
|
json_data = request1.text;
|
|
|
|
//优化
|
|
GameApplication.Instance.GameInfo = json_data;
|
|
Hashtable json = Json.Deserialize(json_data) as Hashtable;
|
|
//json["pack_url"] = "http://8.134.59.224:8909/NewFKtest";
|
|
Hotupdate.PackUrl = (string)json["pack_url"];
|
|
|
|
Hashtable _plat_data = null;
|
|
#if UNITY_IPHONE
|
|
_plat_data = json["iOS"] as Hashtable;
|
|
#endif
|
|
#if UNITY_ANDROID
|
|
_plat_data = json["Android"] as Hashtable;
|
|
#endif
|
|
#if UNITY_STANDALONE
|
|
_plat_data = json["Win"] as Hashtable;
|
|
#endif
|
|
var check = _plat_data[string.Format("check{0}", GameApplication.AppVersion.ToString())];
|
|
if (check != null && (bool)check)
|
|
{
|
|
GameApplication.HideSdk = true;
|
|
GameApplication.Instance.accountTest = false;
|
|
}
|
|
|
|
Version server_version = new Version((string)_plat_data["version"]);
|
|
if (!GameApplication.HideSdk)
|
|
{
|
|
if (GameApplication.AppVersion.max_version < server_version.max_version || (GameApplication.AppVersion.max_version == server_version.max_version && GameApplication.AppVersion.min_version < server_version.min_version))
|
|
{
|
|
ShowTip("您版本需要更新!", () =>
|
|
{
|
|
#if UNITY_ANDROID
|
|
StartCoroutine(DownApp((string)_plat_data["appurl"], server_version.ToString()));
|
|
#else
|
|
DeleteOldPack();
|
|
Application.OpenURL((string)_plat_data["appurl"]);
|
|
Application.Quit();
|
|
#endif
|
|
});
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
|
|
Voice.VoiceUpload = json["voice_upload_url"] as string;
|
|
Voice.VoiceDownload = json["voice_download_url"] as string;
|
|
//GameApplication.PackVersion = server_version.pack_version;
|
|
|
|
if (!GameApplication.Instance.buildApp)
|
|
{
|
|
GameApplication.AppVersion.FillData(server_version);
|
|
_version_view.Dispose();
|
|
GameApplication.Instance.StartGame();
|
|
}
|
|
else
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
ShowTip("版本检索失败,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
//yield break;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
IEnumerator CheckAssetConfig(Version server_version)
|
|
{
|
|
GObject v_tex_info = _version_view.GetChild("tex_info");
|
|
GButton viewBtn_showWait = _version_view.GetChild("GlobalModalWaiting") as GButton;
|
|
Version local_version = Hotupdate.GetLocalVersion(string.Empty);
|
|
ArrayList asset_config_list = null;
|
|
string asset_config_text = null;
|
|
viewBtn_showWait.title = "正在连接服务器...";
|
|
if (local_version == null)
|
|
{
|
|
string ac_url = "";
|
|
if (isGFF == false)
|
|
ac_url = string.Format("{0}/config/asset_config{1}.json", Hotupdate.PackUrl, server_version.ToString());
|
|
else
|
|
ac_url = string.Format("http://{0}/NewFK/config/asset_config{1}.json", conn.ip + ":" + conn.port, server_version.ToString());
|
|
Debug.Log(ac_url);
|
|
float downTimeOut = 5;
|
|
using (var request = new WWW(ac_url))
|
|
{
|
|
float timeOut = Time.time;
|
|
float process = request.progress;
|
|
while (request != null && request.isDone == false)
|
|
{
|
|
if (process < request.progress)
|
|
{
|
|
timeOut = Time.time;
|
|
process = request.progress;
|
|
}
|
|
|
|
if (Time.time - timeOut > downTimeOut)
|
|
{
|
|
ShowTip("连接超时导致游戏配置下载异常,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
yield break;
|
|
}
|
|
|
|
yield return null;
|
|
|
|
}
|
|
|
|
yield return request;
|
|
if (string.IsNullOrEmpty(request.error))
|
|
{
|
|
asset_config_text = request.text;
|
|
asset_config_list = Json.Deserialize(asset_config_text) as ArrayList;
|
|
|
|
if (asset_config_list == null)
|
|
{
|
|
ShowTip("连接错误导致游戏配置下载异常,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
//
|
|
v_tex_info.text = "正在检查资源。。。";
|
|
GSlider _pd = _version_view.GetChild("pb_progress").asSlider;
|
|
_pd.value = 0;
|
|
if (!Directory.Exists(ResourcesManager.PACK_PATH))
|
|
{
|
|
Directory.CreateDirectory(ResourcesManager.PACK_PATH);
|
|
}
|
|
string copyVersionPath = Path.Combine(Application.streamingAssetsPath, "version.txt");
|
|
|
|
#if UNITY_IPHONE
|
|
string copyVersionString = "";
|
|
if (File.Exists(copyVersionPath))
|
|
{
|
|
copyVersionString = File.ReadAllText(copyVersionPath).Trim();
|
|
|
|
}
|
|
else
|
|
{
|
|
ShowTip("本地缓存版本加载失败", () =>
|
|
{
|
|
File.WriteAllText(Path.Combine(ResourcesManager.PACK_PATH, "version.txt"), "1.0.0");
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
#endif
|
|
#if UNITY_ANDROID
|
|
UnityWebRequest copyRequest = UnityWebRequest.Get(copyVersionPath);
|
|
yield return copyRequest.SendWebRequest();
|
|
|
|
if (copyRequest.isNetworkError || copyRequest.isHttpError)
|
|
{
|
|
ShowTip("本地缓存版本加载失败", () =>
|
|
{
|
|
File.WriteAllText(Path.Combine(ResourcesManager.PACK_PATH, "version.txt"), "1.0.0");
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
|
|
string copyVersionString = copyRequest.downloadHandler.text.Trim();
|
|
#endif
|
|
bool isSame = copyVersionString.Equals(server_version.ToString());
|
|
if (isSame)
|
|
{
|
|
viewBtn_showWait.title = "正在解压资源...";
|
|
string copyZipPath = Path.Combine(Application.streamingAssetsPath, "Pack.byte");
|
|
|
|
#if UNITY_IPHONE
|
|
Byte[] zipData;
|
|
if (File.Exists(copyZipPath))
|
|
{
|
|
|
|
zipData = File.ReadAllBytes(copyZipPath);
|
|
|
|
}
|
|
else
|
|
{
|
|
ShowTip("本地缓存压缩包加载失败", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
/* if (zipData.LongLength < 1024)
|
|
{
|
|
ShowTip("本地缓存压缩包加载失败", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}*/
|
|
string zipString = Path.Combine(Application.persistentDataPath, "Pack.byte");
|
|
File.WriteAllBytes(zipString, zipData);
|
|
#endif
|
|
#if UNITY_ANDROID
|
|
UnityWebRequest copyZipRequest = UnityWebRequest.Get(copyZipPath);
|
|
yield return copyZipRequest.SendWebRequest();
|
|
|
|
if (copyZipRequest.isNetworkError || copyZipRequest.isHttpError)
|
|
{
|
|
ShowTip("本地缓存压缩包加载失败", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
|
|
byte[] zipData = copyZipRequest.downloadHandler.data;
|
|
string zipString = Path.Combine(Application.persistentDataPath, "Pack.byte");
|
|
File.WriteAllBytes(zipString, zipData);
|
|
#endif
|
|
|
|
IFilePack zip = null;
|
|
zip = new FilePack20(zipString, PackMode.Read);
|
|
zip.UnPackFileSyn(ResourcesManager.PACK_PATH);
|
|
while (!zip.Complete)
|
|
{
|
|
_pd.value = zip.Progress*100;
|
|
yield return null;
|
|
}
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
yield break;
|
|
}
|
|
else
|
|
{
|
|
File.WriteAllText(Path.Combine(ResourcesManager.PACK_PATH, "version.txt"), copyVersionString);
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
yield break;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
ShowTip("游戏资源下载失败,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
}
|
|
}
|
|
else if (local_version.ContainAll(server_version))
|
|
{
|
|
string ac_url="";
|
|
if(isGFF==false)
|
|
ac_url = string.Format("{0}/config/asset_config{1}.json", Hotupdate.PackUrl, server_version.ToString());
|
|
else
|
|
ac_url = string.Format("http://{0}/NewFK/config/asset_config{1}.json", conn.ip + ":" + conn.port, server_version.ToString());
|
|
|
|
// Debugger.LogError("CheckAssetConfig===>>>");
|
|
Debugger.LogError(ac_url);
|
|
|
|
float downTimeOut = 5;
|
|
using (var request = new WWW(ac_url))
|
|
{
|
|
float timeOut = Time.time;
|
|
float process = request.progress;
|
|
while (request != null && request.isDone == false)
|
|
{
|
|
if (process < request.progress)
|
|
{
|
|
timeOut = Time.time;
|
|
process = request.progress;
|
|
}
|
|
|
|
if (Time.time - timeOut > downTimeOut)
|
|
{
|
|
ShowTip("连接超时导致游戏配置下载异常,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckNet());
|
|
});
|
|
yield break;
|
|
}
|
|
|
|
yield return null;
|
|
|
|
}
|
|
|
|
yield return request;
|
|
if (string.IsNullOrEmpty(request.error))
|
|
{
|
|
asset_config_text = request.text;
|
|
asset_config_list = Json.Deserialize(asset_config_text) as ArrayList;
|
|
|
|
if (asset_config_list == null)
|
|
{
|
|
ShowTip("连接错误导致游戏配置下载异常,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
//
|
|
viewBtn_showWait.title = "正在下载资源...";
|
|
v_tex_info.text = "正在检查资源。。。";
|
|
GSlider _pd = _version_view.GetChild("pb_progress").asSlider;
|
|
//GObject v_tex_pd = _version_view.GetChild("tex_value");
|
|
_pd.value = 0;
|
|
//v_tex_pd.text = "0%";
|
|
bool ver_check = false;
|
|
StartCoroutine(VersionUpdateCheck(asset_config_list, (progress, finish) =>
|
|
{
|
|
_pd.value = progress * 100f;
|
|
//v_tex_pd.text = $"{Mathf.Floor(progress*100f)}%";
|
|
ver_check = finish;
|
|
}, v_tex_info));
|
|
|
|
while (!ver_check)
|
|
{
|
|
yield return null;
|
|
}
|
|
string arv = string.Format("{0}asset_config{1}.json", ResourcesManager.PACK_PATH, server_version.ToString());
|
|
File.WriteAllText(arv, asset_config_text, System.Text.Encoding.UTF8);
|
|
string rv = ResourcesManager.PACK_PATH + "version.txt";
|
|
File.WriteAllText(rv, server_version.ToString(), System.Text.Encoding.UTF8);
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
ShowTip("游戏资源下载失败,请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
}
|
|
}
|
|
|
|
}else
|
|
{
|
|
// string arv = string.Format("{0}asset_config{1}.json", ResourcesManager.PACK_PATH, server_version.ToString());
|
|
string arv =ResourcesManager.PACK_PATH+"asset_config"+server_version.ToString()+".json";
|
|
//Debug.LogError("ARV===>>>" + arv);
|
|
try
|
|
{
|
|
viewBtn_showWait.title = "快马加鞭进入游戏中...";
|
|
asset_config_text = File.ReadAllText(arv);
|
|
asset_config_list = Json.Deserialize(asset_config_text) as ArrayList;
|
|
foreach (Hashtable tem in asset_config_list)
|
|
{
|
|
string b_path = "base/" + tem["name"];
|
|
ResourcesManager.ReadAssetConfig(b_path);
|
|
}
|
|
}
|
|
catch (Exception s)
|
|
{
|
|
Debug.LogError(s.ToString());
|
|
ShowTip("游戏资源损坏,请重新安装新包!", () =>
|
|
{
|
|
StartCoroutine(CheckAssetConfig(server_version));
|
|
});
|
|
yield break;
|
|
|
|
}
|
|
|
|
//IEnumerator enumerator = asset_config_list.GetEnumerator();
|
|
//try
|
|
//{
|
|
// while (enumerator!=null && enumerator.MoveNext())
|
|
// {
|
|
// Hashtable hashtable = (Hashtable)enumerator.Current;
|
|
// string base_path = "base/" + hashtable["name"].ToString();
|
|
// ResourcesManager.ReadAssetConfig(base_path);
|
|
// yield return null;
|
|
// }
|
|
//}
|
|
//finally
|
|
//{
|
|
// IDisposable disposable;
|
|
// if ((disposable = (enumerator as IDisposable)) != null)
|
|
// {
|
|
// disposable.Dispose();
|
|
// }
|
|
//}
|
|
|
|
}
|
|
|
|
GameApplication.AppVersion.FillData(server_version);
|
|
v_tex_info.text = "正在加载资源请稍后。。";
|
|
//ResourcesManager.Init();
|
|
yield return null;
|
|
_version_view.Dispose();
|
|
GameApplication.Instance.StartGame();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 检查基本更新包
|
|
/// </summary>
|
|
/// <param name="asset_config_list"></param>
|
|
/// <param name="onback"></param>
|
|
/// <param name="tip"></param>
|
|
/// <returns></returns>
|
|
IEnumerator VersionUpdateCheck(ArrayList asset_config_list, System.Action<float, bool> onback, FairyGUI.GObject tip)
|
|
{
|
|
Version local_version = Version.DEFUALT;
|
|
for(int i=0;i< asset_config_list.Count; ++i)
|
|
{
|
|
var tem = asset_config_list[i] as Hashtable;
|
|
//if (GameApplication.HideSdk)
|
|
//{
|
|
// if (!tem.ContainsKey("check")) continue;
|
|
// if (!(bool)tem["check"]) continue;
|
|
//}
|
|
|
|
|
|
string b_path = "base/" + tem["name"].ToString();
|
|
Hotupdate version_update = new Hotupdate(b_path + "/", local_version, new Version((string)tem["ver"]));
|
|
version_update.AssetName = b_path;
|
|
version_update.HideDetail = true;
|
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
|
//if (GameApplication.Instance.isAndroid64bit==false)
|
|
//{
|
|
// if (tem["name"].ToString()=="base_script")
|
|
// {
|
|
// version_update.isBuild32lua = true;
|
|
// }
|
|
//}
|
|
#endif
|
|
|
|
|
|
|
|
version_update.SetTipCallback((text,callback)=>
|
|
{
|
|
ShowTip(text, callback);
|
|
});
|
|
version_update.LoadAsset();
|
|
while (!version_update.Done)
|
|
{
|
|
onback(version_update.Progress, false);
|
|
tip.text = version_update.TextTip;
|
|
yield return null;
|
|
}
|
|
ResourcesManager.ReadAssetConfig(b_path);
|
|
}
|
|
onback(1, true);
|
|
}
|
|
|
|
#if UNITY_ANDROID
|
|
IEnumerator DownApp(string appurl,string version)
|
|
{
|
|
var v_tex_info = _version_view.GetChild("tex_info");
|
|
v_tex_info.text = "正在下载新的安装包(0KB/0KB)";
|
|
var _pd = _version_view.GetChild("pb_progress").asSlider;
|
|
//GObject v_tex_pd = _version_view.GetChild("tex_value");
|
|
var request = new BestHTTP.HTTPRequest(new System.Uri(appurl));
|
|
request.EnableTimoutForStreaming = false;
|
|
request.UseStreaming = true;
|
|
request.IsKeepAlive = true;
|
|
request.Send();
|
|
var filePath = Application.persistentDataPath + "/update" + version + ".apk";
|
|
if (File.Exists(filePath))
|
|
{
|
|
File.Delete(filePath);
|
|
}
|
|
FileStream stream = null;
|
|
request.OnProgress = (originalRequest, downloaded, downloadLength) =>
|
|
{
|
|
v_tex_info.text = string.Format("正在下载新的安装包({0}KB/{1}KB)", downloaded / 1024, downloadLength / 1024);
|
|
_pd.value = (downloaded / (float)downloadLength) * 100;
|
|
//v_tex_pd.text = $"{Mathf.Floor((downloaded / (float)downloadLength) * 100)}%";
|
|
var fragments = originalRequest.Response.GetStreamedFragments();
|
|
if (fragments != null)
|
|
{
|
|
if (stream == null)
|
|
{
|
|
stream = File.Create(filePath);
|
|
}
|
|
foreach(byte[] buffer in fragments)
|
|
{
|
|
stream.Write(buffer, 0, buffer.Length);
|
|
}
|
|
}
|
|
};
|
|
while (request.State < BestHTTP.HTTPRequestStates.Finished)
|
|
{
|
|
yield return null;
|
|
}
|
|
yield return new WaitForSeconds(1);
|
|
stream.Dispose();
|
|
request.OnProgress = null;
|
|
if (request.State == BestHTTP.HTTPRequestStates.Finished && request.Response.IsSuccess)
|
|
{
|
|
DeleteOldPack();
|
|
PlatformAndroid.Instance.UpdateApp(filePath);
|
|
}
|
|
else
|
|
{
|
|
ShowTip("请检查您的网络设置!", () =>
|
|
{
|
|
StartCoroutine(DownApp(appurl, version));
|
|
});
|
|
}
|
|
}
|
|
#endif
|
|
|
|
public void ShowTip(string text, System.Action callback)
|
|
{
|
|
var ctr_state = _version_view.GetController("state");
|
|
ctr_state.selectedIndex = 1;
|
|
_version_view.GetChild("tex_tip").text = text;
|
|
_version_view.GetChild("btn_ok").onClick.Set(() =>
|
|
{
|
|
ctr_state.selectedIndex = 0;
|
|
if (callback != null) callback();
|
|
});
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 移除本地缓存包
|
|
/// </summary>
|
|
public static void DeleteOldPack()
|
|
{
|
|
string dir = ResourcesManager.RES_PATH;
|
|
string rv = dir + "version.txt";
|
|
if (File.Exists(rv)) File.Delete(rv);
|
|
if (Directory.Exists(dir)) Directory.Delete(dir, true);
|
|
}
|
|
|
|
|
|
}
|