1
0
Fork 0
forward/main.go

67 lines
903 B
Go
Raw Permalink Normal View History

2018-03-01 20:24:15 +08:00
package main
import (
"log"
2018-03-26 19:48:14 +08:00
"os"
"path/filepath"
"sync"
"github.com/judwhite/go-svc/svc"
2018-03-01 20:24:15 +08:00
)
2018-03-26 19:48:14 +08:00
type program struct {
logFile *os.File
wg sync.WaitGroup
}
2018-03-01 20:24:15 +08:00
func main() {
2018-03-26 19:48:14 +08:00
prg := &program{}
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
if err := svc.Run(prg); err != nil {
2018-03-01 20:24:15 +08:00
log.Fatal(err)
}
2018-03-26 19:48:14 +08:00
}
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
func (p *program) Init(env svc.Environment) error {
if env.IsWindowsService() {
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
2018-03-01 20:24:15 +08:00
if err != nil {
2018-03-26 19:48:14 +08:00
return err
2018-03-01 20:24:15 +08:00
}
2018-03-26 19:48:14 +08:00
logPath := filepath.Join(dir, "forward.log")
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
f, err := os.OpenFile(logPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
2018-03-01 20:24:15 +08:00
if err != nil {
2018-03-26 19:48:14 +08:00
return err
2018-03-01 20:24:15 +08:00
}
2018-03-26 19:48:14 +08:00
p.logFile = f
log.SetOutput(f)
2018-03-01 20:24:15 +08:00
}
2018-03-26 19:48:14 +08:00
setup()
return nil
2018-03-01 20:24:15 +08:00
}
2018-03-26 19:48:14 +08:00
func (p *program) Start() error {
p.wg.Add(1)
go func() {
serve()
p.wg.Done()
}()
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
log.Print("started")
return nil
}
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
func (p *program) Stop() error {
log.Print("stopping...")
2018-03-01 20:24:15 +08:00
2018-03-26 19:48:14 +08:00
ln.Close()
p.wg.Wait()
log.Print("stopped")
return nil
2018-03-01 20:24:15 +08:00
}