From fdb24c46ac02447e05662227180927c9bd270276 Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Sat, 13 Sep 2008 14:40:42 +0000
Subject: Provide a GetApi method on the IScriptEngine to get a named API
 reference This allows cross-api method calls on the implementation and also
 allows "Meta APIs" that only provide common functionality to other APIs

---
 OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs       | 1 +
 OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs     | 2 ++
 OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs | 7 +++++++
 OpenSim/Region/ScriptEngine/XEngine/XEngine.cs                | 8 ++++++++
 4 files changed, 18 insertions(+)

diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
index 4b46c21..43c2487 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptEngine.cs
@@ -58,6 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
         void SetState(UUID itemID, string newState);
         int GetStartParameter(UUID itemID);
         IScriptWorkItem QueueEventHandler(object parms);
+        IScriptApi GetApi(UUID itemID, string name);
 
         DetectParams GetDetectParams(UUID item, int number);
     }
diff --git a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
index c07f093..169955c 100644
--- a/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Interfaces/IScriptInstance.cs
@@ -85,5 +85,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
         DetectParams GetDetectParams(int idx);
         UUID GetDetectID(int idx);
         void SaveState(string assembly);
+
+        IScriptApi GetApi(string name);
     }
 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
index 1ee6f77..8f6108d 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Instance/ScriptInstance.cs
@@ -714,5 +714,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
                 throw new Exception("Completed persistence save, but no file was created");
             }
         }
+
+        public IScriptApi GetApi(string name)
+        {
+            if (m_Apis.ContainsKey(name))
+                return m_Apis[name];
+            return null;
+        }
     }
 }
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 6582686..0dc1ade 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -869,5 +869,13 @@ namespace OpenSim.Region.ScriptEngine.XEngine
 
             DoBackup(new Object[] {0});
         }
+
+        public IScriptApi GetApi(UUID itemID, string name)
+        {
+            IScriptInstance instance = GetInstance(itemID);
+            if (instance == null)
+                return null;
+            return instance.GetApi(name);
+        }
     }
 }
-- 
cgit v1.1