99 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|