diff options
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs | 42 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs | 31 |
2 files changed, 72 insertions, 1 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs index dae7c00..93930ce 100644 --- a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs +++ b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs | |||
@@ -75,6 +75,14 @@ namespace OpenSim.Region.Framework.Interfaces | |||
75 | void RegisterScriptInvocation(Type target, string[] methods); | 75 | void RegisterScriptInvocation(Type target, string[] methods); |
76 | 76 | ||
77 | /// <summary> | 77 | /// <summary> |
78 | /// Automatically register script invocations by checking for methods | ||
79 | /// with <see cref="ScriptInvocationAttribute"/>. Should only check | ||
80 | /// public methods. | ||
81 | /// </summary> | ||
82 | /// <param name="target"></param> | ||
83 | void RegisterScriptInvocations(IRegionModuleBase target); | ||
84 | |||
85 | /// <summary> | ||
78 | /// Returns an array of all registered script calls | 86 | /// Returns an array of all registered script calls |
79 | /// </summary> | 87 | /// </summary> |
80 | /// <returns></returns> | 88 | /// <returns></returns> |
@@ -96,11 +104,43 @@ namespace OpenSim.Region.Framework.Interfaces | |||
96 | /// <param name="key"></param> | 104 | /// <param name="key"></param> |
97 | void DispatchReply(UUID scriptId, int code, string text, string key); | 105 | void DispatchReply(UUID scriptId, int code, string text, string key); |
98 | 106 | ||
99 | /// For constants | 107 | /// <summary> |
108 | /// Operation to for a region module to register a constant to be used | ||
109 | /// by the script engine | ||
110 | /// </summary> | ||
111 | /// <param name="cname"> | ||
112 | /// The name of the constant. LSL convention is for constant names to | ||
113 | /// be uppercase. | ||
114 | /// </param> | ||
115 | /// <param name="value"> | ||
116 | /// The value of the constant. Should be of a type that can be | ||
117 | /// converted to one of <see cref="OpenSim.Region.ScriptEngine.Shared.LSL_Types"/> | ||
118 | /// </param> | ||
100 | void RegisterConstant(string cname, object value); | 119 | void RegisterConstant(string cname, object value); |
120 | |||
121 | /// <summary> | ||
122 | /// Automatically register all constants on a region module by | ||
123 | /// checking for fields with <see cref="ScriptConstantAttribute"/>. | ||
124 | /// </summary> | ||
125 | /// <param name="target"></param> | ||
126 | void RegisterConstants(IRegionModuleBase target); | ||
127 | |||
128 | /// <summary> | ||
129 | /// Operation to check for a registered constant | ||
130 | /// </summary> | ||
131 | /// <param name="cname">Name of constant</param> | ||
132 | /// <returns>Value of constant or null if none found.</returns> | ||
101 | object LookupModConstant(string cname); | 133 | object LookupModConstant(string cname); |
102 | 134 | ||
103 | // For use ONLY by the script API | 135 | // For use ONLY by the script API |
104 | void RaiseEvent(UUID script, string id, string module, string command, string key); | 136 | void RaiseEvent(UUID script, string id, string module, string command, string key); |
105 | } | 137 | } |
138 | |||
139 | [AttributeUsage(AttributeTargets.Method)] | ||
140 | public class ScriptInvocationAttribute : Attribute | ||
141 | { } | ||
142 | |||
143 | [AttributeUsage(AttributeTargets.Field)] | ||
144 | public class ScriptConstantAttribute : Attribute | ||
145 | { } | ||
106 | } | 146 | } |
diff --git a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs index 23cc633..98396ff 100644 --- a/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs | |||
@@ -211,6 +211,23 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms | |||
211 | RegisterScriptInvocation(target, mi); | 211 | RegisterScriptInvocation(target, mi); |
212 | } | 212 | } |
213 | } | 213 | } |
214 | |||
215 | public void RegisterScriptInvocations(IRegionModuleBase target) | ||
216 | { | ||
217 | foreach(MethodInfo method in target.GetType().GetMethods( | ||
218 | BindingFlags.Public | BindingFlags.Instance | | ||
219 | BindingFlags.Static)) | ||
220 | { | ||
221 | if(method.GetCustomAttributes( | ||
222 | typeof(ScriptInvocationAttribute), true).Any()) | ||
223 | { | ||
224 | if(method.IsStatic) | ||
225 | RegisterScriptInvocation(target.GetType(), method); | ||
226 | else | ||
227 | RegisterScriptInvocation(target, method); | ||
228 | } | ||
229 | } | ||
230 | } | ||
214 | 231 | ||
215 | public Delegate[] GetScriptInvocationList() | 232 | public Delegate[] GetScriptInvocationList() |
216 | { | 233 | { |
@@ -313,6 +330,20 @@ namespace OpenSim.Region.OptionalModules.Scripting.ScriptModuleComms | |||
313 | } | 330 | } |
314 | } | 331 | } |
315 | 332 | ||
333 | public void RegisterConstants(IRegionModuleBase target) | ||
334 | { | ||
335 | foreach (FieldInfo field in target.GetType().GetFields( | ||
336 | BindingFlags.Public | BindingFlags.Static | | ||
337 | BindingFlags.Instance)) | ||
338 | { | ||
339 | if (field.GetCustomAttributes( | ||
340 | typeof(ScriptConstantAttribute), true).Any()) | ||
341 | { | ||
342 | RegisterConstant(field.Name, field.GetValue(target)); | ||
343 | } | ||
344 | } | ||
345 | } | ||
346 | |||
316 | /// <summary> | 347 | /// <summary> |
317 | /// Operation to check for a registered constant | 348 | /// Operation to check for a registered constant |
318 | /// </summary> | 349 | /// </summary> |