hmbdc design follows a mixture of Generic Programming and OO - see the description below the diagram.
- A Context (Context_1) is the message dispatcher object that accepts messages from anywhere in the process and delivers messages (in broadcast or partition style) to its Clients according to message types (message M,N) that the Client registers.
- A process can have 0 or more Context objects (Context_2). Each Context manages a set of user written Clients (Client_A, Client_B and CLient_C) and / or network transport engines (RecvTransportEngine, and SendTransportEngine, engines are also Clients conceptually).
- Clients often (optionally) receive messages in the form of non-concurrent callbacks(see Client_A's callback for M and N). Some Clients don't receive messages from the Context and are just managed by it (Client_B and all network transport engines).
- Network transport engines (RecvTransportEngine, and SendTransportEngine) facilitate messages to / from network. They are owned by a NetContext singleton and serves as access point of net communication resources of a specific category(mcast, tcpcast or netmap ...) .
- Multiple Contexts from different processes can be tied together (see Client_1 and Client_67) thru an IPC transport so messages (see M, N from process Foo arrive at process Bar) can propagate crossing the process boundary within the same host (X);