serverUtils.itcl   [plain text]


#
#
#

proc EvalServer {port {interp {}} {openCmd EvalOpenProc}} {
    puts "in EvalServer"
    socket -server [list EvalAccept $interp $openCmd] $port
}

proc EvalAccept {interp openCmd newsock addr port} {
    global eval

    puts "in EvalAccept"
    set eval(cmdbuf,$newsock) {}
    puts "[fconfigure $newsock]"
    fconfigure $newsock -buffering line
    fileevent $newsock readable [list EvalRead $newsock $interp]
    puts "in EvalAccept: got fileevent"
    if [catch {
	interp eval $interp $openCmd $newsock $addr $port
    }] {
	close $newsock
    }
}

proc EvalOpenProc {sock addr port} {
    puts "in EvalOpenProc"
    # dummy
}

proc EvalRead {sock interp} {
    global eval errorInfo errorCode

    puts "in EvalRead"
    if [eof $sock] {
	close $sock
    } else {
	gets $sock line
	append eval(cmdbuf,$sock) "$line\n"
	if {[string length $eval(cmdbuf,$sock)] && \
		[info complete $eval(cmdbuf,$sock)]} {
	    puts ">$eval(cmdbuf,$sock)<"
	}
	set reply "Done\n"
	puts $sock 1
	puts -nonewline $sock $reply
	flush $sock
	set eval(cmdbuf,$sock) {}
    }
}