RuralPowerCompetition_yizhe.../RuralPowerCompetition_yizheng1/Assets/Zion/Scripts/DataHandler.cs

191 lines
6.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//using LitJson;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using System;
using System.Linq;
using System.Reflection;
using RuralPower;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class DataHandler : MonoBehaviour
{
private static DataHandler instance;
private string path;
public static DataHandler Instance => instance;
//private CenterManage[] CenterManages;
public List<DevicesBase> devicesBases = new List<DevicesBase>();
public Dictionary<string, string> Settings = new Dictionary<string, string>();
private void Awake()
{
instance = this;
}
void Start()
{
devicesBases = FindObjectsOfType<DevicesBase>().ToList();
if (ScenesRecorder.instance == null) Init();
else InitData(ScenesRecorder.AttributeDatas);
}
public void Init()
{
var ipSettingsPath = Path.Combine(Application.streamingAssetsPath, "Settings/IPSettings.txt");
using (StreamReader reader = new StreamReader(ipSettingsPath))
{
var _info = new List<string>();
while (!reader.EndOfStream)
{
_info.Add(reader.ReadLine());
}
_info.ForEach(x =>
{
var line = x.Split('=');
if (line.Length == 2 && !Settings.ContainsKey(line[0]))
{
Settings.Add(line[0].Trim(), line[1].Trim());
}
});
}
string _ip = Settings["IP"];
bool.TryParse(Settings["UseLocalData"], out bool _UseLocalData);
if (_UseLocalData)
{
Debug.Log("Load local data!");
var resData = Resources.Load<TextAsset>("Data/730Data");
InitData(resData.ToString());
}
else
{
Debug.Log("Load online data!");
RuralPowerAPI rpa = new RuralPowerAPI();
var result = rpa.GetExam(_ip,ScenesRecorder.user.user_id,MyManage.instance.startMode.teachplanId.ToString(),Application.streamingAssetsPath+ "/zy");
InitData(result);
}
}
public void InitData(string result)
{
JObject jo = JObject.Parse(result);
var data = JsonConvert.DeserializeObject<List<AttrData>>(jo["data"]["SceneData"].ToString());
for (int i = 0; i < data.Count; i++)
{
var _dev = devicesBases.Find(x => x.DeviceId.Equals(data[i].RootDeviceId));
if (_dev != null)
{
initCou++;
switch (data[i].Type)
{
case "<22><>·<EFBFBD><C2B7>":
var breakerDevice = devicesBases.Find(x => x.DeviceId.Equals(data[i].Screen.DeviceId));
if (breakerDevice != null)
InvokeMethod<DefectMethodAttribute>(breakerDevice, data[i].FaultDesc, data[i]);
break;
case "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
case "<22><><EFBFBD><EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
case "<22>ߵ<EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
default:
break;
}
}
}
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_" + data.Count);
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_" + initcount + "_" + initCou);
}
public void InitData(List<AttrData> data)
{
for (int i = 0; i < data.Count; i++)
{
var _dev = devicesBases.Find(x => x.DeviceId.Equals(data[i].RootDeviceId));
if (_dev != null)
{
initCou++;
switch (data[i].Type)
{
case "<22><>·<EFBFBD><C2B7>":
var breakerDevice = devicesBases.Find(x => x.DeviceId.Equals(data[i].Screen.DeviceId));
if (breakerDevice != null)
InvokeMethod<DefectMethodAttribute>(breakerDevice, data[i].FaultDesc, data[i]);
break;
case "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
case "<22><><EFBFBD><EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
case "<22>ߵ<EFBFBD>":
InvokeMethod<DefectMethodAttribute>(_dev, data[i].FaultDesc, data[i]);
break;
default:
break;
}
}
}
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_" + data.Count);
Debug.Log("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>_" + initcount + "_" + initCou);
}
/// <summary>
/// <20><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
/// </summary>
/// <typeparam name="T"> <20><>ǩ</typeparam>
/// <param name="obj"> <20><></param>
/// <param name="propertyname"> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="value"> <20><><EFBFBD><EFBFBD>ֵ</param>
public void UpdateProperty<T>(object obj, string propertyname, object value)
{
var t = obj.GetType();
var properties = t.GetProperties();
foreach (var property in properties)
{
if (!property.IsDefined(typeof(T), false)) continue;
if (property.Name.Equals(propertyname))
property.SetValue(obj, value);
}
}
public int initCou = 0;
public int initcount = 0;
/// <summary>
/// ִ<>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <typeparam name="T"> <20><>ǩ</typeparam>
/// <param name="obj"> <20><></param>
/// <param name="_defect"> ȱ<><C8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="parameters"> <20><><EFBFBD><EFBFBD></param>
public void InvokeMethod<T>(object obj, string _defect, params object[] parameters)
{
var t = obj.GetType();
var methods = t.GetMethods();
foreach (var method in methods)
{
if (!method.IsDefined(typeof(T), false)) continue;
var _defectattr = method.GetCustomAttribute(typeof(T));
if (_defectattr == null) { return; }
var defectName = _defectattr.GetType().GetProperty("DefectName").GetValue(_defectattr) as string;
if (_defect.Equals(defectName))
{
method.Invoke(obj, parameters);
initcount++;
}
}
}
}