[chusan] Add global matching lobby stub

pull/1/head
Dom Eori 2023-03-17 15:35:03 +09:00
parent 6c6d3c2671
commit 8549763f58
14 changed files with 364 additions and 13 deletions

View File

@ -59,6 +59,10 @@ public class ChusanServletController {
private final CMUpsertUserGachaHandler cmUpsertUserGachaHandler;
private final CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler;
private final CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler;
private final BeginMatchingHandler beginMatchingHandler;
private final EndMatchingHandler endMatchingHandler;
private final GetMatchingStateHandler getMatchingStateHandler;
private final RemoveMatchingMemberHandler removeMatchingMemberHandler;
@Autowired
public ChusanServletController(GameLoginHandler gameLoginHandler, GameLogoutHandler gameLogoutHandler,
@ -82,7 +86,9 @@ public class ChusanServletController {
CMGetUserCharacterHandler cmGetUserCharacterHandler, GetUserGachaHandler getUserGachaHandler,
GetUserPrintedCardHandler getUserPrintedCardHandler, CMGetUserItemHandler cmGetUserItemHandler,
RollGachaHandler rollGachaHandler, CMUpsertUserGachaHandler cmUpsertUserGachaHandler,
CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler, CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler) {
CMUpsertUserPrintSubtractHandler cmUpsertUserPrintSubtractHandler, CMUpsertUserPrintCancelHandler cmUpsertUserPrintCancelHandler,
BeginMatchingHandler beginMatchingHandler, EndMatchingHandler endMatchingHandler,
GetMatchingStateHandler getMatchingStateHandler, RemoveMatchingMemberHandler removeMatchingMemberHandler) {
this.gameLoginHandler = gameLoginHandler;
this.gameLogoutHandler = gameLogoutHandler;
this.getGameChargeHandler = getGameChargeHandler;
@ -127,6 +133,10 @@ public class ChusanServletController {
this.cmUpsertUserGachaHandler = cmUpsertUserGachaHandler;
this.cmUpsertUserPrintSubtractHandler = cmUpsertUserPrintSubtractHandler;
this.cmUpsertUserPrintCancelHandler = cmUpsertUserPrintCancelHandler;
this.beginMatchingHandler = beginMatchingHandler;
this.endMatchingHandler = endMatchingHandler;
this.getMatchingStateHandler = getMatchingStateHandler;
this.removeMatchingMemberHandler = removeMatchingMemberHandler;
}
@PostMapping("GameLoginApi")
@ -254,6 +264,7 @@ public class ChusanServletController {
String getUserRivalData(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserRivalDataHandler.handle(request);
}
@PostMapping("GetUserRivalMusicApi")
String getUserRivalMusic(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getUserRivalMusicHandler.handle(request);
@ -324,24 +335,32 @@ public class ChusanServletController {
return "{\"returnCode\":\"1\"}";
}
@PostMapping({"MatchingServer/Ping", "Ping"})
// Matching endpoints
@PostMapping("MatchingServer/Ping")
String ping(@ModelAttribute Map<String, Object> request) {
return "{\"returnCode\":\"1\"}";
}
/* TBD matching endpoints
@PostMapping("MatchingServer/BeginMatchingApi")
String beginMatching(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return beginMatchingHandler.handle(request);
}
@PostMapping("MatchingServer/EndMatchingApi")
@PostMapping("MatchingServer/BeginMatchingApi")
String endMatching(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return endMatchingHandler.handle(request);
}
@PostMapping("MatchingServer/RemoveMatchingMemberApi")
String removeMatchingMember(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return removeMatchingMemberHandler.handle(request);
}
@PostMapping("GetMatchingStateApi")
*/
@PostMapping("MatchingServer/GetMatchingStateApi")
String getMatchingState(@ModelAttribute Map<String, Object> request) throws JsonProcessingException {
return getMatchingStateHandler.handle(request);
}
// Cardmaker endpoints

View File

@ -0,0 +1,48 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.response.data.MatchingMemberInfo;
import icu.samnyan.aqua.sega.chusan.model.response.data.MatchingWaitState;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanBeginMatchingHandler")
public class BeginMatchingHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(BeginMatchingHandler.class);
private final StringMapper mapper;
@Autowired
public BeginMatchingHandler(StringMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
MatchingMemberInfo matchingMemberInfo = mapper.convert(request.get("matchingMemberInfo"), MatchingMemberInfo.class);
MatchingWaitState matchingWaitState = new MatchingWaitState();
matchingWaitState.getMatchingMemberInfoList().add(matchingMemberInfo);
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("roomId", 1);
resultMap.put("matchingWaitState", matchingWaitState);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -0,0 +1,48 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanEndMatchingHandler")
public class EndMatchingHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(EndMatchingHandler.class);
private final StringMapper mapper;
@Autowired
public EndMatchingHandler(StringMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
//roomId, userId
Map<String, Object> matchingResult = new LinkedHashMap<>();
matchingResult.put("matchingMemberInfoList", List.of()); // MatchingMemberInfo
matchingResult.put("matchingMemberRoleList", List.of()); // Role?
matchingResult.put("reflectorUri", "");
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("matchingResult", matchingResult);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
@ -55,6 +56,9 @@ public class GetGameSettingHandler implements BaseHandler {
LocalDateTime rebootStartTime = LocalDateTime.now().minusHours(3);
LocalDateTime rebootEndTime = LocalDateTime.now().minusHours(2);
LocalDateTime matchingStartTime = LocalDateTime.now().minusHours(1);
LocalDateTime matchingEndTime = LocalDateTime.now().plusHours(1);
// Unless ip and port is explicitly overridden, use the guessed ip and port as same as AllNet Controller does.
String localAddr;
try {
@ -78,10 +82,10 @@ public class GetGameSettingHandler implements BaseHandler {
300,
300,
300,
rebootStartTime.format(formatter),
rebootEndTime.format(formatter),
matchingStartTime.format(formatter),
matchingEndTime.format(formatter),
10,
10,
1,
"http://" + addr + ":" + port + "/ChusanServlet/",
"http://" + addr + ":" + port + "/ChusanServlet/",
"http://" + addr + ":" + port + "/ChusanServlet/"

View File

@ -0,0 +1,48 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.response.data.MatchingMemberInfo;
import icu.samnyan.aqua.sega.chusan.model.response.data.MatchingWaitState;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanGetMatchingStateHandler")
public class GetMatchingStateHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(GetMatchingStateHandler.class);
private final StringMapper mapper;
@Autowired
public GetMatchingStateHandler(StringMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
String roomId = (String) request.get("roomId");
MatchingMemberInfo matchingMemberInfo = mapper.convert(request.get("matchingMemberInfo"), MatchingMemberInfo.class);
Map<String, Object> resultMap = new LinkedHashMap<>();
MatchingWaitState matchingWaitState = new MatchingWaitState();
matchingWaitState.setFinish(true);
resultMap.put("matchingWaitState", matchingWaitState);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -33,6 +33,7 @@ public class GetUserNetBattleDataHandler implements BaseHandler {
Map<String, Object> userNetBattleData = new LinkedHashMap<>();
userNetBattleData.put("recentNBSelectMusicList", List.of());
userNetBattleData.put("recentNBMusicList", List.of());
resultMap.put("userNetBattleData", userNetBattleData);

View File

@ -2,6 +2,7 @@ package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.chusan.model.response.data.SymbolChatInfo;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -32,7 +33,7 @@ public class GetUserSymbolChatSettingHandler implements BaseHandler {
public String handle(Map<String, Object> request) throws JsonProcessingException {
String userId = (String) request.get("userId");
List<Object> symbolChatInfoList = new ArrayList<>();
List<SymbolChatInfo> symbolChatInfoList = new ArrayList<>();
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("userId", userId);

View File

@ -0,0 +1,40 @@
package icu.samnyan.aqua.sega.chusan.handler.impl;
import com.fasterxml.jackson.core.JsonProcessingException;
import icu.samnyan.aqua.sega.chusan.handler.BaseHandler;
import icu.samnyan.aqua.sega.util.jackson.StringMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Component("ChusanRemoveMatchingMemberHandler")
public class RemoveMatchingMemberHandler implements BaseHandler {
private static final Logger logger = LoggerFactory.getLogger(RemoveMatchingMemberHandler.class);
private final StringMapper mapper;
@Autowired
public RemoveMatchingMemberHandler(StringMapper mapper) {
this.mapper = mapper;
}
@Override
public String handle(Map<String, Object> request) throws JsonProcessingException {
Map<String, Object> resultMap = new LinkedHashMap<>();
resultMap.put("returnCode", 1);
String json = mapper.write(resultMap);
logger.info("Response: " + json);
return json;
}
}

View File

@ -80,6 +80,9 @@ public class UpsertUserAll implements Serializable {
@Nullable
private List<Map<String, Object>> userEmoneyList;
@Nullable
private List<Map<String, Object>> userNetBattleData;
@Nullable
@JsonProperty("isNewCharacterList")
private String isNewCharacterList;

View File

@ -0,0 +1,23 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AvatarEquip {
private int wearID;
private int headID;
private int faceID;
private int skinID;
private int itemID;
private int frontID;
private int backID;
}

View File

@ -0,0 +1,18 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GenreGraph {
private int genreId;
private int musicCount;
}

View File

@ -0,0 +1,53 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import java.time.LocalDateTime;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchingMemberInfo {
private int userId;
private int regionId;
private int placeId;
private String userName;
private int playerRating;
private int battleRankId;
private int battleCorrection;
private int battleRatingAvg;
private int optRatingId;
private int ratingEffectColorId;
private int trophyId;
private int nameplateId;
private int emblemMedal;
private int emblemBase;
private int characterId;
private int characterRank;
private int skillId;
private int skillLv;
private int skillIdForChara;
@JsonProperty("isJoinTeam")
private boolean isJoinTeam;
private String teamName;
private int teamRank;
private AvatarEquip avatarEquip;
private int messageId;
private String clientId;
private String romVersion;
private String dataVersion;
private int errCnt;
private int hostErrCnt;
private int joinTime;
private List<GenreGraph> genreGraphList;
}

View File

@ -0,0 +1,26 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchingWaitState {
@JsonProperty("isFinish")
private boolean isFinish = false;
private int restMSec = 30000;
private int pollingInterval = 10;
private List<MatchingMemberInfo> matchingMemberInfoList = new ArrayList<>();
}

View File

@ -0,0 +1,19 @@
package icu.samnyan.aqua.sega.chusan.model.response.data;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author samnyan (privateamusement@protonmail.com)
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SymbolChatInfo {
private int sceneId;
private int symbolChatId;
private int orderId;
}