private void RecievedEDDNData(object sender, EDDN.RecievedEDDNArgs e) { String[] DataRows = new String[0]; String nameAndVersion = String.Empty; String name = String.Empty; String uploaderID = String.Empty; Boolean SimpleEDDNCheck = false; try{ setText(tbEDDNOutput, String.Format("{0}\n{1}", e.Message, e.RawData)); if (cbSpoolEddnToFile.Checked){ if (_eddnSpooler == null){ if (!File.Exists(Program.GetDataPath("EddnOutput.txt"))) _eddnSpooler = File.CreateText(Program.GetDataPath("EddnOutput.txt")); else _eddnSpooler = File.AppendText(Program.GetDataPath("EddnOutput.txt")); } _eddnSpooler.WriteLine(e.RawData); } switch (e.InfoType){ case EDDN.RecievedEDDNArgs.enMessageInfo.Commodity_v1_Recieved: // process only if it's the correct schema if(!(Program.DBCon.getIniValue<Boolean>(IBE.MTSettings.tabSettings.DB_GROUPNAME, "UseEddnTestSchema", false.ToString(), false, true) ^ ((EDDN.Schema_v1)e.Data).isTest())) { Debug.Print("handle v1 message"); EDDN.Schema_v1 DataObject = (EDDN.Schema_v1)e.Data; // Don't import our own uploads... if(DataObject.Header.UploaderID != Program.DBCon.getIniValue<String>(IBE.MTSettings.tabSettings.DB_GROUPNAME, "UserID")) { DataRows = new String[1] {DataObject.getEDDNCSVImportString()}; nameAndVersion = String.Format("{0} / {1}", DataObject.Header.SoftwareName, DataObject.Header.SoftwareVersion); name = String.Format("{0}", DataObject.Header.SoftwareName); uploaderID = DataObject.Header.UploaderID; SimpleEDDNCheck = true; } else Debug.Print("handle v1 rejected (it's our own message)"); }else Debug.Print("handle v1 rejected (wrong schema)"); break; case EDDN.RecievedEDDNArgs.enMessageInfo.Commodity_v2_Recieved: // process only if it's the correct schema if(!(Program.DBCon.getIniValue<Boolean>(IBE.MTSettings.tabSettings.DB_GROUPNAME, "UseEddnTestSchema", false.ToString(), false, true) ^ ((EDDN.Schema_v2)e.Data).isTest())) { Debug.Print("handle v2 message"); EDDN.Schema_v2 DataObject = (EDDN.Schema_v2)e.Data; // Don't import our own uploads... if(DataObject.Header.UploaderID != Program.DBCon.getIniValue<String>(IBE.MTSettings.tabSettings.DB_GROUPNAME, "UserID")) { DataRows = DataObject.getEDDNCSVImportStrings(); nameAndVersion = String.Format("{0} / {1}", DataObject.Header.SoftwareName, DataObject.Header.SoftwareVersion); name = String.Format("{0}", DataObject.Header.SoftwareName); uploaderID = DataObject.Header.UploaderID; } else Debug.Print("handle v2 rejected (it's our own message)"); }else Debug.Print("handle v2 rejected (wrong schema)"); break; case EDDN.RecievedEDDNArgs.enMessageInfo.UnknownData: setText(tbEDDNOutput, "Recieved a unknown EDDN message:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData); Debug.Print("handle unkown message"); break; case EDDN.RecievedEDDNArgs.enMessageInfo.ParseError: Debug.Print("handle error message"); setText(tbEDDNOutput, "Error while processing recieved EDDN data:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData); break; } if(DataRows != null && DataRows.GetUpperBound(0) >= 0) { updatePublisherStats(nameAndVersion, DataRows.GetUpperBound(0)+1); List<String> trustedSenders = Program.DBCon.getIniValue<String>(IBE.MTSettings.tabSettings.DB_GROUPNAME, "trustedSenders", "").Split(new char[] {'|'}).ToList(); bool isTrusty = trustedSenders.Exists(x => x.Equals(name, StringComparison.InvariantCultureIgnoreCase)); foreach (String DataRow in DataRows){ // data is plausible ? if(isTrusty || (!checkPricePlausibility(new string[] {DataRow}, SimpleEDDNCheck))){ // import is wanted ? if(checkboxImportEDDN.Checked) { Debug.Print("import :" + DataRow); throw new NotImplementedException(); //ImportCsvString(DataRow); } }else{ Debug.Print("implausible :" + DataRow); // data is implausible string InfoString = string.Format("IMPLAUSIBLE DATA : \"{2}\" from {0}/ID=[{1}]", nameAndVersion, uploaderID, DataRow); addTextLine(lbEddnImplausible, InfoString); if(cbSpoolImplausibleToFile.Checked){ FileStream LogFileStream = null; string FileName = Program.GetDataPath("EddnImplausibleOutput.txt"); if(File.Exists(FileName)) LogFileStream = File.Open(FileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); else LogFileStream = File.Create(FileName); LogFileStream.Write(System.Text.Encoding.Default.GetBytes(InfoString + "\n"), 0, System.Text.Encoding.Default.GetByteCount(InfoString + "\n")); LogFileStream.Close(); } } } if(!_AutoImportDelayTimer.Enabled) _AutoImportDelayTimer.Start(); } }catch (Exception ex){ setText(tbEDDNOutput, "Error while processing recieved EDDN data:" + Environment.NewLine + ex.GetBaseException().Message + Environment.NewLine + ex.StackTrace); } }
void EDDNComm_DataChangedEvent(object sender, EDDN.EDDNCommunicator.DataChangedEventArgs e) { try { if(e.DataType == EDDN.EDDNCommunicator.enDataTypes.DataImported) { Program.PriceAnalysis.GUI.setFilterHasChanged(true); } } catch (Exception ex) { throw new Exception("Error while processing the LocationChanged-event", ex); } }
void EDDNComm_DataTransmittedEvent(object sender, EDDN.EDDNCommunicator.DataTransmittedEventArgs e) { try { ShowStatus(); } catch (Exception ex) { throw new Exception("Error while processing the EDDNComm_DataTransmittedEvent", ex); } }
/// <summary> /// processing of the recieved data /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void RecievedEDDNData(object sender, EDDN.EDDNRecievedArgs e) { String[] DataRows = new String[0]; String nameAndVersion = String.Empty; String name = String.Empty; String uploaderID = String.Empty; Boolean SimpleEDDNCheck = false; List<String> importData = new List<String>(); enSchema ownSchema; enSchema dataSchema; bool isTrusty = false; try { if (m_lDBCon.getIniValue<Boolean>("EDDN", "SpoolEDDNToFile", false.ToString(), false)) { if (m_EDDNSpooler == null) { if (!File.Exists(Program.GetDataPath(@"Logs\EddnOutput.txt"))) m_EDDNSpooler = File.CreateText(Program.GetDataPath(@"Logs\EddnOutput.txt")); else m_EDDNSpooler = File.AppendText(Program.GetDataPath(@"Logs\EddnOutput.txt")); } m_EDDNSpooler.WriteLine(e.RawData); } ownSchema = m_lDBCon.getIniValue<enSchema>(IBE.EDDN.EDDNView.DB_GROUPNAME, "Schema", "Real", false); switch (e.InfoType) { case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v1_Recieved: UpdateStatisticDataMsg(enMessageTypes.Commodity_V1); //Debug.Print("recieved commodity message ignored"); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v2_Recieved: UpdateStatisticDataMsg(enMessageTypes.Commodity_V2); //Debug.Print("recieved commodity message ignored"); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Commodity_v3_Recieved: JObject dataJObject = (JObject)e.Data; if(m_DuplicateRelayFilter.DataAccepted(dataJObject.SelectToken("header.uploaderID").ToString(), dataJObject.SelectToken("message.systemName") + "|" + dataJObject.SelectToken("message.stationName"), dataJObject.SelectToken("message.commodities").Count().ToString(), (DateTime)dataJObject.SelectToken("message.timestamp"))) { UpdateStatisticDataMsg(enMessageTypes.Commodity_V3); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); // process only if it's the correct schema dataSchema = dataJObject.SelectToken("$schemaRef").Contains("/test") ? enSchema.Test : enSchema.Real; if (ownSchema == dataSchema) { //Debug.Print("handle v3 message"); // Don't import our own uploads... if (dataJObject.SelectToken("header.uploaderID").ToString() != UserIdentification()) { DataRows = ConvertCommodityV3_To_CSVRows(dataJObject); nameAndVersion = String.Format("{0} / {1}", dataJObject.SelectToken("header.softwareName"), dataJObject.SelectToken("header.softwareVersion")); name = String.Format("{0}", dataJObject.SelectToken("header.softwareName")); uploaderID = dataJObject.SelectToken("header.uploaderID").ToString(); if(name == "ED-IBE (API)") Debug.Print("handle v3 ^recieved : " + name); } //else //Debug.Print("handle v3 rejected (it's our own message)"); } //else //Debug.Print("handle v3 rejected (wrong schema)"); } //else //Debug.Print("handle v3 rejected (double recieved)"); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Outfitting_v1_Recieved: UpdateStatisticDataMsg(enMessageTypes.Outfitting_V1); //UpdateRawData("recieved outfitting message ignored (coming feature)"); //Debug.Print("recieved outfitting message ignored"); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Outfitting_v2_Recieved: UpdateStatisticDataMsg(enMessageTypes.Outfitting_V2); //UpdateRawData("recieved outfitting message ignored (coming feature)"); //Debug.Print("recieved outfitting message ignored"); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Shipyard_v1_Recieved: UpdateStatisticDataMsg(enMessageTypes.Shipyard_V1); //UpdateRawData("recieved shipyard message ignored (coming feature)"); //Debug.Print("recieved shipyard message ignored"); break; case EDDN.EDDNRecievedArgs.enMessageInfo.Shipyard_v2_Recieved: UpdateStatisticDataMsg(enMessageTypes.Shipyard_V2); //UpdateRawData("recieved shipyard message ignored (coming feature)"); //Debug.Print("recieved shipyard message ignored"); break; case EDDN.EDDNRecievedArgs.enMessageInfo.UnknownData: UpdateStatisticDataMsg(enMessageTypes.unknown); UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); UpdateRawData("Recieved a unknown EDDN message:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData); //Debug.Print("handle unkown message"); break; case EDDN.EDDNRecievedArgs.enMessageInfo.ParseError: UpdateRawData(String.Format("{0}\r\n(from {2})\r\n{1}", e.Message, e.RawData, e.Adress)); Debug.Print("handle error message"); UpdateRawData("Error while processing recieved EDDN data:" + Environment.NewLine + e.Message + Environment.NewLine + e.RawData); break; } if (DataRows != null && DataRows.GetUpperBound(0) >= 0) { isTrusty = (Program.Data.BaseData.tbtrustedsenders.Rows.Find(name) != null); UpdateStatisticData(DataRows.GetUpperBound(0) + 1, nameAndVersion, e.Adress, uploaderID); foreach (String DataRow in DataRows) { if(m_DuplicateFilter.DataAccepted(DataRow)) { // data is plausible ? if (isTrusty || (!Program.PlausibiltyCheck.CheckPricePlausibility(new string[] { DataRow }, SimpleEDDNCheck))) { // import is wanted ? if (m_lDBCon.getIniValue<Boolean>("EDDN", "ImportEDDN", false.ToString(), false)) { // collect importable data Debug.Print("import :" + DataRow); importData.Add(DataRow); } } else { Debug.Print("implausible :" + DataRow); // data is implausible string InfoString = string.Format("IMPLAUSIBLE DATA : \"{2}\" from {0}/ID=[{1}]", nameAndVersion, uploaderID, DataRow); UpdateRejectedData(InfoString); if (m_lDBCon.getIniValue<Boolean>("EDDN", "SpoolImplausibleToFile", false.ToString(), false)) { FileStream LogFileStream = null; string FileName = Program.GetDataPath(@"Logs\EddnImplausibleOutput.txt"); if (File.Exists(FileName)) LogFileStream = File.Open(FileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite); else LogFileStream = File.Create(FileName); LogFileStream.Write(System.Text.Encoding.Default.GetBytes(InfoString + "\n"), 0, System.Text.Encoding.Default.GetByteCount(InfoString + "\n")); LogFileStream.Close(); } } } } // have we collected importable data -> then import now if (importData.Count() > 0) { Program.Data.ImportPricesFromCSVStrings(importData.ToArray(), SQL.EliteDBIO.enImportBehaviour.OnlyNewer, (isTrusty ? SQL.EliteDBIO.enDataSource.fromEDDN_T : SQL.EliteDBIO.enDataSource.fromEDDN)); DataChangedEvent.Raise(this, new DataChangedEventArgs(enDataTypes.DataImported)); } } } catch (Exception ex) { UpdateRawData("Error while processing recieved EDDN data:" + Environment.NewLine + ex.GetBaseException().Message + Environment.NewLine + ex.StackTrace); } }