Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 void EDDNComm_DataTransmittedEvent(object sender, EDDN.EDDNCommunicator.DataTransmittedEventArgs e)
 {
     try
     {
         ShowStatus();
     }
     catch (Exception ex)
     {
         throw new Exception("Error while processing the EDDNComm_DataTransmittedEvent", ex);
     }
 }
Esempio n. 4
0
        /// <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);
            }
        }