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

📄 asynch_io.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// Asynch_IO.cpp,v 1.4 2005/01/21 02:43:25 ossama Exp#ifndef JAWS_BUILD_DLL#define JAWS_BUILD_DLL#endif /*JAWS_BUILD_DLL*/#include "ace/config-lite.h"#include "jaws3/IO.h"#include "jaws3/Asynch_IO.h"#include "jaws3/Event_Completer.h"#include "jaws3/Event_Result.h"#if defined (ACE_HAS_AIO_CALLS) || defined (ACE_WIN32)#include "jaws3/Asynch_IO_Helpers.h"voidJAWS_Asynch_IO::send ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , void *act                     ){  JAWS_EC_AH_Adapter *jecaha;  jecaha = JAWS_EC_AH_Adapter::make (completer);  ACE_Asynch_Write_Stream asynch_write_stream;  if (jecaha == 0      || asynch_write_stream.open (*jecaha, handle) == -1      || asynch_write_stream.write (*mb, mb->length (), act) == -1)    {      delete jecaha;      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_SEND_FAIL                                  );      if (completer)        completer->output_complete (io_result, act);    }}voidJAWS_Asynch_IO::recv ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , void *act                     ){  JAWS_EC_AH_Adapter *jecaha;  jecaha = JAWS_EC_AH_Adapter::make (completer);  ACE_Asynch_Read_Stream asynch_read_stream;  if (jecaha == 0      || asynch_read_stream.open (*jecaha, handle) == -1      || asynch_read_stream.read (*mb, mb->space (), act) == -1)    {      delete jecaha;      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_RECV_FAIL                                  );      if (completer)        completer->output_complete (io_result, act);    }}voidJAWS_Asynch_IO::transmit ( ACE_HANDLE handle                         , ACE_HANDLE source                         , JAWS_Event_Completer *completer                         , void *act                         , ACE_Message_Block *header                         , ACE_Message_Block *trailer                         ){  JAWS_EC_AH_Adapter *jecaha;  jecaha = JAWS_EC_AH_Adapter::make (completer);  ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer = 0;  header_and_trailer =    new ACE_Asynch_Transmit_File::Header_And_Trailer ( header                                                     , header->length ()                                                     , trailer                                                     , trailer->length ()                                                     );  ACE_Asynch_Transmit_File asynch_transmit_file;  if (source == ACE_INVALID_HANDLE      || jecaha == 0      || header_and_trailer == 0      || asynch_transmit_file.open (*jecaha, handle) == -1      || asynch_transmit_file.transmit_file ( source                                            , header_and_trailer                                            , 0                                            , 0                                            , 0                                            , 0                                            , 0                                            , act                                            ) == -1)    {      delete jecaha;      delete header_and_trailer;      JAWS_Event_Result io_result ( 0                                  , JAWS_Event_Result::JE_ERROR                                  , JAWS_Event_Result::JE_TRANSMIT_FAIL                                  );      if (completer)        completer->output_complete (io_result, act);    }}JAWS_EC_AH_Adapter *JAWS_EC_AH_Adapter::make (JAWS_Event_Completer *completer){  return new JAWS_EC_AH_Adapter (completer);}voidJAWS_EC_AH_Adapter::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result){  JAWS_Event_Result io_result;  io_result = this->make_io_result ( result                                   , JAWS_Event_Result::JE_RECV_OK                                   , JAWS_Event_Result::JE_RECV_FAIL                                   );  // More useful diagnostics not implemented yet.  void *act = const_cast<void *> (result.act ());  this->completer_->input_complete (io_result, act);  delete this;}voidJAWS_EC_AH_Adapter::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result){  JAWS_Event_Result io_result;  io_result = this->make_io_result ( result                                   , JAWS_Event_Result::JE_SEND_OK                                   , JAWS_Event_Result::JE_SEND_FAIL                                   );  // More useful diagnostics not implemented yet.  void *act = const_cast<void *> (result.act ());  this->completer_->output_complete (io_result, act);  delete this;}voidJAWS_EC_AH_Adapter::handle_transmit_file (const ACE_Asynch_Transmit_File::Result &result){  JAWS_Event_Result io_result;  io_result = this->make_io_result ( result                                   , JAWS_Event_Result::JE_TRANSMIT_OK                                   , JAWS_Event_Result::JE_TRANSMIT_FAIL                                   );  // More useful diagnostics not implemented yet.  // Watch out for files not opened in overlapped IO mode.  void *act = const_cast<void *> (result.act ());  this->completer_->output_complete (io_result, act);  delete this;}JAWS_Event_ResultJAWS_EC_AH_Adapter::make_io_result ( const ACE_Asynch_Result &result                 , JAWS_Event_Result::JE_REASON reason_ok                 , JAWS_Event_Result::JE_REASON reason_fail                 ){  size_t bytes = result.bytes_transferred ();  JAWS_Event_Result::JE_STATUS status;  JAWS_Event_Result::JE_REASON reason;  if (result.success ())    {      status = JAWS_Event_Result::JE_OK;      reason = reason_ok;    }  else    {      status = JAWS_Event_Result::JE_ERROR;      reason = reason_fail;    }  JAWS_Event_Result io_result (bytes, status, reason);  return io_result;}#else /* EMULATE AIO WITH REACTOR */#include "jaws3/Reactive_IO.h"voidJAWS_Asynch_IO::send ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , void *act                     ){  JAWS_Reactive_IO::instance ()->send (handle, mb, completer, act);}voidJAWS_Asynch_IO::recv ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , void *act                     ){  JAWS_Reactive_IO::instance ()->recv (handle, mb, completer, act);}voidJAWS_Asynch_IO::transmit ( ACE_HANDLE handle                         , ACE_HANDLE source                         , JAWS_Event_Completer *completer                         , void *act                         , ACE_Message_Block *header                         , ACE_Message_Block *trailer                         ){  JAWS_Reactive_IO::instance ()->transmit ( handle                                          , source                                          , completer                                          , act                                          , header                                          , trailer                                          );}#endif /* defined (ACE_HAS_AIO_CALLS) || defined (ACE_WIN32) */// For now, we will simulate timed Asynch IO with timed Reactive IO.// In the future, we will implement the timed Asynch IO with timers// and Asynch IO cancelation.#include "jaws3/Reactive_IO.h"voidJAWS_Asynch_IO::send ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , const ACE_Time_Value &tv                     , void *act                     ){  JAWS_Reactive_IO::instance ()->send (handle, mb, completer, tv, act);}voidJAWS_Asynch_IO::recv ( ACE_HANDLE handle                     , ACE_Message_Block *mb                     , JAWS_Event_Completer *completer                     , const ACE_Time_Value &tv                     , void *act                     ){  JAWS_Reactive_IO::instance ()->recv (handle, mb, completer, tv, act);}voidJAWS_Asynch_IO::transmit ( ACE_HANDLE handle                         , ACE_HANDLE source                         , JAWS_Event_Completer *completer                         , const ACE_Time_Value &tv                         , void *act                         , ACE_Message_Block *header                         , ACE_Message_Block *trailer                         ){  JAWS_Reactive_IO::instance ()->transmit ( handle                                          , source                                          , completer                                          , tv                                          , act                                          , header                                          , trailer                                          );}

⌨️ 快捷键说明

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