public void HandleMessage(INetworkPlayer player, ArraySegment <byte> packet) { using (PooledNetworkReader networkReader = NetworkReaderPool.GetReader(packet)) { // set ObjectLocator so that message can use NetworkIdentity networkReader.ObjectLocator = objectLocator; // protect against attackers trying to send invalid data packets // exception could be throw if: // - invalid headers // - invalid message ids // - invalid data causing exceptions // - negative ReadBytesAndSize prefixes // - invalid utf8 strings // - etc. // // if exception is caught, disconnect the attacker to stop any further attacks try { int msgType = MessagePacker.UnpackId(networkReader); InvokeHandler(player, msgType, networkReader); } catch (Exception e) { string disconnectMessage = disconnectOnException ? $", Closed connection: {player}" : ""; logger.LogError($"{e.GetType()} in Message handler (see stack below){disconnectMessage}\n{e}"); if (disconnectOnException) { player.Disconnect(); } } } }
private IEnumerator DelayedDisconnect(INetworkPlayer player, float waitTime) { yield return(new WaitForSeconds(waitTime)); player.Disconnect(); }
/// <summary> /// Call this when player has been rejected on the client. This will disconnect the player. /// </summary> /// <param name="player"></param> protected void ClientReject(INetworkPlayer player) { player.Disconnect(); }
/// <summary> /// Call this when player has been rejected on the server. This will disconnect the player. /// </summary> /// <param name="player"></param> protected void ServerReject(INetworkPlayer player) { player.Disconnect(); }