⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reactive_io.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  this->was_active_ = 1;  ssize_t count = ACE::send ( handle                            , this->mb_->rd_ptr ()                            , this->mb_->length ()                            );  if (count <= 0 && this->bytes_ == 0)    {      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_SEND_FAIL                                  );      this->io_result_ = io_result;    }  else if (count <= 0 && this->bytes_ > 0)    {      JAWS_Event_Result io_result ( this->bytes_                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_SEND_SHORT                                  );      this->io_result_ = io_result;    }  else    {      if (count > 0)        this->mb_->rd_ptr (count);      this->bytes_ += count;      JAWS_Event_Result io_result ( this->bytes_                                  , JAWS_Event_Result::JE_OK                                  , JAWS_Event_Result::JE_SEND_OK                                  );      this->io_result_ = io_result;    }  if (count <= 0 || this->mb_->length () == 0)    return -1;  // Not done yet, so stay registered.  return 0;}intJAWS_IO_Reactive_Recv::handle_input (ACE_HANDLE handle){  ssize_t count = ACE::recv ( handle                            , this->mb_->wr_ptr ()                            , this->mb_->space ()                            );  if (count < 0)    {      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_RECV_FAIL                                  );      this->io_result_ = io_result;    }  else    {      if (count > 0)        this->mb_->wr_ptr (count);      JAWS_Event_Result io_result ( count                                  , JAWS_Event_Result::JE_OK                                  , JAWS_Event_Result::JE_RECV_OK                                  );      this->io_result_ = io_result;    }  return -1;}intJAWS_IO_Reactive_Transmit::handle_output (ACE_HANDLE handle){  this->was_active_ = 1;  if (this->header_ && this->header_->length () > 0)    return this->handle_output_header (handle);  else    this->header_ = 0;  if (this->source_ != ACE_INVALID_HANDLE)    return this->handle_output_source (handle);  if (this->trailer_ && this->trailer_->length () > 0)    return this->handle_output_trailer (handle);  else    this->trailer_ = 0;  JAWS_Event_Result io_result ( this->bytes_                              , JAWS_Event_Result::JE_OK                              , JAWS_Event_Result::JE_TRANSMIT_OK                              );  this->io_result_ = io_result;  return -1;}intJAWS_IO_Reactive_Transmit::handle_output_header (ACE_HANDLE handle){  return this->handle_output_mb (handle, this->header_);}intJAWS_IO_Reactive_Transmit::handle_output_source (ACE_HANDLE handle){  ACE_Message_Block *mb = this->source_buf_;  // Try to read data into the mb if data is still available.  if (mb->space () && this->source_ != ACE_INVALID_HANDLE)    {      ssize_t count;      count = ACE_OS::read (this->source_, mb->wr_ptr (), mb->space ());      if (count < 0)        {          this->source_ = ACE_INVALID_HANDLE;          this->source_buf_ = 0;          if (this->bytes_ == 0)            {              JAWS_Event_Result io_result ( 0                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_TRANSMIT_FAIL                                          );              this->io_result_ = io_result;            }          else if (this->bytes_ > 0)            {              JAWS_Event_Result io_result ( this->bytes_                                          , JAWS_Event_Result::JE_ERROR                                          , JAWS_Event_Result::JE_TRANSMIT_SHORT                                          );              this->io_result_ = io_result;            }          return -1;        }      else if (count == 0)        this->source_ = ACE_INVALID_HANDLE;      else        mb->wr_ptr (count);    }  int result = 0;  if (mb->length () > 0)    result = this->handle_output_mb (handle, mb);  if (result < 0)    {      this->source_ = ACE_INVALID_HANDLE;      this->source_buf_ = 0;    }  else if (mb == 0 && this->source_ == ACE_INVALID_HANDLE)    this->source_buf_ = 0;  else    this->source_buf_->crunch ();  return result;}intJAWS_IO_Reactive_Transmit::handle_output_trailer (ACE_HANDLE handle){  int result = this->handle_output_mb (handle, this->trailer_);  if (result == 0 && this->trailer_ == 0)    {      JAWS_Event_Result io_result ( this->bytes_                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_TRANSMIT_SHORT                                  );      this->io_result_ = io_result;      return -1;    }  return result;}intJAWS_IO_Reactive_Transmit::handle_output_mb ( ACE_HANDLE handle                                            , ACE_Message_Block *&mb                                            ){  ssize_t count = ACE::send (handle, mb->rd_ptr (), mb->length ());  if (count <= 0 && this->bytes_ == 0)    {      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_TRANSMIT_FAIL                                  );      this->io_result_ = io_result;    }  else if (count <= 0 && this->bytes_ > 0)    {      JAWS_Event_Result io_result ( this->bytes_                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_TRANSMIT_SHORT                                  );      this->io_result_ = io_result;    }  else    {      mb->rd_ptr (count);      this->bytes_ += count;    }  if (count <= 0)    return -1;  if (mb->length () == 0)    mb = 0;  return 0;}voidJAWS_IO_Reactive_Transmit::close (int result){  if (result < 0)    {      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_TRANSMIT_FAIL                                  );      this->io_result_ = io_result;      this->handle_close (this->handle_, this->mask_);    }}intJAWS_IO_Reactive_Transmit::handle_timeout (const ACE_Time_Value &, const void *){  if (this->was_active_)    {      this->was_active_ = 0;      this->timer_id_ =        ACE_Reactor::instance ()->schedule_timer (this, 0, this->tv_);      return 0;    }  ACE_Reactor::instance ()  ->remove_handler ( this                   , ACE_Event_Handler::RWE_MASK|ACE_Event_Handler::DONT_CALL                   );  this->timer_id_ = -1;  JAWS_Event_Result io_result ( 0                              , JAWS_Event_Result::JE_ERROR                              , JAWS_Event_Result::JE_TRANSMIT_TIMEOUT                              , ETIME                              );  this->io_result_ = io_result;  return -1;}intJAWS_IO_Reactive_Transmit::handle_exception (ACE_HANDLE handle){  if (handle == ACE_INVALID_HANDLE)    {      // We are being called back from a notify call.      // This is our cue to register ourselves with the Reactor.      int result;      result =        ACE_Reactor::instance ()        ->register_handler (this, this->mask_|ACE_Event_Handler::EXCEPT_MASK);      if (result < 0)        this->close (result);      return 0;    }  // back to our regularly scheduled except mask handling.  JAWS_Event_Result io_result ( this->bytes_                              , JAWS_Event_Result::JE_ERROR                              , JAWS_Event_Result::JE_TRANSMIT_SHORT                              );  this->io_result_ = io_result;  return -1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -