Sometimes, it is more effective to perform the event dispatching in a loop in the main application thread. For this purpose, one can use the OnixS::B3::BOE::ThreadingModel::External mode.
Before an externally-managed session is created, the application must create an OnixS::B3::BOE::SessionReactor instance. There are two reactor classes, which can be used:
The reference to the stack is provided in Session's constructor, for example:
Applications must call asynchronous Session's methods to connect (OnixS::B3::BOE::Session::connectAsync) and disconnect (OnixS::B3::BOE::Session::disconnectAsync).
Applications must call OnixS::B3::BOE::TcpStandardStack::dispatchEvents frequently for each stack that is in use.
The TCPStandard stack requires finishing all outstanding work and handling all outstanding events. Before destroying the OnixS::B3::BOE::TcpStandardStack instance, the following code should be executed:
Method OnixS::B3::BOE::TcpStandardStack::isQuiescent returns a boolean value indicating whether a stack is quiescent.
This can be used to ensure that all connections have been closed gracefully before destroying a stack (or exiting the application). Destroying a stack while it is not quiescent is permitted by the API, but when doing so there is no guarantee that sent data has been acknowledged by the peer or even transmitted, and there is the possibility that peers' connections will be reset.