00001 // file : ace/RMCast/Link.h 00002 // author : Boris Kolpackov <boris@kolpackov.net> 00003 // cvs-id : Link.h,v 1.8 2006/06/28 09:29:26 boris Exp 00004 00005 #ifndef ACE_RMCAST_LINK_H 00006 #define ACE_RMCAST_LINK_H 00007 00008 #include "ace/SOCK_Dgram.h" 00009 #include "ace/SOCK_Dgram_Mcast.h" 00010 00011 #include "ace/Thread_Manager.h" 00012 00013 #include "Stack.h" 00014 #include "Protocol.h" 00015 #include "Parameters.h" 00016 00017 namespace ACE_RMCast 00018 { 00019 class Link : public Element 00020 { 00021 public: 00022 ~Link (); 00023 00024 Link (Address const& addr, Parameters const& params); 00025 00026 virtual void 00027 in_start (In_Element* in); 00028 00029 virtual void 00030 out_start (Out_Element* out); 00031 00032 virtual void 00033 in_stop (); 00034 00035 public: 00036 virtual void 00037 send (Message_ptr m); 00038 00039 private: 00040 virtual void 00041 send_ (Message_ptr m); 00042 00043 private: 00044 void 00045 recv (); 00046 00047 static ACE_THR_FUNC_RETURN 00048 recv_thunk (void* obj); 00049 00050 private: 00051 virtual void 00052 recv (Message_ptr); 00053 00054 private: 00055 Parameters const& params_; 00056 00057 Address addr_, self_; 00058 ACE_SOCK_Dgram_Mcast rsock_; 00059 ACE_SOCK_Dgram ssock_; 00060 00061 bool stop_; 00062 ACE_Thread_Manager recv_mgr_; 00063 00064 // Simulator. 00065 // 00066 Message_ptr hold_; 00067 00068 Mutex mutex_; 00069 }; 00070 } 00071 00072 00073 #endif // ACE_RMCAST_LINK_H