75 lines
1.4 KiB
Go
75 lines
1.4 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
v1 "github.com/cirruslabs/orchard/pkg/resource/v1"
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
type RPCService struct {
|
|
client *Client
|
|
}
|
|
|
|
func (service *RPCService) Watch(
|
|
ctx context.Context,
|
|
workerName string,
|
|
) (<-chan *v1.WatchInstruction, <-chan error, error) {
|
|
wsConn, err := service.client.wsRequest(ctx, "rpc/watch", map[string]string{
|
|
"workerName": workerName,
|
|
})
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
watchEventCh := make(chan *v1.WatchInstruction)
|
|
errCh := make(chan error, 1)
|
|
|
|
go func() {
|
|
defer func() {
|
|
_ = wsConn.Close()
|
|
}()
|
|
|
|
decoder := json.NewDecoder(wsConn)
|
|
|
|
for {
|
|
var watchInstruction v1.WatchInstruction
|
|
|
|
if err := decoder.Decode(&watchInstruction); err != nil {
|
|
errCh <- err
|
|
|
|
return
|
|
}
|
|
|
|
watchEventCh <- &watchInstruction
|
|
}
|
|
}()
|
|
|
|
return watchEventCh, errCh, nil
|
|
}
|
|
|
|
func (service *RPCService) RespondPortForward(
|
|
ctx context.Context,
|
|
session string,
|
|
errorMessage string,
|
|
) (net.Conn, error) {
|
|
return service.client.wsRequest(ctx, "rpc/port-forward", map[string]string{
|
|
"session": session,
|
|
"errorMessage": errorMessage,
|
|
})
|
|
}
|
|
|
|
func (service *RPCService) RespondIP(
|
|
ctx context.Context,
|
|
session string,
|
|
ip string,
|
|
errorMessage string,
|
|
) error {
|
|
return service.client.request(ctx, http.MethodPost, "rpc/resolve-ip", nil, nil, map[string]string{
|
|
"session": session,
|
|
"ip": ip,
|
|
"errorMessage": errorMessage,
|
|
})
|
|
}
|