일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 중복된 단어
- ubuntu타임존
- @Moditying @Query
- 5.3.8 Modifying Queries
- 문자열순서바꾸기
- 우분투 시간 변경
- 레디스 확인
- ...점점점문법
- sql 문자열 패턴 검색
- 깃 토큰 만료
- lastIndexOf()
- 제로베이스
- 재귀스왑
- sql like연산자
- 객체의 밸류값만 찾기
- 프론트엔드 스쿨
- 시퀄 문법
- 단어 제거
- js 문자열을 문자배열로
- 객체를 배열로
- 문자열 중복
- 중복문자제거
- 중복단어제거
- 배엘에서 스왑
- 배열을 객체로
- 중복 문자열
- 코딩 어?
- 객체의키값만 찾기
- 스프링 데이타 JPA
- indexOf()
- Today
- Total
코딩기록
항해 80일)오늘의 할 일 + TIL 본문
오늘의 할 일
1. 게임중간에 옵저버가 나갔을때 기존 훈수체팅 횟수로 점수 계산됨
-상태-
나간 옵저버 카운트 0리셋 안되고 포인트 계산 안됨, 남은 팀들 결과창에 나간 옵저버의 정보가 뜸
겜방에서 대기실로 나간 옵저버 유저디비 state가 계속 남음
-수정사항-
중간에 나간 옵저버 소켓에서 teachingCnt 0리셋 하기
소켓 disconnecting에서 updateOne- $pull 에서 바꾸면 된다
겜방에서 대기실로 나간 옵저버 유저디비 state를 endGame으로 변경하기
-수정코드-
const {id, gameNum} = socket.nickname
//게임방 퇴장시 유저 state변경, connect변경
await Users.updateMany({ id }, { $set: { state: 'online', connect: 'endGame' }});
//게임방에서 옵저버가 나갈때
const gameId = await Games.findOne({ gameNum }, { _id: 0, blackTeamObserver: 1, whiteTeamObserver: 1 })
const outObTeachingCnt = await Users.findOne({ id }, { _id: 0, id: 1, teachingCnt: 1 })
// console.log("457,gameId",gameId)
if(gameId.blackTeamObserver === id && outObTeachingCnt.id === id){
await Games.updateOne({ gameNum }, { $pull: {blackTeamObserver: id}})
await Users.updateOne({ id }, { $set: { teachingCnt: 0 }});
}
if(gameId.whiteTeamObserver === id && outObTeachingCnt.id === id){
await Games.updateOne({ gameNum }, { $pull: {whiteTeamObserver: id}})
await Users.updateOne({ id }, { $set: { teachingCnt: 0 }});
}
2. 기권패에서 패한 옵저버 점수 오류
프론트에서 req.body로 보내는 state값이 online이라서 점수 변동이 안됨. 프론트에서 보내는 값 확인하기
소켓과 관련된 문제였나보다 gameStart이벤트에서 nickname = {id:"user1"} 을 nickname = {id:"user1", gameNum:"1"} 로 변경해서 보내달라했고 변경후 한참동안 오류(게임돌 안놔짐, 게임방에서 나가기 안됨, 점수계산 안됨)에 시달리다 현재는 잘된다.
다만 이겼을때 플레이어와 옵저버의 결과창 점수가 조금씩 다른게 이상하다
* 이후 추가 *
이유는 유저디비에서 state값이 옵저버인지 아닌지 확인해서 계산을 하는데 그 값이 online으로 되어있고 그 online은 소켓disconnectiong이 이루어지지 않아서 그렇다. 그래서 프론트에서 강제로 끊는 방법으로 해결했다. 알고보니 대기방에서는 이미 그렇게 하고 있었다. 이걸 해결하기까지 백이 꼬박 5,6시간 머리를 맞대서 고민했다. 사실 나는 주로 듣는 쪽이었지만 프론트까지 소켓을 알아야 생각할 수 있는 방법이다.
3. 게임 오목판 색상 변경
let gameName = { gameNum: 516, gameName: 'testtest' }
const findBoardColor = { boardColor:1 }
gameName.boardColor = findBoardColor.boardColor
console.log("51,gameStart,findBoardColor:",findBoardColor)
console.log("52,gameStart,gameName:",gameName)
//print
51,gameStart,findBoardColor: { boardColor: 1 }
52,gameStart,gameName: { gameNum: 516, gameName: 'testtest', boardColor: 1 }
이렇게 하면 gameName에 boardColor가 객체로 추가돼서 들어가야하는데 서버로그에는 안뜬다.
* 이후 추가 *
로그에는 안뜨지만 보내진다.
오늘의 스케줄
- 12:40 - 기상
- 19:00 - 전체회의
- 220331-목 새벽 5:41 - 수면
오늘 배운 것
socketIo는 프론트까지 알고 있어야 오류를 잡기 용이 하다.
'항해99 > TIL' 카테고리의 다른 글
항해 93일) 오늘의 할 일 + TIL (0) | 2022.04.12 |
---|---|
항해 81일)오늘의 할 일 + TIL (0) | 2022.03.31 |
항해 79일)오늘의 할 일 + TIL (0) | 2022.03.29 |
항해 74일) 오늘의 할 일 + TIL (0) | 2022.03.24 |
항해 51일) 오늘의 할 일 + TIL (0) | 2022.03.01 |