Addressing
Names, not endpoints
A hub cannot join a network without a valid hierarchical address. Routing reads the dotted path, so moving a service between processes or machines changes its connection class, not its callers.
Ivyware/P2Pmsgcore
Walkthrough — hub, connection, message
A hub owns an address on the virtual network, keeps a priority queue, and runs pump threads that hand each message to a MAP handler. Watch all of it happen, one call at a time — the code beside the diagram is the same com.ivyware.p2pmsgcore API you'd write.
The hub takes an address on the virtual network. Every hop is a dot-separated name — routing decisions read this string, not an IP.
A connection is just a typed transport bolted to the hub. Swap the class and the routing above is unchanged — the address, the queue, and the MAP stay exactly as they are.
Addressing
A hub cannot join a network without a valid hierarchical address. Routing reads the dotted path, so moving a service between processes or machines changes its connection class, not its callers.
Concurrency
Connection state changes and messages are pumped through shared threads — one pump per thread, a ceiling set when the hub is created, and none reserved per peer. Concurrent clients are bounded by system resources rather than by a thread you spend on each of them.
Payload
A message manages its own private heap and holds a hierarchical, field-addressed structure — native types, strings, blobs, XML, images — resized as you fill it.
Load balancing
P2PeerContext() and P2PeerContextSwap() re-pump the message you are holding into a different pump, from inside the handler, in one call.
Security
Ephemeral ECDH P-256 to HKDF-SHA256 to AES-256-GCM, one key per connection, with no algorithm negotiation. Peer authentication is on by default, and the login proof is bound to the exchange it arrived on.
Diagnostics
Every kernel object can be serialised into a message, which is what makes reporting and logging inside a live distributed network tractable at all.
Licence
P2Pmsgcore will be published under the Apache 2.0 licence on GitHub. The integration libraries and reference applications are already free downloads with full source.
Seven object families do the work. The full reference — including the map macros and the state each family owns — is on the architecture page.
| Object | Responsibility |
|---|---|
P2PeerHub | Owns an address, a connection registry, a priority queue and the primary pump. The unit of deployment and re-use. |
P2PeerTarget | Holds the system, connection and message maps. Register one with a hub to extend its behaviour or add another pump. |
P2PeerCon | Manages the state of one inter-hub or third-party connection, and translates addresses as messages cross it. |
P2Peerio | Does the physical I/O and the protocol translation — binary, ASCII, XML, HTML, FIX — plus key exchange and encryption. |
P2PeerMsg | The unit of exchange. Hierarchical, self-sizing, cloneable, and addressable by field and path name. |
P2PeerMsg_MAP | Binds message names to handlers, with normal, reflected, acknowledged and exception-catch variants. |
P2Pevent | Events and exceptions. Throwable as ordinary C++ exceptions, or attachable to a message and routed across the network. |
Application
A technical analysis workspace whose chart engine, paged datastore and embedded Python interpreter all communicate over the kernel. Sold and supported as its own product.
Explore Chartboard →Reference server
A complete HTTP and WebSocket server assembled from nothing but the kernel — the clearest single demonstration of what a hub, a connection and a map add up to.
Read more →