docs(tutorial): add introduction tutorial (#90)

This commit is contained in:
vladopajic
2026-07-24 14:14:38 +00:00
committed by GitHub
parent 7db2524898
commit eb8f89f3af
25 changed files with 868 additions and 353 deletions
+29 -14
View File
@@ -62,8 +62,16 @@ int main()
Libp2pModuleImpl nodeA(optsA);
Libp2pModuleImpl nodeB(optsB);
if (!nodeA.start().success) { fprintf(stderr, "Node A failed\n"); return 1; }
if (!nodeB.start().success) { fprintf(stderr, "Node B failed\n"); return 1; }
StdLogosResult startARes = nodeA.start();
if (!startARes.success) {
fprintf(stderr, "Node A failed: %s\n", startARes.error.c_str());
return 1;
}
StdLogosResult startBRes = nodeB.start();
if (!startBRes.success) {
fprintf(stderr, "Node B failed: %s\n", startBRes.error.c_str());
return 1;
}
printf("Both nodes started\n");
/// ## Step 2: Set up the protocol handler on Node A
@@ -99,13 +107,15 @@ int main()
/// Register the echo protocol on Node A:
printf("Mounting protocol '%s' on Node A...\n", kEchoProtocol.c_str());
if (!nodeA.mountProtocol(kEchoProtocol).success) {
fprintf(stderr, "Failed to mount protocol\n");
StdLogosResult mountRes = nodeA.mountProtocol(kEchoProtocol);
if (!mountRes.success) {
fprintf(stderr, "Failed to mount protocol: %s\n",
mountRes.error.c_str());
return 1;
}
/// ## Step 3: Get Node A's address and connect Node B
auto infoARes = nodeA.peerInfo();
StdLogosResult infoARes = nodeA.peerInfo();
if (!infoARes.success) {
fprintf(stderr, "Failed to get Node A info: %s\n",
infoARes.error.c_str());
@@ -118,8 +128,10 @@ int main()
addrsA.push_back(a.get<std::string>());
printf("Connecting Node B to Node A...\n");
if (!nodeB.connectPeer(peerIdA, addrsA, 5000).success) {
fprintf(stderr, "Failed to connect\n");
StdLogosResult connectRes = nodeB.connectPeer(peerIdA, addrsA, 5000);
if (!connectRes.success) {
fprintf(stderr, "Failed to connect: %s\n",
connectRes.error.c_str());
return 1;
}
printf("Connected\n");
@@ -129,7 +141,7 @@ int main()
/// When Node B dials our custom protocol, Node A's protocol handler
/// fires, and Node A receives a new stream.
printf("Node B dialing '%s'...\n", kEchoProtocol.c_str());
auto dialRes = nodeB.dial(peerIdA, kEchoProtocol);
StdLogosResult dialRes = nodeB.dial(peerIdA, kEchoProtocol);
if (!dialRes.success) {
fprintf(stderr, "Dial failed: %s\n", dialRes.error.c_str());
return 1;
@@ -155,13 +167,14 @@ int main()
/// ## Step 6: Node B sends a message
std::string message = "Hello from Node B!";
printf("Node B sending: \"%s\"\n", message.c_str());
if (!nodeB.streamWriteLp(clientStreamId, message).success) {
fprintf(stderr, "Write failed\n");
StdLogosResult writeRes = nodeB.streamWriteLp(clientStreamId, message);
if (!writeRes.success) {
fprintf(stderr, "Write failed: %s\n", writeRes.error.c_str());
return 1;
}
/// ## Step 7: Node A reads the message and echoes it back
auto readRes = nodeA.streamReadLp(serverStreamId, 4096);
StdLogosResult readRes = nodeA.streamReadLp(serverStreamId, 4096);
if (!readRes.success) {
fprintf(stderr, "Node A read failed: %s\n",
readRes.error.c_str());
@@ -171,13 +184,15 @@ int main()
printf("Node A received: \"%s\"\n", received.c_str());
/// Echo it back:
if (!nodeA.streamWriteLp(serverStreamId, received).success) {
fprintf(stderr, "Node A echo write failed\n");
StdLogosResult echoWriteRes = nodeA.streamWriteLp(serverStreamId, received);
if (!echoWriteRes.success) {
fprintf(stderr, "Node A echo write failed: %s\n",
echoWriteRes.error.c_str());
return 1;
}
/// ## Step 8: Node B reads the echo
auto echoRes = nodeB.streamReadLp(clientStreamId, 4096);
StdLogosResult echoRes = nodeB.streamReadLp(clientStreamId, 4096);
if (!echoRes.success) {
fprintf(stderr, "Node B read echo failed: %s\n",
echoRes.error.c_str());