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
|
|
|
}
|