📄 io.cpp
字号:
}voidJAWS_Synch_IO::send_error_message (JAWS_IO_Handler *ioh, const char *buffer, unsigned int length){ this->send_message (ioh, buffer, length); ioh->error_message_complete ();}voidJAWS_Synch_IO::send_message (JAWS_IO_Handler *ioh, const char *buffer, unsigned int length){ ACE_SOCK_Stream stream; stream.set_handle (ioh->handle ()); stream.send_n (buffer, length);}// This only works on Win32#if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS)JAWS_Asynch_IO::JAWS_Asynch_IO (void){}JAWS_Asynch_IO::~JAWS_Asynch_IO (void){ if (this->handle_ != ACE_INVALID_HANDLE) ACE_OS::closesocket (this->handle_);}voidJAWS_Asynch_IO::accept (JAWS_IO_Handler *ioh, ACE_Message_Block *, unsigned int){ JAWS_TRACE ("JAWS_Asynch_IO::accept"); ioh->idle (); JAWS_Data_Block *db = ioh->message_block (); //ACE_HANDLE listen_handle = db->policy ()->acceptor ()->get_handle (); //JAWS_Asynch_IO_Handler *aioh = // dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); size_t bytes_to_read = JAWS_Data_Block::JAWS_DATA_BLOCK_SIZE; if (db->policy ()->acceptor ()->accept (bytes_to_read, ioh) == -1) ioh->accept_error ();}voidJAWS_Asynch_IO::read (JAWS_IO_Handler *ioh, ACE_Message_Block* mb, unsigned int size){ JAWS_TRACE ("JAWS_Asynch_IO::read"); ioh->idle (); JAWS_Asynch_IO_Handler *aioh = dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); ACE_Asynch_Read_Stream ar; if (ar.open (*(aioh->handler ()), aioh->handle ()) == -1 || ar.read (*mb, size) == -1) aioh->read_error ();}voidJAWS_Asynch_IO::receive_file (JAWS_IO_Handler *ioh, const char *filename, void *initial_data, unsigned int initial_data_length, unsigned int entire_length){ JAWS_TRACE ("JAWS_Asynch_IO::receive_file"); ioh->idle (); JAWS_Asynch_IO_Handler *aioh = dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); ACE_Message_Block *mb = 0; ACE_Filecache_Handle *handle; ACE_NEW (handle, ACE_Filecache_Handle (filename, entire_length, ACE_NOMAP)); int result = handle->error (); if (result == ACE_Filecache_Handle::ACE_SUCCESS) { ACE_OS::memcpy (handle->address (), initial_data, initial_data_length); int bytes_to_read = entire_length - initial_data_length; ACE_NEW (mb, ACE_Message_Block ((char *)handle->address () + initial_data_length, bytes_to_read)); if (mb == 0) { errno = ENOMEM; result = -1; } else { ACE_Asynch_Read_Stream ar; if (ar.open (*(aioh->handler ()), aioh->handle ()) == -1 || ar.read (*mb, mb->size () - mb->length (), handle) == -1) result = -1; } } if (result != ACE_Filecache_Handle::ACE_SUCCESS) { this->handler_->receive_file_error (result); delete mb; delete handle; }}voidJAWS_Asynch_IO::transmit_file (JAWS_IO_Handler *ioh, ACE_HANDLE handle, const char *header, unsigned int header_size, const char *trailer, unsigned int trailer_size){ JAWS_TRACE ("JAWS_Asynch_IO::transmit_file"); ioh->idle (); JAWS_Asynch_IO_Handler *aioh = dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer = 0; int result = 0; if (handle != ACE_INVALID_HANDLE) { ACE_Message_Block hdr_mb (header, header_size); ACE_Message_Block trl_mb (trailer, trailer_size); header_and_trailer = new ACE_Asynch_Transmit_File::Header_And_Trailer (hdr_mb.duplicate (), header_size, trl_mb.duplicate (), trailer_size); ACE_Asynch_Transmit_File tf; if (tf.open (*(aioh->handler ()), aioh->handle ()) == -1 || tf.transmit_file (handle, // file handle header_and_trailer, // header and trailer data 0, // bytes_to_write 0, // offset 0, // offset_high 0, // bytes_per_send 0, // flags 0 // act ) == -1) result = -1; } if (result != 0) { ioh->transmit_file_error (result); delete header_and_trailer; }}voidJAWS_Asynch_IO::transmit_file (JAWS_IO_Handler *ioh, const char *filename, const char *header, unsigned int header_size, const char *trailer, unsigned int trailer_size){ int result = 0; JAWS_TRACE ("JAWS_Asynch_IO::transmit_file"); ioh->idle (); JAWS_Asynch_IO_Handler *aioh = dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer = 0; JAWS_Cached_FILE *cf = new JAWS_Cached_FILE (filename); if (cf->file ()->get_handle () != ACE_INVALID_HANDLE) { ACE_Message_Block hdr_mb (header, header_size); ACE_Message_Block trl_mb (trailer, trailer_size); header_and_trailer = new ACE_Asynch_Transmit_File::Header_And_Trailer (hdr_mb.duplicate (), header_size, trl_mb.duplicate (), trailer_size); ACE_Asynch_Transmit_File tf; if (tf.open (*(aioh->handler ()), aioh->handle ()) == -1 || tf.transmit_file (cf->file ()->get_handle (), // file handle header_and_trailer, // header and trailer data 0, // bytes_to_write 0, // offset 0, // offset_high 0, // bytes_per_send 0, // flags cf // act ) == -1) result = -1; } if (result != 0) { ioh->transmit_file_error (result); delete header_and_trailer; delete cf; }}voidJAWS_Asynch_IO::send_confirmation_message (JAWS_IO_Handler *ioh, const char *buffer, unsigned int length){ this->send_message (ioh, buffer, length, CONFIRMATION);}voidJAWS_Asynch_IO::send_error_message (JAWS_IO_Handler *ioh, const char *buffer, unsigned int length){ this->send_message (ioh, buffer, length, ERROR_MESSAGE);}voidJAWS_Asynch_IO::send_message (JAWS_IO_Handler *ioh, const char *buffer, unsigned int length, long act){ ioh->idle (); JAWS_Asynch_IO_Handler *aioh = dynamic_cast<JAWS_Asynch_IO_Handler *> (ioh); ACE_Message_Block *mb; ACE_NEW (mb, ACE_Message_Block (buffer, length)); if (mb == 0) { this->handler_->error_message_complete (); return; } ACE_Asynch_Write_Stream aw; if (aw.open (*(aioh->handler ()), aioh->handle ()) == -1 || aw.write (*mb, length, (void *) act) == -1) { mb->release (); if (act == CONFIRMATION) ioh->confirmation_message_complete (); else ioh->error_message_complete (); }}voidJAWS_Asynch2_IO::accept (JAWS_IO_Handler *, ACE_Message_Block *, unsigned int){}#endif /* ACE_WIN32 */#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)template class ACE_Singleton<JAWS_Synch_IO, ACE_SYNCH_MUTEX>; #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) template class ACE_Singleton<JAWS_Asynch_IO, ACE_SYNCH_MUTEX>; template class ACE_Singleton<JAWS_Asynch2_IO, ACE_SYNCH_MUTEX>; #endif /* defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS)*/#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)#pragma instantiate ACE_Singleton<JAWS_Synch_IO, ACE_SYNCH_MUTEX> #if defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS) #pragma instantiate ACE_Singleton<JAWS_Asynch_IO, ACE_SYNCH_MUTEX> #pragma instantiate ACE_Singleton<JAWS_Asynch2_IO, ACE_SYNCH_MUTEX> #endif /* defined (ACE_WIN32) || defined (ACE_HAS_AIO_CALLS)*/#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -