All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
BidirectionalWebIOBus.h
1 // Copyright (c) 2015 eeGeo. All rights reserved.
2 
3 #pragma once
4 
5 #include "Types.h"
6 #include "CatalogBinding.h"
7 #include "MessageQueue.h"
8 #include "DispatchQueue.h"
9 #include "MainToWebIOMessageCatalog.h"
10 #include "WebIOToMainMessageCatalog.h"
11 
12 namespace Eegeo
13 {
14  namespace Web
15  {
17  {
20  };
21 
22  template <typename TBusCatalogs = TDefaultBusCatalogs>
24  {
25  private:
26  typedef typename TBusCatalogs::TDispatchToWebIOMessageCatalog TDispatchToWebIOMessageCatalog;
27  typedef typename TBusCatalogs::TDispatchToMainMessageCatalog TDispatchToMainMessageCatalog;
28 
31 
32  public:
33 
34  template <typename TMessage>
35  void Publish(const TMessage& message)
36  {
37  m_dispatchToWebIOQueue.TryEnqueue(message);
38  m_dispatchToMainQueue.TryEnqueue(message);
39  }
40 
41  template <typename TMessage>
42  void SubscribeOnWebIO(Eegeo::Helpers::ICallback1<const TMessage&>& handler)
43  {
44  m_dispatchToWebIOQueue.Subscribe(handler);
45  }
46 
47  template <typename TMessage>
48  void UnsubscribeOnWebIO(Eegeo::Helpers::ICallback1<const TMessage&>& handler)
49  {
50  m_dispatchToWebIOQueue.Unsubscribe(handler);
51  }
52 
53  template <typename TMessage>
54  void SubscribeOnMain(Eegeo::Helpers::ICallback1<const TMessage&>& handler)
55  {
56  m_dispatchToMainQueue.Subscribe(handler);
57  }
58 
59  template <typename TMessage>
60  void UnsubscribeOnMain(Eegeo::Helpers::ICallback1<const TMessage&>& handler)
61  {
62  m_dispatchToMainQueue.Unsubscribe(handler);
63  }
64 
65  void FlushToWebIO()
66  {
67  m_dispatchToWebIOQueue.Flush();
68  }
69 
70  void FlushToMain()
71  {
72  m_dispatchToMainQueue.Flush();
73  }
74  };
75 
77  }
78 }