summaryrefslogtreecommitdiff
path: root/apps/JAWS/server
diff options
context:
space:
mode:
authorjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-06 10:03:38 +0000
committerjxh <jxh@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-06 10:03:38 +0000
commit81b0561d9efcaa2ed02e12c5db5075f544bf9e9a (patch)
treedd632370b0e37df464bfaaee77a91c1dfec9d2a3 /apps/JAWS/server
parent396f3ff921c5de1e3f73f9a810582942a96b9e03 (diff)
downloadATCD-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.cpp33
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/Concurrency.h25
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.cpp29
-rw-r--r--apps/JAWS/server/PROTOTYPE/JAWS/IO_Handler.h2
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.