46 lines
1.6 KiB
Java
46 lines
1.6 KiB
Java
package ru.gravit.launchserver.response.update;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Collection;
|
|
|
|
import ru.gravit.launcher.helper.SecurityHelper;
|
|
import ru.gravit.launcher.profiles.ClientProfile;
|
|
import ru.gravit.launcher.serialize.HInput;
|
|
import ru.gravit.launcher.serialize.HOutput;
|
|
import ru.gravit.launcher.serialize.signed.SignedBytesHolder;
|
|
import ru.gravit.launcher.serialize.signed.SignedObjectHolder;
|
|
import ru.gravit.launchserver.LaunchServer;
|
|
import ru.gravit.launchserver.response.Response;
|
|
|
|
public final class LauncherResponse extends Response {
|
|
|
|
public LauncherResponse(LaunchServer server, long session, HInput input, HOutput output, String ip) {
|
|
super(server, session, input, output, ip);
|
|
}
|
|
|
|
@Override
|
|
public void reply() throws IOException {
|
|
// Resolve launcher binary
|
|
SignedBytesHolder bytes = (input.readBoolean() ? server.launcherEXEBinary : server.launcherBinary).getBytes();
|
|
if (bytes == null) {
|
|
requestError("Missing launcher binary");
|
|
return;
|
|
}
|
|
writeNoError(output);
|
|
|
|
// Update launcher binary
|
|
output.writeByteArray(bytes.getSign(), -SecurityHelper.RSA_KEY_LENGTH);
|
|
output.flush();
|
|
if (input.readBoolean()) {
|
|
output.writeByteArray(bytes.getBytes(), 0);
|
|
return; // Launcher will be restarted
|
|
}
|
|
|
|
// Write clients profiles list
|
|
Collection<SignedObjectHolder<ClientProfile>> profiles = server.getProfiles();
|
|
output.writeLength(profiles.size(), 0);
|
|
for (SignedObjectHolder<ClientProfile> profile : profiles)
|
|
profile.write(output);
|
|
}
|
|
}
|