// 📡 P2P Two-Node Ping-Pong (InProcess) // Uses MethodBox handlers to wire reply path. print("🚀 P2P Two-Node Ping-Pong Start") // Nodes alice = new P2PBox("alice", "inprocess") bob = new P2PBox("bob", "inprocess") // Service box to hold node reference and implement handlers box PingService { init { node, name } onPing(intent, sender) { print("[" + me.name + "] recv " + intent.getName() + " from " + sender) // reply pong back reply = new IntentBox("pong", "{}") me.node.send(sender, reply) } onPong(intent, sender) { print("[" + me.name + "] recv " + intent.getName() + " from " + sender) } } // Wire handlers svcBob = new PingService() svcBob.node = bob svcBob.name = "bob" bob.on("ping", new MethodBox(svcBob, "onPing")) svcAlice = new PingService() svcAlice.node = alice svcAlice.name = "alice" alice.on("pong", new MethodBox(svcAlice, "onPong")) // Kick ping alice.send("bob", new IntentBox("ping", "{}")) // Show traces for determinism print("alice.last=" + alice.getLastIntentName()) print("bob.last=" + bob.getLastIntentName()) print("✅ P2P Two-Node Ping-Pong Done")