From b3a8e803992d4bb3dba4e6ea64505c8106b7d10e Mon Sep 17 00:00:00 2001 From: samnyan <4137880+samnyan@users.noreply.github.com> Date: Mon, 14 Dec 2020 17:02:44 +0800 Subject: [PATCH] [allnet] Add support for v2 power on response --- .../aqua/sega/allnet/AllNetController.java | 75 +++++++++++++------ .../model/response/PowerOnResponse.java | 52 +------------ .../model/response/PowerOnResponseV2.java | 60 +++++++++++++++ .../model/response/PowerOnResponseV3.java | 54 +++++++++++++ 4 files changed, 171 insertions(+), 70 deletions(-) create mode 100644 src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV2.java create mode 100644 src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV3.java diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java index a5504630..5d9b0634 100644 --- a/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/AllNetController.java @@ -2,6 +2,8 @@ package icu.samnyan.aqua.sega.allnet; import com.fasterxml.jackson.databind.ObjectMapper; import icu.samnyan.aqua.sega.allnet.model.response.PowerOnResponse; +import icu.samnyan.aqua.sega.allnet.model.response.PowerOnResponseV2; +import icu.samnyan.aqua.sega.allnet.model.response.PowerOnResponseV3; import icu.samnyan.aqua.sega.allnet.util.Decoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.io.InputStream; import java.time.Instant; +import java.time.LocalDateTime; import java.util.Map; import java.util.zip.DataFormatException; @@ -24,6 +27,7 @@ public class AllNetController { private static final Logger logger = LoggerFactory.getLogger(AllNetController.class); + private final ObjectMapper mapper = new ObjectMapper(); private final String HOST; private final String PORT; @@ -53,27 +57,56 @@ public class AllNetController { // TODO: Verify KeyChip id String gameId = reqMap.getOrDefault("game_id", ""); - PowerOnResponse resp = new PowerOnResponse( - 1, - switchUri(gameId), - switchHost(gameId), - "123", - "", - "", - "1", - "W", - "X", - "Y", - "Z", - "JPN", - "456", - "+0900", - Instant.now().toString().substring(0, 19).concat("Z"), - "", - "3", - reqMap.get("token") - ); - logger.info("Response: " + new ObjectMapper().writeValueAsString(resp)); + String format_ver = reqMap.getOrDefault("format_ver", ""); + PowerOnResponse resp; + if (format_ver.startsWith("2")) { + var now = LocalDateTime.now(); + resp = new PowerOnResponseV2( + 1, + switchUri(gameId), + switchHost(gameId), + "123", + "", + "", + "1", + "W", + "X", + "Y", + "Z", + "JPN", + now.getYear(), + now.getMonth().getValue(), + now.getDayOfMonth(), + now.getHour(), + now.getMinute(), + now.getSecond(), + "1", + "+09:00", + "PowerOnResponseV2" + ); + } else { + resp = new PowerOnResponseV3( + 1, + switchUri(gameId), + switchHost(gameId), + "123", + "", + "", + "1", + "W", + "X", + "Y", + "Z", + "JPN", + "456", + "+0900", + Instant.now().toString().substring(0, 19).concat("Z"), + "", + "3", + reqMap.get("token") + ); + } + logger.info("Response: " + mapper.writeValueAsString(resp)); return resp.toString().concat("\n"); } diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java index e22884f3..95f684b7 100644 --- a/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponse.java @@ -1,54 +1,8 @@ package icu.samnyan.aqua.sega.allnet.model.response; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; - /** * @author samnyan (privateamusement@protonmail.com) */ -@Data -@NoArgsConstructor -@AllArgsConstructor -public class PowerOnResponse { - private int stat; - private String uri; - private String host; - private String place_id; - private String name; - private String nickname; - private String region0; - private String region_name0; - private String region_name1; - private String region_name2; - private String region_name3; - private String country; - private String allnet_id; - private String client_timezone; - private String utc_time; - private String setting; - private String res_ver; - private String token; - - @Override - public String toString() { - return "stat=" + stat + - "&uri=" + uri + - "&host=" + host + - "&place_id=" + place_id + - "&name=" + name + - "&nickname=" + nickname + - "®ion0=" + region0 + - "®ion_name0=" + region_name0 + - "®ion_name1=" + region_name1 + - "®ion_name2=" + region_name2 + - "®ion_name3=" + region_name3 + - "&country=" + country + - "&allnet_id=" + allnet_id + - "&client_timezone=" + client_timezone + - "&utc_time=" + utc_time + - "&setting=" + setting + - "&res_ver=" + res_ver + - "&token=" + token; - } -} \ No newline at end of file +public interface PowerOnResponse { + String toString(); +} diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV2.java b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV2.java new file mode 100644 index 00000000..d1ab334f --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV2.java @@ -0,0 +1,60 @@ +package icu.samnyan.aqua.sega.allnet.model.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PowerOnResponseV2 implements PowerOnResponse { + private int stat; + private String uri; + private String host; + private String place_id; + private String name; + private String nickname; + private String region0; + private String region_name0; + private String region_name1; + private String region_name2; + private String region_name3; + private String country; + private int year; + private int month; + private int day; + private int hour; + private int minute; + private int second; + private String setting; + private String timezone; + private String res_class; + + @Override + public String toString() { + return "stat=" + stat + + "&uri=" + uri + + "&host=" + host + + "&place_id=" + place_id + + "&name=" + name + + "&nickname=" + nickname + + "®ion0=" + region0 + + "®ion_name0=" + region_name0 + + "®ion_name1=" + region_name1 + + "®ion_name2=" + region_name2 + + "®ion_name3=" + region_name3 + + "&country=" + country + + "&year=" + year + + "&month=" + month + + "&day=" + day + + "&hour=" + hour + + "&minute=" + minute + + "&second=" + second + + "&setting=" + setting + + "&timezone=" + timezone + + "&res_class=PowerOnResponseV2"; + } +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV3.java b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV3.java new file mode 100644 index 00000000..f28cb102 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/allnet/model/response/PowerOnResponseV3.java @@ -0,0 +1,54 @@ +package icu.samnyan.aqua.sega.allnet.model.response; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author samnyan (privateamusement@protonmail.com) + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class PowerOnResponseV3 implements PowerOnResponse { + private int stat; + private String uri; + private String host; + private String place_id; + private String name; + private String nickname; + private String region0; + private String region_name0; + private String region_name1; + private String region_name2; + private String region_name3; + private String country; + private String allnet_id; + private String client_timezone; + private String utc_time; + private String setting; + private String res_ver; + private String token; + + @Override + public String toString() { + return "stat=" + stat + + "&uri=" + uri + + "&host=" + host + + "&place_id=" + place_id + + "&name=" + name + + "&nickname=" + nickname + + "®ion0=" + region0 + + "®ion_name0=" + region_name0 + + "®ion_name1=" + region_name1 + + "®ion_name2=" + region_name2 + + "®ion_name3=" + region_name3 + + "&country=" + country + + "&allnet_id=" + allnet_id + + "&client_timezone=" + client_timezone + + "&utc_time=" + utc_time + + "&setting=" + setting + + "&res_ver=" + res_ver + + "&token=" + token; + } +} \ No newline at end of file