Mark Samman:
understand the purpose of the different threads, especially dispatcher,
and then understand how the server goes from receiving a packet to processing it and performing something
(connection (asio thread) -> protocol -> (task dispatched to run in dispatcher thread) -> game)
Mark Samman: otserv.cpp is a good start, then look at tasks/scheduler/connection/server