This commit is contained in:
xxjwxc
2020-03-29 21:06:06 +08:00
parent 2ace0bade5
commit 2b6bdf6dc3
85 changed files with 5459 additions and 682 deletions

BIN
server/.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -5,28 +5,48 @@ import (
"os"
"time"
"data/config"
"github.com/xxjwxc/public/dev"
"github.com/gookit/color"
"github.com/jander/golog/logger"
"github.com/kardianos/service"
)
func OnStart(callBack func()) {
name, displayName, desc := config.GetServiceConfig()
type Service struct {
name string
displayName string
desc string
}
func On(n, dn, d string) *Service {
return &Service{
name: n,
displayName: dn,
desc: d,
}
}
func (sv *Service) Start(callBack func()) {
if len(sv.name) == 0 {
fmt.Println(color.Error.Render("Service init faild,must first call On."))
return
}
//name, displayName, desc := config.GetServiceConfig()
p := &program{callBack}
sc := &service.Config{
Name: name,
DisplayName: displayName,
Description: desc,
Name: sv.name,
DisplayName: sv.displayName,
Description: sv.desc,
}
s, err := service.New(p, sc)
//var s, err = service.NewService(name, displayName, desc)
if err != nil {
fmt.Printf("%s unable to start: %s", displayName, err)
fmt.Print(color.Error.Render(fmt.Sprintf("%s unable to start: %s", sv.displayName, err)))
return
}
fmt.Printf("Service \"%s\" do.\n", displayName)
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" do.\n", sv.displayName)))
if len(os.Args) > 1 {
var err error
@@ -36,82 +56,94 @@ func OnStart(callBack func()) {
{
err = s.Install()
if err != nil {
fmt.Printf("Failed to install: %s\n", err)
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to install: %s\n", err)))
return
}
fmt.Printf("Service \"%s\" installed.\n", displayName)
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" installed.\n", sv.displayName)))
}
case "remove":
{
err = s.Uninstall()
if err != nil {
fmt.Printf("Failed to remove: %s\n", err)
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to remove: %s\n", err)))
return
}
fmt.Printf("Service \"%s\" removed.\n", displayName)
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" removed.\n", sv.displayName)))
}
case "run":
{
err = s.Run()
if err != nil {
fmt.Printf("Failed to run: %s\n", err)
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to run: %s\n", err)))
return
}
fmt.Printf("Service \"%s\" run.\n", displayName)
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" run.\n", sv.displayName)))
}
case "debug":
{
dev.OnSetDev(true)
err = s.Run()
if err != nil {
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to debug: %s\n", err)))
return
}
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" run.\n", sv.displayName)))
}
case "start":
{
err = s.Start()
if err != nil {
fmt.Printf("Failed to start: %s\n", err)
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to start: %s\n", err)))
return
}
fmt.Println("starting check service:", displayName)
fmt.Print(color.Info.Render(fmt.Sprintf("starting check service:%v\n", sv.displayName)))
ticker := time.NewTicker(1 * time.Second)
<-ticker.C
st, err := IsStart(name)
var sit ServiceTools
st, err := sit.IsStart(sv.name)
if err != nil {
fmt.Println(err)
color.Error.Render(err)
return
} else {
if st == Stopped || st == StopPending {
fmt.Printf("Service \"%s\" is Stopped.\n", displayName)
fmt.Println("can't to start service.")
return
}
}
fmt.Printf("Service \"%s\" started.\n", displayName)
if st == Stopped || st == StopPending {
fmt.Print(color.Error.Render(fmt.Sprintf("Service \"%s\" is Stopped.\n", sv.displayName)))
fmt.Print(color.Error.Render("can't to start service."))
return
}
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" started.\n", sv.displayName)))
}
case "stop":
{
err = s.Stop()
if err != nil {
fmt.Printf("Failed to stop: %s\n", err)
fmt.Print(color.Error.Render(fmt.Sprintf("Failed to stop: %s\n", err)))
return
}
st, err := IsStart(name)
var sit ServiceTools
st, err := sit.IsStart(sv.name)
if err != nil {
fmt.Println(err)
return
} else {
if st == Running || st == StartPending {
fmt.Printf("Service \"%s\" is Started.\n", displayName)
fmt.Println("can't to stop service.")
return
}
}
fmt.Printf("Service \"%s\" stopped.\n", displayName)
if st == Running || st == StartPending {
fmt.Print(color.Error.Render(fmt.Sprintf("Service \"%s\" is Started.\n", sv.displayName)))
fmt.Print(color.Error.Render("can't to stop service."))
return
}
fmt.Print(color.Info.Render(fmt.Sprintf("Service \"%s\" stopped.\n", sv.displayName)))
}
}
return
} else {
fmt.Print("Failed to read args\n")
//return
}
fmt.Print(color.Note.Render("Failed to read args\n"))
if err = s.Run(); err != nil {
logger.Error(err)
}
@@ -132,6 +164,6 @@ func (p *program) Stop(s service.Service) error {
return nil
}
type ServiceTools interface {
type IServiceTools interface {
IsStart(name string) (status int, err error)
}

10
server/server_darwin.go Normal file
View File

@@ -0,0 +1,10 @@
package server
type ServiceTools struct {
//i IServiceTools
}
func (s *ServiceTools) IsStart(name string) (st int, err error) {
st = NOTFIND
return
}

View File

@@ -6,11 +6,11 @@ import (
"strings"
)
type WindowsServiceTools struct {
i ServiceTools
type ServiceTools struct {
//i IServiceTools
}
func IsStart(name string) (st int, err error) {
func (s *ServiceTools) IsStart(name string) (st int, err error) {
f, _ := exec.Command("service", name, "status").Output()
st = NOTFIND

14
server/server_test.go Normal file
View File

@@ -0,0 +1,14 @@
package server
import (
"fmt"
"testing"
)
func CallBack() {
fmt.Println("aa")
}
func TestDomain(t *testing.T) {
On("n", "dn", "d").Start(CallBack)
}

View File

@@ -5,11 +5,11 @@ import (
"github.com/btcsuite/winsvc/svc"
)
type WindowsServiceTools struct {
i ServiceTools
type ServiceTools struct {
//i IServiceTools
}
func IsStart(name string) (st int, err error) {
func (s *ServiceTools) IsStart(name string) (st int, err error) {
var m *mgr.Mgr
m, err = mgr.Connect()
if err != nil {
@@ -17,14 +17,14 @@ func IsStart(name string) (st int, err error) {
}
defer m.Disconnect()
s, err := m.OpenService(name)
sv, err := m.OpenService(name)
if err != nil {
return 0, err
}
defer s.Close()
defer sv.Close()
var ss svc.Status
ss, err = s.Query()
ss, err = sv.Query()
st = int(ss.State)
return
}