mirror of
https://codeberg.org/cunicu/cunicu.git
synced 2025-10-07 01:33:05 +08:00
81 lines
1.4 KiB
Go
81 lines
1.4 KiB
Go
package signaling
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/url"
|
|
|
|
"riasc.eu/wice/pkg/crypto"
|
|
"riasc.eu/wice/pkg/pb"
|
|
)
|
|
|
|
type MultiBackend struct {
|
|
Backends []Backend
|
|
}
|
|
|
|
func NewMultiBackend(uris []*url.URL, cfg *BackendConfig) (*MultiBackend, error) {
|
|
mb := &MultiBackend{
|
|
Backends: []Backend{},
|
|
}
|
|
|
|
for _, u := range uris {
|
|
cfg.URI = u
|
|
|
|
if b, err := NewBackend(cfg); err == nil {
|
|
mb.Backends = append(mb.Backends, b)
|
|
} else {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return mb, nil
|
|
}
|
|
|
|
func (mb *MultiBackend) Type() pb.BackendType {
|
|
return pb.BackendType_MULTI
|
|
}
|
|
|
|
func (mb *MultiBackend) ByType(t pb.BackendType) Backend {
|
|
for _, b := range mb.Backends {
|
|
if b.Type() == t {
|
|
return b
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (mb *MultiBackend) Publish(ctx context.Context, kp *crypto.KeyPair, msg *Message) error {
|
|
for _, b := range mb.Backends {
|
|
if err := b.Publish(ctx, kp, msg); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (mb *MultiBackend) SubscribeAll(ctx context.Context, kp *crypto.Key, h MessageHandler) error {
|
|
return errors.New("not implemented yet") // TODO
|
|
}
|
|
|
|
func (mb *MultiBackend) Subscribe(ctx context.Context, kp *crypto.KeyPair, h MessageHandler) error {
|
|
for _, b := range mb.Backends {
|
|
if err := b.Subscribe(ctx, kp, h); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (mb *MultiBackend) Close() error {
|
|
for _, b := range mb.Backends {
|
|
if err := b.Close(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|