This describes how friends are being managed in the game
This describes, how the actual information about friends
is sent to the client.
The system uses lazy principle for this, which means, that that data is loaded asynchronously, and system does not wait until it loads.
Here is a diagram that illustrates the key events of friends list data retrieval.
Once the cache is built up (as you can see in the diagram),
if update() runs, and data is supposed to be sent,
then the data is sent in PlayerSpecificPacket to that
Like this, all connected players will receive their friends list (sooner, or later)
This describes special cases that can happen, and how the system deals with them.
In this scenario, suppose we have two players, \(P1\) and \(P2\).
Also suppose, that \(P1\) has \(P2\) in his friends list.
Suppose, that we do not care in this example about privacy and visibility modifiers.
Suppose following events (in order)
To solve this, client side will just keep the login status data, and when
friends list is finally received, it uses the kept data to overwrite the online status
This is sufficient and complete solution to the problem