void NTCPClient::HandleConnect (const boost::system::error_code& ecode) { if (ecode) { LogPrint ("Connect error: ", ecode.message ()); GetRemoteRouterInfo ().SetUnreachable (true); Terminate (); } else { LogPrint ("Connected"); ClientLogin (); } }
// Send가 완료 되지 않았는데 다시 Send를 요청한다면? 어떻게 해야 하나... // Recv에서 패킷을 다받지 못했거나 더 많이 받았을 때는 어떻게 해야하나... int CPacketProcess::Procedure(CUser * pUser) { // 이 부분 처리를 어떤 식으로 해야 할지 모르겠다. // 따로 클래스를 만들자니.. 머하고.. 동기화도 그렇고.. // 근데 지금 크리티컬세션을 넣었는데.. 꼭 해야 하나? 솔직히 모르겠다. // 지금은 CPU가 한개라서 IOCP 스레드는 한개가 돌아 가니 동기화가 그렇게 필요는 없다. // (IOCP는 CPU개수만큼 스레드 스위칭을 한다.) // 하지만, CPU가 두개인 컴퓨터라면... ㅜ.ㅠ 어케해야하너.... // 두개 만들고 테스트 해봐야겠다. // 2로 지정을 하고 테스트를 했는데 잘 돌아 간다.. // 2명으로는 무리인가... 더 많은 사람.. 인터넷 안좋은 사람이 필요하다..-_-;; if(m_pProcessThread == NULL) { ServerLog()->Log("CPacketProcess Var Init Error."); return PROCEDURE_ERROR; } char PacketID = -1; if(!pUser->GetRecvPacket()->Get8Bit(PacketID)) { ServerLog()->Log("ChatProcedure() : Packet ID get Error."); return PROCEDURE_ERROR; } switch((int)PacketID) { case MSG_CLNT_CHATMSG: { // 채팅 메시지 if(!BroadcastMessage(pUser)) return PROCEDURE_ERROR; } break; case MSG_CLNT_LOGIN: { return ClientLogin(pUser); } break; case MSG_CLNT_DISCONNECT: { return PROCEDURE_CLIENTCLOSE; } break; case MSG_CLNT_TOUSERMSG: // 귀속말 { if(!FromToMessage(pUser)) return PROCEDURE_ERROR; } break; case MSG_CLNT_CREATEUSER: { if(!CreateUser(pUser)) return PROCEDURE_ERROR; return PROCEDURE_SENDNCLOSE; } break; default: { // 무엇인지 알 수 없는 패킷을 보내면 연결을 닫는다. ServerLog()->Log("Client send bad Packet. Client will Close."); return PROCEDURE_ERROR; } break; } return PROCEDURE_SUCCESS; }