i dunno this might break something but it'll look cool otherwise
This commit is contained in:
parent
436b301378
commit
48703cd107
2 changed files with 62 additions and 3 deletions
|
@ -6,12 +6,14 @@ import de.com.baseband.launcher.security.impl.AntiInstrumentationImpl;
|
||||||
import de.com.baseband.launcher.security.impl.JVMArgImpl;
|
import de.com.baseband.launcher.security.impl.JVMArgImpl;
|
||||||
import de.com.baseband.launcher.util.GitHash;
|
import de.com.baseband.launcher.util.GitHash;
|
||||||
import de.com.baseband.launcher.util.RSAKey;
|
import de.com.baseband.launcher.util.RSAKey;
|
||||||
|
import de.com.baseband.launcher.util.SecondCounter;
|
||||||
import de.com.baseband.launcher.util.Util;
|
import de.com.baseband.launcher.util.Util;
|
||||||
import de.tudbut.io.TypedInputStream;
|
import de.tudbut.io.TypedInputStream;
|
||||||
import de.tudbut.io.TypedOutputStream;
|
import de.tudbut.io.TypedOutputStream;
|
||||||
import de.tudbut.net.http.HTTPUtils;
|
import de.tudbut.net.http.HTTPUtils;
|
||||||
import de.tudbut.parsing.TCN;
|
import de.tudbut.parsing.TCN;
|
||||||
import de.tudbut.tools.Hasher;
|
import de.tudbut.tools.Hasher;
|
||||||
|
import de.tudbut.tools.Lock;
|
||||||
import de.tudbut.tools.Tools;
|
import de.tudbut.tools.Tools;
|
||||||
import de.tudbut.tools.encryption.Key;
|
import de.tudbut.tools.encryption.Key;
|
||||||
import de.tudbut.tools.encryption.RawKey;
|
import de.tudbut.tools.encryption.RawKey;
|
||||||
|
@ -29,6 +31,7 @@ import java.net.Socket;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
@ -86,9 +89,21 @@ public class Loader implements Util {
|
||||||
LOGGER.info("BaseBand has downloaded a significant update. Minecraft will exit.");
|
LOGGER.info("BaseBand has downloaded a significant update. Minecraft will exit.");
|
||||||
JOptionPane.showMessageDialog(null, "BaseBand has downloaded a significant update. Please restart Minecraft.");
|
JOptionPane.showMessageDialog(null, "BaseBand has downloaded a significant update. Please restart Minecraft.");
|
||||||
exit();
|
exit();
|
||||||
}
|
} else if(status == Response.OK) {
|
||||||
else if(status == Response.OK) {
|
|
||||||
LOGGER.info(status.name);
|
LOGGER.info(status.name);
|
||||||
|
SecondCounter secondCounter = new SecondCounter();
|
||||||
|
AtomicBoolean downloaded = new AtomicBoolean(false);
|
||||||
|
Thread thread = new Thread(() -> {
|
||||||
|
while(!downloaded.get()) {
|
||||||
|
new Lock().waitHere(2000);
|
||||||
|
if (secondCounter.getCount() == 0) {
|
||||||
|
LOGGER.warn("BaseBand appears to have stopped downloading.");
|
||||||
|
} else {
|
||||||
|
LOGGER.warn("BaseBand is downloading at a rate of " + (secondCounter.getCount() / 1024) + " kilobytes per second. (if this seems low then restart your game.)");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
thread.start();
|
||||||
try {
|
try {
|
||||||
TCN clientData = TCN.readMap(Tools.stringToMap(key.decryptString(inputStream.readString())));
|
TCN clientData = TCN.readMap(Tools.stringToMap(key.decryptString(inputStream.readString())));
|
||||||
|
|
||||||
|
@ -96,9 +111,14 @@ public class Loader implements Util {
|
||||||
RawKey rk = new RawKey(key.toBytes());
|
RawKey rk = new RawKey(key.toBytes());
|
||||||
int n = inputStream.readInt();
|
int n = inputStream.readInt();
|
||||||
for (int i = 0; i < n; i++) {
|
for (int i = 0; i < n; i++) {
|
||||||
data.put(rk.decryptString(inputStream.readString()), rk.decryptBytes(inputStream.readByteArray()));
|
String name = inputStream.readString();
|
||||||
|
byte[] bytes = inputStream.readByteArray();
|
||||||
|
data.put(rk.decryptString(name), rk.decryptBytes(bytes));
|
||||||
|
secondCounter.increment(bytes.length);
|
||||||
}
|
}
|
||||||
|
downloaded.set(true);
|
||||||
LOGGER.info("BaseBand downloaded: {} classes.", data.size());
|
LOGGER.info("BaseBand downloaded: {} classes.", data.size());
|
||||||
|
thread.stop();
|
||||||
classLoader = new CustomClassLoader(data);
|
classLoader = new CustomClassLoader(data);
|
||||||
classLoader.inject();
|
classLoader.inject();
|
||||||
classLoader.informClient(clientData);
|
classLoader.informClient(clientData);
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package de.com.baseband.launcher.util;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.Queue;
|
||||||
|
|
||||||
|
public class SecondCounter {
|
||||||
|
|
||||||
|
private static class TimeStampedByte {
|
||||||
|
long timestamp;
|
||||||
|
int bytes;
|
||||||
|
|
||||||
|
TimeStampedByte(long timestamp, int bytes) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
this.bytes = bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Queue<TimeStampedByte> count = new LinkedList<>();
|
||||||
|
|
||||||
|
public void increment(int bytes) {
|
||||||
|
count.add(new TimeStampedByte(System.currentTimeMillis() + 1000L, bytes));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
long time = System.currentTimeMillis();
|
||||||
|
try {
|
||||||
|
while (!count.isEmpty() && count.peek().timestamp < time) {
|
||||||
|
count.remove();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// empty catch block
|
||||||
|
}
|
||||||
|
int byteCount = 0;
|
||||||
|
for (TimeStampedByte tsb : count) {
|
||||||
|
byteCount += tsb.bytes;
|
||||||
|
}
|
||||||
|
return byteCount;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue