Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MyMessage : BaseMessage {}
- AnotherMessage : BaseMessage { string data; }
- MyMessage.Subscribe(MyMessageHandler)
- AnotherMessage.Subscribe(AnotherMessageHandler)
- void MyMessageHandler(MyMessage message)
- {
- // code
- }
- void AnotherMessageHandler(AnotherMessage message)
- {
- // code
- }
- MyMessage.Send(MyMessageInstance);
- AnotherMessage.Send(AnotherMessageInstance);
- // A function-style macro is used to call this method
- template <typename Type, typename Caller>
- void subscribe(boost::function<void(const Type&)> subscriber, boost::shared_ptr<Caller> caller)
- {
- m_subscriptions[typeid(Type)].connect(Subscribers::slot_type([subscriber](const BaseMessage& message)
- {
- subscriber(static_cast<const Type&>(message));
- }).track(caller));
- }
- abstract class Message<MessageArgType>
- {
- public delegate void Handler(MessageArgType arg);
- private event Handler subscribers;
- public void Subscribe(Handler subscriber)
- {
- subscribers += subscriber;
- }
- public void Unsubscribe(Handler subscriber)
- {
- subscribers -= subscriber;
- }
- public void Send(MessageArgType arg)
- {
- subscribers.Invoke(arg);
- }
- }
- WeakEventManager<EventSource, SomeEventEventArgs>
- .AddHandler(source, "SomeEvent", source_SomeEvent);
- public void Subscribe(Handler subscriber)
- {
- WeakEventManager<Message, MessageArgType>
- .AddHandler(this, "subscribers", subscriber);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement