/// <summary> /// send the commodity data of this station /// </summary> /// <param name="stationData">json object with companion data</param> public void SendCommodityData(JObject dataObject) { Int32 objectCount = 0; Boolean writeToFile = false; StreamWriter writer = null; String debugFile = @"C:\temp\commodity_ibe.csv"; SQL.Datasets.dsEliteDB.tbcommoditybaseDataTable baseData; try { if(m_SenderIsActivated && m_lDBCon.getIniValue<Boolean>(IBE.EDDN.EDDNView.DB_GROUPNAME, "EDDNPostCompanionData", true.ToString(), false)) { IBECompanion.CompanionConverter cmpConverter = new IBECompanion.CompanionConverter(); String systemName = dataObject.SelectToken("lastSystem.name").ToString(); String stationName = dataObject.SelectToken("lastStarport.name").ToString(); if((m_ID_of_Commodity_Station.Item1 != systemName + "|" + stationName) || ((DateTime.Now - m_ID_of_Commodity_Station.Item2).TotalMinutes >= 60)) { m_ID_of_Commodity_Station = new Tuple<String, DateTime>(systemName +"|" + stationName, DateTime.Now); StringBuilder commodityStringEDDN = new StringBuilder(); commodityStringEDDN.Append(String.Format("\"message\": {{")); commodityStringEDDN.Append(String.Format("\"systemName\":\"{0}\", " , dataObject.SelectToken("lastSystem.name").ToString())); //commodityStringEDDN.Append(String.Format("\"systemId\":\"{0}\", " , dataObject.SelectToken("lastSystem.id").ToString())); //commodityStringEDDN.Append(String.Format("\"systemAddress\":\"{0}\", " , dataObject.SelectToken("lastSystem.address").ToString())); commodityStringEDDN.Append(String.Format("\"stationName\":\"{0}\", " , dataObject.SelectToken("lastStarport.name").ToString())); //commodityStringEDDN.Append(String.Format("\"stationId\":\"{0}\", " , dataObject.SelectToken("lastStarport.id").ToString())); commodityStringEDDN.Append(String.Format("\"timestamp\":\"{0}\", ", DateTime.Now.ToString("s", CultureInfo.InvariantCulture) + DateTime.Now.ToString("zzz", CultureInfo.InvariantCulture))); commodityStringEDDN.Append(String.Format("\"commodities\": [")); if(writeToFile) { if(File.Exists(debugFile)) File.Delete(debugFile); writer = new StreamWriter(File.OpenWrite(debugFile)); } baseData = new SQL.Datasets.dsEliteDB.tbcommoditybaseDataTable(); m_lDBCon.Execute("select * from tbcommodityBase;", (System.Data.DataTable)baseData); foreach (JToken commodityItem in dataObject.SelectTokens("lastStarport.commodities[*]")) { if(!commodityItem.Value<String>("categoryname").Equals("NonMarketable", StringComparison.InvariantCultureIgnoreCase)) { CommodityObject commodity = cmpConverter.GetCommodityFromFDevIDs(baseData, commodityItem, false); //commodityObject commodity = cmpConverter.GetcommodityFromCompanion(commodityItem, false); int? dbValue = String.IsNullOrWhiteSpace(commodityItem.Value<String>("demandBracket")) ? null : commodityItem.Value<int?>("demandBracket"); if((commodity != null) && (dbValue.HasValue)) { if (objectCount > 0) commodityStringEDDN.Append(", {"); else commodityStringEDDN.Append("{"); if(writeToFile) { writer.WriteLine(String.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9}", systemName, stationName, commodity.Id, commodity.Name, commodity.Category, commodity.Average, DateTime.Now.ToString("s", CultureInfo.InvariantCulture) + DateTime.Now.ToString("zzz", CultureInfo.InvariantCulture))); } commodityStringEDDN.Append(String.Format("\"name\":\"{0}\", ", commodityItem.Value<String>("name"))); //commodityStringEDDN.Append(String.Format("\"id\":\"{0}\", ", commodity.Id)); commodityStringEDDN.Append(String.Format("\"meanPrice\":{0}, ", commodityItem.Value<Int32>("meanPrice"))); commodityStringEDDN.Append(String.Format("\"buyPrice\":{0}, ", commodityItem.Value<Int32>("buyPrice"))); commodityStringEDDN.Append(String.Format("\"sellPrice\":{0}, ", commodityItem.Value<Int32>("sellPrice"))); commodityStringEDDN.Append(String.Format("\"demandBracket\":{0}, ", commodityItem.Value<int?>("demandBracket"))); if (commodityItem.Value<int?>("demandBracket") == 0) commodityStringEDDN.Append(String.Format("\"demand\":{0}, ", 0)); else commodityStringEDDN.Append(String.Format("\"demand\":{0}, ", commodityItem.Value<Int32>("demand"))); commodityStringEDDN.Append(String.Format("\"stockBracket\":{0}, ", commodityItem.Value<int?>("stockBracket"))); if (commodityItem.Value<int?>("stockBracket") == 0) commodityStringEDDN.Append(String.Format("\"stock\":{0}, ", 0)); else commodityStringEDDN.Append(String.Format("\"stock\":{0}, ", commodityItem.Value<Int32>("demand"))); if(commodityItem.SelectTokens("statusFlags.[*]").Count() > 0 ) { commodityStringEDDN.Append(String.Format("\"statusFlags\": [")); foreach (JToken statusItem in commodityItem.SelectTokens("statusFlags.[*]")) { commodityStringEDDN.Append(String.Format("\"{0}\", ", statusItem.Value<String>())); } commodityStringEDDN.Remove(commodityStringEDDN.Length-1, 1); commodityStringEDDN.Replace(",", "], ", commodityStringEDDN.Length-1, 1); } commodityStringEDDN.Remove(commodityStringEDDN.Length-1, 1); commodityStringEDDN.Replace(",", "}", commodityStringEDDN.Length-1, 1); objectCount++; } } } commodityStringEDDN.Append("]}"); if(objectCount > 0) { _Send_Commodity.Enqueue(commodityStringEDDN); _SendDelayTimer_Commodity.Start(); m_ID_of_Commodity_Station = new Tuple<String, DateTime>(systemName +"|" + stationName, DateTime.Now); } if(writeToFile) { writer.Close(); writer.Dispose(); } } } } catch (Exception ex) { throw new Exception("Error while extracting commodity data for eddn", ex); } }