Menu

GatewayEventChannel.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *
00003  * Copyright (c) 2008-2010 Michael Schulze <mschulze@ivs.cs.uni-magdeburg.de>
00004  * All rights reserved.
00005  *
00006  *    Redistribution and use in source and binary forms, with or without
00007  *    modification, are permitted provided that the following conditions
00008  *    are met:
00009  *
00010  *    * Redistributions of source code must retain the above copyright
00011  *      notice, this list of conditions and the following disclaimer.
00012  *
00013  *    * Redistributions in binary form must reproduce the above copyright
00014  *      notice, this list of conditions and the following disclaimer in
00015  *      the documentation and/or other materials provided with the
00016  *      distribution.
00017  *
00018  *    * Neither the name of the copyright holders nor the names of
00019  *      contributors may be used to endorse or promote products derived
00020  *      from this software without specific prior written permission.
00021  *
00022  *
00023  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00024  *    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00025  *    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00026  *    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027  *    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028  *    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029  *    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030  *    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031  *    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032  *    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  *    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  *
00036  * $Id$
00037  *
00038  ******************************************************************************/
00039 
00040 #ifndef __GatewayEventChannel_h__
00041 #define __GatewayEventChannel_h__
00042 
00043 #include "mw/api/SubscriberEventChannel.h"
00044 #include "mw/nl/DistinctNL.h"
00045 
00046 namespace famouso {
00047     namespace mw {
00048         namespace gwl {
00049 
00063             template < class ECH >
00064             class GatewayEventChannel : public famouso::mw::api::SubscriberEventChannel<ECH> {
00065 
00066                     typedef famouso::mw::api::SubscriberEventChannel< ECH > BASE;
00067 
00068                     const famouso::mw::nl::DistinctNL * const _bnl;
00069                 public:
00070 
00074                     void *operator new(size_t size, void* buffer) {
00075                         return buffer;
00076                     }
00077 
00087                     GatewayEventChannel(const Subject &s, const famouso::mw::nl::DistinctNL * const bnl) : BASE(s), _bnl(bnl) {
00088                         TRACE_FUNCTION;
00089 
00090                         this->ech().subscribe(*this);
00091                         // initialize the forwarding callback
00092                         this->callback.template bind<GatewayEventChannel, &GatewayEventChannel::forward>(this);
00093                     }
00094 
00095                 private:
00096 
00105                     void forward(famouso::mw::api::SECCallBackData& cbd) {
00106                         TRACE_FUNCTION;
00107 
00108                         // If the event is from the another network as the subscription it will
00109                         // be published, otherwise it would an reflection in the same network
00110                         // the event would arise twice at the subscribers.
00111                         if (! this->ech().event_from_network_with_id(_bnl))
00112                             this->ech().publish_to_network_with_id(this->snn(), cbd, _bnl);
00113                     }
00114 
00115             };
00116 
00117         } // namespace gwl
00118     } // namespace mw
00119 } // namespace famouso
00120 
00121 
00122 #endif /* __GatewayEventChannel_h__ */