Skip to content

Commit 0fd87db

Browse files
authored
Merge pull request #363 from LossyDragon/handlemulti-rev2
CMClient.handlemulti fix
2 parents 2f93e20 + a694f55 commit 0fd87db

1 file changed

Lines changed: 17 additions & 16 deletions

File tree

src/main/java/in/dragonbra/javasteam/steam/CMClient.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@
2424
import in.dragonbra.javasteam.util.event.ScheduledFunction;
2525
import in.dragonbra.javasteam.util.log.LogManager;
2626
import in.dragonbra.javasteam.util.log.Logger;
27-
import in.dragonbra.javasteam.util.stream.BinaryReader;
27+
import okio.Buffer;
28+
import okio.BufferedSource;
29+
import okio.GzipSource;
30+
import okio.Okio;
2831
import org.jetbrains.annotations.Nullable;
2932

30-
import java.io.ByteArrayInputStream;
3133
import java.io.IOException;
32-
import java.io.InputStream;
3334
import java.net.InetAddress;
3435
import java.net.InetSocketAddress;
3536
import java.util.EnumSet;
36-
import java.util.zip.GZIPInputStream;
3737

3838
/**
3939
* This base client handles the underlying connection to a CM server. This class should not be use directly, but through
@@ -334,8 +334,8 @@ public static IPacketMsg getPacketMsg(byte[] data) {
334334
}
335335

336336
int rawEMsg = 0;
337-
try (var reader = new BinaryReader(new ByteArrayInputStream(data))) {
338-
rawEMsg = reader.readInt();
337+
try (var buffer = new Buffer().write(data)) {
338+
rawEMsg = buffer.readIntLe();
339339
} catch (IOException e) {
340340
logger.debug("Exception while getting EMsg code", e);
341341
}
@@ -374,24 +374,25 @@ private void handleMulti(IPacketMsg packetMsg) {
374374
var msgMulti = new ClientMsgProtobuf<CMsgMulti.Builder>(CMsgMulti.class, packetMsg);
375375
var payload = msgMulti.getBody().getMessageBody().toByteArray();
376376

377-
try {
378-
InputStream inputStream;
377+
try (var payloadBuffer = new Buffer().write(payload)) {
378+
BufferedSource source;
379379

380380
if (msgMulti.getBody().getSizeUnzipped() > 0) {
381-
inputStream = new GZIPInputStream(new ByteArrayInputStream(payload));
381+
source = Okio.buffer(new GzipSource(payloadBuffer));
382382
} else {
383-
inputStream = new ByteArrayInputStream(payload);
383+
source = payloadBuffer;
384384
}
385385

386-
try (inputStream; var br = new BinaryReader(inputStream)) {
387-
while (br.available() > 0) {
388-
var subSize = br.readInt();
389-
var subData = br.readBytes(subSize);
386+
try (source) {
387+
do {
388+
var subSize = source.readIntLe();
389+
var subData = source.readByteArray(subSize);
390+
var msg = getPacketMsg(subData);
390391

391-
if (!onClientMsgReceived(getPacketMsg(subData))) {
392+
if (!onClientMsgReceived(msg)) {
392393
break;
393394
}
394-
}
395+
} while (!source.exhausted());
395396
}
396397
} catch (IOException e) {
397398
logger.error("error in handleMulti()", e);

0 commit comments

Comments
 (0)