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);
}
}