|
24 | 24 | import in.dragonbra.javasteam.util.event.ScheduledFunction; |
25 | 25 | import in.dragonbra.javasteam.util.log.LogManager; |
26 | 26 | 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; |
28 | 31 | import org.jetbrains.annotations.Nullable; |
29 | 32 |
|
30 | | -import java.io.ByteArrayInputStream; |
31 | 33 | import java.io.IOException; |
32 | | -import java.io.InputStream; |
33 | 34 | import java.net.InetAddress; |
34 | 35 | import java.net.InetSocketAddress; |
35 | 36 | import java.util.EnumSet; |
36 | | -import java.util.zip.GZIPInputStream; |
37 | 37 |
|
38 | 38 | /** |
39 | 39 | * 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) { |
334 | 334 | } |
335 | 335 |
|
336 | 336 | 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(); |
339 | 339 | } catch (IOException e) { |
340 | 340 | logger.debug("Exception while getting EMsg code", e); |
341 | 341 | } |
@@ -374,24 +374,25 @@ private void handleMulti(IPacketMsg packetMsg) { |
374 | 374 | var msgMulti = new ClientMsgProtobuf<CMsgMulti.Builder>(CMsgMulti.class, packetMsg); |
375 | 375 | var payload = msgMulti.getBody().getMessageBody().toByteArray(); |
376 | 376 |
|
377 | | - try { |
378 | | - InputStream inputStream; |
| 377 | + try (var payloadBuffer = new Buffer().write(payload)) { |
| 378 | + BufferedSource source; |
379 | 379 |
|
380 | 380 | if (msgMulti.getBody().getSizeUnzipped() > 0) { |
381 | | - inputStream = new GZIPInputStream(new ByteArrayInputStream(payload)); |
| 381 | + source = Okio.buffer(new GzipSource(payloadBuffer)); |
382 | 382 | } else { |
383 | | - inputStream = new ByteArrayInputStream(payload); |
| 383 | + source = payloadBuffer; |
384 | 384 | } |
385 | 385 |
|
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); |
390 | 391 |
|
391 | | - if (!onClientMsgReceived(getPacketMsg(subData))) { |
| 392 | + if (!onClientMsgReceived(msg)) { |
392 | 393 | break; |
393 | 394 | } |
394 | | - } |
| 395 | + } while (!source.exhausted()); |
395 | 396 | } |
396 | 397 | } catch (IOException e) { |
397 | 398 | logger.error("error in handleMulti()", e); |
|
0 commit comments