any-sync/util/cmd/debug/stdin/service.go
2022-12-01 22:08:01 +01:00

99 lines
1.9 KiB
Go

package stdin
import (
"bufio"
"context"
"fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers"
"os"
"strings"
)
const CName = "debug.stdin"
var log = logger.NewNamed(CName)
type Service interface {
app.ComponentRunnable
}
type service struct {
api api.Service
peers peers.Service
}
func New() Service {
return &service{}
}
func (s *service) Init(a *app.App) (err error) {
s.api = a.MustComponent(api.CName).(api.Service)
s.peers = a.MustComponent(peers.CName).(peers.Service)
return
}
func (s *service) Name() (name string) {
return CName
}
func (s *service) Run(ctx context.Context) (err error) {
go s.readStdin()
return nil
}
func (s *service) Close(ctx context.Context) (err error) {
return nil
}
func (s *service) readStdin() {
reader := bufio.NewReader(os.Stdin)
Loop:
for {
fmt.Print("> ")
str, err := reader.ReadString('\n')
if err != nil {
fmt.Println("error in read string:", err)
return
}
// trimming newline
str = str[:len(str)-1]
split := strings.Split(str, " ")
if len(split) < 2 {
fmt.Println("incorrect number of arguments")
continue
}
switch split[0] {
case "script":
res, err := s.api.Script(split[1], split[2:])
if err != nil {
fmt.Println("error in performing script:", err)
continue Loop
}
fmt.Println(res)
continue Loop
case "cmd":
break
default:
fmt.Println("incorrect input")
continue Loop
}
peer, err := s.peers.Get(split[1])
if err != nil {
fmt.Println("no such peer", err)
continue
}
res, err := s.api.Call(peer, split[2], split[3:])
if err != nil {
fmt.Println("error in performing command:", err)
continue
}
fmt.Println(res)
}
}