github.com/hechain20/hechain@v0.0.0-20220316014945-b544036ba106/integration/chaincode/simple/cmd/main.go (about) 1 /* 2 Copyright hechain. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package main 8 9 import ( 10 "fmt" 11 "io/ioutil" 12 "os" 13 "os/signal" 14 "syscall" 15 16 "github.com/hechain20/hechain/integration/chaincode/simple" 17 "github.com/hyperledger/fabric-chaincode-go/shim" 18 ) 19 20 func handleSignals(handlers map[os.Signal]func()) { 21 var signals []os.Signal 22 for sig := range handlers { 23 signals = append(signals, sig) 24 } 25 26 signalChan := make(chan os.Signal, 1) 27 signal.Notify(signalChan, signals...) 28 29 for sig := range signalChan { 30 fmt.Fprintf(os.Stderr, "Received signal: %d (%s)", sig, sig) 31 handlers[sig]() 32 } 33 } 34 35 func handleSigTerm() { 36 termFile := os.Getenv("ORG1_TERM_FILE") 37 if termFile == "" { 38 termFile = os.Getenv("ORG2_TERM_FILE") 39 } 40 if termFile == "" { 41 return 42 } 43 44 err := ioutil.WriteFile(termFile, []byte("term-file"), 0o644) 45 if err != nil { 46 fmt.Fprintf(os.Stderr, "failed to write term file to %s: %s", termFile, err) 47 } 48 } 49 50 func main() { 51 startErrChan := make(chan error) 52 sigtermChan := make(chan error) 53 54 go handleSignals(map[os.Signal]func(){ 55 syscall.SIGTERM: func() { sigtermChan <- nil }, 56 }) 57 58 go func() { 59 err := shim.Start(&simple.SimpleChaincode{}) 60 if err != nil { 61 startErrChan <- err 62 } 63 }() 64 65 if os.Getenv("DEVMODE_ENABLED") != "" { 66 fmt.Println("starting up in devmode...") 67 } 68 69 var err error 70 select { 71 case err = <-startErrChan: 72 if err != nil { 73 fmt.Fprintf(os.Stderr, "Exiting Simple chaincode: %s", err) 74 os.Exit(2) 75 } 76 os.Exit(0) 77 case <-sigtermChan: 78 handleSigTerm() 79 } 80 }