rendezvous service sync: hook for federation

This commit is contained in:
vyzo 2018-04-23 12:05:18 +03:00
parent 7d72fc79b3
commit dbe6b0ddb5

27
svc.go
View File

@ -21,16 +21,22 @@ const (
) )
type RendezvousService struct { type RendezvousService struct {
DB *DB DB *DB
rzs []RendezvousSync
} }
func NewRendezvousService(ctx context.Context, host host.Host, dbpath string) (*RendezvousService, error) { type RendezvousSync interface {
Register(p peer.ID, ns string, addrs [][]byte, ttl int)
Unregister(p peer.ID, ns string)
}
func NewRendezvousService(ctx context.Context, host host.Host, dbpath string, rzs ...RendezvousSync) (*RendezvousService, error) {
db, err := OpenDB(ctx, dbpath) db, err := OpenDB(ctx, dbpath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
rz := &RendezvousService{DB: db} rz := &RendezvousService{DB: db, rzs: rzs}
host.SetStreamHandler(RendezvousProto, rz.handleStream) host.SetStreamHandler(RendezvousProto, rz.handleStream)
return rz, nil return rz, nil
} }
@ -164,6 +170,10 @@ func (rz *RendezvousService) handleRegister(p peer.ID, m *pb.Message_Register) *
return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, err.Error()) return newRegisterResponseError(pb.Message_E_INTERNAL_ERROR, err.Error())
} }
for _, rzs := range rz.rzs {
rzs.Register(p, ns, maddrs, ttl)
}
return newRegisterResponse() return newRegisterResponse()
} }
@ -182,7 +192,16 @@ func (rz *RendezvousService) handleUnregister(p peer.ID, m *pb.Message_Unregiste
} }
} }
return rz.DB.Unregister(p, ns) err := rz.DB.Unregister(p, ns)
if err != nil {
return err
}
for _, rzs := range rz.rzs {
rzs.Unregister(p, ns)
}
return nil
} }
func (rz *RendezvousService) handleDiscover(p peer.ID, m *pb.Message_Discover) *pb.Message_DiscoverResponse { func (rz *RendezvousService) handleDiscover(p peer.ID, m *pb.Message_Discover) *pb.Message_DiscoverResponse {