#include "ip.h"
#include "flags.h"
#include "nsMgenAgent.h"
#include "nsNormAgent.h"
static class NsNormAgentClass : public TclClass
{
public:
NsNormAgentClass() : TclClass("Agent/NORM") {}
TclObject* create(int argc, const char*const* argv)
{return (new NsNormAgent());}
} class_norm_agent;
NsNormAgent::NsNormAgent()
: NormSimAgent(GetTimerMgr(), GetSocketNotifier())
{
}
NsNormAgent::~NsNormAgent()
{
}
bool NsNormAgent::OnStartup(int argc, const char*const* argv)
{
if (ProcessCommands(argc, argv))
{
return true;
}
else
{
fprintf(stderr, "NsNormAgent::OnStartup() error processing commands\n");
return false;
}
}
void NsNormAgent::OnShutdown()
{
NormSimAgent::Stop();
}
bool NsNormAgent::ProcessCommands(int argc, const char*const* argv)
{
int i = 1;
while (i < argc)
{
if (!strcmp(argv[i], "attach-mgen"))
{
if (++i >= argc)
{
DMSG(0, "NsNormAgent::ProcessCommands() ProcessCommand(attach-mgen) error: insufficent arguments\n");
return false;
}
Tcl& tcl = Tcl::instance();
msg_sink = dynamic_cast<ProtoMessageSink*>(tcl.lookup(argv[i]));
if (msg_sink)
{
i++;
continue;
}
else
{
DMSG(0, "NsNormAgent::ProcessCommands() ProcessCommand(attach-mgen) error: invalid mgen agent\n");
return false;
}
}
else if (!strcmp(argv[i], "active"))
{
Tcl& tcl = Tcl::instance();
if (IsActive())
Tcl_SetResult(tcl.interp(), "on", TCL_STATIC);
else
Tcl_SetResult(tcl.interp(), "off", TCL_STATIC);
i++;
continue;
}
NormSimAgent::CmdType cmdType = CommandType(argv[i]);
switch (cmdType)
{
case NormSimAgent::CMD_NOARG:
if (!ProcessCommand(argv[i], NULL))
{
DMSG(0, "NsNormAgent::ProcessCommands() ProcessCommand(%s) error\n",
argv[i]);
return false;
}
i++;
break;
case NormSimAgent::CMD_ARG:
if (!ProcessCommand(argv[i], argv[i+1]))
{
DMSG(0, "NsNormAgent::ProcessCommands() ProcessCommand(%s, %s) error\n",
argv[i], argv[i+1]);
return false;
}
i += 2;
break;
case NormSimAgent::CMD_INVALID:
return false;
}
}
return true;
}