에러발생 시 대처사항
디버거에 의해 일시 정지 시 서버 연결이 끊어지는 문제 해결
서버나 클라이언트를 디버깅하기 위해 디버거를 쓰던 중 디버깅 중인 프로그램이 중단점 설정 등에 의해 일시 정지하기 마련입니다.
하지만 ProudNet을 쓰는 경우 이러한 일시 정지 중 수십 초가 지나면 서버와 클라이언트 간의 연결이 끊어집니다. 호스트 간 연결이 비정상적으로 끊어지는 경우 대체적으로 즉시 감지하지만 호스트의 전원이나 통신선을 강제로 뽑아버리는 등의 연결 해제(hard disconnect)를 하는 경우 즉시 감지하지 못합니다.
그리고 일정 시간마다 호스트 간 주고 받는 핑퐁 패킷을 통해 hard disconnect 를 감지합니다. 디버깅 중인 프로그램이 수십 초 동안 일시 정지 상태인 경우도 ProudNet은 hard disconnect로 인식하여 호스트 간의 연결을 해제합니다.
이를 해결하기 위해서는 Proud.CNetServer.SetDefaultTimeoutTimeSec을 써서 hard disconnect를 감지하는 시간을 충분히 길게(예를 들어 한시간) 설정하면 됩니다.
Proud.CNetServer.SetDefaultTimeoutTimeSec을 길게 설정하는 것은 디버깅 중 일때만 권장합니다.
게이머에게 배포되는 버전에 SetDefaultTimeoutTimeSec를 길게 설정할 경우 hard disconnect하는 게이머의 연결 해제 감지를 감지하는데 너무 오랜 시간이 걸릴 수 있습니다.
간혹 hard disconnect를 악용하는 게이머들도 있을 수 있으므로 주의해 주시기 바랍니다.
빌드 에러가 발생할 경우
#include <atlbase.h>를 include <ProudNetServer.h> 또는 include <ProudNetClietn.h>를 하기 전에 해보시기 바랍니다. stdafx.h를 사용하는 경우 stdafx.h의 맨 앞단에 include <atlbase.h>를 넣는 것이 좋습니다.
.Net Framework를 사용하는 프로그램은 System.String이라는 심볼이 있으나 ProudNet은 Proud.String 이라는 심볼을 가지고 있습니다. 따라서 .Net Framework를 혼용하는 경우 String이라는 심볼은 System 혹은 Proud 중 하나의 네임스페이스를 명시해야 할 수도 있습니다.
P2P 통신이 갑자기 안되다가 몇 초 뒤에 다시 통신이 재개되는 경우
ProudNet은 P2P 통신을 하던 중에 P2P 연결이 막혀버리면 이를 감지하는데 수 초의 시간이 걸립니다.
Assert 대화 상자 막아버리기
ProudNet은 debug build 에서 내부 작동 중 잘못된 사용이 있을 경우 assert failure 대화 상자를 표시할 수 있습니다. 이를 막고 싶다면 assert failure 가 발생할 때 대화 상자 표시 대신 다른 것이 작동하게 설정하셔야 합니다.
직접 만든 함수로 대체도 가능합니다. 아래는 그 예시 입니다.
CFastHeap 또는 CLookasideAllocator 관련 예외 발생 시 해결 방법
C++ singleton 으로 만든 인스턴스는 WinMain() 혹은 main()이 리턴하기 전, 의존 객체 관계에 맞춰 파괴됨을 보장하기 때문에 전역 변수가 아닌 C++ singleton 으로 두어야 합니다.
최대 동시접속자 5,000명을 넘기지 못하는 경우
최대 동시 접속자 5,000명을 못 받는 경우라면 다음을 확인해 보시기 바랍니다.
ProudNetClientPlugin.dll 모듈을 찾을 수 없다고 나오는 경우
재배포 패키지가 설치되어 있지 않으면 해당 라이브러리가 경로에 존재 하더라도 오류가 발생할 수 있습니다.
ProudNet 최초 설치 시 마지막 단계에서 재배포 패키지와 CMake를 설치하실 수 있으며, 설치 후에는 ProudNet 설치 경로 하위 Bin폴더에도 재배포 패키지가 들어있으니 해당 파일로 설치하셔도 됩니다.
Last updated