LF_CH_Event.cpp

Go to the documentation of this file.
00001 #include "tao/LF_CH_Event.h"
00002 
00003 ACE_RCSID(tao,
00004           LF_Invocation_Event,
00005           "LF_CH_Event.cpp,v 1.9 2006/05/14 02:38:11 mesnier_p Exp")
00006 
00007 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00008 
00009 TAO_LF_CH_Event::TAO_LF_CH_Event (void)
00010   : TAO_LF_Event (),
00011     prev_state_ (TAO_LF_Event::LFS_IDLE)
00012 
00013 {
00014 }
00015 
00016 TAO_LF_CH_Event::~TAO_LF_CH_Event (void)
00017 {
00018 }
00019 
00020 void
00021 TAO_LF_CH_Event::state_changed_i (int new_state)
00022 {
00023   if (this->state_ == new_state)
00024     return;
00025 
00026     // Validate the state change
00027   if (this->state_ == TAO_LF_Event::LFS_IDLE)
00028     {
00029       // From the LFS_IDLE state we can only become active.
00030       if (new_state == TAO_LF_Event::LFS_CONNECTION_WAIT)
00031         {
00032           this->prev_state_ = this->state_;
00033           this->state_ = new_state;
00034         }
00035       return;
00036     }
00037   else if (this->state_ == TAO_LF_Event::LFS_CONNECTION_WAIT)
00038     {
00039       // Only a few states are possible from CONNECTION_WAIT states
00040       if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED
00041           || new_state == TAO_LF_Event::LFS_SUCCESS)
00042         {
00043           this->prev_state_ = this->state_;
00044           this->state_ = new_state;
00045         }
00046 
00047       return;
00048     }
00049   else if (this->state_ == TAO_LF_Event::LFS_SUCCESS)
00050     {
00051       if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED)
00052         {
00053           this->prev_state_ = this->state_;
00054           this->state_ = new_state;
00055         }
00056       return;
00057     }
00058   else if (this->state_ == TAO_LF_Event::LFS_TIMEOUT)
00059     {
00060       if (new_state == TAO_LF_Event::LFS_CONNECTION_CLOSED)
00061         {
00062           // Dont reset the previous state
00063           this->state_ = new_state;
00064         }
00065     }
00066   return;
00067 }
00068 
00069 
00070 int
00071 TAO_LF_CH_Event::successful (void) const
00072 {
00073   if (this->prev_state_ == TAO_LF_Event::LFS_CONNECTION_WAIT)
00074     return this->state_ == TAO_LF_Event::LFS_SUCCESS;
00075 
00076   return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED;
00077 }
00078 
00079 int
00080 TAO_LF_CH_Event::error_detected (void) const
00081 {
00082   if (this->prev_state_ == TAO_LF_Event::LFS_CONNECTION_WAIT)
00083     return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED;
00084 
00085   return this->state_ == TAO_LF_Event::LFS_TIMEOUT;
00086 }
00087 
00088 void
00089 TAO_LF_CH_Event::set_state (int new_state)
00090 {
00091   // @@ NOTE: Is this still required?
00092   if (this->is_state_final () == 0
00093       && new_state == TAO_LF_Event::LFS_TIMEOUT)
00094     {
00095       this->state_ = new_state;
00096     }
00097 }
00098 
00099 int
00100 TAO_LF_CH_Event::is_state_final (void)
00101 {
00102   return this->state_ == TAO_LF_Event::LFS_CONNECTION_CLOSED;
00103 }
00104 
00105 TAO_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 11:54:15 2006 for TAO by doxygen 1.3.6