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 <scalestack/echo/flood/stream.h>
00027 #include <scalestack/echo/flood/stream_service.h>
00028 #include <scalestack/kernel/core.h>
00029 #include <scalestack/kernel/module.h>
00030 #include <scalestack/kernel/option.h>
00031
00032 namespace scalestack
00033 {
00034 namespace echo
00035 {
00036 namespace flood
00037 {
00038
00039
00040
00041
00042
00043 void stream_service::options(kernel::module& module)
00044 {
00045 module.add_option("iterations",
00046 _("Number of iterations to run, 0 means forever."),
00047 "COUNT", "1");
00048 module.add_option("count", _("Number of concurrent streams to open."),
00049 "COUNT", "1");
00050 module.add_option("reconnect",
00051 _("Whether to reconnect between iterations for streams."),
00052 "BOOLEAN", "False");
00053 module.add_option("write_size", _("How much data to write at once."),
00054 "SIZE", "0");
00055 module.add_option("flush",
00056 _("Whether to flush data when writing less than the remaining buffer."),
00057 "BOOLEAN", "True");
00058 }
00059
00060 stream_service::stream_service(kernel::module& module):
00061 network::stream_service(module),
00062 _count(module.get_option("count").get_size_value()),
00063 _mutex(module)
00064 {
00065 }
00066
00067 network::stream* stream_service::add_stream(void)
00068 {
00069 return new stream(*this);
00070 }
00071
00072 void stream_service::remove_stream(void)
00073 {
00074 _mutex.lock();
00075 _count--;
00076 if (_count == 0)
00077 {
00078 _mutex.unlock();
00079 _module.get_core().shutdown();
00080 }
00081 else
00082 _mutex.unlock();
00083 }
00084
00085 }
00086 }
00087 }