[xingAPI][차트 데이터 수집기 만들기](3) 로그인/로그아웃

반응형

MFC기반의 xingAPI 프로그램에서 로그인과 로그아웃 하는 방법을 알아보겠습니다.

이전 포스팅에서 그려둔 화면을 이용하여 로그인 코드를 작성해 보겠습니다. 화면을 만드는 방법은 아래의 이전 포스팅을 참고해 주세요.

2021.10.01 - [트레이딩/시스템트레이딩] - [xingAPI][차트 데이터 수집기 만들기](1) 프로젝트 생성 및 화면 만들기

 

1. MFC 컨트롤 설정하기

아래 사진에서 빨간색 박스에 해당하는 부분을 설정하는 방법입니다.

로그인에 필요한 아이디, 비밀번호, 공인인증번호, 접속서버(실서버, 모의서버) 정보를 입력받아 로그인을 하거나 로그아웃을 할 수 있는 인터페이스입니다.

Login - eBEST

컨트롤의 리소스 ID, 속성, 변수는 아래 표를 참고하여 설정합니다.

Label Control ID Property Variable
ID EditBox IDC_EDIT_LOGIN_ID password:True CEditBox::m_ctrEditLoginId
비밀번호 EditBox IDC_EDIT_LOGIN_PASSWD password:True CEditBox::
m_ctrEditLoginPasswd
공인인증 EditBox IDC_EDIT_LOGIN_CERT password:True CEditBox::m_ctrEditLoginCert
접속서버 ComboBox IDC_COMBO_LOGIN_SERVER type:DropList, Sort:False CComboBox::
m_ctrComboServer
Login Button IDC_BUTTON_LOGIN - CButton::m_ctrBtnLogin
Logout Button IDC_BUTTON_LOGOUT - CButton::m_ctrBtnLogout
STAT_0 StatusBar IDC_STATUSBAR_0 SBPS_NORMAL CStatusBar::m_statusBar[0]
STAT_1 StatusBar IDC_STATUSBAR_1 SBPS_NORMAL CStatusBar::m_statusBar[1]
STAT_2 StatusBar IDC_STATUSBAR_2 SBPS_NORMAL CStatusBar::m_statusBar[2]

Login, Logout 버튼에 BN_CLICKED 이벤트핸들러를 등록해 줍니다.

Login 버튼 이벤트 핸들러 등록

버튼을 클릭하면 아래의 이벤트핸들러가 호출됩니다.

이벤트 핸들러 코드

Combobox는 CdatacollectorDlg::OnInitDialog()에 아래와 같이 초기화 코드를 작성합니다.

콤보박스 설정 코드

프로그램 실행 시 Combobox에서 실서버, 모의서버를 선택할 수 있습니다.

콤보박스 동작 화면

2. 로그인 처리하기

로그인 상태 관리를 위해 로그인시간, 실서버/데모서버 여부를 저장해 둘 구조체를 하나 정의합니다.

namespace DATACOLLECTOR
{
	typedef struct _USER_LOGIN_INFO {
		SRWLOCK srwlock;
		BOOL boISLogin;
		BOOL boIsDemoServer;
		SYSTEMTIME stSysTimeTag;
		TCHAR tchId[64];
		TCHAR tchPasswd[64];
		TCHAR tchCert[64];
		_USER_LOGIN_INFO() {
			ZeroMemory(this, sizeof(struct _USER_LOGIN_INFO));
			InitializeSRWLock(&srwlock);
		}
	} TST_USER_LOGIN_INFO, * PTST_USER_LOGIN_INFO;
}

 

로그인은 아래와 같이 Connect() 함수 호출 후 Login() 함수를 호출합니다.

모의거래, 실거래 구분하여 연결함수 호출

	m_ctrEditLoginId.GetWindowTextA(cstrId);
	m_ctrEditLoginPasswd.GetWindowTextA(cstrPasswd);
	m_ctrEditLoginCert.GetWindowTextA(cstrCert);
	cstrId.Trim();
	cstrPasswd.Trim();
	cstrCert.Trim();

	boRet = theApp.m_xing.Login(theApp.m_pDlgXingMsg->GetSafeHwnd(), cstrId, cstrPasswd, cstrCert, 0, FALSE);

성공/실패 여부는 afx_msg LRESULT CDlgXingMsg::OnMsgIdXmLogin(WPARAM wParam, LPARAM lParam)에서 확인하여 처리합니다. wParam 값이 0이면 로그인 성공, 이외의 값이면 로그인 실패입니다.

아래와 같이 로그인이 되면 관련 컨트롤을 잠그고 상태 바에 로그인 여부와 접속시간을 표기하였습니다.

모의서버 로그인에 성공한 화면

로그인이 성공하면 TR, Real API를 호출하여 사용할 수 있습니다.

반응형