Putting the pieces together

A valid question is how do all these pieces fit together. Figure 2.1 shows what this looks like.

How MICA components are connected

Figure 2.1. How MICA components are connected


In the Figure 2.1, the arrows represent conduits for messages. These messages are requests that do things such as request that an object be written to the blackboard, or that an agent be informed that a newly created mob.

The diagram shows two agents connected to one blackboard. Typically, there would be more than two agents connected, but two are the minimum number for any interesting application. Agents and blackboards do not communicate directly, but through a transport layer. This allows implementations of MICA to use different transport layers. For example, some possible transport layers are: local function calls, XML over a TCP/IP connection, some proprietary encrypted protocol, or ASCII messages over Bluetooth. For each one of these, a pair of classes -- an agent transport and a blackboard transport -- need to be developed. Agents talk to the Agent Transport layer through method calls; and likewise for the Blackboard.

The advantage of doing things in this way is that it gives a lot of flexibility in the domain MICA can be applied to; and allows developers to write agents that do not need to be aware of the underlying transport layer.

In order to clarify how requests are passed, consider what happens when Agent 1 writes a mob to the blackboard, which is of type Message. Also assume that Agent 2 has registered for any mobs whose type is Message. Agent 1 would create the mob and call an appropriate method in its agent transport. The agent transport would deliver it to the blackboard transport (using whatever transport medium was appropriate). The blackboard transport would do two things: firstly, it would give a name to the mob; say Message_0, and inform Agent 1 -- through Agent 1's transport -- of the new mob's name. Secondly, since Agent 2 was registered for mobs of type Message, the blackboard would send a message to Agent 2's transport, that there was a new mob called Message_0 with certain slots. Agent 2's transport would then call a method in Agent 2 to handle the newly arrived Mob.

Note the following: