There seems to be an issue causing the servers ping response to not be forwarded back to the player. I will check this tomorrow and upload the altered code.
During the joining phase of the connection, if the player is kicked by the server the threads for the connection remain open, even though the connection is closed.
Events such as on_player_ping are called more than once as there is no sync between the upstream and downstream threads to determine if the event has already been called. There are two ways to fix this:
Remove the call function for the events from one thread function (Only have it in upstream rather than both downstream and upstream)
Have a variable such as self.on_ping_event_called of type bool as a connection between the two threads to determine if one of the two threads has already called the event
Need to add customisable disconnect messages to Gamma, currently players get sent the MOTD message which just appears as a long string on their screen.