#!/bin/sh
# Restart with tclsh \
exec tclsh "$0" "$@"

proc log {src msg} {
    puts [format "%-6s: %s" $src $msg]
}

proc accept {chan addr port} {
    log $chan "accepting incoming connection from $addr:$port"
    fconfigure $chan -blocking 0 -buffering line
    fileevent $chan readable [list incoming $chan]
}

proc incoming {chan} {
    set data [gets $chan]

    if {[eof $chan]} {
        log $chan "connection reset by peer"
        log $chan closing
        close $chan
    } else {
        log $chan "received \"$data\""

        set data [string toupper $data]
        log $chan "sending \"$data\""
        puts $chan $data
    }
}

proc main {{port 1777} args} {
    set chan [socket -server accept $port]
    log $chan "listening for incoming connections on port $port"
    log system "entering event loop"
    vwait forever
}

main {expand}$argv

# vim: set ts=4 sts=4 sw=4 tw=80 et:
