func main()

in misc/homework_assignment_1337/src/main.go [39:106]


func main() {
	flag.Usage = Usage
	server := flag.Bool("server", false, "Run server")
	protocol := flag.String("P", "binary", "Specify the protocol (binary, compact, json, simplejson)")
	framed := flag.Bool("framed", false, "Use framed transport")
	buffered := flag.Bool("buffered", false, "Use buffered transport")
	addr := flag.String("addr", "localhost:9090", "Address to listen to")
	secure := flag.Bool("secure", false, "Use tls secure transport")
	key := flag.String("flag", "flag{this_is_this_flag}", "Set the flag value")
	test := flag.Bool("test", false, "Test-solve the challenge")
	flush := flag.Bool("flush", false, "Flush the entries")

	flag.Parse()

	var protocolFactory thrift.TProtocolFactory
	switch *protocol {
	case "compact":
		protocolFactory = thrift.NewTCompactProtocolFactory()
	case "simplejson":
		protocolFactory = thrift.NewTSimpleJSONProtocolFactory()
	case "json":
		protocolFactory = thrift.NewTJSONProtocolFactory()
	case "binary", "":
		protocolFactory = thrift.NewTBinaryProtocolFactoryDefault()
	default:
		fmt.Fprint(os.Stderr, "Invalid protocol specified", protocol, "\n")
		Usage()
		os.Exit(1)
	}

	var transportFactory thrift.TTransportFactory
	if *buffered {
		transportFactory = thrift.NewTBufferedTransportFactory(8192)
	} else {
		transportFactory = thrift.NewTTransportFactory()
	}

	if *framed {
		transportFactory = thrift.NewTFramedTransportFactory(transportFactory)
	}

	if *server {
		go func() {
			time.Sleep(3 * time.Second)
			for {
				fmt.Println("Flushing...")
				if err := runClient(transportFactory, protocolFactory, *addr, *secure, *test, FlushKey); err != nil {
					fmt.Println("error running client:", err)
				}
				if err := runClient(transportFactory, protocolFactory, *addr, *secure, *test, *key); err != nil {
					fmt.Println("error running client:", err)
				}
				time.Sleep(30 * time.Second)
			}
		}()
		if err := runServer(transportFactory, protocolFactory, *addr, *secure); err != nil {
			fmt.Println("error running server:", err)
		}
	} else if *flush {
		if err := runClient(transportFactory, protocolFactory, *addr, *secure, *test, FlushKey); err != nil {
			fmt.Println("error running client:", err)
		}
	} else {
		if err := runClient(transportFactory, protocolFactory, *addr, *secure, *test, *key); err != nil {
			fmt.Println("error running client:", err)
		}
	}
}