/// <summary>
        /// Transmit Messages from queue to Server
        /// </summary>
        void Transmit()
        {
            try
            {
                UInt32 iSequenceNo = 0;
                Byte bSequenceNo;
                Logger.Info("EventTransmitter: STARTING");
                _Message = new QueueManager(Settings.EventTransmitterSourceQ);
    
                //Getting mode of transfer
               _Sender = SenderFactory.GetSender();

                if (this.InitializeWithRetry())
                {
                    _Message.OpenQueue();

                    while (!_evtTransmitShutDown.WaitOne(10))
                    {

                        Int32 iResponse;
                            try
                            {
                                _IsTransmitting = true;

                                if (iSequenceNo >= 255)
                                {
                                    iSequenceNo = 1;
                                }
                                else
                                {
                                    iSequenceNo++;
                                }
                                bSequenceNo = Convert.ToByte(iSequenceNo);
                                Logger.Info("Reading queue");
                                
                                if (!_Message.IsQueueOpen)
                                {
                                    _Message.OpenQueue();
                                }

                                strXML = _Message.ReadMessage();
                                Logger.Info("Read Complete");
                                SendToExternalLog("SENDING: " + strXML);
                                // parse return message 
                                //Construct STM format message 

                                // Refresh or empty message
                                if (string.IsNullOrEmpty(strXML))
                                {
                                    Logger.Debug("Either Queue refresh or no message received.");
                                    continue;
                                }

                                _MessageFormatter = FormatFactory.GetFormatter(strXML, true);

                                Logger.Debug("Event Request SeqNo[" + iSequenceNo.ToString() + "]" + _MessageFormatter.MessageStream);
                            }
                            catch (MessageFilteredException MesEx)
                            {
                                Logger.Error("EventTransmitter", "Transmit", MesEx.Message);
                                Logger.Info("EventTransmitter", "Transmit", "Committing Queue[Filtered Message]");
                                _Message.Commit();
                                continue;
                            }
                            catch (Exception Ex)
                            {
                                Logger.Error("EventTransmitter", "Transmit", Ex);
                                Logger.Info("EventTransmitter", "Transmit", "Error in message:" + strXML);

                                if (Settings.DeleteMessageOnParseErr == 1)
                                {
                                    Logger.Error("EventTransmitter", "Transmit", "Committing Queue[DeleteMessageOnParseErr]");
                                    _Message.Commit();
                                    continue;
                                }
                                _evtTransmitShutDown.WaitOne(5000);
                            }
                            int iRetryOnNWErr = 0;
                            do
                            {
                                if (_evtTransmitShutDown.WaitOne(50))
                                {
                                    break;
                                }

                                try
                                {
                                    if (iRetryOnNWErr >= Settings.iMaxTransmissionRetry)
                                    {
                                        //Close transmission when maximum retry reached 
                                        throw new Exception(String.Format("Stopping Transmision after Retrying [{0}] times. ", iRetryOnNWErr.ToString()));
                                    }
                                    else
                                    {

                                        //transmit message to server 
                                        iResponse = _Sender.Send(_MessageFormatter);
                                         Logger.Debug("Response from Server: " +  iResponse.ToString());
                                        if (iResponse > 0)// to be checked && msg.SequenceNo == bSequenceNo)// ACK
                                        {
                                             
                                            //Set retry value to MAX+1 to quit loop 
                                            iRetryOnNWErr = Settings.iMaxTransmissionRetry + 1;
                                            //Commiting Queue read After succesfull Transaction 
                                            Logger.Info("Committing Queue");
                                            _Message.Commit();
                                        }
                                            
                                        else if (iResponse==0)
                                        {
                                            Logger.Info("Response from Server [0] Message not processed at server");
                                            //Set retry value to MAX+1 to quit loop 
                                            iRetryOnNWErr = Settings.iMaxTransmissionRetry + 1;
                                            //Commiting Queue read After succesfull Transaction 
                                            Logger.Info("Committing Queue");
                                            _Message.Commit();
                                        }
                                        else
                                        {
                                           
                                            if (Settings.EventTransmit_RetryRepeat == 0)
                                            {
                                                iRetryOnNWErr++;
                                                Logger.Info(string.Format("Retrying to send message (Attempt[{0}]) ", iRetryOnNWErr.ToString()));
                                            }
                                            else
                                            {
                                                Logger.Info("Retrying to send message");
                                                iRetryOnNWErr = 0;
                                            }
                                        }
                                    }
                                }
                                catch (Exception Ex1)
                                {
                                    _evtTransmitShutDown.WaitOne(5000);
                                    Logger.Error("EventTransmitter", "Transmit", Ex1);
                                    //refresh connection and retry till configured number of times 
                                    iRetryOnNWErr++;
                                    _Sender.CloseSender();
                                    _IsTransmitting = false;
                                    _Sender.Initialize(Settings.STMServerIP, Settings.STMServerPort);
                                }
                            } while (iRetryOnNWErr <= Settings.iMaxTransmissionRetry);
                        

                    }
                }
            }
            catch (Exception Ex)
            {
                Logger.Error("EventTransmitter", "Transmit", Ex.Message);
                if (Settings.EventTransmit_RecoverOnError != 0)
                {
                    _evtTransmitShutDown.WaitOne(2000);
                    this.Transmit();
                }
            }
            finally
            {
                this.CloseTransmission(); 
            }
           
        }
        /// <summary>
        /// Transmit Messages from queue to Server
        /// </summary>
        void Transmit()
        {
            try
            {
                UInt32 iSequenceNo = 0;
                Byte   bSequenceNo;
                Logger.Info("EventTransmitter: STARTING");
                _Message = new QueueManager(Settings.EventTransmitterSourceQ);

                //Getting mode of transfer
                _Sender = SenderFactory.GetSender();

                if (this.InitializeWithRetry())
                {
                    _Message.OpenQueue();

                    while (!_evtTransmitShutDown.WaitOne(10))
                    {
                        Int32 iResponse;
                        try
                        {
                            _IsTransmitting = true;

                            if (iSequenceNo >= 255)
                            {
                                iSequenceNo = 1;
                            }
                            else
                            {
                                iSequenceNo++;
                            }
                            bSequenceNo = Convert.ToByte(iSequenceNo);
                            Logger.Info("Reading queue");

                            if (!_Message.IsQueueOpen)
                            {
                                _Message.OpenQueue();
                            }

                            strXML = _Message.ReadMessage();
                            Logger.Info("Read Complete");
                            SendToExternalLog("SENDING: " + strXML);
                            // parse return message
                            //Construct STM format message

                            // Refresh or empty message
                            if (string.IsNullOrEmpty(strXML))
                            {
                                Logger.Debug("Either Queue refresh or no message received.");
                                continue;
                            }

                            _MessageFormatter = FormatFactory.GetFormatter(strXML, true);

                            Logger.Debug("Event Request SeqNo[" + iSequenceNo.ToString() + "]" + _MessageFormatter.MessageStream);
                        }
                        catch (MessageFilteredException MesEx)
                        {
                            Logger.Error("EventTransmitter", "Transmit", MesEx.Message);
                            Logger.Info("EventTransmitter", "Transmit", "Committing Queue[Filtered Message]");
                            _Message.Commit();
                            continue;
                        }
                        catch (Exception Ex)
                        {
                            Logger.Error("EventTransmitter", "Transmit", Ex);
                            Logger.Info("EventTransmitter", "Transmit", "Error in message:" + strXML);

                            if (Settings.DeleteMessageOnParseErr == 1)
                            {
                                Logger.Error("EventTransmitter", "Transmit", "Committing Queue[DeleteMessageOnParseErr]");
                                _Message.Commit();
                                continue;
                            }
                            _evtTransmitShutDown.WaitOne(5000);
                        }
                        int iRetryOnNWErr = 0;
                        do
                        {
                            if (_evtTransmitShutDown.WaitOne(50))
                            {
                                break;
                            }

                            try
                            {
                                if (iRetryOnNWErr >= Settings.iMaxTransmissionRetry)
                                {
                                    //Close transmission when maximum retry reached
                                    throw new Exception(String.Format("Stopping Transmision after Retrying [{0}] times. ", iRetryOnNWErr.ToString()));
                                }
                                else
                                {
                                    //transmit message to server
                                    iResponse = _Sender.Send(_MessageFormatter);
                                    Logger.Debug("Response from Server: " + iResponse.ToString());
                                    if (iResponse > 0)    // to be checked && msg.SequenceNo == bSequenceNo)// ACK
                                    {
                                        //Set retry value to MAX+1 to quit loop
                                        iRetryOnNWErr = Settings.iMaxTransmissionRetry + 1;
                                        //Commiting Queue read After succesfull Transaction
                                        Logger.Info("Committing Queue");
                                        _Message.Commit();
                                    }

                                    else if (iResponse == 0)
                                    {
                                        Logger.Info("Response from Server [0] Message not processed at server");
                                        //Set retry value to MAX+1 to quit loop
                                        iRetryOnNWErr = Settings.iMaxTransmissionRetry + 1;
                                        //Commiting Queue read After succesfull Transaction
                                        Logger.Info("Committing Queue");
                                        _Message.Commit();
                                    }
                                    else
                                    {
                                        if (Settings.EventTransmit_RetryRepeat == 0)
                                        {
                                            iRetryOnNWErr++;
                                            Logger.Info(string.Format("Retrying to send message (Attempt[{0}]) ", iRetryOnNWErr.ToString()));
                                        }
                                        else
                                        {
                                            Logger.Info("Retrying to send message");
                                            iRetryOnNWErr = 0;
                                        }
                                    }
                                }
                            }
                            catch (Exception Ex1)
                            {
                                _evtTransmitShutDown.WaitOne(5000);
                                Logger.Error("EventTransmitter", "Transmit", Ex1);
                                //refresh connection and retry till configured number of times
                                iRetryOnNWErr++;
                                _Sender.CloseSender();
                                _IsTransmitting = false;
                                _Sender.Initialize(Settings.STMServerIP, Settings.STMServerPort);
                            }
                        } while (iRetryOnNWErr <= Settings.iMaxTransmissionRetry);
                    }
                }
            }
            catch (Exception Ex)
            {
                Logger.Error("EventTransmitter", "Transmit", Ex.Message);
                if (Settings.EventTransmit_RecoverOnError != 0)
                {
                    _evtTransmitShutDown.WaitOne(2000);
                    this.Transmit();
                }
            }
            finally
            {
                this.CloseTransmission();
            }
        }