00001 #include "tao/LF_Multi_Event.h" 00002 #include "tao/Connection_Handler.h" 00003 #include "ace/OS_Memory.h" 00004 00005 ACE_RCSID(tao, 00006 LF_Multi_Event, 00007 "$Id: LF_Multi_Event.cpp 72492 2006-05-03 03:38:25Z mesnier_p $") 00008 00009 TAO_BEGIN_VERSIONED_NAMESPACE_DECL 00010 00011 00012 TAO_LF_Multi_Event::TAO_LF_Multi_Event (void) 00013 : TAO_LF_Event (), 00014 events_ (0), 00015 winner_ (0) 00016 { 00017 } 00018 00019 TAO_LF_Multi_Event::~TAO_LF_Multi_Event (void) 00020 { 00021 while (this->events_ != 0) 00022 { 00023 Event_Node *n = this->events_->next_; 00024 delete this->events_; 00025 this->events_ = n; 00026 } 00027 } 00028 00029 int 00030 TAO_LF_Multi_Event::bind (TAO_LF_Follower *follower) 00031 { 00032 if (this->TAO_LF_Event::bind(follower) == -1) 00033 { 00034 return -1; 00035 } 00036 00037 for (Event_Node *n = this->events_; n != 0; n = n->next_) 00038 if (n->ptr_->bind(follower) == -1) 00039 { 00040 return -1; 00041 } 00042 return 0; 00043 } 00044 00045 int 00046 TAO_LF_Multi_Event::unbind (void) 00047 { 00048 if (this->TAO_LF_Event::unbind() == -1) 00049 { 00050 return -1; 00051 } 00052 00053 for (Event_Node *n = this->events_; n != 0; n = n->next_) 00054 if (n->ptr_->unbind() == -1) 00055 { 00056 return -1; 00057 } 00058 return 0; 00059 } 00060 00061 00062 void 00063 TAO_LF_Multi_Event::add_event (TAO_Connection_Handler *ev) 00064 { 00065 Event_Node *node = 0; 00066 ACE_NEW (node, Event_Node); 00067 node->next_ = this->events_; 00068 node->ptr_ = ev; 00069 00070 this->events_ = node; 00071 } 00072 00073 TAO_Connection_Handler* 00074 TAO_LF_Multi_Event::winner (void) 00075 { 00076 return this->winner_; 00077 } 00078 00079 TAO_Transport * 00080 TAO_LF_Multi_Event::base_transport (void) 00081 { 00082 return (this->events_ == 0) ? 0 : this->events_->ptr_->transport(); 00083 } 00084 00085 int 00086 TAO_LF_Multi_Event::successful (void) const 00087 { 00088 for (Event_Node *n = this->events_; n != 0; n = n->next_) 00089 if (n->ptr_->successful() == 1) 00090 { 00091 this->winner_ = n->ptr_; 00092 return 1; 00093 } 00094 return 0; 00095 } 00096 00097 int 00098 TAO_LF_Multi_Event::error_detected (void) const 00099 { 00100 int result = 1; 00101 for (Event_Node *n = this->events_; n != 0; n = n->next_) 00102 if (n->ptr_->error_detected () == 0) 00103 result = 0; 00104 return result; 00105 } 00106 00107 void 00108 TAO_LF_Multi_Event::state_changed_i (int ) 00109 { 00110 // no-op 00111 } 00112 00113 int 00114 TAO_LF_Multi_Event::is_state_final (void) 00115 { 00116 int result = 1; 00117 for (Event_Node *n = this->events_; n != 0; n = n->next_) 00118 if (!n->ptr_->is_state_final () == 0) 00119 result = 0; 00120 return result; 00121 } 00122 00123 TAO_END_VERSIONED_NAMESPACE_DECL