it compiles :)

But that's all, not tested, don't expect it to do anything but crash.
This commit is contained in:
Bernhard Amann 2012-02-06 17:37:02 -08:00
parent 238e9545c0
commit 8385d5bb2d
7 changed files with 258 additions and 67 deletions

View file

@ -1,28 +1,117 @@
// See the file "COPYING" in the main distribution directory for copyright.
#ifndef INPUT_READERFRONTEND_H
#define INPUT_READERFRONTEND_H
#include "Manager.h"
#include "ReaderFrontend.h"
#include "ReaderBackend.h"
#include "threading/MsgThread.h"
namespace logging {
class ReaderBackend;
class ReaderFrontend {
ReaderFrontend(bro_int_t type);
virtual ~ReaderFrontend();
namespace input {
protected:
friend class Manager;
class InitMessage : public threading::InputMessage<ReaderBackend>
{
public:
InitMessage(ReaderBackend* backend, const string source)
: threading::InputMessage<ReaderBackend>("Init", backend),
source(source) { }
virtual bool Process() { return Object()->Init(source); }
private:
const string source;
};
class UpdateMessage : public threading::InputMessage<ReaderBackend>
{
public:
UpdateMessage(ReaderBackend* backend)
: threading::InputMessage<ReaderBackend>("Update", backend)
{ }
virtual bool Process() { return Object()->Update(); }
};
class FinishMessage : public threading::InputMessage<ReaderBackend>
{
public:
FinishMessage(ReaderBackend* backend)
: threading::InputMessage<ReaderBackend>("Finish", backend)
{ }
virtual bool Process() { Object()->Finish(); return true; }
};
class AddFilterMessage : public threading::InputMessage<ReaderBackend>
{
public:
AddFilterMessage(ReaderBackend* backend, const int id, const int num_fields, const threading::Field* const* fields)
: threading::InputMessage<ReaderBackend>("AddFilter", backend),
id(id), num_fields(num_fields), fields(fields) { }
virtual bool Process() { return Object()->AddFilter(id, num_fields, fields); }
private:
const int id;
const int num_fields;
const threading::Field* const* fields;
};
ReaderFrontend::ReaderFrontend(bro_int_t type) {
disabled = initialized = false;
ty_name = "<not set>";
backend = input_mgr->CreateBackend(this, type);
assert(backend);
backend->Start();
}
ReaderFrontend::~ReaderFrontend() {
}
void ReaderFrontend::Init(string arg_source) {
if ( disabled )
return;
if ( initialized )
reporter->InternalError("writer initialize twice");
source = arg_source;
initialized = true;
backend->SendIn(new InitMessage(backend, arg_source));
}
void ReaderFrontend::Update() {
if ( disabled )
return;
backend->SendIn(new UpdateMessage(backend));
}
void ReaderFrontend::Finish() {
if ( disabled )
return;
backend->SendIn(new FinishMessage(backend));
}
void ReaderFrontend::AddFilter(const int id, const int arg_num_fields, const threading::Field* const* fields) {
if ( disabled )
return;
backend->SendIn(new AddFilterMessage(backend, id, arg_num_fields, fields));
}
string ReaderFrontend::Name() const
{
if ( source.size() )
return ty_name;
return ty_name + "/" + source;
}
}
#endif /* INPUT_READERFRONTEND_H */