void CGateCore::OnClientSocketEvent(int message, int wParam, int lParam) { int iClientH, iTemp, iRet; iTemp = WM_ONCLIENTSOCKETEVENT; iClientH = message - iTemp; if (m_pClientList[iClientH] == NULL) return; iRet = m_pClientList[iClientH]->m_pXSock->iOnSocketEvent(wParam, lParam); switch (iRet) { case DEF_XSOCKEVENT_READCOMPLETE: // 메시지가 수신되었다. OnClientRead(iClientH); break; case DEF_XSOCKEVENT_BLOCK: PutLogList("Socket BLOCKED!"); break; case DEF_XSOCKEVENT_CONFIRMCODENOTMATCH: sprintf(G_cTxt,"<%d> Confirmcode notmatch!", iClientH); PutLogList(G_cTxt); delete m_pClientList[iClientH]; m_pClientList[iClientH] = NULL; break; case DEF_XSOCKEVENT_CRITICALERROR: // 치명적인 에러이다. case DEF_XSOCKEVENT_QUENEFULL: // 큐가 가득찼다. case DEF_XSOCKEVENT_MSGSIZETOOLARGE: // 수신해야 할 메시지 크기가 버퍼보다 크다. 종료해야만 한다. case DEF_XSOCKEVENT_SOCKETERROR: // 소켓에 에러가 났다. case DEF_XSOCKEVENT_SOCKETCLOSED: // 소켓이 닫혔다. if (m_pClientList[iClientH]->m_bIsGameServer == true) { sprintf(G_cTxt,"*** CRITICAL ERROR! Game Server(%s) connection lost!!! ***", m_pClientList[iClientH]->m_cName); // 서버 다운을 알린다. SendMsgToMonitor(MSGID_GAMESERVERDOWN, DEF_MSGTYPE_CONFIRM, m_pClientList[iClientH]->m_cName); m_pPartyManager->GameServerDown(iClientH); } else sprintf(G_cTxt,"WARNING! Monitor(%d) connection lost!", iClientH); PutLogList(G_cTxt); delete m_pClientList[iClientH]; m_pClientList[iClientH] = NULL; break; } }
long CSSLClientApplication::OnServerRead(CContextItem* mContext, CListItem* &mBuffer, long size, long opSide) // { CSSLContext* sslContext = (CSSLContext*)mContext; long ret_err = 0x01; // int result; int byteTotal; __TRY ret_err = 0x10; if (WriteEncode(mContext, mBuffer, size) <= 0) break; ret_err = 0x20; byteTotal = ReadDecode(mContext, mBuffer, mBuffer->BufferType->BufferSize); if (byteTotal > 0) { ret_err = 0x30; if ( CInterApplication::OnServerRead(mContext, mBuffer, byteTotal, opSide) ) break; } else { ret_err = 0x40; if (TranSSLforWrite(mContext, mBuffer, 0, OP_CLIENT_WRITE, OPSIDE_SERVER)) break; ret_err = 0x50; CListItem* wBuffer = sslContext->waitBuffer; if (wBuffer && SSL_is_init_finished(sslContext->ssl)) { sslContext->waitBuffer = 0; wBuffer->NOperation = OP_CLIENT_READ; result = OnClientRead(sslContext, wBuffer, wBuffer->NProcessSize, 0); // FreeApplicationBuffer(mBuffer); mBuffer = 0; } } __CATCH(MODULE_APPLICATION, "CSSLClientApplication - OnServerRead") }