package main import "log" import "os" import "time" import "net" import "fmt" import "bufio" // import "strings" import "git.wit.com/wit/shell" import "git.wit.com/jcarr/dnssecsocket" // import "github.com/svent/go-nbreader" // import "github.com/gookit/config" // import "github.com/davecgh/go-spew/spew" var socketAlive bool = false var connCurrent *net.TCPConn const ( CONN_HOST = "v000185.testing.com.customers.wprod.wit.com" CONN_PORT = "3333" CONN_PROTO = "tcp" ) func writelnToSocket(aline string) { if connCurrent == nil { log.Println("SOCKET IS NOT CONNECTED") return } // a, err := connCurrent.Write([]byte(string(text + "\n"))) a, err := connCurrent.Write([]byte(string(aline + "\n"))) if err != nil { log.Println("SOCKET WRITE FAILED with err=", err, a) connCurrent = nil return } } func writeBytesToSocket(data []byte) { if (connCurrent == nil) { log.Println("WIT Socket is currently down (connCurrent == nil)") return } a, err := connCurrent.Write(data) log.Println("WIT Socket Write() returned:", a, err) } func socketToWIT(myhostname string) { remoteAddr := CONN_HOST + ":" + CONN_PORT log.Println("remoteAddr:", remoteAddr) localTCPAddr := dnssecsocket.ResolveIPv6hostname(myhostname) remoteTCPAddr, err := net.ResolveTCPAddr("tcp", remoteAddr) // connect to this socket conn, err := net.DialTCP(CONN_PROTO, localTCPAddr, remoteTCPAddr) if err != nil { log.Println(CONN_HOST, CONN_PORT, CONN_PROTO) log.Println(err) log.Println("socket connect failed. Not sure what to do here. os.Exit() ?") connCurrent = nil return } defer conn.Close() log.Println("socket connected to", CONN_PROTO, CONN_HOST, CONN_PORT) tmp, err := conn.Write([]byte(string(myhostname + "\n"))) log.Println("conn.Write:", tmp, err) if (err != nil) { fmt.Println("SOCKET DIED with err=", err) connCurrent = nil return } connStdin, err := conn.File() if (err != nil) { fmt.Println("SOCKET File() failed with err=", err) connCurrent = nil return } // set the socketAlive flag to true since the socket appears to be alive socketAlive = true connCurrent = conn newreader := bufio.NewReader(connStdin) shell.NonBlockingReader(newreader, os.Stdout) } func retrySocket() { for { log.Println("Sleep for 3 seconds, then try to establish connection to WIT") time.Sleep(3 * 1000 * 1000 * 1000) // for now, loop until I figure out what to actually do socketToWIT("librem15.lab.wit.com") } }