/**
 * TCP Server
 *
 * Demonstrates TCP socket facilities.
 */

import("nexus.system.network")


/**
 * Create TCP server socket
 *
 * params:  host
 *          port#
 * return:  server socket (TCPSocket)
 */
method create_server_socket (host, port)
{
    // create socket
    server = System.Network.SocketStream.new()

    // bind socket to host/port
    print("Binding to host '" + host + "' and port " + port)
    server.bind(host, port)

    // listen for client requests
    name = server.get_local_info()
    print("Waiting for connection on " + name[0] + ":" + name[1]),
    server.listen()

    // return
    server
}


/**
 * Process client requests
 *
 * params:  server socket (TCPSocket)
 * return:  
 */
method handle_client (server)
{
    client = server.accept()

    print("Connected\n")
    print("Client messages:\n")

    do {
        print(msg = client.read_line())
        msg != "goodbye"
    }

    client.close()
}


/**
 * Main
 *
 * params:  host
 *          port#
 * return:  
 */
method main (host, port)
{
    // create TCP server socket
    server = create_server_socket(host, port)

    // process client requests
    handle_client(server)

    // close server socket
    server.close()
}

main(if{varg[0]; "localhost"}, if{varg[1]; 8080})