public bool HandleMessage(Message msg) { HandlerFunction func; if (handlers.TryGetValue(msg.Name, out func)) { func(msg); return true; } return false; }
internal void EnqueueMessage(IMessageReceiver target, Message msg) { List<Message> mailbox; lock (inbox) { if (!inbox.TryGetValue(target, out mailbox)) { mailbox = new List<Message>(); inbox[target] = mailbox; } } lock (mailbox) { mailbox.Add(msg); } }
public void AssertArgumentTypes(Message msg) { HandlerFunction func; if (handlers.TryGetValue(msg.Name, out func)) { foreach (MessageArgumentAttribute attr in Attribute.GetCustomAttributes(func.GetType())) { if (msg.Args.Length <= attr.ArgumentIndex) { throw new ArgumentException( String.Format("Argument {0}: Expected argument of type {1}.", attr.ArgumentIndex, attr.ArgumentType.FullName)); } if (attr.ArgumentType.IsAssignableFrom(msg.Args[attr.ArgumentIndex].GetType())) { throw new ArgumentException( String.Format("Argument {0}: Expected argument of type {1}.", attr.ArgumentIndex, attr.ArgumentType.FullName)); } } } }
void Message_Terminate(Message msg) { Game.Terminate(); }
public void OnMessage(Message msg) { mhandler.HandleMessage(msg); }
public void AssertArgumentTypes(Message msg) { mhandler.AssertArgumentTypes(msg); }
/// <summary> /// Thread safe. Send a message to a particular target. /// </summary> /// <param name="target">The target to send the message to.</param> /// <param name="messagename">The name of the message to send</param> /// <param name="args">The arguments for the message</param> public static void SendMessage(IMessageReceiver target, String messagename, params Object[] args) { Message m = new Message(messagename, null, args); target.AssertArgumentTypes(m); post.EnqueueMessage(target, m); }
void Message_Reposition(Message msg) { this.Location = (Vector3)msg.Args[0]; }
void Message_Ping(Message msg) { Console.WriteLine("Pong"); }
void Message_Move(Message msg) { Move((Direction)msg.Args[0]); }