stillbox/pkg/gordio/nexus/client.go

58 lines
797 B
Go
Raw Normal View History

2024-08-04 00:55:28 -04:00
package nexus
import (
"io"
"sync"
2024-08-05 00:06:57 -04:00
"dynatron.me/x/stillbox/pkg/live"
2024-08-04 00:55:28 -04:00
"dynatron.me/x/stillbox/pkg/pb"
"github.com/rs/zerolog/log"
"google.golang.org/protobuf/proto"
)
type Client interface {
sync.Locker
Connection
HandleCommand(*pb.Command)
HandleMessage([]byte)
}
type client struct {
sync.RWMutex
Connection
2024-08-05 00:06:57 -04:00
live live.Listener
2024-08-04 00:55:28 -04:00
nexus *Nexus
}
type Connection interface {
io.Closer
2024-08-04 10:56:46 -04:00
CloseCh()
2024-08-04 00:55:28 -04:00
2024-08-04 14:55:15 -04:00
Send(*pb.Message) (closed bool)
2024-08-04 00:55:28 -04:00
}
func (n *Nexus) NewClient(conn Connection) Client {
sess := &client{
Connection: conn,
nexus: n,
}
return sess
}
func (c *client) HandleMessage(mesgBytes []byte) {
var msg pb.Command
err := proto.Unmarshal(mesgBytes, &msg)
if err != nil {
log.Error().Err(err).Msg("command unmarshal")
return
}
c.HandleCommand(&msg)
}