diff options
Diffstat (limited to 'trunk/TAO/tao/LF_CH_Event.cpp')
-rw-r--r-- | trunk/TAO/tao/LF_CH_Event.cpp | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/trunk/TAO/tao/LF_CH_Event.cpp b/trunk/TAO/tao/LF_CH_Event.cpp new file mode 100644 index 00000000000..41304c082bc --- /dev/null +++ b/trunk/TAO/tao/LF_CH_Event.cpp @@ -0,0 +1,105 @@ +#include "tao/LF_CH_Event.h" + +ACE_RCSID(tao, + LF_Invocation_Event, + "$Id$") + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +TAO_LF_CH_Event::TAO_LF_CH_Event (void) + : TAO_LF_Event (), + prev_state_ (TAO_LF_Event::LFS_IDLE) + +{ +} + +TAO_LF_CH_Event::~TAO_LF_CH_Event (void) +{ +} + +void +TAO_LF_CH_Event::state_changed_i (int new_state) +{ + if (this->state_ == new_state) + return; + + // Validate the state change + if (this->state_ == TAO_LF_Event::LFS_IDLE) + { + // From the LFS_IDLE state we can only become active. + if (new_state == TAO_LF_Event::LFS_CONNECTION_WAIT) + { + this->prev_state_ = this->state_; + this->state_ = new_state; + } + return; + } + else if (this->state_ == TAO_LF_Event::LFS_CONNECTION_WAIT) + { + // Only a few states are possible from CONNECTION_WAIT states + if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED + || new_state == TAO_LF_Event::LFS_SUCCESS) + { + this->prev_state_ = this->state_; + this->state_ = new_state; + } + + return; + } + else if (this->state_ == TAO_LF_Event::LFS_SUCCESS) + { + if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED) + { + this->prev_state_ = this->state_; + this->state_ = new_state; + } + return; + } + else if (this->state_ == TAO_LF_Event::LFS_TIMEOUT) + { + if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED) + { + // Dont reset the previous state + this->state_ = new_state; + } + } + return; +} + + +int +TAO_LF_CH_Event::successful (void) const +{ + if (this->prev_state_ == TAO_LF_Event::LFS_CONNECTION_WAIT) + return this->state_ == TAO_LF_Event::LFS_SUCCESS; + + return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED; +} + +int +TAO_LF_CH_Event::error_detected (void) const +{ + if (this->prev_state_ == TAO_LF_Event::LFS_CONNECTION_WAIT) + return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED; + + return this->state_ == TAO_LF_Event::LFS_TIMEOUT; +} + +void +TAO_LF_CH_Event::set_state (int new_state) +{ + // @@ NOTE: Is this still required? + if (this->is_state_final () == 0 + && new_state == TAO_LF_Event::LFS_TIMEOUT) + { + this->state_ = new_state; + } +} + +int +TAO_LF_CH_Event::is_state_final (void) +{ + return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED; +} + +TAO_END_VERSIONED_NAMESPACE_DECL |