This commit is contained in:
2023-01-29 12:44:57 +08:00
commit 474dbdbd34
328 changed files with 21484 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 56682603f4c2844ed9707674254d306a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,561 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using ATJson;
using ATProviderInfo;
using ATNet;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using ATConf;
public class ATDownloadManager : EditorWindow {
private GUIStyle headerStyle;
private GUIStyle textStyle;
private GUIStyle boldTextStyle;
internal class ProviderInfoComparor : IComparer<ATInfo>
{
public int Compare(ATInfo x, ATInfo y)
{
return x.providerName.CompareTo(y.providerName);
}
}
private string filePath = ATNetInfo.networkPath;
private const int Width = 760;
private const int Height = 760;
private ATEditorCoroutines mEditorCoroutines;
private UnityWebRequest downloadWebClient;
private readonly GUILayoutOption buttonWidth = GUILayout.Width(90);
private readonly SortedSet<ATInfo> providersSet = new SortedSet<ATInfo>(new ProviderInfoComparor());
private ATconfig localConfig = ATconfig.getLocalConfig();
private ATconfig reqConfig;
private Boolean updateCore = false;
private ATInfo currentProvider;
private ATInfo coreProvider;
private String versionNo = "-";
public static void showManager(){
var win = GetWindowWithRect<ATDownloadManager>(new Rect(0, 0, Width, Height), true);
win.titleContent = new GUIContent("AnyThink Integration Manager");
win.Focus();
}
private void OnEnable()
{
mEditorCoroutines = ATEditorCoroutines.StartEditorCoroutine(getVersions());
}
private IEnumerator getVersions(){
filePath = ATNetInfo.networkPath;
UnityWebRequest unityWebRequest = UnityWebRequest.Get(filePath);
var webRequest = unityWebRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return new WaitForSeconds(0.1f);
}
if (!unityWebRequest.isHttpError && !unityWebRequest.isNetworkError)
{
string json = unityWebRequest.downloadHandler.text;
Dictionary<string, object> dic = new Dictionary<string, object>();
try
{
dic = Json.Deserialize(json) as Dictionary<string, object>;
reqConfig = JsonUtility.FromJson<ATconfig>(json);
Debug.Log("req version");
// if (selected == 0 ){
// reloadList(dic, "GlobalSdk");
// }else{
// reloadList(dic, "ChinaSdk");
// }
ATEditorCoroutines.StartEditorCoroutine(getNetworkList());
}
catch (Exception e)
{
Debug.Log("Error getting response " + e.ToString());
}
}
Repaint();
requested = true;
}
private IEnumerator getNetworkList(){
filePath = ATNetInfo.getNetworkJson(versionNo);
Debug.Log("get network list:"+filePath);
UnityWebRequest unityWebRequest = UnityWebRequest.Get(filePath);
var webRequest = unityWebRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return new WaitForSeconds(0.1f);
}
if (!unityWebRequest.isHttpError && !unityWebRequest.isNetworkError)
{
providersSet.Clear();
string json = unityWebRequest.downloadHandler.text;
Dictionary<string, object> dic = new Dictionary<string, object>();
try
{
dic = Json.Deserialize(json) as Dictionary<string, object>;
// reqConfig = JsonUtility.FromJson<ATconfig>(json);
Debug.Log("network list:"+ json);
if (selected == 0 ){
reloadList(dic, "GlobalSdk");
}else{
reloadList(dic, "ChinaSdk");
}
}
catch (Exception e)
{
Debug.Log("Error getting response " + e.ToString());
}
}
Repaint();
}
private void reloadList(Dictionary<string,object> dic, string key){
object providersJson;
if (dic.TryGetValue(key, out providersJson))
{
if(providersJson!=null){
foreach (var item in providersJson as Dictionary<string, object>)
{
ATInfo info = new ATInfo();
if (info.GetFromJson(item.Key, item.Value as Dictionary<string, object>))
{
if(info.displayProviderName != "Core"){
providersSet.Add(info);
}
else{
coreProvider = info;
}
}
}
}
}
}
private void drawHeaderVersion(){
selectedOption = EditorGUILayout.Popup("Version",selectedOption,reqConfig.versionList);
string ver = reqConfig.versionList[selectedOption];
if(versionNo != ver){
versionNo = ver;
// ATEditorCoroutines.StartEditorCoroutine(getNetworkList());
}
GUILayout.Space(5);
using (new EditorGUILayout.HorizontalScope( GUILayout.Width(280)))
{
GUI.enabled = true;
// EditorGUILayout.LabelField("Region", GUILayout.Width(45));
// int opsi = GUILayout.SelectionGrid(selected, options, options.Length, EditorStyles.radioButton);
// // if (selected >=0){
// // ATEditorCoroutines.StartEditorCoroutine(getVersions());
// // }
// if (selected!=opsi) {
// selected = opsi;
// ATEditorCoroutines.StartEditorCoroutine(getNetworkList());
// }
GUILayout.Space(5);
if(coreProvider != null){
coreProvider.latestUnityVersion = versionNo;
if (coreProvider.currentUnityVersion == "-")
{
bool btn = GUILayout.Button(new GUIContent
{
text = "Install Core",
tooltip = ""
}, buttonWidth);
if (btn && downloadWebClient == null)
{
GUI.enabled = true;
currentProvider = coreProvider;
updateCore = false;
ATEditorCoroutines.StartEditorCoroutine(DownloadFile(getDownloadUrl(coreProvider.displayProviderName)));
}
}
else if (coreProvider.currentUnityVersion != versionNo)
{
var btn = GUILayout.Button(new GUIContent
{
text= "Update Core",
tooltip = ""
}
,buttonWidth);
if (btn && downloadWebClient == null)
{
GUI.enabled = true;
currentProvider = coreProvider;
updateCore = false;
ATEditorCoroutines.StartEditorCoroutine(DownloadFile(getDownloadUrl(coreProvider.displayProviderName)));
}
}
else
{
GUI.enabled = false;
GUILayout.Button(new GUIContent
{
text = "Core Updated",
tooltip = ""
}, buttonWidth);
}
GUILayout.Space(5);
GUI.enabled = true;
}
}
}
private void DrawSDKHeader()
{
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
{
EditorGUILayout.LabelField("Current SDK Version", new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Bold,
fontSize = 13,
fixedHeight = 20,
stretchWidth = true,
fixedWidth = Width / 4,
clipping = TextClipping.Overflow,
padding = new RectOffset(Width / 4 + 15, 0, 0, 0)
});
GUILayout.Space(85);
EditorGUILayout.LabelField("Latest SDK Version", new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Bold,
fontSize = 13,
fixedHeight = 20,
stretchWidth = true,
fixedWidth = Screen.width / 4,
clipping = TextClipping.Overflow,
});
}
}
void DrawProviderItem(ATInfo providerData)
{
if (!providerData.Equals(default(ATInfo)))
{
using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(false)))
{
GUI.enabled = true;
bool isNew = providerData.isNewProvider;
string isNewAddition = isNew ? " - New Network" : string.Empty;
string androidVersion = "";
string iosVersion = "";
string tooltipText = "Latest Version: \n " + providerData.providerName + " Adapter Version " + versionNo;
if (!providerData.sdkVersionDic.TryGetValue(ATNetInfo.Android, out androidVersion))
{
androidVersion = "";
}
else tooltipText = tooltipText + "\n Android SDK version " + androidVersion;
if (!providerData.sdkVersionDic.TryGetValue(ATNetInfo.iOS, out iosVersion))
{
iosVersion = "";
}
else tooltipText = tooltipText + "\n iOS SDK version " + iosVersion;
EditorGUILayout.LabelField(providerData.displayProviderName + isNewAddition, isNew ? boldTextStyle : textStyle);
EditorGUILayout.LabelField(providerData.currentDisplayVersion, textStyle);
EditorGUILayout.LabelField(providerData.displayVersion, textStyle);
if (providerData.currentStatues == ATInfo.Status.none)
{
bool btn = GUILayout.Button(new GUIContent
{
text = "Install",
tooltip = tooltipText
}, buttonWidth);
if (btn && downloadWebClient == null)
{
GUI.enabled = true;
currentProvider = providerData;
updateCore = false;
if (coreProvider.currentUnityVersion == "-"){
EditorUtility.DisplayDialog("Install fail","Please install Core package first to proceed","Ok");
}else{
ATEditorCoroutines.StartEditorCoroutine(DownloadFile(getDownloadUrl(providerData.displayProviderName)));
}
}
}
else if (providerData.currentStatues == ATInfo.Status.installed)
{
var btn = GUILayout.Button(new GUIContent
{
text= "Update",
tooltip = tooltipText
}
,buttonWidth);
if (btn && downloadWebClient == null)
{
GUI.enabled = true;
currentProvider = providerData;
updateCore = false;
ATEditorCoroutines.StartEditorCoroutine(DownloadFile(getDownloadUrl(providerData.displayProviderName)));
}
}
else
{
GUI.enabled = false;
GUILayout.Button(new GUIContent
{
text = "Updated",
tooltip = tooltipText
}, buttonWidth);
}
GUILayout.Space(5);
GUI.enabled = true;
}
}
}
private String getDownloadUrl(string network){
string region = selected == 0 ? "NonChina" : "China";
return ATNetInfo.packagePath + versionNo +"/"+ region +"/"+ATNetInfo.platformName+network+".unitypackage";
}
private IEnumerator DownloadFile(string downloadFileUrl)
{
if(currentProvider.displayProviderName == "Core"){
FileUtil.DeleteFileOrDirectory(ATNetInfo.ATDownloadDir);
FileUtil.DeleteFileOrDirectory(ATNetInfo.ATDependencyDir);
localConfig.resetNetwork();
}
int fileNameIndex = downloadFileUrl.LastIndexOf("/") + 1;
string downloadFileName = downloadFileUrl.Substring(fileNameIndex);
string fileDownloading = string.Format("Downloading {0}", downloadFileName);
string genericFileName = Regex.Replace(downloadFileName, @"_v+(\d\.\d\.\d\.\d|\d\.\d\.\d)", "");
string path = Path.Combine(ATNetInfo.ATDownloadDir, genericFileName);
bool isCancelled = false;
downloadWebClient = new UnityWebRequest(downloadFileUrl);
downloadWebClient.downloadHandler = new DownloadHandlerFile(path);
downloadWebClient.SendWebRequest();
if (!downloadWebClient.isHttpError && !downloadWebClient.isNetworkError)
{
while (!downloadWebClient.isDone)
{
yield return new WaitForSeconds(0.1f);
if (EditorUtility.DisplayCancelableProgressBar("Download Manager", fileDownloading, downloadWebClient.downloadProgress))
{
if (downloadWebClient.error != null)
{
Debug.LogError(downloadWebClient.error);
}
CancelDownload();
isCancelled = true;
}
}
}
else
{
Debug.LogError("Error Downloading " + genericFileName + " : " + downloadWebClient.error);
}
EditorUtility.ClearProgressBar();
if (genericFileName.EndsWith(".unitypackage") && !isCancelled)
{
AssetDatabase.ImportPackage(Path.Combine(ATNetInfo.ATDownloadDir, genericFileName), true);
}
else
{
// in case the download was cancelled, delete the file
if(isCancelled && File.Exists(ATNetInfo.ATDownloadDir + genericFileName))
{
File.Delete(ATNetInfo.ATDownloadDir + genericFileName);
}
ATEditorCoroutines.StartEditorCoroutine(getVersions());
}
localConfig.updateNetwork(currentProvider);
AssetDatabase.Refresh();
//clean the downloadWebClient object regardless of whether the request succeeded or failed
downloadWebClient.Dispose();
downloadWebClient = null;
ATEditorCoroutines.StartEditorCoroutine(getVersions());
}
private void CancelDownload()
{
// if downloader object is still active
if (downloadWebClient != null)
{
downloadWebClient.Abort();
return;
}
if (mEditorCoroutines != null)
{
mEditorCoroutines.StopEditorCoroutine();
mEditorCoroutines = null;
}
downloadWebClient = null;
}
void Awake()
{
headerStyle = new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Bold,
fontSize = 14,
fixedHeight = 20,
stretchWidth = true,
fixedWidth = Width / 4 + 5,
clipping = TextClipping.Overflow,
alignment = TextAnchor.MiddleLeft
};
textStyle = new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Normal,
alignment = TextAnchor.MiddleLeft
};
boldTextStyle = new GUIStyle(EditorStyles.label)
{
fontStyle = FontStyle.Bold
};
}
private void OnDestroy()
{
CancelDownload();
AssetDatabase.Refresh();
}
int selected = ATNetInfo.isGlobal;
static string[] options = new string[] { "Global", "China" };
string[] dropoptions = new string[]
{
"Option1", "Option2", "Option3",
};
bool requested = false;
int selectedOption = 0;
void OnGUI()
{
GUILayout.Space(10);
if(reqConfig==null ){
return;
}
using (new EditorGUILayout.VerticalScope("box"))
{
GUILayout.Space(5);
drawHeaderVersion();
GUILayout.Space(5);
DrawSDKHeader();
GUILayout.Space(5);
GUILayout.BeginHorizontal();
}
// if(coreProvider != null){
// DrawProviderItem(coreProvider);
// }
foreach (var provider in providersSet)
{
DrawProviderItem(provider);
GUILayout.Space(2);
}
GUILayout.Space(30);
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 4655aa99cf2c1475eb148561285c1d0e
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,37 @@
using UnityEditor;
using System.Collections;
public class ATEditorCoroutines
{
readonly IEnumerator mRoutine;
public static ATEditorCoroutines StartEditorCoroutine( IEnumerator routine)
{
ATEditorCoroutines coroutine = new ATEditorCoroutines(routine);
coroutine.start();
return coroutine;
}
ATEditorCoroutines(IEnumerator routine)
{
mRoutine = routine;
}
void start()
{
EditorApplication.update += update;
}
void update()
{
if(!mRoutine.MoveNext())
{
StopEditorCoroutine();
}
}
public void StopEditorCoroutine()
{
EditorApplication.update -= update;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 653ebf512c3af46698bdf323cfb74f53
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class ATMenu : UnityEditor.Editor
{
// Start is called before the first frame update
[MenuItem("AnyThink/Documentation", false, 0)]
public static void Documentation()
{
Application.OpenURL("https://docs.toponad.com/#/en-us/unity/download/package?_t=YyEWrxzJVTjbQFhszxvWabdIARg7mzE4");
}
[MenuItem("AnyThink/SDK Manager", false, 0)]
public static void sdkManager()
{
ATDownloadManager.showManager();
}
// Update is called once per frame
void Update()
{
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 82226c0ac90874afc9d1b46b47c9dfb5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1 @@
{"version":"","sDKInfo":[{"network":"Core","version":"6.1.55","displayVersion":"iOS : 6.1.51 Android : 6.1.55"},{"network":"Pangle","version":"6.1.55","displayVersion":"iOS : 4.9.0.2 Android : 5.0.0.4"},{"network":"KuaiShou","version":"6.1.55","displayVersion":"iOS : 3.3.33 Android : 3.3.34"},{"network":"GDT","version":"6.1.55","displayVersion":"iOS : 4.13.90 Android : 4.510.1380"}],"versionList":[]}

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 56e64f2bc9e07400cabd79e3b2c503c4
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 85f9836b0a7f4467c872a6d93df025b6
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,85 @@
using System;
using ATNet;
using ATJson;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using System.Collections.Generic;
using ATProviderInfo;
using System.IO;
namespace ATConf
{
[Serializable]
public class ATconfig
{
public string version;
public List<SDKInfo> sDKInfo;
public String[] versionList;
public void saveToLocal(){
string potion = JsonUtility.ToJson(this);
System.IO.File.WriteAllText(ATNetInfo.localConfig,potion);
}
public void updateNetwork(ATInfo aTInfo){
SDKInfo curInfo = null;
Debug.Log("ver:"+aTInfo.latestUnityVersion);
foreach (SDKInfo info in this.sDKInfo){
if(info.network == aTInfo.displayProviderName){
curInfo = info;
}
}
if(curInfo == null){
curInfo = new SDKInfo();
curInfo.network = aTInfo.displayProviderName;
curInfo.version = aTInfo.latestUnityVersion;
curInfo.displayVersion = aTInfo.displayVersion;
this.sDKInfo.Add(curInfo);
}else{
curInfo.version = aTInfo.latestUnityVersion;
}
saveToLocal();
}
public void resetNetwork(){
this.sDKInfo = new List<SDKInfo>();
saveToLocal();
}
public static ATconfig getLocalConfig(){
String file = File.ReadAllText(ATNetInfo.localConfig);
ATconfig localConfig = JsonUtility.FromJson<ATconfig>(file);
if(localConfig == null){
localConfig = new ATconfig();
}
return localConfig;
}
}
[Serializable]
public class SDKInfo {
public string network;
public string version;
public string displayVersion;
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c9272816a9c944e828dd591dbae79e04
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,495 @@
/*
* Based on the miniJSON by Calvin Rien
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
namespace ATJson
{
public static class Json
{
public static object Deserialize (string json)
{
if (json == null) {
return null;
}
return Parser.Parse (json);
}
sealed class Parser : IDisposable
{
const string WHITE_SPACE = " \t\n\r";
const string WORD_BREAK = " \t\n\r{}[],:\"";
enum TOKEN
{
NONE,
CURLY_OPEN,
CURLY_CLOSE,
SQUARED_OPEN,
SQUARED_CLOSE,
COLON,
COMMA,
STRING,
NUMBER,
TRUE,
FALSE,
NULL
}
;
StringReader json;
Parser (string jsonString)
{
json = new StringReader (jsonString);
}
public static object Parse (string jsonString)
{
using (var instance = new Parser(jsonString)) {
return instance.ParseValue ();
}
}
public void Dispose ()
{
json.Dispose ();
json = null;
}
Dictionary<string, object> ParseObject ()
{
Dictionary<string, object> table = new Dictionary<string, object> ();
// ditch opening brace
json.Read ();
// {
while (true) {
switch (NextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.CURLY_CLOSE:
return table;
default:
// name
string name = ParseString ();
if (name == null) {
return null;
}
// :
if (NextToken != TOKEN.COLON) {
return null;
}
// ditch the colon
json.Read ();
// value
table [name] = ParseValue ();
break;
}
}
}
List<object> ParseArray ()
{
List<object> array = new List<object> ();
// ditch opening bracket
json.Read ();
// [
var parsing = true;
while (parsing) {
TOKEN nextToken = NextToken;
switch (nextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.SQUARED_CLOSE:
parsing = false;
break;
default:
object value = ParseByToken (nextToken);
array.Add (value);
break;
}
}
return array;
}
object ParseValue ()
{
TOKEN nextToken = NextToken;
return ParseByToken (nextToken);
}
object ParseByToken (TOKEN token)
{
switch (token) {
case TOKEN.STRING:
return ParseString ();
case TOKEN.NUMBER:
return ParseNumber ();
case TOKEN.CURLY_OPEN:
return ParseObject ();
case TOKEN.SQUARED_OPEN:
return ParseArray ();
case TOKEN.TRUE:
return true;
case TOKEN.FALSE:
return false;
case TOKEN.NULL:
return null;
default:
return null;
}
}
string ParseString ()
{
StringBuilder s = new StringBuilder ();
char c;
// ditch opening quote
json.Read ();
bool parsing = true;
while (parsing) {
if (json.Peek () == -1) {
parsing = false;
break;
}
c = NextChar;
switch (c) {
case '"':
parsing = false;
break;
case '\\':
if (json.Peek () == -1) {
parsing = false;
break;
}
c = NextChar;
switch (c) {
case '"':
case '\\':
case '/':
s.Append (c);
break;
case 'b':
s.Append ('\b');
break;
case 'f':
s.Append ('\f');
break;
case 'n':
s.Append ('\n');
break;
case 'r':
s.Append ('\r');
break;
case 't':
s.Append ('\t');
break;
case 'u':
var hex = new StringBuilder ();
for (int i=0; i< 4; i++) {
hex.Append (NextChar);
}
s.Append ((char)Convert.ToInt32 (hex.ToString (), 16));
break;
}
break;
default:
s.Append (c);
break;
}
}
return s.ToString ();
}
object ParseNumber ()
{
string number = NextWord;
if (number.IndexOf ('.') == -1) {
long parsedInt;
Int64.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedInt);
return parsedInt;
}
double parsedDouble;
Double.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedDouble);
return parsedDouble;
}
void EatWhitespace ()
{
while (WHITE_SPACE.IndexOf(PeekChar) != -1) {
json.Read ();
if (json.Peek () == -1) {
break;
}
}
}
char PeekChar {
get {
return Convert.ToChar (json.Peek ());
}
}
char NextChar {
get {
return Convert.ToChar (json.Read ());
}
}
string NextWord {
get {
StringBuilder word = new StringBuilder ();
while (WORD_BREAK.IndexOf(PeekChar) == -1) {
word.Append (NextChar);
if (json.Peek () == -1) {
break;
}
}
return word.ToString ();
}
}
TOKEN NextToken {
get {
EatWhitespace ();
if (json.Peek () == -1) {
return TOKEN.NONE;
}
char c = PeekChar;
switch (c) {
case '{':
return TOKEN.CURLY_OPEN;
case '}':
json.Read ();
return TOKEN.CURLY_CLOSE;
case '[':
return TOKEN.SQUARED_OPEN;
case ']':
json.Read ();
return TOKEN.SQUARED_CLOSE;
case ',':
json.Read ();
return TOKEN.COMMA;
case '"':
return TOKEN.STRING;
case ':':
return TOKEN.COLON;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
return TOKEN.NUMBER;
}
string word = NextWord;
switch (word) {
case "false":
return TOKEN.FALSE;
case "true":
return TOKEN.TRUE;
case "null":
return TOKEN.NULL;
}
return TOKEN.NONE;
}
}
}
/// <summary>
/// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string
/// </summary>
/// <param name="json">A Dictionary&lt;string, object&gt; / List&lt;object&gt;</param>
/// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
public static string Serialize (object obj)
{
return Serializer.Serialize (obj);
}
sealed class Serializer
{
StringBuilder builder;
Serializer ()
{
builder = new StringBuilder ();
}
public static string Serialize (object obj)
{
var instance = new Serializer ();
instance.SerializeValue (obj);
return instance.builder.ToString ();
}
void SerializeValue (object value)
{
IList asList;
IDictionary asDict;
string asStr;
if (value == null) {
builder.Append ("null");
} else if ((asStr = value as string) != null) {
SerializeString (asStr);
} else if (value is bool) {
builder.Append (value.ToString ().ToLower ());
} else if ((asList = value as IList) != null) {
SerializeArray (asList);
} else if ((asDict = value as IDictionary) != null) {
SerializeObject (asDict);
} else if (value is char) {
SerializeString (value.ToString ());
} else {
SerializeOther (value);
}
}
void SerializeObject (IDictionary obj)
{
bool first = true;
builder.Append ('{');
foreach (object e in obj.Keys) {
if (!first) {
builder.Append (',');
}
SerializeString (e.ToString ());
builder.Append (':');
SerializeValue (obj [e]);
first = false;
}
builder.Append ('}');
}
void SerializeArray (IList anArray)
{
builder.Append ('[');
bool first = true;
foreach (object obj in anArray) {
if (!first) {
builder.Append (',');
}
SerializeValue (obj);
first = false;
}
builder.Append (']');
}
void SerializeString (string str)
{
builder.Append ('\"');
char[] charArray = str.ToCharArray ();
foreach (var c in charArray) {
switch (c) {
case '"':
builder.Append ("\\\"");
break;
case '\\':
builder.Append ("\\\\");
break;
case '\b':
builder.Append ("\\b");
break;
case '\f':
builder.Append ("\\f");
break;
case '\n':
builder.Append ("\\n");
break;
case '\r':
builder.Append ("\\r");
break;
case '\t':
builder.Append ("\\t");
break;
default:
int codepoint = Convert.ToInt32 (c);
if ((codepoint >= 32) && (codepoint <= 126)) {
builder.Append (c);
} else {
builder.Append ("\\u" + Convert.ToString (codepoint, 16).PadLeft (4, '0'));
}
break;
}
}
builder.Append ('\"');
}
void SerializeOther (object value)
{
if (value is float
|| value is int
|| value is uint
|| value is long
|| value is double
|| value is sbyte
|| value is byte
|| value is short
|| value is ushort
|| value is ulong
|| value is decimal) {
builder.Append (value.ToString ());
} else {
SerializeString (value.ToString ());
}
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: fa8c0cec5bff04aeca5dc28fe21ffc89
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace ATNet {
public static class ATNetInfo {
public static string platformName = "AnyThink";
public static string ATDownloadDir = "Assets/AnyThinkAds/Dependencies/";
public static string ATDependencyDir = "Assets/AnyThinkAds/Plugins/";
public static string sdk = "sdk";
public static string Android = "Android";
public static string iOS = "iOS";
public static string localConfig = "Assets/AnyThinkPlugin/Editor/localConfig.json";
public static string networkPath = "http://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/network_config.json";
public static string packagePath = "http://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/";
public static int isGlobal=1; //0:国外 //1:国内
public static string getNetworkJson(String ver){
return "http://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/"+ver+"/network.json";
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 5eb818e47fd664e968f08784520c3f36
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,173 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using ATNet;
using ATConf;
namespace ATProviderInfo {
public class ATInfo
{
public Status currentStatues;
public string providerName;
public string currentUnityVersion;
public string latestUnityVersion;
public string downloadURL;
public string displayProviderName;
public string currentDisplayVersion="-";
public string displayVersion;
public bool isNewProvider;
public string fileName;
public string packageName;
public Dictionary<string, string> sdkVersionDic;
public ATconfig localConfig;
public ATInfo()
{
isNewProvider = false;
fileName = string.Empty;
downloadURL = string.Empty;
currentUnityVersion = "none";
sdkVersionDic = new Dictionary<string, string>();
localConfig = ATconfig.getLocalConfig();
}
public enum Status
{
installed = 1,
none = 2,
updated = 3
}
public bool GetFromJson(string name, Dictionary<string, object> dic)
{
providerName = name;
object obj;
dic.TryGetValue("keyname", out obj);
if (obj != null)
{
this.displayProviderName = obj as string;
}
else this.displayProviderName = providerName;
dic.TryGetValue("version", out obj);
if (obj != null)
{
this.latestUnityVersion = obj as string;
}
dic.TryGetValue("displayVersion", out obj);
if (obj != null)
{
this.displayVersion = obj as string;
}
SDKInfo curInfo = null;
foreach (SDKInfo info in localConfig.sDKInfo){
if(info.network == this.displayProviderName)
{
curInfo = info;
currentUnityVersion = info.version;
currentDisplayVersion = info.displayVersion;
}
}
if(curInfo == null){ // no saved in local
currentUnityVersion = "-";
}
if (currentUnityVersion.Equals("-"))
{
currentStatues = Status.none;
}
else
{
if (isNewerVersion(currentUnityVersion, latestUnityVersion))
{
currentStatues = Status.installed;
}
else
{
currentStatues = Status.updated;
}
}
return true;
}
private static string GetVersionFromXML(string fileName)
{
XmlDocument xmlDoc = new XmlDocument();
string version = "none";
try
{
xmlDoc.LoadXml(File.ReadAllText(ATNetInfo.ATDownloadDir + fileName));
}
catch (Exception e)
{
Debug.Log("error--"+fileName+"--"+ e.Message);
return version;
}
var unityVersion = xmlDoc.SelectSingleNode("dependencies/unityversion");
if (unityVersion != null)
{
return (unityVersion.InnerText);
}
File.Delete(ATNetInfo.ATDownloadDir + fileName);
return version;
}
private static bool isNewerVersion(string current, string latest)
{
bool isNewer = false;
try
{
int[] currentVersion = Array.ConvertAll(current.Split('.'), int.Parse);
int[] remoteVersion = Array.ConvertAll(latest.Split('.'), int.Parse);
int remoteBuild = 0;
int curBuild = 0;
if (currentVersion.Length > 3)
{
curBuild = currentVersion[3];
}
if (remoteVersion.Length > 3)
{
remoteBuild = remoteVersion[3];
}
System.Version cur = new System.Version(currentVersion[0], currentVersion[1], currentVersion[2], curBuild);
System.Version remote = new System.Version(remoteVersion[0], remoteVersion[1], remoteVersion[2], remoteBuild);
isNewer = cur < remote;
}
catch (Exception)
{
}
return isNewer;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1123279c1b9244e11aaf04a78f2550b4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: