#include "StdAfx.h" #include "PythonNetworkStream.h" #include "Packet.h" #include "Test.h" #include "AccountConnector.h" // Login --------------------------------------------------------------------------- void CPythonNetworkStream::LoginPhase() { TPacketHeader header; if (!CheckPacket(&header)) return; switch (header) { case HEADER_GC_PHASE: if (RecvPhasePacket()) return; break; case HEADER_GC_LOGIN_SUCCESS3: if (__RecvLoginSuccessPacket3()) return; break; case HEADER_GC_LOGIN_SUCCESS4: if (__RecvLoginSuccessPacket4()) return; break; case HEADER_GC_LOGIN_FAILURE: if (__RecvLoginFailurePacket()) return; break; case HEADER_GC_EMPIRE: if (__RecvEmpirePacket()) return; break; case HEADER_GC_CHINA_MATRIX_CARD: if (__RecvChinaMatrixCardPacket()) return; break; case HEADER_GC_RUNUP_MATRIX_QUIZ: if (__RecvRunupMatrixQuizPacket()) return; break; case HEADER_GC_NEWCIBN_PASSPOD_REQUEST: if (__RecvNEWCIBNPasspodRequestPacket()) return; break; case HEADER_GC_NEWCIBN_PASSPOD_FAILURE: if (__RecvNEWCIBNPasspodFailurePacket()) return; break; case HEADER_GC_LOGIN_KEY: if (__RecvLoginKeyPacket()) return; break; case HEADER_GC_PING: if (RecvPingPacket()) return; break; case HEADER_GC_HYBRIDCRYPT_KEYS: RecvHybridCryptKeyPacket(); return; break; case HEADER_GC_HYBRIDCRYPT_SDB: RecvHybridCryptSDBPacket(); return; break; default: if (RecvDefaultPacket(header)) return; break; } RecvErrorPacket(header); } void CPythonNetworkStream::SetLoginPhase() { if ("Login" != m_strPhase) m_phaseLeaveFunc.Run(); Tracen(""); Tracen("## Network - Login Phase ##"); Tracen(""); m_strPhase = "Login"; m_phaseProcessFunc.Set(this, &CPythonNetworkStream::LoginPhase); m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveLoginPhase); m_dwChangingPhaseTime = ELTimer_GetMSec(); if (__DirectEnterMode_IsSet()) { if (0 != m_dwLoginKey) SendLoginPacketNew(m_stID.c_str(), m_stPassword.c_str()); else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str()); // ºñ¹Ð¹øÈ£¸¦ ¸Þ¸ð¸®¿¡ °è¼Ó °®°í ÀÖ´Â ¹®Á¦°¡ À־, »ç¿ë Áï½Ã ³¯¸®´Â °ÍÀ¸·Î º¯°æ ClearLoginInfo(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkAccountConnector.ClearLoginInfo(); } else { if (0 != m_dwLoginKey) SendLoginPacketNew(m_stID.c_str(), m_stPassword.c_str()); else SendLoginPacket(m_stID.c_str(), m_stPassword.c_str()); // ºñ¹Ð¹øÈ£¸¦ ¸Þ¸ð¸®¿¡ °è¼Ó °®°í ÀÖ´Â ¹®Á¦°¡ À־, »ç¿ë Áï½Ã ³¯¸®´Â °ÍÀ¸·Î º¯°æ ClearLoginInfo(); CAccountConnector & rkAccountConnector = CAccountConnector::Instance(); rkAccountConnector.ClearLoginInfo(); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_LOGIN], "OnLoginStart", Py_BuildValue("()")); __ClearSelectCharacterData(); } } bool CPythonNetworkStream::__RecvEmpirePacket() { TPacketGCEmpire kPacketEmpire; if (!Recv(sizeof(kPacketEmpire), &kPacketEmpire)) return false; m_dwEmpireID=kPacketEmpire.bEmpire; return true; } bool CPythonNetworkStream::__RecvLoginSuccessPacket3() { TPacketGCLoginSuccess3 kPacketLoginSuccess; if (!Recv(sizeof(kPacketLoginSuccess), &kPacketLoginSuccess)) return false; for (int i = 0; i> ((4 - i - 1) * 8)) & 0x000000FF) #define COL(cols, i) ((cols >> ((4 - i - 1) * 8)) & 0x000000FF) bool CPythonNetworkStream::__RecvChinaMatrixCardPacket() { TPacketGCChinaMatrixCard kMatrixCardPacket; if (!Recv(sizeof(TPacketGCChinaMatrixCard), &kMatrixCardPacket)) return false; PyObject * pyValue = Py_BuildValue("(iiiiiiii)", ROW(kMatrixCardPacket.dwRows, 0), ROW(kMatrixCardPacket.dwRows, 1), ROW(kMatrixCardPacket.dwRows, 2), ROW(kMatrixCardPacket.dwRows, 3), COL(kMatrixCardPacket.dwCols, 0), COL(kMatrixCardPacket.dwCols, 1), COL(kMatrixCardPacket.dwCols, 2), COL(kMatrixCardPacket.dwCols, 3)); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_LOGIN], "OnMatrixCard", pyValue); return true; } bool CPythonNetworkStream::__RecvLoginKeyPacket() { TPacketGCLoginKey kLoginKeyPacket; if (!Recv(sizeof(TPacketGCLoginKey), &kLoginKeyPacket)) return false; m_dwLoginKey = kLoginKeyPacket.dwLoginKey; m_isWaitLoginKey = FALSE; return true; }