rabbit97 님의 블로그
22일 일지 본문
# 오늘의 개발 진행 사항
- *예비군 훈련 받고 오기*
- 유저 업데이트 로직 병합
- 리액션 핸들러 병합 준비 중
오늘도 문제가 있었는데 캐릭터가 공격을 하면 클라이언트에서 공격을 했구나!! 하고 서버로 리액션 요청이 오는 줄 알았는데
그게 맞긴 하지만 공격 로직에 문제가 있어서 또 무한 로딩에 걸렸었다.
처음에는 팀원들끼리 회의 중 리액션 로직에 문제가 있는거 같아서 그런 것 같다 결론이 나왔었는데 (아니였다)
# 해결 과정
패킷 명세 :
message CharacterStateInfoData {
CharacterStateType state = 1;
CharacterStateType nextState = 2;
int64 nextStateAt = 3; // state가 nextState로 풀리는 밀리초 타임스탬프. state가 NONE이면 0
int64 stateTargetUserId = 4; // state에 target이 있을 경우
}
enum CharacterStateType {
NONE_CHARACTER_STATE = 0; BBANG_SHOOTER = 1; // 빵야 시전자
BBANG_TARGET = 2; // 빵야 대상 (쉴드 사용가능 상태)
DEATH_MATCH_STATE = 3; // 현피 중 자신의 턴이 아닐 때
DEATH_MATCH_TURN_STATE = 4; // 현피 중 자신의 턴
FLEA_MARKET_TURN = 5; // 플리마켓 자신의 턴
FLEA_MARKET_WAIT = 6; // 플리마켓 턴 대기 상태
GUERRILLA_SHOOTER = 7; // 게릴라 시전자
GUERRILLA_TARGET = 8; // 게릴라 대상
BIG_BBANG_SHOOTER = 9; // 난사 시전자
BIG_BBANG_TARGET = 10; //
난사 대상 ABSORBING = 11; // 흡수 중
ABSORB_TARGET = 12; // 흡수 대상
HALLUCINATING = 13; // 신기루 중
HALLUCINATION_TARGET = 14; // 신기루 대상
CONTAINED = 15; // 감금 중
}
로그 :
targetUserId: 3
게임 내 유저들 [
{
"id": 2,
"nickname": "1111",
"character": {
"characterType": 5,
"roleType": 3,
"hp": 2,
"weapon": 13,
"stateInfo": {
"state": 1,
"nextState": 0,
"nextStateAt": 3000,
"stateTargetUserId": 3
},
{
"id": 3,
"nickname": "2222",
"character": {
"characterType": 8,
"roleType": 1,
"hp": 3,
"weapon": 13,
"stateInfo": {
"state": 2,
"nextState": 0,
"nextStateAt": 3000,
"stateTargetUserId": 0
},
아무런 문제도 없어 보이고 실제로 아무런 오류가 나오지 않아서 찾는데 시간이 좀 걸렸지만
수정한 로직 :

로그:
{
"id": 2,
"nickname": "1111",
"character": {
"characterType": 5,
"roleType": 3,
"hp": 2,
"weapon": 13,
"stateInfo": {
"state": 1,
"nextState": 0,
"nextStateAt": 1732276926057,
"stateTargetUserId": 3
},
{
"id": 3,
"nickname": "2222",
"character": {
"characterType": 8,
"roleType": 1,
"hp": 3,
"weapon": 13,
"stateInfo": {
"state": 2,
"nextState": 0,
"nextStateAt": 1732276926057,
"stateTargetUserId": 3
},
이게 맞았다
일단 단순히 3초 뒤가 아닌 Date.now() 를 사용해서 약속시간 잡듯이 몇시 몇분에 라고 지정을 해줘야 하고
또 문제는 당연히 명세에는 공격을 누구한테 했는지에 대한 타켓 아이디가 중요하다고 생각했지
공격을 받은 사람은 state를 2로 두고 타켓은 0으로 뒀었는데
공격자랑 통일을 해줬어야했다.
문제 해결
은 아니고 이제 리액션 패킷이 잘 보내지니 오류 내용을 참고해서 잘 수정만 하면 된다.