// This file written completely by Tim Johnson (Tim@TimMUD)

static void create(){ 
	set_persistent(1);
	save::create();
	sockets = ([]);
	connected_muds = ([]);
	if(!mudinfo) mudinfo = ([]);
	if(!mudinfo_updates) mudinfo_updates = ([]);
	if(!mudinfo_update_counter) mudinfo_update_counter = 1;
	if(!listening) listening = ([]);
	if(!channels) channels = ([]);
	if(!channel_updates) channel_updates = ([]);
	if(!channel_update_counter) channel_update_counter = 1;
	if(!router_name) router_name = "*tim";
	if(!router_list) router_list = ({ ({"*tim",  "10.0.0.10 9000"}) });
	log_file("server", "Created when uptime = " + uptime() + "\n");
	debug("server got created",DEB_OTHER);
	call_out("setup", 5);
}

static void setup(){
	debug("setup got called");
	if ((router_socket = socket_create(MUD, "read_callback", "close_callback")) < 0){
		log_file("server", "setup: Failed to create socket.\n");
		return;
	}
	if (socket_bind(router_socket, MYSERVER) < 0) {
		socket_close(router_socket);
		log_file("server", "setup: Failed to bind socket to port.\n");
		return;
	}
	if (socket_listen(router_socket, "listen_callback") < 0) {
		socket_close(router_socket);
		log_file("server", "setup: Failed to listen to socket.\n");
	}
	debug("setup ended");
}

void remove(){
	string mudname;
log_file("server", "Being removed by: "+identify(previous_object())+"\n");
log_file("server", "sockets:"+identify(sockets)+"\n");
	save::remove();
	log_file("server", "Starting to destruct at uptime = " + uptime() + "\n");
	mudinfo_update_counter++; // just increment once... all the connected muds
		// getting simultaneously disconnected is okay to count as one change :)
	foreach(mudname in keys(connected_muds)){
		mudinfo_updates[mudname];
		mudinfo[mudname]["disconnect_time"]=time();
		map_delete(connected_muds,mudname); // unneeded: connected_muds isn't saved anyway
	}
	log_file("server", "Successfully destructed when uptime = " + uptime() + "\n");
	destruct(this_object());
}
int query_prevent_shadow(object ob){ return 1; }