aboutsummaryrefslogtreecommitdiff
path: root/contrib/bluegnu2.0.3/lib/serverUtils.itcl
blob: 7e7c8bbd1659795622430a56eb7a309e78c2c51c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#
#
#

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) {}
    }
}