Repos / gorts / 36f635e329
commit 36f635e329e83b6e5c78781c7bc2195b48db17ca
Author: Nhân <hi@imnhan.com>
Date: Thu Jun 22 10:08:41 2023 +0700
non-blocking ipc PoC
diff --git a/main.go b/main.go
index 6ee2a7b..74e89a4 100644
--- a/main.go
+++ b/main.go
@@ -92,22 +92,6 @@ func startGUI() {
scanner := bufio.NewScanner(stdout)
scanner.Split(netstring.SplitFunc)
- next := func() string {
- scanner.Scan()
- v := scanner.Text()
- println("-->", v)
- return v
- }
-
- respondOld := func(s string) {
- debug := "<-- " + s
- if len(debug) > 35 {
- debug = debug[:35] + "[...]"
- }
- println(debug)
- io.WriteString(stdin, netstring.Encode(s))
- }
-
respond := func(ss ...string) {
debug := fmt.Sprintf("<-- %v", ss)
if len(debug) > 35 {
@@ -183,12 +167,12 @@ func startGUI() {
}
respond(names...)
- case "fetchplayers": // FIXME
- startggInputs.Token = next()
- startggInputs.Slug = next()
+ case "fetchplayers":
+ startggInputs.Token = req[1]
+ startggInputs.Slug = req[2]
time.Sleep(3 * time.Second)
- respondOld("fetchplayers__resp")
- respondOld("All done.")
+ fmt.Fprintln(stdin, "fetchplayers__resp")
+ respond("All done.")
startggInputs.Write(StartggFile)
}
}
diff --git a/tcl/main.tcl b/tcl/main.tcl
index 87935b1..2918868 100644
--- a/tcl/main.tcl
+++ b/tcl/main.tcl
@@ -183,12 +183,18 @@ proc initialize {} {
# Very simple IPC system where Tcl client talks to Go server via stdin/stdout
# using netstrings as wire format.
-proc ipc {method args} {
+proc ipc_write {method args} {
set payload [concat $method $args]
puts -nonewline [netstrings $payload]
flush stdout
+}
+proc ipc_read {} {
return [decodenetstrings [readnetstring stdin]]
}
+proc ipc {method args} {
+ ipc_write $method $args
+ return [ipc_read]
+}
proc loadicon {} {
set resp [ipc "geticon"]
@@ -283,13 +289,11 @@ proc fetchplayers {} {
.n.s.token configure -state disabled
.n.s.tournamentslug configure -state disabled
set ::startgg(msg) "Fetching..."
- puts fetchplayers
- puts $::startgg(token)
- puts $::startgg(slug)
+ ipc_write "fetchplayers" $::startgg(token) $::startgg(slug)
}
proc fetchplayers__resp {} {
- set ::startgg(msg) [gets stdin]
+ set ::startgg(msg) [lindex [ipc_read] 0]
.n.s.fetch configure -state normal
.n.s.token configure -state normal
.n.s.tournamentslug configure -state normal