/*
 * This is a sample uptime server. All it does is tell you
 * how long the mud's been up, then disconnects the telnet
 * session. If your mud game port is 6666, this will be
 * on 6668.
*/
#include <network.h>
int port = query_host_port()+2;
void StartServer();
int SendUptime(int fd);
void create(){
    StartServer();
}
void StartServer(){
    int sockstat, listsock;
    listsock = socket_create(STREAM,"read_callback","close_callback");
    if(listsock < 0){
        debug("Couldn't create socket. errorcode: "+listsock);
        return;
    }
    sockstat = socket_bind(listsock,port);
    if(sockstat < 0){
        debug("Couldn't bind socket. errorcode: "+sockstat);
        return;
    }
    sockstat = socket_listen(listsock,"listen_callback");
    if(sockstat < 0){
        debug("Couldn't listen on socket. errorcode: "+sockstat);
        return;
    }
}
static void listen_callback(int fd){
    int sockstat = socket_accept(fd,"read_callback","write_callback");
    if(sockstat < 0){
        debug("Couldn't accept on socket. errorcode: "+sockstat);
        return;
    }
    debug("uptime server: listening.");
    SendUptime(sockstat);
}
static void close_callback(int fd){
    debug("I'm wanting to close fd"+fd+" now.");
}
static mixed read_callback(int fd, mixed data){
    debug("quitting. fd: "+fd+", "+identify(socket_status(fd)));
    debug(socket_close(fd));
    return 1;
}
int SendUptime(int fd){
    socket_write(fd, "\n"+mud_name()+" has been up "+time_elapsed(uptime())+"\n\n");
    debug("socket_close: "+socket_close(fd));
    return 1;
}