Example #1
0
 public bool HandleMessage(Message msg)
 {
     HandlerFunction func;
     if (handlers.TryGetValue(msg.Name, out func))
     {
         func(msg);
         return true;
     }
     return false;
 }
Example #2
0
 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);
     }
 }
Example #3
0
        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));
                    }
                }
            }
        }
Example #4
0
 void Message_Terminate(Message msg)
 {
     Game.Terminate();
 }
Example #5
0
 public void OnMessage(Message msg)
 {
     mhandler.HandleMessage(msg);
 }
Example #6
0
 public void AssertArgumentTypes(Message msg)
 {
     mhandler.AssertArgumentTypes(msg);
 }
Example #7
0
 /// <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);
 }
Example #8
0
 void Message_Reposition(Message msg)
 {
     this.Location = (Vector3)msg.Args[0];
 }
Example #9
0
 void Message_Ping(Message msg)
 {
     Console.WriteLine("Pong");
 }
Example #10
0
 void Message_Move(Message msg)
 {
     Move((Direction)msg.Args[0]);
 }