diff options
author | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-03-06 10:03:38 +0000 |
---|---|---|
committer | jxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-03-06 10:03:38 +0000 |
commit | 81b0561d9efcaa2ed02e12c5db5075f544bf9e9a (patch) | |
tree | dd632370b0e37df464bfaaee77a91c1dfec9d2a3 /apps/JAWS/server | |
parent | 396f3ff921c5de1e3f73f9a810582942a96b9e03 (diff) | |
download | ATCD-81b0561d9efcaa2ed02e12c5db5075f544bf9e9a.tar.gz |
Getting closer to a simple HTTP server. Changes for a better
framework interface.
Diffstat (limited to 'apps/JAWS/server')
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.cpp | 33 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h | 25 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp | 29 | ||||
-rw-r--r-- | apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h | 2 |
4 files changed, 83 insertions, 6 deletions
diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.cpp b/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.cpp index 2737fe4c887..e49e8b268c0 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.cpp +++ b/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.cpp @@ -2,6 +2,10 @@ #include "JAWS/Concurrency.h" +JAWS_Dispatcher_Singleton jaws_dispatcher; +JAWS_Thread_Pool_Singleton jaws_thread_pool; +JAWS_Thread_Per_Singleton jaws_thread_per; + JAWS_Concurrency_Base::JAWS_Concurrency_Base (void) { } @@ -58,6 +62,17 @@ JAWS_Thread_Pool_Task::JAWS_Thread_Pool_Task (long flags, ACE_ERROR ((LM_ERROR, "%p\n", "JAWS_Thread_Pool_Task::activate")); } +int +JAWS_Thread_Pool_Task::open (long flags, int nthreads, int maxthreads) +{ + this->nthreads_ = nthreads; + this->maxthreads_ = maxthreads; + + if (this->activate (flags, nthreads) == -1) + ACE_ERROR_RETURN ((LM_ERROR, "%p\n", "JAWS_Thread_Pool_Task::activate"), + -1); +} + JAWS_Thread_Per_Task::JAWS_Thread_Per_Task (long flags, int maxthreads) : flags_ (flags), maxthreads_ (maxthreads) @@ -65,6 +80,14 @@ JAWS_Thread_Per_Task::JAWS_Thread_Per_Task (long flags, int maxthreads) } int +JAWS_Thread_Per_Task::open (long flags, int maxthreads) +{ + this->flags_ = flags; + this->maxthreads_ = maxthreads; + return 0; +} + +int JAWS_Thread_Per_Task::put (ACE_Message_Block *mb, ACE_Time_Value *tv) { const int force_active = 1; @@ -78,3 +101,13 @@ JAWS_Thread_Per_Task::put (ACE_Message_Block *mb, ACE_Time_Value *tv) return 0; } + +#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION) +template class ACE_Singleton<JAWS_Dispatcher, ACE_MT_SYNCH>; +template class ACE_Singleton<JAWS_Thread_Pool_Task, ACE_MT_SYNCH>; +template class ACE_Singleton<JAWS_Thread_Per_Task, ACE_MT_SYNCH>; +#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA) +#pragma instantiate ACE_Singleton<JAWS_Dispatcher, ACE_MT_SYNCH> +#pragma instantiate ACE_Singleton<JAWS_Thread_Pool_Task, ACE_MT_SYNCH> +#pragma instantiate ACE_Singleton<JAWS_Thread_Per_Task, ACE_MT_SYNCH> +#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h b/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h index 7c718e148ff..5af61e2c119 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h +++ b/apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h @@ -4,8 +4,10 @@ #if !defined (JAWS_CONCURRENCY_H) #define JAWS_CONCURRENCY_H +#include "ace/Singelton.h" #include "ace/Synch.h" #include "ace/Task.h" + #include "JAWS/IO.h" class JAWS_Concurrency_Base : public ACE_Task<ACE_MT_SYNCH> @@ -20,6 +22,7 @@ class JAWS_Concurrency_Base : public ACE_Task<ACE_MT_SYNCH> { public: JAWS_Concurrency_Base (void); + virtual int put (ACE_Message_Block *mb, ACE_Time_Value *tv = 0); virtual int svc (void); }; @@ -65,9 +68,9 @@ class JAWS_Thread_Pool_Task : public JAWS_Concurrency_Base // requests through the message queue. { public: - JAWS_Thread_Pool_Task (long flags = THR_NEW_LWP, - int nthreads = 5, - int maxthreads = 20); + virtual int open (long flags = THR_NEW_LWP, + int nthreads = 5, int maxthreads = 20); + // Initiate the thread_pool task private: int nthreads_; @@ -86,6 +89,9 @@ class JAWS_Thread_Per_Task : public JAWS_Concurrency_Base public: JAWS_Thread_Per_Task (long flags = THR_NEW_LWP, int maxthreads = 20); + virtual int open (long flags = THR_NEW_LWP, int maxthreads = 20); + // Initiate the thread_per task + virtual int put (ACE_Message_Block *mb, ACE_Time_Value *tv = 0); private: @@ -93,4 +99,17 @@ private: int maxthreads_; }; +typedef ACE_Singleton<JAWS_Dispatcher, ACE_MT_SYNCH> + JAWS_Dispatcher_Singleton; + +typedef ACE_Singleton<JAWS_Thread_Pool_Task, ACE_MT_SYNCH> + JAWS_Thread_Pool_Singleton; + +typedef ACE_Singleton<JAWS_Thread_Per_Task, ACE_MT_SYNCH> + JAWS_Thread_Per_Singleton; + +extern JAWS_Dispatcher_Singleton jaws_dispatcher; +extern JAWS_Thread_Pool_Singleton jaws_thread_pool; +extern JAWS_Thread_Per_Singleton jaws_thread_per; + #endif /* !defined (JAWS_CONCURRENCY_H) */ diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp index 45191082b3a..52922842dce 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp @@ -9,9 +9,19 @@ JAWS_IO_Handler_Factory::~JAWS_IO_Handler_Factory (void) JAWS_Synch_IO_Handler::JAWS_Synch_IO_Handler (JAWS_IO *io, JAWS_IO_Handler_Factory *factory) - : io_ (io), + : state_ (0), + io_ (io), + pipeline_ (0), factory_ (factory) { + this->io_.handler (this); +} + +JAWS_Synch_IO_Handler::~JAWS_Synch_IO_Handler (void) +{ + if (this->state_) + this->state_->release (); + this->state_ = 0; } void @@ -29,23 +39,26 @@ JAWS_Synch_IO_Handler::accept_error (void) void JAWS_Synch_IO_Handler::read_complete (ACE_Message_Block &data) { - ACE_UNUSED_ARG(data); + // We can call back into the pipeline task at this point + this->pipeline_->read_complete (data); } void JAWS_Synch_IO_Handler::read_error (void) { + this->pipeline_->read_error (); } void JAWS_Synch_IO_Handler::transmit_file_complete (void) { + this->pipeline_->transmit_file_complete (); } void JAWS_Synch_IO_Handler::transmit_file_error (int result) { - ACE_UNUSED_ARG(result); + this->pipeline_->transmit_file_complete (result); } void @@ -62,6 +75,10 @@ JAWS_Synch_IO_Handler::receive_file_error (int result) void JAWS_Synch_IO_Handler::write_error (void) { + ACE_DEBUG ((LM_DEBUG, " (%t) %s error in writing response\n", + request_.uri ())); + + this->done (); } void @@ -80,6 +97,12 @@ JAWS_Synch_IO_Handler::factory (void) return this->factory_; } +void +JAWS_Synch_IO_Handler::done (void) +{ + this->factory()->destroy_http_handler (this, this->io_); +} + JAWS_IO_Handler * JAWS_Synch_IO_Handler_Factory::create_io_handler (void) { diff --git a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h index 37a6ca40a5e..0957fcad9cf 100644 --- a/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h +++ b/apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h @@ -142,6 +142,8 @@ protected: virtual void error_message_complete (void); virtual JAWS_IO_Handler_Factory *factory (void); + virtual void done (void); + private: ACE_Message_Block *state_; // This maintains the state of the request. |