public DATEXIIProcessService getDATEXIIProcessService(DATA_SERVICE_TYPE feedType)
        {
            DATEXIIProcessService datexiiProcessService = null;

            switch (feedType)
            {
            case DATA_SERVICE_TYPE.VMS:
                datexiiProcessService = datexIIVMSProcessService;
                break;

            case DATA_SERVICE_TYPE.ANPR:
                datexiiProcessService = datexIIANPRProcessService;
                break;

            case DATA_SERVICE_TYPE.MIDAS:
                datexiiProcessService = datexIIMIDASProcessService;
                break;

            case DATA_SERVICE_TYPE.TMU:
                datexiiProcessService = datexIITMUProcessService;
                break;

            case DATA_SERVICE_TYPE.FUSED_SENSOR_ONLY:
                datexiiProcessService = datexIIFusedSensorOnlyProcessService;
                break;

            case DATA_SERVICE_TYPE.FUSED_FVD_AND_SENSOR_PTD:
                datexiiProcessService = datexIIFusedFVDAndSensorProcessService;
                break;

            case DATA_SERVICE_TYPE.NTIS_MODEL_UPDATE_NOTIFICATION:
                datexiiProcessService = datexIIModelUpdateNotificationProcessService;
                break;

            case DATA_SERVICE_TYPE.NWK_MODEL_UPDATE:
                datexiiProcessService = datexIINetworkModelUpdateService;
                break;

            case DATA_SERVICE_TYPE.EVENT:
                datexiiProcessService = datexIIEventProcessService;
                break;

            case DATA_SERVICE_TYPE.NTIS_MODEL_VMS_TABLES:
                datexiiProcessService = datexIINTISModelVMSProcessService;
                break;

            case DATA_SERVICE_TYPE.NTIS_MODEL_MEASUREMENT_SITES:
                datexiiProcessService = datexIINTISModelMeasurementSitesProcessService;
                break;

            case DATA_SERVICE_TYPE.NTIS_MODEL_PREDEFINED_LOCATIONS:
                datexiiProcessService = datexIINTISModelPredefinedLocationProcessService;
                break;

            default:
                logWrapper.Error("Unknown Feed Type Received");
                break;
            }
            return(datexiiProcessService);
        }
        public static void processDATEXIIUpdateXML(object source, ElapsedEventArgs e)
        {
            working++;
            if (logWrapper.isDebug() == true)
            {
                logWrapper.Debug("Polling for messages");
            }

            UpdateMessage xml = null;

            lock (messageQueue){
                if (messageQueue.Count() > QUEUE_EMPTY)
                {
                    xml = messageQueue.Dequeue();
                }
            }
            while (xml != null)
            {
                try {
                    XmlSerializer myDIISerializer = new XmlSerializer(typeof(D2LogicalModel));
                    XmlReader     xmlReader       = XmlReader.Create(new StringReader(Encoding.ASCII.GetString(xml.Buffer)));
                    Boolean       soap            = true;
                    try {
                        xmlReader.ReadStartElement("Envelope", "http://schemas.xmlsoap.org/soap/envelope/");
                        xmlReader.ReadStartElement("Body", "http://schemas.xmlsoap.org/soap/envelope/");
                    } catch (XmlException ex)
                    {
                        soap = false;
                    }
                    D2LogicalModel d2lm = (D2LogicalModel)myDIISerializer.Deserialize(xmlReader);
                    if (soap)
                    {
                        xmlReader.ReadEndElement();
                        xmlReader.ReadEndElement();
                    }
                    string feedType = FeedType.getFeedType(d2lm.payloadPublication.feedType);
                    DATEXIIProcessService datexiiProcessService = datexiiProcessServiceFactory.getServiceType(feedType);
                    if (datexiiProcessService != null)
                    {
                        datexiiProcessService.processMessage(d2lm);
                    }
                } catch (Exception ex)
                {
                    logWrapper.Error(ex.ToString());
                }
                lock (messageQueue){
                    if (messageQueue.Count() > QUEUE_EMPTY)
                    {
                        xml = messageQueue.Dequeue();
                    }
                    else
                    {
                        xml = null;
                    }
                }
            }
            working--;
        }