유저 접속상태 추가

킥처리시 reason 추가
유저 킥 처리
This commit is contained in:
2025-04-02 18:18:06 +09:00
parent 0fc081861b
commit 0973a36fc6
6 changed files with 39 additions and 9 deletions

View File

@@ -19,10 +19,10 @@ public class MessageHandlerService {
this.rabbitMqService = rabbitMqService;
}
public void sendUserKickMessage(String userGuid, String serverName){
public void sendUserKickMessage(String userGuid, String serverName, String reason){
var user_kick_builder = ServerMessage.MOS2GS_NTF_USER_KICK.newBuilder();
user_kick_builder.setUserGuid(userGuid);
user_kick_builder.setKickReasonMsg("");
user_kick_builder.setKickReasonMsg(String.format("backoffice %s", reason));
user_kick_builder.setLogoutReasonType(LogoutReasonType.LogoutReasonType_None);
rabbitMqService.SendMessage(user_kick_builder.build(), serverName);

View File

@@ -30,6 +30,11 @@ public class UsersController {
@RequestBody UsersRequest requestBody){
return ResponseEntity.ok().body( usersService.changeAdminLevel(requestBody));
}
@PutMapping("/user-kick")
public ResponseEntity<UsersResponse> userKick(
@RequestBody UsersRequest requestBody){
return ResponseEntity.ok().body( usersService.userKick(requestBody));
}
@GetMapping("/find-users")
public ResponseEntity<UsersResponse> findUsers(
@RequestParam Map<String, String> requestParams){

View File

@@ -62,7 +62,7 @@ public class ItemsService {
var itemCount = itemDeleteRequest.getItemCount();
//UserKick
userGameSessionService.kickUserSession(userGuid);
userGameSessionService.kickUserSession(userGuid, "item delete");
//ItemDelete
dynamoDBQueryServiceBase.deleteUserItem(userGuid, itemGuid);

View File

@@ -26,15 +26,20 @@ public class UserGameSessionService {
this.messageHandlerService = messageHandlerService;
}
public boolean userSession(String userGuid){
var loginSession = redisUserInfoService.getUserLoginSessionInfo(userGuid);
public void kickUserSession(String userGuid){
return loginSession != null;
}
public void kickUserSession(String userGuid, String reason){
var loginSession = redisUserInfoService.getUserLoginSessionInfo(userGuid);
//게임이 접속중 이면 kick 하고 2초 대기
if(null != loginSession ){
var serverName = loginSession.getCurrentServer();
messageHandlerService.sendUserKickMessage(userGuid, serverName);
messageHandlerService.sendUserKickMessage(userGuid, serverName, reason);
//여기서 2초 정도 대기(게임 메모리 정리를 위해)
try{

View File

@@ -89,6 +89,23 @@ public class UsersService {
}
// 유저 킥
public UsersResponse userKick(UsersRequest usersRequest){
String guid = usersRequest.getGuid();
String adminUser = CommonUtils.getAdmin().getEmail();
userGameSessionService.kickUserSession(guid, String.format("admin %s kick out", adminUser));
return UsersResponse.builder()
.resultData(UsersResponse.ResultData.builder()
.message(SuccessCode.SUCCESS.getMessage())
.build())
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.build();
}
// 유정 정보 조회 닉네임,GUID,Account ID
public UsersResponse findUsers(Map requestParam){
@@ -105,6 +122,7 @@ public class UsersService {
.result(CommonCode.SUCCESS.getResult())
.build();
}
public UsersResponse getBasicInfo(String guid){
String account_id = dynamoDBService.getGuidByAccountId(guid);
@@ -114,12 +132,14 @@ public class UsersService {
// charInfo
Map<String, Object> charInfo = dynamoDBService.getCharInfo(guid);
boolean userSession = userGameSessionService.userSession(guid);
return UsersResponse.builder()
.resultData(
UsersResponse.ResultData.builder()
.charInfo((UsersResponse.CharInfo) charInfo.get("charInfo"))
.userInfo((UsersResponse.UserInfo) userInfo.get("userInfo"))
.userSession(userSession)
.build()
)
.status(CommonCode.SUCCESS.getHttpStatus())
@@ -227,7 +247,7 @@ public class UsersService {
int current_cnt = Integer.parseInt(requestParams.get("current_cnt"));
int update_cnt = Integer.parseInt(requestParams.get("cnt"));
userGameSessionService.kickUserSession(guid);
userGameSessionService.kickUserSession(guid, "Item delete");
if(update_cnt >= current_cnt){
String attrib = dynamoDBService.deleteItem(guid, item_guid);
if(!attrib.isEmpty()){
@@ -278,7 +298,7 @@ public class UsersService {
String mail_guid = requestParams.get("mail_guid");
String type = requestParams.get("type");
userGameSessionService.kickUserSession(guid);
userGameSessionService.kickUserSession(guid, "delete mail");
String attrib = dynamoDBService.deleteMail(type, guid, mail_guid);
if(!attrib.isEmpty()){
JSONObject jsonObject = new JSONObject();
@@ -296,7 +316,7 @@ public class UsersService {
}
public UsersResponse deleteMailItem(MailRequest.DeleteMailItem deleteMailItem){
userGameSessionService.kickUserSession(deleteMailItem.getGuid());
userGameSessionService.kickUserSession(deleteMailItem.getGuid(), "delete mail item");
JSONObject json = dynamoDBService.updateMailItem(deleteMailItem.getType(), deleteMailItem.getGuid(),
deleteMailItem.getMailGuid(), deleteMailItem.getItemId(), deleteMailItem.getParrentCount(), deleteMailItem.getCount());
if(!json.isEmpty()){

View File

@@ -261,7 +261,7 @@ public class DynamicScheduler {
log.error("blackListJob blackListSchedule timeOut : {}", blockUser);
} else if(!nowDate.isBefore(blockUser.getStartDt())) {
// 시작시간 도달 - INPROGRESS 처리
userGameSessionService.kickUserSession(blockUser.getGuid());
userGameSessionService.kickUserSession(blockUser.getGuid(), "user block");
blackListService.updateScheduleBlockUser(blockUser, BlackList.STATUSTYPE.INPROGRESS);
blackListService.updateBlackListStatus(blockUser.getId(), BlackList.STATUSTYPE.INPROGRESS);
log.info("blackListJob blackListSchedule block start : {}", blockUser);