refactor: move http api to a new transport layer
This commit is contained in:
parent
476c4b056f
commit
0448f66ab2
41 changed files with 822 additions and 390 deletions
40
internal/transport/master/client.go
Normal file
40
internal/transport/master/client.go
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
package master
|
||||
|
||||
import (
|
||||
"git.wzray.com/homelab/hivemind/internal/transport"
|
||||
"git.wzray.com/homelab/hivemind/internal/types"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
caller transport.Caller
|
||||
}
|
||||
|
||||
func New(caller transport.Caller) *Client {
|
||||
return &Client{
|
||||
caller: caller,
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) Heartbeat(endpoint string, n types.Node) (types.Nodes, error) {
|
||||
return heartbeatRoute.Call(c.caller, endpoint, n)
|
||||
}
|
||||
|
||||
func (c *Client) Join(endpoint string, n types.Node) (types.Nodes, error) {
|
||||
return joinRoute.Call(c.caller, endpoint, n)
|
||||
}
|
||||
|
||||
func (c *Client) Leave(endpoint string, n types.Node) error {
|
||||
return leaveRoute.CallNoOutput(c.caller, endpoint, n)
|
||||
}
|
||||
|
||||
func (c *Client) EventHeartbeat(endpoint string, n types.Node) (types.Nodes, error) {
|
||||
return eventHeartbeatRoute.Call(c.caller, endpoint, n)
|
||||
}
|
||||
|
||||
func (c *Client) EventJoin(endpoint string, n types.Node) (types.Nodes, error) {
|
||||
return eventJoinRoute.Call(c.caller, endpoint, n)
|
||||
}
|
||||
|
||||
func (c *Client) EventLeave(endpoint string, n types.Node) error {
|
||||
return eventLeaveRoute.CallNoOutput(c.caller, endpoint, n)
|
||||
}
|
||||
26
internal/transport/master/handlers.go
Normal file
26
internal/transport/master/handlers.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package master
|
||||
|
||||
import (
|
||||
"git.wzray.com/homelab/hivemind/internal/transport"
|
||||
"git.wzray.com/homelab/hivemind/internal/types"
|
||||
)
|
||||
|
||||
type MasterHandlers interface {
|
||||
Heartbeat(types.Node) (types.Nodes, error)
|
||||
Join(types.Node) (types.Nodes, error)
|
||||
Leave(types.Node) error
|
||||
|
||||
EventHeartbeat(types.Node) (types.Nodes, error)
|
||||
EventJoin(types.Node) (types.Nodes, error)
|
||||
EventLeave(types.Node) error
|
||||
}
|
||||
|
||||
func Register(registrator transport.Registrator, h MasterHandlers) {
|
||||
heartbeatRoute.Register(registrator, h.Heartbeat)
|
||||
joinRoute.Register(registrator, h.Join)
|
||||
leaveRoute.Register(registrator, transport.WithoutOutput(h.Leave))
|
||||
|
||||
eventHeartbeatRoute.Register(registrator, h.EventHeartbeat)
|
||||
eventJoinRoute.Register(registrator, h.EventJoin)
|
||||
eventLeaveRoute.Register(registrator, transport.WithoutOutput(h.EventLeave))
|
||||
}
|
||||
16
internal/transport/master/routes.go
Normal file
16
internal/transport/master/routes.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package master
|
||||
|
||||
import (
|
||||
"git.wzray.com/homelab/hivemind/internal/transport"
|
||||
"git.wzray.com/homelab/hivemind/internal/types"
|
||||
)
|
||||
|
||||
var (
|
||||
heartbeatRoute = transport.NewRoute[types.Node, types.Nodes]("/master/heartbeat")
|
||||
joinRoute = transport.NewRoute[types.Node, types.Nodes]("/master/join")
|
||||
leaveRoute = transport.NewRoute[types.Node, struct{}]("/master/leave")
|
||||
|
||||
eventHeartbeatRoute = transport.NewRoute[types.Node, types.Nodes]("/master/event/heartbeat")
|
||||
eventJoinRoute = transport.NewRoute[types.Node, types.Nodes]("/master/event/join")
|
||||
eventLeaveRoute = transport.NewRoute[types.Node, struct{}]("/master/event/leave")
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue