* rework script interface, add autostart stream flag that starts up a stream automatically when first filter has been added ( probably the most common use case )

* change internal reader interface again
* remove some quite embarassing bugs that must have been in the interface for rather long
* add different read methods to script & internal interface (like normal, streaming, etc). Not implemented in ascii reader yet.
This commit is contained in:
Bernhard Amann 2012-02-16 15:03:20 -08:00
parent de149ff55e
commit 91943c2655
18 changed files with 191 additions and 43 deletions

View file

@ -12,14 +12,16 @@ namespace input {
class InitMessage : public threading::InputMessage<ReaderBackend>
{
public:
InitMessage(ReaderBackend* backend, const string source)
InitMessage(ReaderBackend* backend, const string source, const int mode, const bool autostart)
: threading::InputMessage<ReaderBackend>("Init", backend),
source(source) { }
source(source), mode(mode), autostart(autostart) { }
virtual bool Process() { return Object()->Init(source); }
virtual bool Process() { return Object()->Init(source, mode, autostart); }
private:
const string source;
const int mode;
const bool autostart;
};
class UpdateMessage : public threading::InputMessage<ReaderBackend>
@ -42,6 +44,16 @@ public:
virtual bool Process() { Object()->Finish(); return true; }
};
class StartReadingMessage : public threading::InputMessage<ReaderBackend>
{
public:
StartReadingMessage(ReaderBackend* backend)
: threading::InputMessage<ReaderBackend>("StartReading", backend)
{ }
virtual bool Process() { Object()->StartReading(); return true; }
};
class AddFilterMessage : public threading::InputMessage<ReaderBackend>
{
public:
@ -83,17 +95,17 @@ ReaderFrontend::ReaderFrontend(bro_int_t type) {
ReaderFrontend::~ReaderFrontend() {
}
void ReaderFrontend::Init(string arg_source) {
void ReaderFrontend::Init(string arg_source, int mode, bool autostart) {
if ( disabled )
return;
if ( initialized )
reporter->InternalError("writer initialize twice");
reporter->InternalError("reader initialize twice");
source = arg_source;
initialized = true;
backend->SendIn(new InitMessage(backend, arg_source));
backend->SendIn(new InitMessage(backend, arg_source, mode, autostart));
}
void ReaderFrontend::Update() {
@ -132,6 +144,13 @@ string ReaderFrontend::Name() const
return ty_name + "/" + source;
}
void ReaderFrontend::StartReading() {
if ( disabled )
return;
backend->SendIn(new StartReadingMessage(backend));
}
}