mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-11-15 11:39:11 +03:00
Сериализация HashedDir в json
This commit is contained in:
parent
788eb253f4
commit
f27ec8cb7f
5 changed files with 63 additions and 10 deletions
|
@ -330,7 +330,7 @@ public static void main(String... args) throws Throwable {
|
||||||
// Updates and profiles
|
// Updates and profiles
|
||||||
private volatile List<SignedObjectHolder<ClientProfile>> profilesList;
|
private volatile List<SignedObjectHolder<ClientProfile>> profilesList;
|
||||||
|
|
||||||
private volatile Map<String, SignedObjectHolder<HashedDir>> updatesDirMap;
|
public volatile Map<String, SignedObjectHolder<HashedDir>> updatesDirMap;
|
||||||
|
|
||||||
public LaunchServer(Path dir, boolean portable) throws IOException, InvalidKeySpecException {
|
public LaunchServer(Path dir, boolean portable) throws IOException, InvalidKeySpecException {
|
||||||
//setScriptBindings();
|
//setScriptBindings();
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.command.Command;
|
import ru.gravit.launchserver.command.Command;
|
||||||
import ru.gravit.launchserver.socket.NettyServerSocketHandler;
|
import ru.gravit.launchserver.socket.NettyServerSocketHandler;
|
||||||
|
import ru.gravit.launchserver.socket.websocket.WebSocketService;
|
||||||
import ru.gravit.utils.helper.CommonHelper;
|
import ru.gravit.utils.helper.CommonHelper;
|
||||||
|
|
||||||
public class TestCommand extends Command {
|
public class TestCommand extends Command {
|
||||||
|
|
|
@ -7,9 +7,11 @@
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.group.ChannelGroup;
|
import io.netty.channel.group.ChannelGroup;
|
||||||
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
|
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
|
||||||
|
import ru.gravit.launcher.hasher.HashedEntry;
|
||||||
import ru.gravit.launchserver.LaunchServer;
|
import ru.gravit.launchserver.LaunchServer;
|
||||||
import ru.gravit.launchserver.socket.Client;
|
import ru.gravit.launchserver.socket.Client;
|
||||||
import ru.gravit.launchserver.socket.websocket.json.EchoResponse;
|
import ru.gravit.launchserver.socket.websocket.json.EchoResponse;
|
||||||
|
import ru.gravit.launchserver.socket.websocket.json.HashedEntryAdapter;
|
||||||
import ru.gravit.launchserver.socket.websocket.json.JsonResponseAdapter;
|
import ru.gravit.launchserver.socket.websocket.json.JsonResponseAdapter;
|
||||||
import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface;
|
import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface;
|
||||||
import ru.gravit.launchserver.socket.websocket.json.auth.AuthResponse;
|
import ru.gravit.launchserver.socket.websocket.json.auth.AuthResponse;
|
||||||
|
@ -28,6 +30,7 @@ public WebSocketService(ChannelGroup channels, LaunchServer server, GsonBuilder
|
||||||
this.gsonBuiler = gson;
|
this.gsonBuiler = gson;
|
||||||
this.
|
this.
|
||||||
gsonBuiler.registerTypeAdapter(JsonResponseInterface.class,new JsonResponseAdapter(this));
|
gsonBuiler.registerTypeAdapter(JsonResponseInterface.class,new JsonResponseAdapter(this));
|
||||||
|
gsonBuiler.registerTypeAdapter(HashedEntry.class,new HashedEntryAdapter(this));
|
||||||
this.gson = gsonBuiler.create();
|
this.gson = gsonBuiler.create();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
package ru.gravit.launchserver.socket.websocket.json;
|
||||||
|
|
||||||
|
import com.google.gson.*;
|
||||||
|
import ru.gravit.launcher.hasher.HashedDir;
|
||||||
|
import ru.gravit.launcher.hasher.HashedEntry;
|
||||||
|
import ru.gravit.launcher.hasher.HashedFile;
|
||||||
|
import ru.gravit.launchserver.socket.websocket.WebSocketService;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
|
||||||
|
|
||||||
|
public class HashedEntryAdapter implements JsonSerializer<HashedEntry>, JsonDeserializer<HashedEntry> {
|
||||||
|
private final WebSocketService service;
|
||||||
|
private static final String PROP_NAME = "type";
|
||||||
|
|
||||||
|
public HashedEntryAdapter(WebSocketService service) {
|
||||||
|
this.service = service;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashedEntry deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
|
||||||
|
String typename = json.getAsJsonObject().getAsJsonPrimitive(PROP_NAME).getAsString();
|
||||||
|
Class cls = null;
|
||||||
|
if(typename.equals("dir")) cls = HashedDir.class;
|
||||||
|
if(typename.equals("file")) cls = HashedFile.class;
|
||||||
|
|
||||||
|
|
||||||
|
return (HashedEntry) context.deserialize(json, cls);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JsonElement serialize(HashedEntry src, Type typeOfSrc, JsonSerializationContext context) {
|
||||||
|
// note : won't work, you must delegate this
|
||||||
|
JsonObject jo = context.serialize(src).getAsJsonObject();
|
||||||
|
|
||||||
|
HashedEntry.Type type = src.getType();
|
||||||
|
if(type == HashedEntry.Type.DIR)
|
||||||
|
jo.add(PROP_NAME, new JsonPrimitive("dir"));
|
||||||
|
if(type == HashedEntry.Type.FILE)
|
||||||
|
jo.add(PROP_NAME, new JsonPrimitive("file"));
|
||||||
|
|
||||||
|
return jo;
|
||||||
|
}
|
||||||
|
}
|
|
@ -14,6 +14,9 @@ public class LauncherResponse implements JsonResponseInterface {
|
||||||
public Version version;
|
public Version version;
|
||||||
public String hash;
|
public String hash;
|
||||||
public int launcher_type;
|
public int launcher_type;
|
||||||
|
//REPLACED TO REAL URL
|
||||||
|
public static final String JAR_URL = "http://localhost:9752/Launcher.jar";
|
||||||
|
public static final String EXE_URL = "http://localhost:9752/Launcher.exe";
|
||||||
@Override
|
@Override
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return "launcherUpdate";
|
return "launcherUpdate";
|
||||||
|
@ -25,24 +28,24 @@ public void execute(WebSocketService service, ChannelHandlerContext ctx, Client
|
||||||
if(launcher_type == 1) // JAR
|
if(launcher_type == 1) // JAR
|
||||||
{
|
{
|
||||||
byte[] hash = LaunchServer.server.launcherBinary.getHash();
|
byte[] hash = LaunchServer.server.launcherBinary.getHash();
|
||||||
if(hash == null) service.sendObjectAndClose(ctx, new Result(true));
|
if(hash == null) service.sendObjectAndClose(ctx, new Result(true,JAR_URL));
|
||||||
if(Arrays.equals(bytes, hash)) //REPLACE REAL HASH
|
if(Arrays.equals(bytes, hash))
|
||||||
{
|
{
|
||||||
service.sendObject(ctx, new Result(false));
|
service.sendObject(ctx, new Result(false,JAR_URL));
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
service.sendObjectAndClose(ctx, new Result(true));
|
service.sendObjectAndClose(ctx, new Result(true,JAR_URL));
|
||||||
}
|
}
|
||||||
} else if(launcher_type == 2) //EXE
|
} else if(launcher_type == 2) //EXE
|
||||||
{
|
{
|
||||||
byte[] hash = LaunchServer.server.launcherEXEBinary.getHash();
|
byte[] hash = LaunchServer.server.launcherEXEBinary.getHash();
|
||||||
if(hash == null) service.sendObjectAndClose(ctx, new Result(true));
|
if(hash == null) service.sendObjectAndClose(ctx, new Result(true,EXE_URL));
|
||||||
if(Arrays.equals(bytes, hash)) //REPLACE REAL HASH
|
if(Arrays.equals(bytes, hash))
|
||||||
{
|
{
|
||||||
service.sendObject(ctx, new Result(false));
|
service.sendObject(ctx, new Result(false,EXE_URL));
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
service.sendObjectAndClose(ctx, new Result(true));
|
service.sendObjectAndClose(ctx, new Result(true,EXE_URL));
|
||||||
}
|
}
|
||||||
} else service.sendObject(ctx, new WebSocketService.ErrorResult("Request launcher type error"));
|
} else service.sendObject(ctx, new WebSocketService.ErrorResult("Request launcher type error"));
|
||||||
|
|
||||||
|
@ -51,9 +54,11 @@ public class Result
|
||||||
{
|
{
|
||||||
public String type = "success";
|
public String type = "success";
|
||||||
public String requesttype = "launcherUpdate";
|
public String requesttype = "launcherUpdate";
|
||||||
|
public String url;
|
||||||
|
|
||||||
public Result(boolean needUpdate) {
|
public Result(boolean needUpdate,String url) {
|
||||||
this.needUpdate = needUpdate;
|
this.needUpdate = needUpdate;
|
||||||
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean needUpdate;
|
public boolean needUpdate;
|
||||||
|
|
Loading…
Reference in a new issue