diff --git a/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java b/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java index a2976ffd..8be60831 100644 --- a/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java +++ b/src/main/java/in/dragonbra/javasteam/networking/steam3/EnvelopeEncryptedConnection.java @@ -203,11 +203,20 @@ public void disconnect(boolean userInitiated) { @Override public void send(byte[] data) { - if (state == EncryptionState.ENCRYPTED) { - data = encryption.processOutgoing(data); + if (state != EncryptionState.ENCRYPTED) { + inner.send(data); + return; } - inner.send(data); + // A disconnect on the network thread can clear the encryption between the state check and here + var currentEncryption = encryption; + + if (currentEncryption == null) { + logger.debug("Attempting to send client data when not connected."); + return; + } + + inner.send(currentEncryption.processOutgoing(data)); } @Override