THRIFT-625: Add support for 'Go'; provided by Aalok Shah.
git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1072478 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tutorial/go/src/GoServer.go b/tutorial/go/src/GoServer.go
new file mode 100644
index 0000000..f70a2a9
--- /dev/null
+++ b/tutorial/go/src/GoServer.go
@@ -0,0 +1,85 @@
+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 (
+ "fmt"
+ "net"
+ "thrift"
+ "thriftlib/tutorial"
+)
+
+
+type GoServer struct {
+ handler tutorial.ICalculator
+ processor *tutorial.CalculatorProcessor
+}
+
+func NewGoServer() *GoServer {
+ handler := NewCalculatorHandler()
+ processor := tutorial.NewCalculatorProcessor(handler)
+ return &GoServer{handler:handler, processor:processor}
+}
+
+func Simple(processor *tutorial.CalculatorProcessor, transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, ch chan int) {
+ addr, err := net.ResolveTCPAddr("localhost:9090")
+ if err != nil {
+ fmt.Print("Error resolving address: ", err.String(), "\n")
+ return
+ }
+ serverTransport, err := thrift.NewTServerSocketAddr(addr)
+ if err != nil {
+ fmt.Print("Error creating server socket: ", err.String(), "\n")
+ return
+ }
+ server := thrift.NewTSimpleServer4(processor, serverTransport, transportFactory, protocolFactory)
+ // Use this for a multithreaded server
+ // TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));
+
+ fmt.Print("Starting the simple server... on ", addr, "\n")
+ for {
+ err = server.Serve()
+ if err != nil {
+ fmt.Print("Error during simple server: ", err.String(), "\n")
+ return
+ }
+ }
+ fmt.Print("Done with the simple server\n")
+ ch <- 1
+}
+
+func Secure(processor *tutorial.CalculatorProcessor) {
+ addr, _ := net.ResolveTCPAddr("localhost:9091")
+ serverTransport, _ := thrift.NewTNonblockingServerSocketAddr(addr)
+ server := thrift.NewTSimpleServer2(processor, serverTransport)
+ fmt.Print("Starting the secure server... on ", addr, "\n")
+ server.Serve()
+ fmt.Print("Done with the secure server\n")
+}
+
+func RunServer(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory) {
+ server := NewGoServer()
+ ch := make(chan int)
+ go Simple(server.processor, transportFactory, protocolFactory, ch)
+ //go Secure(server.processor)
+ _ = <- ch
+}