티스토리 뷰
이 예제는 "서버 접속하기"를 이어서 설명한다. 서버에 접속이 되었다면 로그인을 해야 한다. 로그인을 하지 않고는 어떠한 서비스도 사용할 수 없다. 로그인을 하기 위해서는 XASession 객체의 Login()메서드를 이용한다.
로그인하기
1. 디자인 영역을 다음과 같이 수정하고 각 속성을 수정한다. 만일 TextBox에 입력되는 값을 숨길려면 속성창 > PasswordChar에 *을 입력하자.
2. 아래와 같이 콤보박스를 선택하고 속성창에서 Items속성의 줄임표단추(...)을 클릭한다.
3. 문자열 컬렉션 편집기에 실서버 모의투자를 입력한다. 이렇게 입력하면 items[0]은 실서버, items[1]은 모의투자가 된다.
4. 아래와 같이 코드를 수정하자.
using System;
using System.Windows.Forms;
using XA_SESSIONLib;
namespace XingAPI
{
public partial class Form1 : Form
{
XASessionClass session;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
session = new XASessionClass();
session._IXASessionEvents_Event_Login += XASession_Login;
severTypeComboBox.SelectedIndex = 0;
}
private void XASession_Login(string code, string msg)
{
if (code == "0000")
{
listBox.Items.Add("로그인 성공");
loginButton.Enabled = false;
}
else
{
MessageBox.Show("로그인 실패[" + code + "]: " + msg);
}
}
private void loginButton_Click(object sender, EventArgs e)
{
string serverType;
if (severTypeComboBox.SelectedIndex == 0)
{
// 실서버
serverType = "hts.ebestsec.co.kr";
}
else
{
// 모의투자
serverType = "demo.ebestsec.co.kr";
}
bool connectResult;
connectResult = session.ConnectServer(serverType, 20001);
if (connectResult)
{
listBox.Items.Add("서버 접속 성공");
}
else
{
var errCode = session.GetLastError();
var errMsg = session.GetErrorMessage(errCode);
MessageBox.Show(errMsg);
return;
}
var id = idTextBox.Text;
var pwd = pwdTextBox.Text;
var certPwd = certPwdTextBox.Text;
bool loginResult;
loginResult = session.Login(id, pwd, certPwd, 0, false);
if (!loginResult)
{
MessageBox.Show("로그인정보 서버전송 실패");
return;
}
}
}
}
5. F5를 눌러 실행하고 로그인에 성공하면 다음과 같이 된다.
코드 설명
private void Form1_Load(object sender, EventArgs e)
{
session = new XASessionClass();
session._IXASessionEvents_Event_Login += XASession_Login;
severTypeComboBox.SelectedIndex = 0;
}
xingAPI는 로그인 정보를 서버에 보내면 로그인 결과를 서버에서 보내준다. 이때 사용되는 이벤트는 XASessionClass._IXASessionEvents_Event_Login이다. 그래서 session._IXASessionEvents_Event_Login += XASession_Login를 추가해서 서버에서 로그인 결과를 보내면 XASession_Login()이 발생하도록 설정해 준다.
그리고 severTypeComboBox.SelectedIndex = 0;를 콤보박스가 0번 인덱스를 선택한 상태로 만들어서, 콤보박스에 "실시간"이 선택된 상태로 되게 만든다.
private void XASession_Login(string code, string msg)
{
if (code == "0000")
{
listBox.Items.Add("로그인 성공");
loginButton.Enabled = false;
}
else
{
MessageBox.Show("로그인 실패[" + code + "]: " + msg);
}
}
위의 메서드는 서버에서 로그인 결과를 보내면 호출되는 메서드가 된다. (이를 콜백메서드라고도 한다.) code가 "0000"이면 로그인이 성공한 것이고 그 외에는 로그인이 실패한 것이다. 로그인이 성공하면 listBox에 "로그인 성공"을 출력하고 "로그인 버튼"을 비활성화시켜서 눌리지 않게 한다. 로그인 실패시에는 메시지박스를 발생시킨다.
private void loginButton_Click(object sender, EventArgs e)
{
string serverType;
if (severTypeComboBox.SelectedIndex == 0)
{
// 실서버
serverType = "hts.ebestsec.co.kr";
}
else
{
// 모의투자
serverType = "demo.ebestsec.co.kr";
}
로그인 버튼을 클릭하면 로그인을 시도한다. 로그인 과정은 다음과 같다.
- 서버에 접속한다.
- 로그인 정보를 서버에 보낸다.
- 서버에서 로그인 결과를 보내면, XASessionClass._IXASessionEvents_Event_Login 이벤트를 발생시킨다.
로그인 정보를 서버에 보낸다고 로그인이 되는 것이 아니다. 서버에서 로그인이 성공되었다고 결과를 보내야지 로그인이 된 것을 기억하자. 위에 코드는 콤보박스(serverTypeComboBox)에서 정보를 가져와 실서버로 선택했는지, 모의투자로 선택했는지 확인하고 그에 맞는 서버타입을 결정한다.
bool connectResult;
connectResult = session.ConnectServer(serverType, 20001);
if (connectResult)
{
listBox.Items.Add("서버 접속 성공");
}
else
{
var errCode = session.GetLastError();
var errMsg = session.GetErrorMessage(errCode);
MessageBox.Show(errMsg);
return;
}
서버타입에 맞게 서버 접속을 시도한다. 만일 서버 접속이 실패하면 메시지박스를 발생시키고, return을 통해서 현재 메서드(loginButton_Click)의 진행을 중단한다.
var id = idTextBox.Text;
var pwd = pwdTextBox.Text;
var certPwd = certPwdTextBox.Text;
bool loginResult;
loginResult = session.Login(id, pwd, certPwd, 0, false);
if (!loginResult)
{
MessageBox.Show("로그인정보 서버전송 실패");
return;
}
텍스트박스에서 아이디와 비밀번호, 공인인증비밀번호를 얻어와서 session.Login()메서드를 이용하여 로그인정보를 서버로 전송한다. 서버로 로그인 정보를 보내는 것이 실패하면 메시지 박스를 발생시킨다. 그리고 return으로 메서드 실행을 중단한다. 로그인
'XingAPI > 개발가이드' 카테고리의 다른 글
반복 데이터 조회 (Occures) (0) | 2018.03.18 |
---|---|
단일 데이터 조회 (0) | 2018.03.15 |
서버 접속하기 (0) | 2018.03.15 |
COM을 등록하는 방법 (1) | 2018.03.15 |
XingAPI를 사용하기 위한 준비 (0) | 2018.03.15 |