// $Id: junction.c,v 1.22 2008/03/28 20:05:44 lynx Exp $ // vim:syntax=lpc // // quick attempt at glueing up master and slave to obtain a junction // node in a simple tree-form multicast structure. it is more advanced // than irc, because each place has its own tree, but it's // still not as smart as a routing multicast approach.. -lynX #include #include #include inherit NET_PATH "place/master"; inherit NET_PATH "place/slave"; histClear(a, b, source, vars) { return "master"::histClear(a, b, source, vars); } memberInfo(person) { return "slave"::memberInfo(person); } mixed isValidRelay(mixed x) { return "slave"::isValidRelay(x) || "master"::isValidRelay(x); } #ifndef QUIET_REMOTE_MEMBERS castmsg(source, mc, data, vars) { if (objectp(source) && (abbrev("_request_place_enter", mc) || abbrev("_request_enter", mc) || abbrev("_request_context", mc) || abbrev("_notice_context", mc) || abbrev("_notice_place_enter", mc) || abbrev("_notice_place_leave", mc) || abbrev("_request_leave", mc))) { return "slave"::castmsg(source, mc, data, vars); } return "master"::castmsg(source, mc, data, vars); } castPresence(source, mc, data, vars) { if (source == master || vars["_source_relay"] == master) { return "master"::castmsg(ME, mc, data ? data : "[_nick] enters [_nick_place].", vars + (stringp(source) && is_formal(source) ? ([]) : ([ "_source_relay" : source ]))); } return 0; } #endif msg(source, mc, data, vars) { P1(("junction:msg(%O, %O, %O, %O)\n", source, mc, data, vars)) unless (source == master || vars["_source_relay"] == master || vars["_context"] == master || mc == "_request_link") { return "slave"::msg(source, mc, data, vars); } else { return "master"::msg(source, mc, data, vars); } // going thru both probably results in calling "storic"::msg twice } reboot(reason, restart, pass) { "master"::reboot(reason, restart, pass); return "slave"::reboot(reason, restart, pass); } qJunction() { return 1; }