OpenSim.Region.ScriptEngine.XEngine.XEngine.OnRemoveScript C# (CSharp) Method

OnRemoveScript() public method

public OnRemoveScript ( uint localID, UUID itemID ) : void
localID uint
itemID UUID
return void
        public void OnRemoveScript(uint localID, UUID itemID)
        {
            // If it's not yet been compiled, make sure we don't try
            lock (m_CompileDict)
            {
                if (m_CompileDict.ContainsKey(itemID))
                    m_CompileDict.Remove(itemID);
            }

            IScriptInstance instance = null;

            lock (m_Scripts)
            {
                // Do we even have it?
                if (!m_Scripts.ContainsKey(itemID))
                    return;

                instance=m_Scripts[itemID];
                m_Scripts.Remove(itemID);
            }

            instance.ClearQueue();
            instance.Stop(0);
//                bool objectRemoved = false;

            lock (m_PrimObjects)
            {
                // Remove the script from it's prim
                if (m_PrimObjects.ContainsKey(localID))
                {
                    // Remove inventory item record
                    if (m_PrimObjects[localID].Contains(itemID))
                        m_PrimObjects[localID].Remove(itemID);

                    // If there are no more scripts, remove prim
                    if (m_PrimObjects[localID].Count == 0)
                    {
                        m_PrimObjects.Remove(localID);
//                            objectRemoved = true;
                    }
                }
            }

            instance.RemoveState();
            instance.DestroyScriptInstance();

            m_DomainScripts[instance.AppDomain].Remove(instance.ItemID);
            if (m_DomainScripts[instance.AppDomain].Count == 0)
            {
                m_DomainScripts.Remove(instance.AppDomain);
                UnloadAppDomain(instance.AppDomain);
            }

            instance = null;

            ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
            if (handlerObjectRemoved != null)
            {
                SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
                handlerObjectRemoved(part.UUID);
            }


            ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
            if (handlerScriptRemoved != null)
                handlerScriptRemoved(itemID);
        }