[add] yao socket <name> command
This commit is contained in:
parent
24e9a576ce
commit
200fc22e46
5 changed files with 129 additions and 27 deletions
|
|
@ -94,6 +94,7 @@ func init() {
|
|||
serviceCmd,
|
||||
dumpCmd,
|
||||
restoreCmd,
|
||||
socketCmd,
|
||||
)
|
||||
// rootCmd.SetHelpCommand(helpCmd)
|
||||
rootCmd.PersistentFlags().StringVarP(&appPath, "app", "a", "", L("Application directory"))
|
||||
|
|
|
|||
95
cmd/socket.go
Normal file
95
cmd/socket.go
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/fatih/color"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/yaoapp/gou"
|
||||
"github.com/yaoapp/kun/exception"
|
||||
"github.com/yaoapp/yao/config"
|
||||
"github.com/yaoapp/yao/engine"
|
||||
"github.com/yaoapp/yao/share"
|
||||
)
|
||||
|
||||
var socketCmd = &cobra.Command{
|
||||
Use: "socket",
|
||||
Short: L("Open socket"),
|
||||
Long: L("Open socket"),
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
defer share.SessionStop()
|
||||
defer gou.KillPlugins()
|
||||
defer func() {
|
||||
err := exception.Catch(recover())
|
||||
if err != nil {
|
||||
fmt.Println(color.RedString(L("Fatal: %s"), err.Error()))
|
||||
}
|
||||
}()
|
||||
|
||||
Boot()
|
||||
cfg := config.Conf
|
||||
cfg.Session.IsCLI = true
|
||||
engine.Load(cfg)
|
||||
if len(args) < 1 {
|
||||
fmt.Println(color.RedString(L("Not enough arguments")))
|
||||
fmt.Println(color.WhiteString(share.BUILDNAME + " help"))
|
||||
return
|
||||
}
|
||||
|
||||
name := args[0]
|
||||
pargs := []interface{}{}
|
||||
for i, arg := range args {
|
||||
if i == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
// 解析参数
|
||||
if strings.HasPrefix(arg, "::") {
|
||||
arg := strings.TrimPrefix(arg, "::")
|
||||
var v interface{}
|
||||
err := jsoniter.Unmarshal([]byte(arg), &v)
|
||||
if err != nil {
|
||||
fmt.Println(color.RedString(L("Arguments: %s"), err.Error()))
|
||||
return
|
||||
}
|
||||
pargs = append(pargs, v)
|
||||
fmt.Println(color.WhiteString("args[%d]: %s", i-1, arg))
|
||||
} else if strings.HasPrefix(arg, "\\::") {
|
||||
arg := "::" + strings.TrimPrefix(arg, "\\::")
|
||||
pargs = append(pargs, arg)
|
||||
fmt.Println(color.WhiteString("args[%d]: %s", i-1, arg))
|
||||
} else {
|
||||
pargs = append(pargs, arg)
|
||||
fmt.Println(color.WhiteString("args[%d]: %s", i-1, arg))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
socket, has := gou.Sockets[name]
|
||||
if !has {
|
||||
fmt.Println(color.RedString(L("%s not exists!"), name))
|
||||
return
|
||||
}
|
||||
|
||||
if socket.Mode != "client" {
|
||||
fmt.Println(color.RedString(L("%s not supported yet!"), socket.Mode))
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println(color.WhiteString("\n---------------------------------"))
|
||||
fmt.Println(color.WhiteString(socket.Name))
|
||||
fmt.Println(color.WhiteString("---------------------------------"))
|
||||
fmt.Println(color.GreenString("Mode: %s", socket.Mode))
|
||||
fmt.Println(color.GreenString("Host: %s://%s", socket.Protocol, socket.Host))
|
||||
fmt.Println(color.GreenString("Port: %s", socket.Port))
|
||||
fmt.Println(color.WhiteString("--------------------------------------"))
|
||||
err := socket.Open(pargs...)
|
||||
if err != nil {
|
||||
fmt.Println(color.RedString(L("%s"), err.Error()))
|
||||
return
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ var startCmd = &cobra.Command{
|
|||
if sock.Mode == "server" {
|
||||
go sock.Start()
|
||||
} else if sock.Mode == "client" {
|
||||
go sock.Connect()
|
||||
go sock.Open()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
gou.RegisterProcessHandler("xiang.server.Start", ProcessStart)
|
||||
gou.RegisterProcessHandler("xiang.server.Connect", ProcessConnect)
|
||||
// gou.RegisterProcessHandler("xiang.server.Start", ProcessStart)
|
||||
// gou.RegisterProcessHandler("xiang.server.Open", ProcessOpen)
|
||||
}
|
||||
|
||||
// ProcessStart xiang.server.Start
|
||||
|
|
@ -33,25 +33,31 @@ func ProcessStart(process *gou.Process) interface{} {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ProcessConnect xiang.server.Connect
|
||||
func ProcessConnect(process *gou.Process) interface{} {
|
||||
process.ValidateArgNums(1)
|
||||
// ProcessOpen xiang.server.Open
|
||||
// func ProcessOpen(process *gou.Process) interface{} {
|
||||
// process.ValidateArgNums(1)
|
||||
|
||||
name := process.ArgsString(0)
|
||||
serv, has := gou.Sockets[name]
|
||||
if !has {
|
||||
exception.New("%s does not load", 400, name).Throw()
|
||||
}
|
||||
// name := process.ArgsString(0)
|
||||
// serv, has := gou.Sockets[name]
|
||||
// if !has {
|
||||
// exception.New("%s does not load", 400, name).Throw()
|
||||
// return nil
|
||||
// }
|
||||
|
||||
args := []interface{}{}
|
||||
if process.NumOfArgs() > 1 {
|
||||
args = process.Args[1:]
|
||||
}
|
||||
// args := []interface{}{}
|
||||
// if process.NumOfArgs() > 1 {
|
||||
// args = process.Args[1:]
|
||||
// }
|
||||
|
||||
if serv.Mode != "client" {
|
||||
exception.New("%s mode [%s] not server", 400, name, serv.Mode).Throw()
|
||||
}
|
||||
// if serv.Mode != "client" {
|
||||
// exception.New("%s mode [%s] should be client", 400, name, serv.Mode).Throw()
|
||||
// return nil
|
||||
// }
|
||||
|
||||
serv.Connect(args...)
|
||||
return nil
|
||||
}
|
||||
// err := serv.Open(args...)
|
||||
// if err != nil {
|
||||
// exception.New("%s: %s", 500, name, err.Error()).Throw()
|
||||
// }
|
||||
|
||||
// return nil
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ func TestProcessStart(t *testing.T) {
|
|||
// })
|
||||
}
|
||||
|
||||
func TestProcessConnect(t *testing.T) {
|
||||
Load(config.Conf)
|
||||
// assert.NotPanics(t, func() {
|
||||
// gou.NewProcess("xiang.server.Connect", "rfid_client").Run()
|
||||
// })
|
||||
}
|
||||
// func TestProcessConnect(t *testing.T) {
|
||||
// Load(config.Conf)
|
||||
// // assert.NotPanics(t, func() {
|
||||
// // gou.NewProcess("xiang.server.Connect", "rfid_client").Run()
|
||||
// // })
|
||||
// }
|
||||
|
||||
func check(t *testing.T) {
|
||||
keys := []string{}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue