aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/Executor.cs
blob: ca6459b65cddf7b49e0a96fdf52a9e23859d9a09 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace OpenSim.Region.ScriptEngine.Common
{
    public class Executor: MarshalByRefObject
    {
        /* TODO:
         * 
         * Needs to be common for all AppDomains - share memory too?
         * Needs to have an instance in each AppDomain, and some way of referring it.
         * Need to know what AppDomain a script is in so we know where to find our instance.
         * 
         */

        private IScript m_Script;

        public Executor(IScript Script)
        {
            m_Script = Script;
        }
        public void ExecuteEvent(string FunctionName, object[] args)
        {
            // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory.
            // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead!

            //foreach (MemberInfo mi in this.GetType().GetMembers())
            //{
            //if (mi.ToString().ToLower().Contains("default"))
            //{
            //    Console.WriteLine("Member found: " + mi.ToString());
            //}
            //}

            Type type = m_Script.GetType();

            Console.WriteLine("ScriptEngine Executor.ExecuteEvent: \"" + m_Script.State() + "_event_" + FunctionName + "\"");

            try
            {
                type.InvokeMember(m_Script.State() + "_event_" + FunctionName, BindingFlags.InvokeMethod, null, m_Script, args);
            }
            catch (Exception e)
            {
                // TODO: Send to correct place
                Console.WriteLine("ScriptEngine Exception attempting to executing script function: " + e.ToString());
            }


        }


    }
}