// rcsid = "$Header: /weaver2/archive/mudlib/single/resolver.c,v 1.1 1995/04/29 02:08:34 garnett Exp $"
// object: resolver daemon
// author: John Garnett
// date: 1995/04/28
// todo: implement culling so that the cache doesn't grow too large.
mapping cache;
mapping callbacks;
void
create()
{
cache = ([]);
callbacks = ([]);
}
mixed query_cache(string addr, string callback)
{
int tag;
string result;
if (undefinedp(result = cache[addr])) {
tag = resolve(addr, "resolve_callback");
callbacks[tag] = ([
"client" : previous_object(),
"callback" : callback
]);
return tag;
} else {
return result;
}
}
void resolve_callback(string name, string addr, int tag)
{
object client;
if (stringp(addr) && stringp(name)) {
cache[addr] = name;
}
if(tag==-1) log_file("resolver","Detected failed tag of -1\n");
client = callbacks[tag]["client"];
if (client) {
call_other(client, callbacks[tag]["callback"], name, addr, tag);
}
map_delete(callbacks, tag);
}