blob: b27606daa1d26b91c887cd5ff7c4f19627461c16 [file] [log] [blame]
#pragma strict_types, save_types, rtt_checks, pedantic
#pragma no_clone, no_shadow, no_inherit
#include <intermud.h>
#include <regexp.h>
#include <living/comm.h>
#include <defines.h>
#include <daemon/mand.h>
protected nosave string currentname = "INETD-service";
public string service_name()
{
return "undefined";
}
public string name(int egal)
{
return currentname || "INETD-"+service_name();
}
public string Name(int egal)
{
return capitalize(name(egal));
}
// we received a reply to one of our requests.
// Note: if response is 0, the peer did not respond (timeout)...
protected void recv_reply(int id, mapping request, mapping response)
{
if(response)
{
if (stringp(response[RECIPIENT]))
{
object ob = find_player(response[RECIPIENT])
|| find_object(response[RECIPIENT]);
if (ob)
{
currentname = capitalize(data[SENDER])+"@"+capitalize(data[NAME]);
ob->ReceiveMsg(regreplace(response[DATA],"[:^print:]|\n","",1),
MT_NOTIFICATION, service_name(), 0, ME);
currentname = 0;
}
}
else
{
// no response, timeout...
if (request[SENDER] && stringp(request[SENDER]))
{
object ob = find_player(request[SENDER])
|| find_object(request[SENDER]);
if (ob)
ob->ReceiveMsg("Das Mud \'" + request[NAME] +
"\' konnte nicht erreicht werden.\n",
MT_NOTIFICATION, 0, service_name(), ME);
}
}
}
// we received an intermud request
protected void recv_request(mapping data)
{
// implement it!
raise_error("recv_request() has to be implemented!\n");
}
// send request via intermud
public int request(string mudname, string|int data)
{
return INETD->send(mudname, ([REQUEST: servicename(),
DATA: data,
SENDER: getuid(previous_object())]),
#'recv_reply) > 0;
}
protected void create()
{
INETD->register_service(service_name(), #'recv_request);
currentname = "INETD-"+service_name();
}
public varargs int remove(int silent)
{
INETD->unregister_service(service_name());
destruct(this_object());
}