NetworkAdapter.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef __NetworkAdapter_h__
00041 #define __NetworkAdapter_h__
00042
00043 #include "mw/nl/DistinctNL.h"
00044 #include "mw/el/EventLayer.h"
00045 #include "mw/api/SubscriberEventChannel.h"
00046 #include "mw/gwl/GatewayEventChannel.h"
00047 #include "mw/common/Event.h"
00048
00049 namespace famouso {
00050 namespace mw {
00051 namespace nal {
00052
00061 template < class ANL_A, class ANL_B >
00062 class NetworkAdapter {
00063 typedef NetworkAdapter< ANL_A, ANL_B> this_type;
00064
00065 ANL_A _ANL_A;
00066 ANL_B _ANL_B;
00067 famouso::mw::nl::DistinctNL *_bnl;
00068
00069 protected:
00070
00074 struct SNN {
00075 typename ANL_A::SNN SNN_A;
00076 typename ANL_B::SNN SNN_B;
00077 };
00078
00081 void init() {
00082 _ANL_A.init();
00083 _ANL_B.init();
00084 }
00085
00086 public:
00096 void publish_to_network_with_id(const SNN &snn, const Event &e, const famouso::mw::nl::DistinctNL *bnl) {
00097 if (_ANL_A.id() == bnl)
00098 _ANL_A.publish(snn.SNN_A , e);
00099 else
00100 _ANL_B.publish(snn.SNN_B , e);
00101 }
00102
00114 const bool event_from_network_with_id(const famouso::mw::nl::DistinctNL *b) const {
00115 if ((!_bnl) || (_bnl == b))
00116 return true;
00117 else
00118 return false;
00119 }
00120
00128 const famouso::mw::nl::DistinctNL * const get_network_id() const {
00129 return _bnl;
00130 }
00131
00132 protected:
00133
00141 void announce(const Subject &s, SNN &snn) {
00142 _ANL_A.announce(s, snn.SNN_A);
00143 _ANL_B.announce(s, snn.SNN_B);
00144 }
00145
00153 void publish(const SNN &snn, const Event &e) {
00154 _ANL_A.publish(snn.SNN_A , e);
00155 _ANL_B.publish(snn.SNN_B , e);
00156 }
00157
00165 void subscribe(const Subject &s, SNN &snn) {
00166 _ANL_A.subscribe(s, snn.SNN_A);
00167 _ANL_B.subscribe(s, snn.SNN_B);
00168 }
00169
00183 int8_t fetch(const SNN &snn, Event &e, const famouso::mw::nl::DistinctNL *bnl) {
00186 if (_ANL_A.id() == bnl)
00187 return _ANL_A.fetch(snn.SNN_A, e, bnl);
00188 else
00189 return _ANL_B.fetch(snn.SNN_B, e, bnl);
00190 }
00191
00197 void event_process_request(famouso::mw::nl::DistinctNL * const bnl) {
00198 _bnl = bnl;
00199 if (_ANL_A.id() == bnl)
00200 _ANL_A.event_process_request(bnl);
00201 else
00202 _ANL_B.event_process_request(bnl);
00203 }
00204
00208 void event_processed() {
00209 if (_ANL_A.id() == _bnl)
00210 _ANL_A.event_processed();
00211 else
00212 _ANL_B.event_processed();
00213 _bnl = 0;
00214 }
00215 };
00216 }
00217 }
00218 }
00219
00220 #endif