SharpMod.Message.Invoke C# (CSharp) Method

Invoke() static private method

static private Invoke ( Delegate del, MessageHeader message_header, List parameters ) : void
del System.Delegate
message_header MessageHeader
parameters List
return void
        internal static void Invoke(Delegate del, MessageHeader message_header, List<object> parameters)
        {
            var param = del.Method.GetParameters();

            object[] argumentList = new object[param.Length];

            int last = 0;
            for (int i = 0; i < param.Length; i++) {
                Type t = param[i].ParameterType;

                // handle special arguments first
                if (t == typeof(MessageHeader)) {
                    argumentList[i] = message_header;
                    last++;
                } else if (t == typeof(Player)) {
                    argumentList[i] = message_header.Player;
                    last++;
                } else if (t.IsMessage()) {
                    int j = 0;
                    object o = Activator.CreateInstance(t);
                    foreach (var pi in t.GetFields()) {
                        if (j < parameters.Count) {
                            pi.SetValue(o, parameters[j]);
                        }
                        j++;
                    }
                    argumentList[i] = o;
                    last++;
                } else {
                    break;
                }
            }

            // copy the parameters in order for the rest
            parameters.CopyTo(0, argumentList, last, param.Length - last);
            for (int i = last + parameters.Count; i < param.Length; i++) {
                argumentList[i] = param[i].DefaultValue;
            }

            del.Method.Invoke(null, argumentList);
        }

Same methods

Message::Invoke ( List list, MessageHeader message_header, List parameters ) : void
Message::Invoke ( MessageHeader message_header, List parameters ) : void