backend/cli: More RPC feature demos
This commit is contained in:
parent
7733c6d572
commit
f91f007295
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
ricochet "github.com/special/ricochet-go/core"
|
||||||
rpc "github.com/special/ricochet-go/rpc"
|
rpc "github.com/special/ricochet-go/rpc"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"log"
|
"log"
|
||||||
|
@ -16,7 +17,18 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("listen failed: %v", err)
|
log.Fatalf("listen failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config, err := ricochet.LoadConfig(".")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("config error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
ricochet := &RicochetCore{
|
||||||
|
Network: ricochet.CreateNetwork(),
|
||||||
|
Config: config,
|
||||||
|
}
|
||||||
|
|
||||||
rpcServer := grpc.NewServer()
|
rpcServer := grpc.NewServer()
|
||||||
rpc.RegisterRicochetCoreServer(rpcServer, &RicochetCore{})
|
rpc.RegisterRicochetCoreServer(rpcServer, ricochet)
|
||||||
rpcServer.Serve(listener)
|
rpcServer.Serve(listener)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,15 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
ricochet "github.com/special/ricochet-go/core"
|
||||||
rpc "github.com/special/ricochet-go/rpc"
|
rpc "github.com/special/ricochet-go/rpc"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
"time"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RicochetCore struct {
|
type RicochetCore struct {
|
||||||
|
Network *ricochet.Network
|
||||||
|
Config *ricochet.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (core *RicochetCore) GetServerStatus(ctx context.Context, req *rpc.ServerStatusRequest) (*rpc.ServerStatusReply, error) {
|
func (core *RicochetCore) GetServerStatus(ctx context.Context, req *rpc.ServerStatusRequest) (*rpc.ServerStatusReply, error) {
|
||||||
|
@ -29,19 +32,41 @@ func (core *RicochetCore) MonitorNetwork(req *rpc.MonitorNetworkRequest, stream
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 100; i++ {
|
events := core.Network.EventMonitor().Subscribe(20)
|
||||||
|
defer core.Network.EventMonitor().Unsubscribe(events)
|
||||||
|
|
||||||
|
for {
|
||||||
|
event, ok := (<-events).(bool)
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("RPC monitor event: %v", event)
|
||||||
if err := stream.Send(status); err != nil {
|
if err := stream.Send(status); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
time.Sleep(100 * time.Millisecond)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (core *RicochetCore) StartNetwork(ctx context.Context, req *rpc.StartNetworkRequest) (*rpc.NetworkStatus, error) {
|
func (core *RicochetCore) StartNetwork(ctx context.Context, req *rpc.StartNetworkRequest) (*rpc.NetworkStatus, error) {
|
||||||
return nil, errors.New("Not implemented")
|
// err represents the result of the first connection attempt, but as long
|
||||||
|
// as 'ok' is true, the network has started and this call was successful.
|
||||||
|
ok, err := core.Network.Start("tcp://127.0.0.1:9051", "")
|
||||||
|
if !ok {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX real status
|
||||||
|
return &rpc.NetworkStatus{
|
||||||
|
Control: &rpc.TorControlStatus{
|
||||||
|
Status: rpc.TorControlStatus_CONNECTED,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (core *RicochetCore) StopNetwork(ctx context.Context, req *rpc.StopNetworkRequest) (*rpc.NetworkStatus, error) {
|
func (core *RicochetCore) StopNetwork(ctx context.Context, req *rpc.StopNetworkRequest) (*rpc.NetworkStatus, error) {
|
||||||
return nil, errors.New("Not implemented")
|
core.Network.Stop()
|
||||||
|
return &rpc.NetworkStatus{}, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,8 +47,15 @@ func main() {
|
||||||
}
|
}
|
||||||
log.Printf("stream says: %v", resp)
|
log.Printf("stream says: %v", resp)
|
||||||
}
|
}
|
||||||
wait <- struct{}{}
|
close(wait)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
status, err := c.StartNetwork(context.Background(), &rpc.StartNetworkRequest{})
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("start network error: %v", err)
|
||||||
|
} else {
|
||||||
|
log.Printf("network started: %v", status)
|
||||||
|
}
|
||||||
|
|
||||||
<-wait
|
<-wait
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue