goplayd/lib/spot/proto.go

51 lines
834 B
Go
Raw Permalink Normal View History

2023-01-11 17:08:26 +00:00
package spot
import (
"context"
"encoding/json"
"net/http"
"google.golang.org/grpc"
)
var defaultResolvers = []string{
"http://apresolve.spotify.com",
}
type Client struct {
Resolver string
Endpoints ApResolve
grpc *grpc.ClientConn
}
type ApResolve struct {
ApList []string `json:"ap_list"`
}
func NewClient(resolver string) (*Client, error) {
c := &Client{Resolver: resolver}
err := c.discover()
if err != nil {
return nil, err
}
return c, nil
}
func (c *Client) Connect(ctx context.Context) error {
conn, err := grpc.DialContext(ctx, c.Endpoints.ApList[0])
if err != nil {
return err
}
c.grpc = conn
return nil
}
func (c *Client) discover() error {
resp, err := http.Get(c.Resolver)
if err != nil {
return err
}
defer resp.Body.Close()
return json.NewDecoder(resp.Body).Decode(&c.Endpoints)
}