#include "/inc/base.inc" #include "/inc/gc.inc" #include "/sys/input_to.h" #include "/sys/rtlimits.h" /* These functions are for the clone (the player object). */ void start_client() { net_connect("127.0.0.1", query_mud_port()); } int logon(int flag) { set_prompt(""); return 1; } /* These functions are for the blueprint (the virtual player that sends us the commands). */ /* We make two steps, one without and one with catch(). * The later might abort the thread, so we have to start * a callout to shutdown with an error. */ int step = 0; object connect() { set_prompt(""); while(get_eval_cost() > 100000); call_out(#'shutdown, 0, 1); if(step) catch(efun::input_to("bla",INPUT_NOECHO); reserve 50000); else efun::input_to("bla",INPUT_NOECHO); remove_call_out(#'shutdown); if(get_eval_cost() > 100000) { msg("Got my eval ticks back: FAILURE.\n"); shutdown(1); } else if(!step) { step=1; this_object()->run_test2(); } else start_gc(#'shutdown); return 0; } void run_test() { msg("\nRunning test for #0000534:\n" "--------------------------\n"); set_driver_hook(H_NOECHO, function void(int flag, object ob) { if(previous_object()) raise_error("Intentional error in H_NOECHO hook.\n"); }); set_limits(LIMIT_EVAL, 200000); /* Waiting until LDMud is ready for users. */ call_out("run_test2", 0); } void run_test2() { object dummy; dummy = clone_object(this_object()); dummy->start_client(); } string *epilog(int eflag) { run_test(); return 0; }