public AsyncCommandManager(IScriptEngine _ScriptEngine)
        {
            m_ScriptEngine = _ScriptEngine;

            // If there is more than one scene in the simulator or multiple script engines are used on the same region
            // then more than one thread could arrive at this block of code simultaneously.  However, it cannot be
            // executed concurrently both because concurrent list operations are not thread-safe and because of other
            // race conditions such as the later check of cmdHandlerThread == null.
            lock (staticLock)
            {
                if (m_ScriptEngines.Count == 0)
                    ReadConfig();

                if (!m_ScriptEngines.Contains(m_ScriptEngine))
                    m_ScriptEngines.Add(m_ScriptEngine);

                // Create instances of all plugins
                if (!m_Dataserver.ContainsKey(m_ScriptEngine))
                    m_Dataserver[m_ScriptEngine] = new Dataserver(this);
                if (!m_Timer.ContainsKey(m_ScriptEngine))
                    m_Timer[m_ScriptEngine] = new Timer(this);
                if (!m_HttpRequest.ContainsKey(m_ScriptEngine))
                    m_HttpRequest[m_ScriptEngine] = new HttpRequest(this);
                if (!m_Listener.ContainsKey(m_ScriptEngine))
                    m_Listener[m_ScriptEngine] = new Listener(this);
                if (!m_SensorRepeat.ContainsKey(m_ScriptEngine))
                    m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this);
                if (!m_XmlRequest.ContainsKey(m_ScriptEngine))
                    m_XmlRequest[m_ScriptEngine] = new XmlRequest(this);

                StartThread();
            }
        }
        public AsyncCommandManager(IScriptEngine _ScriptEngine)
        {
            m_ScriptEngine = _ScriptEngine;
            m_Scene = m_ScriptEngine.World;

            if (m_Scenes.Count == 0)
                ReadConfig();

            if (!m_Scenes.Contains(m_Scene))
                m_Scenes.Add(m_Scene);
            if (!m_ScriptEngines.Contains(m_ScriptEngine))
                m_ScriptEngines.Add(m_ScriptEngine);

            // Create instances of all plugins
            if (!m_Dataserver.ContainsKey(m_ScriptEngine))
                m_Dataserver[m_ScriptEngine] = new Dataserver(this);
            if (!m_Timer.ContainsKey(m_ScriptEngine))
                m_Timer[m_ScriptEngine] = new Timer(this);
            if (!m_HttpRequest.ContainsKey(m_ScriptEngine))
                m_HttpRequest[m_ScriptEngine] = new HttpRequest(this);
            if (!m_Listener.ContainsKey(m_ScriptEngine))
                m_Listener[m_ScriptEngine] = new Listener(this);
            if (!m_SensorRepeat.ContainsKey(m_ScriptEngine))
                m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this);
            if (!m_XmlRequest.ContainsKey(m_ScriptEngine))
                m_XmlRequest[m_ScriptEngine] = new XmlRequest(this);

            StartThread();
        }