| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 
 | import ("crypto/tls"
 "fmt"
 
 "github.com/apache/thrift/lib/go/thrift"
 "github.com/apache/thrift/tutorial/go/gen-go/tutorial"
 )
 
 func runServer(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, addr string, secure bool) error {
 var transport thrift.TServerTransport
 var err error
 if secure {
 cfg := new(tls.Config)
 if cert, err := tls.LoadX509KeyPair("server.crt", "server.key"); err == nil {
 cfg.Certificates = append(cfg.Certificates, cert)
 } else {
 return err
 }
 transport, err = thrift.NewTSSLServerSocket(addr, cfg)
 } else {
 transport, err = thrift.NewTServerSocket(addr)
 }
 
 if err != nil {
 return err
 }
 fmt.Printf("%T\n", transport)
 handler := NewCalculatorHandler()
 processor := tutorial.NewCalculatorProcessor(handler)
 server := thrift.NewTSimpleServer4(processor, transport, transportFactory, protocolFactory)
 
 fmt.Println("Starting the simple server... on ", addr)
 return server.Serve()
 This snippet was generated by Apache Thrift's source tree docs: tutorial/go/src/server.go
 
 Server Handler
 import (
 "context"
 "fmt"
 "strconv"
 
 "github.com/apache/thrift/tutorial/go/gen-go/shared"
 "github.com/apache/thrift/tutorial/go/gen-go/tutorial"
 )
 
 type CalculatorHandler struct {
 log map[int]*shared.SharedStruct
 }
 
 func NewCalculatorHandler() *CalculatorHandler {
 return &CalculatorHandler{log: make(map[int]*shared.SharedStruct)}
 }
 
 func (p *CalculatorHandler) Ping(ctx context.Context) (err error) {
 fmt.Print("ping()\n")
 return nil
 }
 
 func (p *CalculatorHandler) Add(ctx context.Context, num1 int32, num2 int32) (retval17 int32, err error) {
 fmt.Print("add(", num1, ",", num2, ")\n")
 return num1 + num2, nil
 }
 
 func (p *CalculatorHandler) Calculate(ctx context.Context, logid int32, w *tutorial.Work) (val int32, err error) {
 fmt.Print("calculate(", logid, ", {", w.Op, ",", w.Num1, ",", w.Num2, "})\n")
 switch w.Op {
 case tutorial.Operation_ADD:
 val = w.Num1 + w.Num2
 case tutorial.Operation_SUBTRACT:
 val = w.Num1 - w.Num2
 case tutorial.Operation_MULTIPLY:
 val = w.Num1 * w.Num2
 case tutorial.Operation_DIVIDE:
 if w.Num2 == 0 {
 ouch := tutorial.NewInvalidOperation()
 ouch.WhatOp = int32(w.Op)
 ouch.Why = "Cannot divide by 0"
 err = ouch
 return
 }
 val = w.Num1 / w.Num2
 default:
 ouch := tutorial.NewInvalidOperation()
 ouch.WhatOp = int32(w.Op)
 ouch.Why = "Unknown operation"
 err = ouch
 return
 }
 entry := shared.NewSharedStruct()
 entry.Key = logid
 entry.Value = strconv.Itoa(int(val))
 k := int(logid)
 /*
 oldvalue, exists := p.log[k]
 if exists {
 fmt.Print("Replacing ", oldvalue, " with ", entry, " for key ", k, "\n")
 } else {
 fmt.Print("Adding ", entry, " for key ", k, "\n")
 }
 */
 p.log[k] = entry
 return val, err
 }
 
 func (p *CalculatorHandler) GetStruct(ctx context.Context, key int32) (*shared.SharedStruct, error) {
 fmt.Print("getStruct(", key, ")\n")
 v := p.log[int(key)]
 return v, nil
 }
 
 func (p *CalculatorHandler) Zip(ctx context.Context) (err error) {
 fmt.Print("zip()\n")
 return nil
 }
 
 |