X-Git-Url: https://git.realraum.at/?p=svn42.git;a=blobdiff_plain;f=go%2Fdoor_client_zmq%2Fmain.go;fp=go%2Fdoor_client_zmq%2Fmain.go;h=0000000000000000000000000000000000000000;hp=7ce4fb809babac5a1226299ba712fd3ae3a87eac;hb=c775b5528f8f96e75c28264b9cea8525c6da9298;hpb=a87c91b7d4544703879b7ef6e472b863765e3949 diff --git a/go/door_client_zmq/main.go b/go/door_client_zmq/main.go deleted file mode 100644 index 7ce4fb8..0000000 --- a/go/door_client_zmq/main.go +++ /dev/null @@ -1,100 +0,0 @@ -// (c) Bernhard Tittelbach, 2013 - -package main - -import ( - "fmt" - "os" - "flag" - "log" - "bufio" - "bytes" -) - - -// ---------- Main Code ------------- - -var ( - cmd_port_ string - sub_port_ string - cmd_method_ string - cmd_user_ string -) - -func init() { - flag.StringVar(&cmd_port_, "cmdport", "ipc:///run/tuer/door_cmd.ipc", "zmq command socket path") - flag.StringVar(&sub_port_, "pubport", "tcp://torwaechter.realraum.at:4242", "zmq subscribe/listen socket path") - flag.StringVar(&cmd_method_, "method", "", "zmq cmd method") - flag.StringVar(&cmd_user_, "usernick", "", "zmq cmd user identity") - flag.Parse() -} - -func LineReader(out chan <- [][]byte, stdin * os.File) { - linescanner := bufio.NewScanner(stdin) - linescanner.Split(bufio.ScanLines) - defer close(out) - for linescanner.Scan() { - if err := linescanner.Err(); err != nil { - log.Print(err) - return - } - //text := bytes.Fields(linescanner.Bytes()) //this returns a slice (aka pointer, no array deep-copy here) - text := bytes.Fields([]byte(linescanner.Text())) //this allocates a string and slices it -> no race-condition with overwriting any data - if len(text) == 0 { - continue - } - out <- text - } -} - -func ByteArrayToString(bb [][]byte) string { - b := bytes.Join(bb, []byte(" ")) - return string(b) -} - -func main() { - zmqctx, cmd_chans, sub_chans := ZmqsInit(cmd_port_, sub_port_) - defer cmd_chans.Close() - defer sub_chans.Close() - defer zmqctx.Close() - var listen bool - var ignore_next uint = 0 - - user_input_chan := make(chan [][]byte, 1) - go LineReader(user_input_chan, os.Stdin) - defer os.Stdin.Close() - - for { - select { - case input, input_open := (<- user_input_chan): - if input_open { - if len(input) == 0 { continue } - switch string(input[0]) { - case "help", "?": - fmt.Println("Available Commands: help, listen, quit. Everything else is passed through to door daemon") - case "listen": - listen = true - fmt.Println("Now listening, @ are broadcasts") - case "quit": - os.Exit(0) - default: - ignore_next = 2 - cmd_chans.Out() <- input - reply := <- cmd_chans.In() - fmt.Println(">",ByteArrayToString(reply)) - } - } else { - os.Exit(0) - } - case pubsubstuff := <- sub_chans.In(): - if len(pubsubstuff) == 0 { continue} - if ignore_next > 0 { - ignore_next-- - continue - } - if listen { - fmt.Println("@",ByteArrayToString(pubsubstuff)) - } - } - } -}