aboutsummaryrefslogtreecommitdiff
path: root/contrib/bluegnu2.0.3/lib/serverUtils.itcl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bluegnu2.0.3/lib/serverUtils.itcl')
-rw-r--r--contrib/bluegnu2.0.3/lib/serverUtils.itcl51
1 files changed, 51 insertions, 0 deletions
diff --git a/contrib/bluegnu2.0.3/lib/serverUtils.itcl b/contrib/bluegnu2.0.3/lib/serverUtils.itcl
new file mode 100644
index 0000000..7e7c8bb
--- /dev/null
+++ b/contrib/bluegnu2.0.3/lib/serverUtils.itcl
@@ -0,0 +1,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) {}
+ }
+}
+