DC Admin Offline
Sorry for the late response. The join process is quite ugly and complex and I really don't like looking into its code...
Here's a rough list of steps (server side):
send/receive/check auth code stuff (a poor verification that it's a real client)
send basic data (name, pw, cl version, USGN, Steam, some settings, ...). This is also the step where joining players are declined by the server e.g. because there's no space or the password is missing/wrong
optional: U.S.G.N. login verification
map checksum check and optional map- & file transfer
post file transfer checks, send additional data (server settings and all other server data e.g. dynamic objects, projectiles, hostages, spraylogos etc.), invoke connect hook
when client confirms that the map was loaded and all data was received: invoke join hook
The connect is only executed with the very last step (when all data is sent or better: scheduled to be sent).
If a player fails to connect beforehand, no hook is invoked as far as I see. So actually the hook description seems to be a bit misleading. It's still true however that the player did not yet receive/process all required data to fully join (but all data was sent to the player).
I corrected the documentation of that hook.
The join hook is called directly after the connect hook. The only difference is that the player then already confirmed that it received all data and loaded the map. In real world scenarios there shouldn't be much time between the invocation of both hooks because both are invoked only after file transfers (which take the most time when joining a server). If the client is slow however and takes long to load the server data and/or the map there might be a bigger delay.
Spray transfer
I'm not 100% sure but it looks like spraylogo data propagation happens asynchronously and that not all other players instantly receive spray logo data of new players when those connect. Instead this probably happens over time with a short delay.
Spraylogos are always transferred as gray scale images and have just 32x32 pixels. That's exactly 32x32=1024 bytes. They are sent with (lossless) compression though so actual transfer size should be a bit smaller in most cases. edited 2×, last 27.07.21 08:03:05 pm