Advertisement
Guest User

Untitled

a guest
Apr 18th, 2014
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. MyMessage : BaseMessage {}
  2. AnotherMessage : BaseMessage { string data; }
  3.  
  4. MyMessage.Subscribe(MyMessageHandler)
  5. AnotherMessage.Subscribe(AnotherMessageHandler)
  6.  
  7. void MyMessageHandler(MyMessage message)
  8. {
  9. // code
  10. }
  11.  
  12. void AnotherMessageHandler(AnotherMessage message)
  13. {
  14. // code
  15. }
  16.  
  17. MyMessage.Send(MyMessageInstance);
  18. AnotherMessage.Send(AnotherMessageInstance);
  19.  
  20. // A function-style macro is used to call this method
  21. template <typename Type, typename Caller>
  22. void subscribe(boost::function<void(const Type&)> subscriber, boost::shared_ptr<Caller> caller)
  23. {
  24. m_subscriptions[typeid(Type)].connect(Subscribers::slot_type([subscriber](const BaseMessage& message)
  25. {
  26. subscriber(static_cast<const Type&>(message));
  27. }).track(caller));
  28. }
  29.  
  30. abstract class Message<MessageArgType>
  31. {
  32. public delegate void Handler(MessageArgType arg);
  33. private event Handler subscribers;
  34.  
  35. public void Subscribe(Handler subscriber)
  36. {
  37. subscribers += subscriber;
  38. }
  39.  
  40. public void Unsubscribe(Handler subscriber)
  41. {
  42. subscribers -= subscriber;
  43. }
  44.  
  45. public void Send(MessageArgType arg)
  46. {
  47. subscribers.Invoke(arg);
  48. }
  49. }
  50.  
  51. WeakEventManager<EventSource, SomeEventEventArgs>
  52. .AddHandler(source, "SomeEvent", source_SomeEvent);
  53.  
  54. public void Subscribe(Handler subscriber)
  55. {
  56. WeakEventManager<Message, MessageArgType>
  57. .AddHandler(this, "subscribers", subscriber);
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement