public void SendJournalData(JObject dataObject)
{
try
{
if(m_SenderIsActivated && m_lDBCon.getIniValue<Boolean>(IBE.EDDN.EDDNView.DB_GROUPNAME, "EDDNPostJournalData", true.ToString(), false))
{
StringBuilder journalStringEDDN = new StringBuilder();
journalStringEDDN.Append(String.Format("\"message\": {{"));
journalStringEDDN.Append(String.Format("\"timestamp\":\"{0}Z\", ", DateTime.Now.ToString("s", CultureInfo.InvariantCulture) + DateTime.Now.ToString("zzz", CultureInfo.InvariantCulture)));
journalStringEDDN.Append(String.Format("\"event\":\"{0}\", ", dataObject.SelectToken("event").ToString()));
if(dataObject.SelectToken("StarSystem") == null)
journalStringEDDN.Append(String.Format("\"StarSystem\":\"{0}\", ", Program.actualCondition.System));
else
journalStringEDDN.Append(String.Format("\"StarSystem\":\"{0}\", ", dataObject.SelectToken("StarSystem").ToString()));
if(dataObject.SelectToken("StarPos") == null)
journalStringEDDN.Append(String.Format("\"StarPos\":[{0},{1},{2}], ", SQL.DBConnector.SQLDecimal(Program.actualCondition.Coordinates.X.Value), SQL.DBConnector.SQLDecimal(Program.actualCondition.Coordinates.Y.Value), SQL.DBConnector.SQLDecimal(Program.actualCondition.Coordinates.Z.Value)));
else
journalStringEDDN.Append(String.Format("\"StarPos\":{0}, ", dataObject.SelectToken("StarPos")));
System.Text.RegularExpressions.Regex forbiddenPattern = new System.Text.RegularExpressions.Regex("(CockpitBreach|BoostUsed|FuelLevel|FuelUsed|JumpDist|_Localised$|timestamp|event|StarSystem|StarPos)");
List<String> typeList = new List<String>() { "array", "boolean", "integer", "float", "double", "object", "string" };
foreach (JToken dataItem in dataObject.SelectTokens("*"))
{
if(!forbiddenPattern.IsMatch(dataItem.Path))
{
if(typeList.Contains(dataItem.Type.ToString().ToLower()))
{
Debug.Print("allowed : " + dataItem.Path + "(" + dataItem.Type.ToString() + ")");
switch (dataItem.Type.ToString().ToLower())
{
case "string":
journalStringEDDN.Append(String.Format("\"{0}\":\"{1}\", ", dataItem.Path, dataItem));
break;
case "float":
case "double":
journalStringEDDN.Append(String.Format("\"{0}\":{1}, ", dataItem.Path, SQL.DBConnector.SQLDecimal((double)dataItem)));
break;
case "boolean":
journalStringEDDN.Append(String.Format("\"{0}\":{1}, ", dataItem.Path, dataItem.ToString().ToLower()));
break;
default:
journalStringEDDN.Append(String.Format("\"{0}\":{1}, ", dataItem.Path, dataItem));
break;
}
}
else
Debug.Print("disallowed : " + dataItem.Path + "(" + dataItem.Type.ToString() + ")");
}
else
Debug.Print("disallowed : " + dataItem.Path);
}
journalStringEDDN.Remove(journalStringEDDN.Length-2, 2);
journalStringEDDN.Append("}");
_Send_Journal.Enqueue(journalStringEDDN);
_SendDelayTimer_Journal.Start();
}
}
catch (Exception ex)
{
throw new Exception("Error while extracting journal data for eddn", ex);
}
}