kappanhang/main.go

84 lines
1.4 KiB
Go
Raw Normal View History

2020-10-16 17:13:46 +02:00
package main
import (
2020-10-16 19:25:02 +02:00
"os"
"os/signal"
"strings"
2020-10-16 19:25:02 +02:00
"syscall"
"time"
2020-10-16 17:13:46 +02:00
"github.com/nonoo/kappanhang/log"
)
var gotErrChan = make(chan bool)
2020-10-16 17:13:46 +02:00
func runControlStream(osSignal chan os.Signal) (shouldExit bool, exitCode int) {
// Depleting gotErrChan.
var finished bool
for !finished {
select {
case <-gotErrChan:
default:
finished = true
}
2020-10-18 13:19:52 +02:00
}
c := controlStream{}
defer c.deinit()
2020-10-20 08:47:42 +02:00
if err := c.init(); err != nil {
log.Error(err)
return true, 1
}
if err := c.start(); err != nil {
log.Error(err)
return
}
select {
case <-gotErrChan:
return
case <-osSignal:
log.Print("sigterm received")
return true, 0
}
}
func reportError(err error) {
if !strings.Contains(err.Error(), "use of closed network connection") {
log.ErrorC(log.GetCallerFileName(true), ": ", err)
}
// Non-blocking notify.
select {
case gotErrChan <- true:
default:
}
2020-10-16 19:25:02 +02:00
}
2020-10-16 17:13:46 +02:00
func main() {
log.Init()
2020-10-20 23:30:23 +02:00
log.Print("kappanhang by Norbert Varga HA2NON and Akos Marton ES1AKOS https://github.com/nonoo/kappanhang")
2020-10-16 17:13:46 +02:00
parseArgs()
2020-10-20 08:47:42 +02:00
osSignal := make(chan os.Signal, 1)
signal.Notify(osSignal, os.Interrupt, syscall.SIGTERM)
var shouldExit bool
var exitCode int
for !shouldExit {
shouldExit, exitCode = runControlStream(osSignal)
if !shouldExit {
log.Print("restarting control stream...")
select {
case <-time.NewTimer(3 * time.Second).C:
case <-osSignal:
shouldExit = true
}
}
}
2020-10-20 08:49:17 +02:00
log.Print("exiting")
os.Exit(exitCode)
2020-10-16 17:13:46 +02:00
}