Prolix is designed to be a fairly simple bot with a few exceptions. The threading model to Prolix is certainly one of those exceptions.
There are several different possible threading approaches:
zDSBot3 uses the first model, and there are several windows bots that use the second model. Prolix uses the third model (which fits well with the name).
The "master thread" or the initial thread the program starts up on is responsible for starting all the other threads. When prolix closes, the master thread waits for all threads to be finished.
init all threads wait for mutex_quit wait for all threads to quit
The Bot Thread runs ALL of the bots in it. In the future each bot module
will be ran in it's own thread, but multiple bots of the same bot module
will exist in the same thread.
The bot thread calls the handler for each individual bot. Each bot in turn checks to see if it has any packets waiting.
wait for mutex or timeout if mutex bothandler if idletime botidlehandler
poll if signal handleCommanQueue(); if ISSET( net[i]->fd) net[i]->handler();
// getIP - 0 ok, -1 busy, -2 unable to resolve
if mutex lookup host
wait for mutex load/save
The Log ThreadThe log thread (short of the main thread) is the simplest thread in prolix. The log thread takes simple messages and appends them to a disk file in it's own leisure. The log thread is capable of handling multiple different log files at once. This allows for different modules to use seperate log files as they choose. The actual enqueue is done in the thread of the log caller, and then is written to disk in the log thread.
Auth ThreadThe auth thread handles all of the time consuming aspects of the auth equation. This consists of a couple million math operations per login.