Added comments and updated readme
This commit is contained in:
parent
2dbb78f88f
commit
a13480f00a
|
@ -33,10 +33,19 @@ The example creates two LibP2P Hosts supporting 2 protocols: ping and echo.
|
||||||
|
|
||||||
Each protocol consists RPC-style requests and respones and each request and response is a typed protobufs message (and a go data object).
|
Each protocol consists RPC-style requests and respones and each request and response is a typed protobufs message (and a go data object).
|
||||||
|
|
||||||
This is a different pattern then defining a whole p2p protocol as 1 protobuf message with lots of optional fields (as can be observed in various p2p-lib protocols using protobufs such as dht).
|
This is a different pattern then defining a whole p2p protocol as one protobuf message with lots of optional fields (as can be observed in various p2p-lib protocols using protobufs such as dht).
|
||||||
|
|
||||||
The example shows how to match async received responses with their requests. This is useful when processing a response requires access to the request data.
|
The example shows how to match async received responses with their requests. This is useful when processing a response requires access to the request data.
|
||||||
|
|
||||||
|
The idea is to use lib-p2p protocol multiplexing on a per-message basis.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
1. 2 fully implemented protocols using an RPC-like request-response pattern - Ping and Echo
|
||||||
|
2. Scaffolding for quickly implementing new app-level versioned RPC-like protocols
|
||||||
|
3. Full authentication of incoming message data by author (who might not be the message's sender peer)
|
||||||
|
4. Base p2p format in protobufs with fields shared by all protocol messages
|
||||||
|
5. Full access to request data when processing a response.
|
||||||
|
|
||||||
## Author
|
## Author
|
||||||
|
|
||||||
@avive
|
@avive
|
||||||
|
|
|
@ -29,6 +29,10 @@ func NewEchoProtocol(node *Node, done chan bool) *EchoProtocol {
|
||||||
e := EchoProtocol{node: node, requests: make(map[string]*p2p.EchoRequest), done: done}
|
e := EchoProtocol{node: node, requests: make(map[string]*p2p.EchoRequest), done: done}
|
||||||
node.SetStreamHandler(echoRequest, e.onEchoRequest)
|
node.SetStreamHandler(echoRequest, e.onEchoRequest)
|
||||||
node.SetStreamHandler(echoResponse, e.onEchoResponse)
|
node.SetStreamHandler(echoResponse, e.onEchoResponse)
|
||||||
|
|
||||||
|
// design note: to implement fire-and-forget style messages you may just skip specifying a response callback.
|
||||||
|
// a fire-and-forget message will just include a request and not specify a response object
|
||||||
|
|
||||||
return &e
|
return &e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,7 @@ func NewNode(host host.Host, done chan bool) *Node {
|
||||||
func (n *Node) authenticateMessage(message proto.Message, data *p2p.MessageData) bool {
|
func (n *Node) authenticateMessage(message proto.Message, data *p2p.MessageData) bool {
|
||||||
|
|
||||||
// store a temp ref to signature and remove it from message data
|
// store a temp ref to signature and remove it from message data
|
||||||
|
// sign is a string to allow easy reset to zero-value (empty string)
|
||||||
sign := data.Sign
|
sign := data.Sign
|
||||||
data.Sign = ""
|
data.Sign = ""
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,8 @@ message PingResponse {
|
||||||
|
|
||||||
// response specific data
|
// response specific data
|
||||||
string message = 2;
|
string message = 2;
|
||||||
// ... add any data here
|
|
||||||
|
// ... add any additional message data here
|
||||||
}
|
}
|
||||||
|
|
||||||
//// echo protocol
|
//// echo protocol
|
||||||
|
@ -41,7 +42,8 @@ message EchoRequest {
|
||||||
|
|
||||||
// method specific data
|
// method specific data
|
||||||
string message = 2;
|
string message = 2;
|
||||||
// add any data here....
|
|
||||||
|
// add any additional message data here....
|
||||||
}
|
}
|
||||||
|
|
||||||
message EchoResponse {
|
message EchoResponse {
|
||||||
|
@ -49,5 +51,6 @@ message EchoResponse {
|
||||||
|
|
||||||
// response specific data
|
// response specific data
|
||||||
string message = 2;
|
string message = 2;
|
||||||
// ... add any data here
|
|
||||||
|
// ... add any additional message data here....
|
||||||
}
|
}
|
Loading…
Reference in New Issue