comm.go 1.56 KB
Newer Older
YACOVM's avatar
YACOVM committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
Copyright IBM Corp. 2016 All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

                 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package comm

import (
	"github.com/hyperledger/fabric/gossip/proto"
	"sync"
)

type CommModule interface {
	// Send sends a message to endpoints
	Send(msg *proto.GossipMessage, endpoints ...string)

	// Probe probes a remote node and returns nil if its responsive
	Probe(endpoint string) error

	// Accept returns a dedicated read-only channel for messages sent by other nodes that match a certain predicate.
	// Each message from the channel can be used to send a reply back to the sender
	Accept(MessageAcceptor) <-chan *ReceivedMessage

	// PresumedDead returns a read-only channel for node endpoints that are suspected to be offline
	PresumedDead() <-chan string

	// CloseConn closes a connection to a certain endpoint
	CloseConn(endpoint string)

	// Stop stops the module
	Stop()
}


type MessageAcceptor func(*proto.GossipMessage) bool

type ReceivedMessage struct {
	*proto.GossipMessage
	lock      *sync.Mutex
	srvStream proto.Gossip_GossipStreamServer
	clStream  proto.Gossip_GossipStreamClient
}