pubsub.go 1.11 KB
Newer Older
Łukasz Magiera's avatar
Łukasz Magiera committed
1 2 3 4 5 6 7 8
package iface

import (
	"context"
	"io"

	options "github.com/ipfs/go-ipfs/core/coreapi/interface/options"

9
	peer "gx/ipfs/QmQsErDt8Qgw1XrsXf2BpEzDgGWtB1YLsTAARBup5b6B9W/go-libp2p-peer"
Łukasz Magiera's avatar
Łukasz Magiera committed
10 11 12 13 14 15
)

// PubSubSubscription is an active PubSub subscription
type PubSubSubscription interface {
	io.Closer

16 17
	// Next return the next incoming message
	Next(context.Context) (PubSubMessage, error)
Łukasz Magiera's avatar
Łukasz Magiera committed
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
}

// PubSubMessage is a single PubSub message
type PubSubMessage interface {
	// From returns id of a peer from which the message has arrived
	From() peer.ID

	// Data returns the message body
	Data() []byte
}

// PubSubAPI specifies the interface to PubSub
type PubSubAPI interface {
	// Ls lists subscribed topics by name
	Ls(context.Context) ([]string, error)

	// Peers list peers we are currently pubsubbing with
	// TODO: WithTopic
	Peers(context.Context, ...options.PubSubPeersOption) ([]peer.ID, error)

	// Publish a message to a given pubsub topic
	Publish(context.Context, string, []byte) error

	// Subscribe to messages on a given topic
42
	Subscribe(context.Context, string, ...options.PubSubSubscribeOption) (PubSubSubscription, error)
Łukasz Magiera's avatar
Łukasz Magiera committed
43
}