/// <summary>
 /// Stops listening to new connections.
 /// Call it to end the functionality of the class.
 /// </summary>
 public void Stop()
 {
     CommObjects.Shutdown();
     if (_fecsBecsOutputQueue != null)
     {
         _fecsBecsOutputQueue.Close();
         _fecsBecsOutputQueue = null;
     }
     if (_becsFecsInputQueue != null)
     {
         _becsFecsInputQueue.Close();
         _becsFecsInputQueue = null;
     }
 }
        /// <summary>
        /// Launches listening to clients and BECS.
        /// Call it to really start the functionality of the class.
        /// </summary>
        public void Start()
        {
            // Create the queue sender to BECS
            _fecsBecsOutputQueue = new FecsBecsOutputWrapper(OUTPUT_QUEUE_PATH);
            // Create the queue receiver from BECS
            _becsFecsInputQueue = new BecsFecsInputWrapper(INPUT_QUEUE_PATH);

            // Determine the IPAddress of this machine
            IPAddress [] aryLocalAddr = null;
            String       strHostName  = "";

            try
            {
                // NOTE: DNS lookups are nice and all but quite time consuming.
                strHostName = Dns.GetHostName();
                IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
                aryLocalAddr = ipEntry.AddressList;
            }
            catch (Exception ex)
            {
                //Logger.WriteLogException(3, "Error trying to get local address", ex);
                FecsMain.Logger.AddLog(ex);
            }

            // Verify we got an IP address. Tell the user if we did
            if (aryLocalAddr == null || aryLocalAddr.Length < 1)
            {
                //Logger.WriteLogMessage(3, "Unable to get local address");
                FecsMain.Logger.AddLog("Unable to get local address", LoggerSeverities.Error);
                return;
            }
            /// JLB: GPRS -> Use second address if available
            /// TODO: Remove when testing base connection
            //int index =(aryLocalAddr.Length > 1) ? 1 : 0;

            // Initialize listener
            try
            {
                CommObjects.Initialize(PORT_NUMBER, XML_SCHEMAS_PATH,
                                       _becsFecsInputQueue, _fecsBecsOutputQueue);
            }
            catch (Exception ex)
            {
                //Logger.WriteLogMessage(3, "Port is busy. Can't create listener on : {0}:{1} - {2}", aryLocalAddr[index], int.Parse(PORT_NUMBER), ex.Message);
                FecsMain.Logger.AddLog("Port is busy. Can't create listener on port : " + PORT_NUMBER + " - " + ex.Message, LoggerSeverities.Error);
                return;
            }

            // Notify about correct working
            //Logger.WriteLogMessage(3, "Listening on : [{0}] {1}:{2}", strHostName, aryLocalAddr[index], int.Parse(PORT_NUMBER));
            FecsMain.Logger.AddLog("Listening on : [" + strHostName + ":" + PORT_NUMBER + "]", LoggerSeverities.Info);

            // Initialize queue
            try
            {
                _becsFecsInputQueue.BeginReceive();
            }
            catch (Exception ex)
            {
                //Logger.WriteLogMessage(3, "Wrong queue path(either input or output) - {0}", ex.Message);
                FecsMain.Logger.AddLog(ex);
                return;
            }
        }