00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #include "config.h"
00025
00026 #include <cassert>
00027 #include <memory>
00028
00029 #include <scalestack/event/test/handler.h>
00030 #include <scalestack/event/test/test.h>
00031 #include <scalestack/kernel/core.h>
00032 #include <scalestack/kernel/module.h>
00033
00034 using namespace std;
00035 using namespace scalestack;
00036
00037 namespace scalestack
00038 {
00039 namespace event
00040 {
00041 namespace test
00042 {
00043
00044
00045
00046
00047
00048 test::test(kernel::module& module, size_t handler_count):
00049 kernel::service(module),
00050 _handler_count(handler_count),
00051 _mutex(module),
00052 _handler_service(module)
00053 {
00054 }
00055
00056 test::~test()
00057 {
00058 _handler_service.stop();
00059 assert(_handler_count == 0);
00060 }
00061
00062 void test::remove_handler(void)
00063 {
00064 _mutex.lock();
00065 _handler_count--;
00066 if (_handler_count == 0)
00067 _module.get_core().shutdown();
00068 _mutex.unlock();
00069 }
00070
00071 }
00072 }
00073 }
00074
00075 static void start(kernel::module& module)
00076 {
00077 auto_ptr<event::test::test> test(new event::test::test(module, 6));
00078 module.get_core().add_service("event::test", test.get());
00079 test.release();
00080 }
00081
00082 static void stop(kernel::module& module)
00083 {
00084 delete module.get_core().remove_service("event::test");
00085 }
00086
00087 static void run(kernel::module& module)
00088 {
00089 event::test::test& test = static_cast<event::test::test&>(
00090 module.get_core().get_service("event::test"));
00091
00092 new event::test::handler(test, event::test::handler::STATE_DONE);
00093 new event::test::handler(test, event::test::handler::STATE_START);
00094 new event::test::handler(test, event::test::handler::STATE_RUN);
00095 new event::test::handler(test, event::test::handler::STATE_TIMER);
00096 new event::test::handler(test, event::test::handler::STATE_READ);
00097 new event::test::handler(test, event::test::handler::STATE_WRITE);
00098 }
00099
00100 SCALESTACK_KERNEL_MODULE(NULL, start, stop, run, NULL);