mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-26 20:01:19 +08:00
rebase
This commit is contained in:
BIN
server/.DS_Store
vendored
Normal file
BIN
server/.DS_Store
vendored
Normal file
Binary file not shown.
110
server/server.go
110
server/server.go
@@ -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
10
server/server_darwin.go
Normal 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
|
||||
}
|
@@ -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
14
server/server_test.go
Normal 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)
|
||||
}
|
@@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user