diff options
Diffstat (limited to 'ACE/tests/Proactor_Test.h')
-rw-r--r-- | ACE/tests/Proactor_Test.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/ACE/tests/Proactor_Test.h b/ACE/tests/Proactor_Test.h new file mode 100644 index 00000000000..044839a4cb5 --- /dev/null +++ b/ACE/tests/Proactor_Test.h @@ -0,0 +1,142 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// tests +// +// = FILENAME +// Proactor_Test.h +// +// = DESCRIPTION +// Define class needed for generating templates. IBM C++ requires this to +// be in its own file for auto template instantiation. +// +// = AUTHOR +// @author Alexander Libman <alibman@baltimore.com> +// +// ============================================================================ + +#ifndef ACE_TESTS_PROACTOR_TEST_H +#define ACE_TESTS_PROACTOR_TEST_H + +#include "ace/Synch_Traits.h" +#include "ace/Thread_Mutex.h" + +// forward declaration +class TestData; + +class Server : public ACE_Service_Handler +{ +public: + Server (); + Server (TestData *tester, int id); + ~Server (void); + + int id (void) { return this->id_; } + size_t get_total_snd (void) { return this->total_snd_; } + size_t get_total_rcv (void) { return this->total_rcv_; } + long get_total_w (void) { return this->total_w_; } + long get_total_r (void) { return this->total_r_; } + + // This is called to pass the new connection's addresses. + virtual void addresses (const ACE_INET_Addr& peer, + const ACE_INET_Addr& local); + + /// This is called after the new connection has been accepted. + virtual void open (ACE_HANDLE handle, + ACE_Message_Block &message_block); + void cancel (); + +protected: + /** + * @name AIO callback handling + * + * These methods are called by the framework + */ + /// This is called when asynchronous <read> operation from the + /// socket completes. + virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result); + + /// This is called when an asynchronous <write> to the socket + /// completes. + virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result); + +private: + int initiate_read_stream (void); + int initiate_write_stream (ACE_Message_Block &mb, size_t nbytes); + + TestData *tester_; + int id_; + + ACE_Asynch_Read_Stream rs_; + ACE_Asynch_Write_Stream ws_; + ACE_HANDLE handle_; + ACE_SYNCH_MUTEX lock_; + + long io_count_; // Number of currently outstanding I/O requests + int flg_cancel_; + size_t total_snd_; // Number of bytes successfully sent + size_t total_rcv_; // Number of bytes successfully received + long total_w_; // Number of write operations + long total_r_; // Number of read operations +}; + +// ******************************************* +// Client +// ******************************************* + +class Client : public ACE_Service_Handler +{ +public: + + /// This is called after the new connection has been established. + virtual void open (ACE_HANDLE handle, + ACE_Message_Block &message_block); + + Client (); + Client (TestData *tester, int id); + ~Client (void); + + int id (void) { return this->id_; } + size_t get_total_snd (void) { return this->total_snd_; } + size_t get_total_rcv (void) { return this->total_rcv_; } + long get_total_w (void) { return this->total_w_; } + long get_total_r (void) { return this->total_r_; } + + // This is called to pass the new connection's addresses. + virtual void addresses (const ACE_INET_Addr& peer, + const ACE_INET_Addr& local); + + virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result); + // This is called when asynchronous reads from the socket complete + + virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result); + // This is called when asynchronous writes from the socket complete + + void cancel (void); + +private: + int initiate_read_stream (void); + int initiate_write_stream (void); + void close (void); + + TestData *tester_; + int id_; + + ACE_Asynch_Read_Stream rs_; + ACE_Asynch_Write_Stream ws_; + ACE_HANDLE handle_; + + ACE_SYNCH_MUTEX lock_; + + long io_count_; + int stop_writing_; // Writes are shut down; just read. + int flg_cancel_; + size_t total_snd_; + size_t total_rcv_; + long total_w_; + long total_r_; +}; + +#endif /* ACE_TESTS_PROACTOR_TEST_H */ |