Allow a chain of processors to process the message as well as pass down info from the main loop for connection info and periodic scheduling
Thread main
Provide a jumping point for enqueing messages to be sent, check for valid outgoing socket and atta current processes serial value
The real work of dispatching COMMAND, GET and PUT messages to the modules and agents
Get the requested agent object from the double hashtable. Create an new agent if one doesn’t exist. grouplist structure is { typename:{groupname:agentobj} }
Passed from processor above us, dispatch to agents to to readers
Only passes messages if the current time is greater the msg.time header. If the time header doesn’t exist, they are passed right away
Fire any events are ready to go, return the time until the next event when nothing else ready
Only passes messages on if they are in order according to msg.serial. If the header value doesn’t exist, they get passed right away
Pass messages onto the next processor but only if they has arrived in serial order. If we get a repeated message (retransmit multicast) we drop it, if we get something ‘from the future’, it stays queued until we get the previous ids