Lora-Map/mqtt-map/Model/Botclient.cs

87 lines
3.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using BlubbFish.Utils;
using LitJson;
namespace Fraunhofer.Fit.IoT.LoraMap.Model {
class Botclient {
public Botclient(JsonData json) {
if (json.ContainsKey("Rssi") && json["Rssi"].IsDouble) {
this.Rssi = (Double)json["Rssi"];
}
if(json.ContainsKey("Snr") && json["Snr"].IsDouble) {
this.Snr = (Double)json["Snr"];
}
if (json.ContainsKey("Receivedtime") && json["Receivedtime"].IsString) {
if (DateTime.TryParse((String)json["Receivedtime"], DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AssumeLocal, out DateTime updatetime)) {
this.Upatedtime = updatetime;
}
}
if(json.ContainsKey("BatteryLevel") && json["BatteryLevel"].IsDouble) {
this.Battery = Math.Round((Double)json["BatteryLevel"],2);
}
if(json.ContainsKey("Gps") && json["Gps"].IsObject) {
if(json["Gps"].ContainsKey("Latitude") && json["Gps"]["Latitude"].IsDouble) {
this.Latitude = (Double)json["Gps"]["Latitude"];
}
if(json["Gps"].ContainsKey("Longitude") && json["Gps"]["Longitude"].IsDouble) {
this.Longitude = (Double)json["Gps"]["Longitude"];
}
if(json["Gps"].ContainsKey("Fix") && json["Gps"]["Fix"].IsBoolean) {
this.Fix = (Boolean)json["Gps"]["Fix"];
}
if(json["Gps"].ContainsKey("LastLatitude") && json["Gps"]["LastLatitude"].IsDouble && !this.Fix) {
this.Latitude = (Double)json["Gps"]["LastLatitude"];
}
if(json["Gps"].ContainsKey("LastLongitude") && json["Gps"]["LastLongitude"].IsDouble && !this.Fix) {
this.Longitude = (Double)json["Gps"]["LastLongitude"];
}
if(json["Gps"].ContainsKey("Hdop") && json["Gps"]["Hdop"].IsDouble) {
this.Hdop = (Double)json["Gps"]["Hdop"];
}
if(json["Gps"].ContainsKey("Height") && json["Gps"]["Height"].IsDouble) {
this.Height = (Double)json["Gps"]["Height"];
}
}
}
public Double Rssi { get; private set; }
public Double Snr { get; private set; }
public DateTime Upatedtime { get; private set; }
public Double Latitude { get; private set; }
public Double Longitude { get; private set; }
public Double Hdop { get; private set; }
public Double Battery { get; private set; }
public Boolean Fix { get; private set; }
public Double Height { get; private set; }
public virtual Dictionary<String, Object> ToDictionary() {
Dictionary<String, Object> dictionary = new Dictionary<String, Object>();
foreach (PropertyInfo item in this.GetType().GetProperties()) {
if (item.CanRead && item.GetValue(this) != null) {
if (item.GetValue(this).GetType().GetMethod("ToDictionary") != null) {
dictionary.Add(item.Name, item.GetValue(this).GetType().GetMethod("ToDictionary").Invoke(item.GetValue(this), null));
} else if (item.GetValue(this).GetType().HasInterface(typeof(IDictionary))) {
Dictionary<String, Object> subdict = new Dictionary<String, Object>();
foreach (DictionaryEntry subitem in (IDictionary)item.GetValue(this)) {
if (subitem.Value.GetType().GetMethod("ToDictionary") != null) {
subdict.Add(subitem.Key.ToString(), subitem.Value.GetType().GetMethod("ToDictionary").Invoke(subitem.Value, null));
}
}
dictionary.Add(item.Name, subdict);
} else if (item.GetValue(this).GetType().BaseType == typeof(Enum)) {
dictionary.Add(item.Name, Helper.GetEnumDescription((Enum)item.GetValue(this)));
} else {
dictionary.Add(item.Name, item.GetValue(this));
}
}
}
return dictionary;
}
}
}