작성
·
180
0
수업 중 C_MoveHandler에서 멀티 스레드 환경에서 clientSession.MyPlayer와 GameRoom에 대한 방어코드가 필요하다고 설명을 해주셨는데요.
수업에 사용되고 있는 시점의 코드와 테스트 환경에서는 멀티스레드에 의하여 하나의 client session에서 C_MoveHandler을 수행하는 시점에 MyPlayer나 Myplayer가 가르키고 있던 Room을 지우는( session disconnect처리) 경우는 OnSendCompleted(다른 client session에서 요청한 broad cast 메시지 처리 중 에러 발생 케이스)함수에서의 문제 발생에 의한 예외 처리(disconnect) 시점에서만 발생할 수 있다고 생각되는 데 이외에 생각할 수 있는 조건이 있을까요?
( 각 client session별로 session disconnect가 이뤄 지는 곳은 Receive Thread나 Send Thread인데 Receive Thread의 경우 해당 client의 C_MoveHandler를 실행하는 주체이기 때문에 멀티스레드에 의해 해당 client의 정보를 수정하게 될 수 있는 곳은 Send를 처리하는 thread밖에 없을 것 같아서요.)
답변 1
0
물론 [수업에 사용되는 시점]의 코드에서는 Room 제거하는 경우가 많이 없지만,
나중에 가면 게임 사양이나 해킹 의심 등으로 킥 하는 등
Room에서 쫓아내는 부분이 더 많이 추가될 수 있으니
하는 김에 미리 챙기는 것이 여러모로 좋습니다.