void Process(object sender, SocketAsyncEventArgs e) { try { var socket = e.UserToken as Socket; var recievedBytes = e.BytesTransferred; if (recievedBytes != 0) { // Enable packet encryption. if (Crypt == null && dataBuffer[0] == 0x45 && dataBuffer[1] == 0x01) { Crypt = new BNetCrypt(SecureRemotePassword.SessionKey); Buffer.BlockCopy(dataBuffer, 2, dataBuffer, 0, recievedBytes -= 2); Log.Debug($"Encryption for account '{Account.Id}' enabled"); } if (Crypt != null && Crypt.IsInitialized) { Crypt.Decrypt(dataBuffer, recievedBytes); } ProcessPacket(recievedBytes); if (client != null) { client.ReceiveAsync(e); } } else { socket.Close(); } } catch (Exception ex) { Dispose(); ExceptionLog.Write(ex); Log.Error(ex.Message); } }
void Process(object sender, SocketAsyncEventArgs e) { try { var socket = e.UserToken as Socket; var recievedBytes = e.BytesTransferred; if (recievedBytes != 0) { if (Crypt == null && dataBuffer[0] == 0x45 && dataBuffer[1] == 0x01) { Crypt = new BNetCrypt(SecureRemotePassword.SessionKey); Buffer.BlockCopy(dataBuffer, 2, dataBuffer, 0, recievedBytes -= 2); Log.Message(LogType.Debug, "Encryption for account '{0}' enabled", Account.Id); } if (Crypt != null && Crypt.IsInitialized) { Crypt.Decrypt(dataBuffer, recievedBytes); } ProcessPacket(recievedBytes); client.ReceiveAsync(e); } else { socket.Close(); } } catch (Exception ex) { Log.Message(LogType.Error, "{0}", ex.Message); } }