191 lines
6.5 KiB
C#
191 lines
6.5 KiB
C#
//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++;
|
||
}
|
||
}
|
||
}
|
||
}
|