| package main; | 
 |  | 
 |  | 
 | /* | 
 |  * Licensed to the Apache Software Foundation (ASF) under one | 
 |  * or more contributor license agreements. See the NOTICE file | 
 |  * distributed with this work for additional information | 
 |  * regarding copyright ownership. The ASF licenses this file | 
 |  * to you under the Apache License, Version 2.0 (the | 
 |  * "License"); you may not use this file except in compliance | 
 |  * with the License. You may obtain a copy of the License at | 
 |  * | 
 |  *   http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, | 
 |  * software distributed under the License is distributed on an | 
 |  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
 |  * KIND, either express or implied. See the License for the | 
 |  * specific language governing permissions and limitations | 
 |  * under the License. | 
 |  */ | 
 |  | 
 |  | 
 | import ( | 
 |   "flag" | 
 |   "fmt" | 
 |   "os" | 
 |   "thrift" | 
 | ) | 
 |  | 
 | func Usage() { | 
 |   fmt.Fprint(os.Stderr, "Usage of ", os.Args[0], " <--server | --client>:\n") | 
 |   flag.PrintDefaults() | 
 |   fmt.Fprint(os.Stderr, "\n") | 
 |   os.Exit(0) | 
 | } | 
 |  | 
 | func main() { | 
 |   flag.Usage = Usage | 
 |   var client bool | 
 |   var server bool | 
 |   var protocol string | 
 |   var framed bool | 
 |   var useHttp bool | 
 |   var help bool | 
 |    | 
 |   flag.BoolVar(&client, "client", false, "Run client") | 
 |   flag.BoolVar(&server, "server", false, "Run server") | 
 |   flag.StringVar(&protocol, "P", "binary", "Specify the protocol (binary, compact, simplejson)") | 
 |   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 || (client && server) || !(client || server) { | 
 |     fmt.Print("flag.NArg() == ", flag.NArg(), "\n") | 
 |     flag.Usage() | 
 |   } | 
 |   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) | 
 |   } | 
 |   transportFactory := thrift.NewTTransportFactory() | 
 |   if framed { | 
 |     transportFactory = thrift.NewTFramedTransportFactory(transportFactory) | 
 |   } | 
 |    | 
 |   if(client) { | 
 |     RunClient(transportFactory, protocolFactory) | 
 |   } else if(server) { | 
 |     RunServer(transportFactory, protocolFactory) | 
 |   } else { | 
 |     flag.Usage() | 
 |   } | 
 |   os.Exit(0) | 
 | } |