Files
cunicu/pkg/signaling/backend.go
Steffen Vogel e109356f2e use protobuf types for signaling
Signed-off-by: Steffen Vogel <post@steffenvogel.de>
2022-01-06 15:33:35 +01:00

49 lines
886 B
Go

package signaling
import (
"fmt"
"io"
"net/url"
"riasc.eu/wice/pkg/crypto"
"riasc.eu/wice/pkg/pb"
"riasc.eu/wice/pkg/socket"
)
var (
Backends = map[BackendType]*BackendPlugin{}
)
type BackendType string // URL schemes
type BackendFactory func(*url.URL, *socket.Server) (Backend, error)
type BackendPlugin struct {
New BackendFactory
Description string
}
type Backend interface {
io.Closer
PublishOffer(kp crypto.PublicKeyPair, offer *pb.Offer) error
SubscribeOffer(kp crypto.PublicKeyPair) (chan *pb.Offer, error)
Tick()
}
func NewBackend(uri *url.URL, server *socket.Server) (Backend, error) {
typ := BackendType(uri.Scheme)
p, ok := Backends[typ]
if !ok {
return nil, fmt.Errorf("unknown backend type: %s", typ)
}
be, err := p.New(uri, server)
if err != nil {
return nil, fmt.Errorf("failed to create backend: %w", err)
}
return be, nil
}