diff options
author | SignpostMarv | 2012-09-14 13:17:07 +0100 |
---|---|---|
committer | Melanie | 2012-09-17 14:15:47 +0100 |
commit | f9721573d956092c2d993ee41654f3f5e160401c (patch) | |
tree | 157a221bbc9b6776b696ad4f7441be2d96b0e414 | |
parent | preventing a null reference exception from being thrown (diff) | |
download | opensim-SC_OLD-f9721573d956092c2d993ee41654f3f5e160401c.zip opensim-SC_OLD-f9721573d956092c2d993ee41654f3f5e160401c.tar.gz opensim-SC_OLD-f9721573d956092c2d993ee41654f3f5e160401c.tar.bz2 opensim-SC_OLD-f9721573d956092c2d993ee41654f3f5e160401c.tar.xz |
Implementing ability to register script constants and invocations on a region module automatically
-rw-r--r-- | OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs | 23 | ||||
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/ScriptModuleComms/ScriptModuleCommsModule.cs | 31 |
2 files changed, 54 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs b/OpenSim/Region/Framework/Interfaces/IScriptModuleComms.cs index dae7c00..277c9ed 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> |
@@ -98,9 +106,24 @@ namespace OpenSim.Region.Framework.Interfaces | |||
98 | 106 | ||
99 | /// For constants | 107 | /// For constants |
100 | void RegisterConstant(string cname, object value); | 108 | void RegisterConstant(string cname, object value); |
109 | |||
110 | /// <summary> | ||
111 | /// Automatically register all constants on a region module by | ||
112 | /// checking for fields with <see cref="ScriptConstantAttribute"/>. | ||
113 | /// </summary> | ||
114 | /// <param name="target"></param> | ||
115 | void RegisterConstants(IRegionModuleBase target); | ||
101 | object LookupModConstant(string cname); | 116 | object LookupModConstant(string cname); |
102 | 117 | ||
103 | // For use ONLY by the script API | 118 | // For use ONLY by the script API |
104 | void RaiseEvent(UUID script, string id, string module, string command, string key); | 119 | void RaiseEvent(UUID script, string id, string module, string command, string key); |
105 | } | 120 | } |
121 | |||
122 | [AttributeUsage(AttributeTargets.Method)] | ||
123 | public class ScriptInvocationAttribute : Attribute | ||
124 | { } | ||
125 | |||
126 | [AttributeUsage(AttributeTargets.Field)] | ||
127 | public class ScriptConstantAttribute : Attribute | ||
128 | { } | ||
106 | } | 129 | } |
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> |