func handleClient(client *tutorial.CalculatorClient) (err error) { client.Ping() fmt.Println("ping()") sum, _ := client.Add(1, 1) fmt.Print("1+1=", sum, "\n") work := tutorial.NewWork() work.Op = tutorial.Operation_DIVIDE work.Num1 = 1 work.Num2 = 0 quotient, err := client.Calculate(1, work) if err != nil { switch v := err.(type) { case *tutorial.InvalidOperation: fmt.Println("Invalid operation:", v) default: fmt.Println("Error during operation:", err) } return err } else { fmt.Println("Whoa we can divide by 0 with new value:", quotient) } work.Op = tutorial.Operation_SUBTRACT work.Num1 = 15 work.Num2 = 10 diff, err := client.Calculate(1, work) if err != nil { switch v := err.(type) { case *tutorial.InvalidOperation: fmt.Println("Invalid operation:", v) default: fmt.Println("Error during operation:", err) } return err } else { fmt.Print("15-10=", diff, "\n") } log, err := client.GetStruct(1) if err != nil { fmt.Println("Unable to get struct:", err) return err } else { fmt.Println("Check log:", log.Value) } return err }
func main() { flag.Usage = Usage var host string var port int var protocol string var urlString string var framed bool var useHttp bool var parsedUrl url.URL var trans thrift.TTransport _ = strconv.Atoi _ = math.Abs flag.Usage = Usage flag.StringVar(&host, "h", "localhost", "Specify host and port") flag.IntVar(&port, "p", 9090, "Specify port") flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson, json)") flag.StringVar(&urlString, "u", "", "Specify the url") flag.BoolVar(&framed, "framed", false, "Use framed transport") flag.BoolVar(&useHttp, "http", false, "Use http") flag.Parse() if len(urlString) > 0 { parsedUrl, err := url.Parse(urlString) if err != nil { fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) flag.Usage() } host = parsedUrl.Host useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == "http" } else if useHttp { _, err := url.Parse(fmt.Sprint("http://", host, ":", port)) if err != nil { fmt.Fprintln(os.Stderr, "Error parsing URL: ", err) flag.Usage() } } cmd := flag.Arg(0) var err error if useHttp { trans, err = thrift.NewTHttpClient(parsedUrl.String()) } else { portStr := fmt.Sprint(port) if strings.Contains(host, ":") { host, portStr, err = net.SplitHostPort(host) if err != nil { fmt.Fprintln(os.Stderr, "error with host:", err) os.Exit(1) } } trans, err = thrift.NewTSocket(net.JoinHostPort(host, portStr)) if err != nil { fmt.Fprintln(os.Stderr, "error resolving address:", err) os.Exit(1) } if framed { trans = thrift.NewTFramedTransport(trans) } } if err != nil { fmt.Fprintln(os.Stderr, "Error creating transport", err) os.Exit(1) } defer trans.Close() var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() break case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() break case "json": protocolFactory = thrift.NewTJSONProtocolFactory() break case "binary", "": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() break default: fmt.Fprintln(os.Stderr, "Invalid protocol specified: ", protocol) Usage() os.Exit(1) } client := tutorial.NewCalculatorClientFactory(trans, protocolFactory) if err := trans.Open(); err != nil { fmt.Fprintln(os.Stderr, "Error opening socket to ", host, ":", port, " ", err) os.Exit(1) } switch cmd { case "ping": if flag.NArg()-1 != 0 { fmt.Fprintln(os.Stderr, "Ping requires 0 args") flag.Usage() } fmt.Print(client.Ping()) fmt.Print("\n") break case "add": if flag.NArg()-1 != 2 { fmt.Fprintln(os.Stderr, "Add requires 2 args") flag.Usage() } tmp0, err7 := (strconv.Atoi(flag.Arg(1))) if err7 != nil { Usage() return } argvalue0 := int32(tmp0) value0 := argvalue0 tmp1, err8 := (strconv.Atoi(flag.Arg(2))) if err8 != nil { Usage() return } argvalue1 := int32(tmp1) value1 := argvalue1 fmt.Print(client.Add(value0, value1)) fmt.Print("\n") break case "calculate": if flag.NArg()-1 != 2 { fmt.Fprintln(os.Stderr, "Calculate requires 2 args") flag.Usage() } tmp0, err9 := (strconv.Atoi(flag.Arg(1))) if err9 != nil { Usage() return } argvalue0 := int32(tmp0) value0 := argvalue0 arg10 := flag.Arg(2) mbTrans11 := thrift.NewTMemoryBufferLen(len(arg10)) defer mbTrans11.Close() _, err12 := mbTrans11.WriteString(arg10) if err12 != nil { Usage() return } factory13 := thrift.NewTSimpleJSONProtocolFactory() jsProt14 := factory13.GetProtocol(mbTrans11) argvalue1 := tutorial.NewWork() err15 := argvalue1.Read(jsProt14) if err15 != nil { Usage() return } value1 := argvalue1 fmt.Print(client.Calculate(value0, value1)) fmt.Print("\n") break case "zip": if flag.NArg()-1 != 0 { fmt.Fprintln(os.Stderr, "Zip requires 0 args") flag.Usage() } fmt.Print(client.Zip()) fmt.Print("\n") break case "getStruct": if flag.NArg()-1 != 1 { fmt.Fprintln(os.Stderr, "GetStruct requires 1 args") flag.Usage() } tmp0, err16 := (strconv.Atoi(flag.Arg(1))) if err16 != nil { Usage() return } argvalue0 := int32(tmp0) value0 := argvalue0 fmt.Print(client.GetStruct(value0)) fmt.Print("\n") break case "": Usage() break default: fmt.Fprintln(os.Stderr, "Invalid function ", cmd) } }
func main() { flag.Usage = Usage var host string var port int var protocol string var urlString string var framed bool var useHttp bool var help bool var parsedUrl url.URL var trans thrift.TTransport flag.Usage = Usage flag.StringVar(&host, "h", "localhost", "Specify host and port") flag.IntVar(&port, "p", 9090, "Specify port") flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson, json)") flag.StringVar(&urlString, "u", "", "Specify the url") flag.BoolVar(&framed, "framed", false, "Use framed transport") flag.BoolVar(&useHttp, "http", false, "Use http") flag.BoolVar(&help, "help", false, "See usage string") flag.Parse() if help || flag.NArg() == 0 { flag.Usage() } if len(urlString) > 0 { parsedUrl, err := url.Parse(urlString) if err != nil { fmt.Fprint(os.Stderr, "Error parsing URL: ", err.Error(), "\n") flag.Usage() } host = parsedUrl.Host useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == "http" } else if useHttp { _, err := url.Parse(fmt.Sprint("http://", host, ":", port)) if err != nil { fmt.Fprint(os.Stderr, "Error parsing URL: ", err.Error(), "\n") flag.Usage() } } cmd := flag.Arg(0) var err error if useHttp { trans, err = thrift.NewTHttpClient(parsedUrl.String()) } else { addr, err := net.ResolveTCPAddr("tcp", fmt.Sprint(host, ":", port)) if err != nil { fmt.Fprint(os.Stderr, "Error resolving address", err.Error()) os.Exit(1) } trans, err = thrift.NewTNonblockingSocketAddr(addr) if framed { trans = thrift.NewTFramedTransport(trans) } } if err != nil { fmt.Fprint(os.Stderr, "Error creating transport", err.Error()) os.Exit(1) } defer trans.Close() var protocolFactory thrift.TProtocolFactory switch protocol { case "compact": protocolFactory = thrift.NewTCompactProtocolFactory() break case "simplejson": protocolFactory = thrift.NewTSimpleJSONProtocolFactory() break case "json": protocolFactory = thrift.NewTJSONProtocolFactory() break case "binary", "": protocolFactory = thrift.NewTBinaryProtocolFactoryDefault() break default: fmt.Fprint(os.Stderr, "Invalid protocol specified: ", protocol, "\n") Usage() os.Exit(1) } client := tutorial.NewCalculatorClientFactory(trans, protocolFactory) if err = trans.Open(); err != nil { fmt.Fprint(os.Stderr, "Error opening socket to ", host, ":", port, " ", err.Error()) os.Exit(1) } switch cmd { case "ping": if flag.NArg()-1 != 0 { fmt.Fprint(os.Stderr, "Ping requires 0 args\n") flag.Usage() } fmt.Print(client.Ping()) fmt.Print("\n") break case "add": if flag.NArg()-1 != 2 { fmt.Fprint(os.Stderr, "Add requires 2 args\n") flag.Usage() } tmp0, err62 := (strconv.Atoi(flag.Arg(1))) if err62 != nil { Usage() return } argvalue0 := int32(tmp0) value0 := argvalue0 tmp1, err63 := (strconv.Atoi(flag.Arg(2))) if err63 != nil { Usage() return } argvalue1 := int32(tmp1) value1 := argvalue1 fmt.Print(client.Add(value0, value1)) fmt.Print("\n") break case "calculate": if flag.NArg()-1 != 2 { fmt.Fprint(os.Stderr, "Calculate requires 2 args\n") flag.Usage() } tmp0, err64 := (strconv.Atoi(flag.Arg(1))) if err64 != nil { Usage() return } argvalue0 := int32(tmp0) value0 := argvalue0 arg65 := flag.Arg(2) mbTrans66 := thrift.NewTMemoryBufferLen(len(arg65)) defer mbTrans66.Close() _, err67 := mbTrans66.WriteString(arg65) if err67 != nil { Usage() return } factory68 := thrift.NewTSimpleJSONProtocolFactory() jsProt69 := factory68.GetProtocol(mbTrans66) argvalue1 := tutorial.NewWork() err70 := argvalue1.Read(jsProt69) if err70 != nil { Usage() return } value1 := argvalue1 fmt.Print(client.Calculate(value0, value1)) fmt.Print("\n") break case "zip": if flag.NArg()-1 != 0 { fmt.Fprint(os.Stderr, "Zip requires 0 args\n") flag.Usage() } fmt.Print(client.Zip()) fmt.Print("\n") break case "": Usage() break default: fmt.Fprint(os.Stderr, "Invalid function ", cmd, "\n") } }