Files
Sun1602/Client/GameClient/MatrixCardAuth.cpp
T
2022-10-26 12:25:11 +08:00

321 lines
8.4 KiB
C++

#include "SunClientPrecompiledHeader.h"
#ifdef __CN_269_MATRIX_CARD_AUTH
#include "MatrixCardAuth.h"
#include "GlobalFunc.h"
#include "uiPasswordMan/uiPassWordMan.h"
#include "uipassworddlg/uiPasswordDlg.h"
#include "interfacemanager.h"
#include "FTextParser.h"
#include "FTextSentence.h"
WzID MatrixCardAuth::m_wzID[DLGPOS_MAX] =
{
StrToWzID("ST03"),
StrToWzID("ST06"),
StrToWzID("ST07"),
StrToWzID("ST02"),
StrToWzID("ST01"),
StrToWzID("ST08"),
StrToWzID("BT14"),
StrToWzID("CT00"),
StrToWzID("CT01"),
StrToWzID("CT02"),
};
//------------------------------------------------------------------------------
/**
*/
MatrixCardAuth::MatrixCardAuth(InterfaceManager * pUIMan) : uiBase(pUIMan)
{
}
//------------------------------------------------------------------------------
/**
*/
MatrixCardAuth::~MatrixCardAuth()
{
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::Init(CDrawBase* pDrawBase)
{
uiBase::Init(pDrawBase);
for( int i = 0 ; i < MAX_TXT_CONTROL ; ++i)
{
m_pStatic[i] = (CCtrlStaticWZ* )getControl( i);
}
GlobalFunc::SetCaption(m_pStatic[DLGPOS_TXT_SUB_TITLE] , _T("") );
GlobalFunc::SetCaption(m_pStatic[DLGPOS_TXT_SYSTEM] , _T(""));
GlobalFunc::SetCaption(m_pStatic[DLGPOS_TXT_MAIN] , _T(""));
m_FtextRender.Init( g_pSunRenderer , m_pStatic[DLGPOS_TXT_MAIN]->GetSizeRect());
for ( int i = 0; i < MAX_CHECK_CONTROL ; ++i)
{
m_pCheck[i] = (CCtrlButtonCheckWZ *) getControl(i +START_CHECK_CONTROL);
}
m_pButton = (CCtrlButtonWZ *) getControl(DLGPOS_BTN_EXIT);
#ifndef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
for( int i = 0; i< NUM_INPUT_MATRIX_CODE ; ++i)
{
m_InputData[i].bInput = FALSE;
m_InputData[i].Value = 0;
}
#endif
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::Release()
{
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::OnUpdateSolarDialog()
{
#ifndef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
if( IsFinishInput() )
{
this->NET_SEND_C2S_ANS_SCAUTH();
}
#endif
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::OnRenderSolarDialog()
{
m_FtextRender.SetRect(m_pStatic[DLGPOS_TXT_MAIN]->GetSizeRect());
m_FtextRender.Render();
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::Process(DWORD dwTick)
{
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::OnShowWindow(BOOL val)
{
if( val )
{
MoveCenter();
InitFormatText();
}
else
{
uiPasswordMan * pPasswordMan = (uiPasswordMan *) g_InterfaceManager.GetUserInterfaceManager(UIMAN_PASSWORD);
if( pPasswordMan )
{
pPasswordMan->m_pUIPasswordDlg->ShowInterface(FALSE);
}
}
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::MessageProc(SI_MESSAGE * pMessage)
{
switch ( pMessage->eResultMsg )
{
case RT_MSG_LBUTTONCLICK:
{
switch( getControlIDToPos(pMessage->dwCtrlID) )
{
case DLGPOS_CHK_INPUT1:
case DLGPOS_CHK_INPUT2:
case DLGPOS_CHK_INPUT3:
{
//유저 입력으로 체크를 컨트롤 하지 못하게 한다.
for ( int i = 0; i < MAX_CHECK_CONTROL; ++i )
{
#ifdef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
m_pCheck[i]->SetCheckState( FALSE);
#else
m_pCheck[i]->SetCheckState( m_InputData[i].bInput);
#endif
}
}
break;
}
}
break;
}
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::NetworkProc(MSG_BASE * pMsg)
{
}
//------------------------------------------------------------------------------
/**
*/
void MatrixCardAuth::InitializeMatrixCode(SC_INFO * pSCInfo)
{
for( int i = 0; i <NUM_INPUT_MATRIX_CODE; ++i)
{
// 메트릭스 코드 포멧에 따라 출력 해준다.
// A~ I , 1~ 9
TCHAR szText[INTERFACE_STRING_LENGTH] = {0,};
int row = pSCInfo->wMatrix[i] % 9;
int column = pSCInfo->wMatrix[i] /9;
int alphabetA = 65;
int num1 = 49;
szText[0] = alphabetA + row;
szText[1] = num1 + column;
GlobalFunc::SetCaption(m_pStatic[i] , szText);
m_pCheck[i]->SetCheckState(FALSE);
}
#ifdef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
SetNoticeMessage();
#else
m_InputData[i].bInput = FALSE;
m_InputData[i].Value = 0;
SetNoticeMessage(DLGPOS_TXT_INPUT1);
#endif //__CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
uiPasswordMan * pPasswordMan = (uiPasswordMan *) g_InterfaceManager.GetUserInterfaceManager(UIMAN_PASSWORD);
if( pPasswordMan )
{
#ifdef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
pPasswordMan->PasswordDlg( 1231 , GlobalFunc::MatrixCodeSubmit, 1 , 9 , TRUE);
#else
pPasswordMan->PasswordDlg( 1231 , GlobalFunc::MatrixCodeSubmit, 1 , 3 , TRUE);
#endif
RECT rt;
this->GetDialogWZ()->GetClientRect(&rt);
pPasswordMan->m_pUIPasswordDlg->MoveWindowWZ( rt.right , rt.top );
}
}
//------------------------------------------------------------------------------
/**
*/
#ifdef __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
void MatrixCardAuth::SEND_AUTH_MATRIX_CARD_ACK(int iMatrixCode)
{
MSG_CF_AUTH_MATRIX_CARD_ACK SendPacket;
memcpy(SendPacket.m_SecureInfo.byData , &iMatrixCode , sizeof( iMatrixCode) );
GlobalFunc::SendPacket(CI_AUTHSERVERIDX , &SendPacket , sizeof( SendPacket) );
ShowInterface(FALSE);
}
void MatrixCardAuth::SetNoticeMessage()
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,} , szResult[INTERFACE_STRING_LENGTH] ={0,};
// 1251 [%s][%s][%s]를 순서대로 연속 입력하세요
g_InterfaceManager.GetInterfaceString(1251, szMessage ,INTERFACE_STRING_LENGTH);
char szCodeName1[INTERFACE_STRING_LENGTH] ={0,} , szCodeName2[INTERFACE_STRING_LENGTH] ={0,} , szCodeName3[INTERFACE_STRING_LENGTH] ={0,};
m_pStatic[DLGPOS_TXT_INPUT1]->GetTextWZA(szCodeName1, INTERFACE_STRING_LENGTH);
m_pStatic[DLGPOS_TXT_INPUT2]->GetTextWZA(szCodeName2, INTERFACE_STRING_LENGTH);
m_pStatic[DLGPOS_TXT_INPUT3]->GetTextWZA(szCodeName3, INTERFACE_STRING_LENGTH);
sprintf( szResult, szMessage, szCodeName1 , szCodeName2, szCodeName3 );
GlobalFunc::SetCaption(m_pStatic[DLGPOS_TXT_SYSTEM] , szResult);
}
#else // __CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
void MatrixCardAuth::SEND_AUTH_MATRIX_CARD_ACK()
{
SC_INFO SCInfo;
for ( int i = 0; i < NUM_INPUT_MATRIX_CODE; ++i)
{
SCInfo.m_wMatrix[i] = m_InputData[i].Value;
// 입력값 초기화
m_InputData[i].bInput = FALSE;
}
MSG_CF_AUTH_MATRIX_CARD_ACK SendPacket;
memcpy(SendPacket.m_SecureInfo.m_byData , &SCInfo , sizeof( SCInfo) );
GlobalFunc::SendPacket(CI_AUTHSERVERIDX , &SendPacket , sizeof( SendPacket) );
ShowInterface(FALSE);
}
void MatrixCardAuth::SetNoticeMessage( eDIALOG_POS eDlgPos)
{
if ( eDlgPos >= DLGPOS_TXT_INPUT1 && eDlgPos <= DLGPOS_TXT_INPUT3)
{
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,} , szResult[INTERFACE_STRING_LENGTH] ={0,};
// 1251 [%s] 칸의 코드를 입력해주세요.
g_InterfaceManager.GetInterfaceString(1251, szMessage ,INTERFACE_STRING_LENGTH);
char szCodeName[INTERFACE_STRING_LENGTH] ={0,};
m_pStatic[eDlgPos]->GetTextWZA(szCodeName);
Snprintf(szResult , INTERFACE_STRING_LENGTH -1, szMessage , szCodeName);
GlobalFunc::SetCaption(m_pStatic[DLGPOS_TXT_SYSTEM] , szResult);
}
}
void MatrixCardAuth::SetMatrixCardCode(int val)
{
if( !m_InputData[0].bInput)
{
m_InputData[0].bInput = TRUE;
m_InputData[0].Value = val;
m_pCheck[0]->SetCheckState(TRUE);
SetNoticeMessage(DLGPOS_TXT_INPUT2);
}
else if ( !m_InputData[1].bInput)
{
m_InputData[1].bInput = TRUE;
m_InputData[1].Value = val;
m_pCheck[1]->SetCheckState(TRUE);
SetNoticeMessage(DLGPOS_TXT_INPUT3);
}
else if ( !m_InputData[2].bInput )
{
m_InputData[2].bInput = TRUE;
m_InputData[2].Value = val;
m_pCheck[2]->SetCheckState(TRUE);
}
}
BOOL MatrixCardAuth::IsFinishInput()
{
return ( m_InputData[0].bInput && m_InputData[1].bInput && m_InputData[2].bInput);
}
#endif //__CHINA_MATRIXCARD_CODE_ONE_SHOT_SUBMIT
void MatrixCardAuth::InitFormatText()
{
FTextParser FTParser;
FTextSentence FTSentence;
FTParser.SetDefaultFont(StrToWzID("mn12") , 0xFFFFFFFF);
TCHAR szMessage[INTERFACE_STRING_LENGTH] ={0,};
g_InterfaceManager.GetInterfaceString( 1232 , szMessage ,INTERFACE_STRING_LENGTH);
BOOL ret = FTParser.Parser(szMessage , FTSentence);
if( ret )
{
m_FtextRender.ClearSentence();
m_FtextRender.Append(FTSentence);
RECT rt = m_pStatic[DLGPOS_TXT_MAIN]->GetSizeRect();
m_FtextRender.SetRect( rt );
}
}
#endif // __CN_269_MATRIX_CARD_AUTH