mirror of
https://github.com/foomo/contentserver.git
synced 2025-10-16 12:25:44 +00:00
115 lines
2.6 KiB
Go
115 lines
2.6 KiB
Go
package client
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/foomo/contentserver/content"
|
|
"github.com/foomo/contentserver/requests"
|
|
"github.com/foomo/contentserver/responses"
|
|
"github.com/foomo/contentserver/server"
|
|
)
|
|
|
|
// Client a content server client
|
|
type Client struct {
|
|
t transport
|
|
}
|
|
|
|
func NewClient(
|
|
server string,
|
|
connectionPoolSize int,
|
|
waitTimeout time.Duration,
|
|
) (c *Client, err error) {
|
|
return NewClientWithTransport(NewSocketTransport(server, connectionPoolSize, waitTimeout))
|
|
}
|
|
|
|
func NewClientWithTransport(
|
|
transport transport,
|
|
) (c *Client, err error) {
|
|
c = &Client{
|
|
t: transport,
|
|
}
|
|
return
|
|
}
|
|
|
|
func NewHTTPClient(server string) (c *Client, err error) {
|
|
return NewHTTPClientWithTransport(NewHTTPTransport(server, http.DefaultClient))
|
|
}
|
|
|
|
func NewHTTPClientWithTransport(transport transport) (c *Client, err error) {
|
|
c = &Client{
|
|
t: transport,
|
|
}
|
|
return
|
|
}
|
|
|
|
// Update tell the server to update itself
|
|
func (c *Client) Update() (*responses.Update, error) {
|
|
type serverResponse struct {
|
|
Reply *responses.Update
|
|
}
|
|
resp := serverResponse{}
|
|
if err := c.t.call(server.HandlerUpdate, &requests.Update{}, &resp); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Reply, nil
|
|
}
|
|
|
|
// GetContent request site content
|
|
func (c *Client) GetContent(request *requests.Content) (*content.SiteContent, error) {
|
|
type serverResponse struct {
|
|
Reply *content.SiteContent
|
|
}
|
|
resp := serverResponse{}
|
|
if err := c.t.call(server.HandlerGetContent, request, &resp); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return resp.Reply, nil
|
|
}
|
|
|
|
// GetURIs resolve uris for ids in a dimension
|
|
func (c *Client) GetURIs(dimension string, IDs []string) (map[string]string, error) {
|
|
type serverResponse struct {
|
|
Reply map[string]string
|
|
}
|
|
|
|
resp := serverResponse{}
|
|
if err := c.t.call(server.HandlerGetURIs, &requests.URIs{Dimension: dimension, IDs: IDs}, &resp); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Reply, nil
|
|
}
|
|
|
|
// GetNodes request nodes
|
|
func (c *Client) GetNodes(env *requests.Env, nodes map[string]*requests.Node) (map[string]*content.Node, error) {
|
|
r := &requests.Nodes{
|
|
Env: env,
|
|
Nodes: nodes,
|
|
}
|
|
type serverResponse struct {
|
|
Reply map[string]*content.Node
|
|
}
|
|
resp := serverResponse{}
|
|
if err := c.t.call(server.HandlerGetNodes, r, &resp); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Reply, nil
|
|
}
|
|
|
|
// GetRepo get the whole repo
|
|
func (c *Client) GetRepo() (map[string]*content.RepoNode, error) {
|
|
type serverResponse struct {
|
|
Reply map[string]*content.RepoNode
|
|
}
|
|
resp := serverResponse{}
|
|
if err := c.t.call(server.HandlerGetRepo, &requests.Repo{}, &resp); err != nil {
|
|
return nil, err
|
|
}
|
|
return resp.Reply, nil
|
|
}
|
|
|
|
func (c *Client) ShutDown() {
|
|
c.t.shutdown()
|
|
}
|