00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "nel/ai/agent/agent_local_mailer.h"
00026 #include "nel/ai/script/interpret_object_message.h"
00027 #include "nel/ai/agent/agent_digital.h"
00028
00029 namespace NLAIAGENT
00030 {
00031 CLocalAgentMail::CLocalAgentMail(IBasicAgent *host):IAgent(NULL)
00032 {
00033 _HostAgent = host;
00034 if(_HostAgent != NULL) connect(_HostAgent);
00035
00036 }
00037
00038 CLocalAgentMail::~CLocalAgentMail()
00039 {
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 }
00050
00051 void CLocalAgentMail::runChildren()
00052 {
00053
00054 }
00055 void CLocalAgentMail::processMessages()
00056 {
00057 }
00058 void CLocalAgentMail::onKill(IConnectIA *a)
00059 {
00060 if(a == _HostAgent)
00061 {
00062 _HostAgent = NULL;
00063 IAgent::onKill(a);
00064 release();
00065 }
00066 else
00067 {
00068 IAgent::onKill(a);
00069 }
00070
00071 }
00072
00073 tQueue CLocalAgentMail::isMember(const IVarName *h,const IVarName *m,const IObjectIA &p) const
00074 {
00075 if(_HostAgent)
00076 {
00077 return _HostAgent->isMember(h,m,p);
00078 }
00079 else
00080 {
00081 const NLAIAGENT::IObjectIA *cl = (const NLAIAGENT::IObjectIA *)(IAgent::IdAgent->getFactory())->getClass();
00082 return cl->isMember(h,m,p);
00083 }
00084 }
00085
00086
00087 IObjectIA::CProcessResult CLocalAgentMail::sendMessage(IObjectIA *m)
00088 {
00089 IMessageBase *msg = (IMessageBase *)m;
00090
00091 if(NLAISCRIPT::CMsgNotifyParentClass::IdMsgNotifyParentClass == msg->getType() )
00092 {
00093 const INombreDefine *n = (const INombreDefine *)msg->getFront();
00094 if(n->getNumber() != 0.0)
00095 {
00096 const CLocalAgentMail *parent = (const CLocalAgentMail *)msg->get();
00097 setParent((const IWordNumRef *)*parent->getHost());
00098 }
00099 return IObjectIA::CProcessResult();
00100 }
00101 else
00102 {
00103 return ((IObjectIA *)_HostAgent)->sendMessage(msg);
00104 }
00105 }
00106 }