Quantcast
Channel: 의지있는 황제펭귄님의 이글루입니다
Viewing all articles
Browse latest Browse all 204

[Xing API]xingAPI활용교육샘플v1.3.xlsm(3)-사용자 정의 폼의 코드

$
0
0
이번에는 사용자 정의 폼안의 코드를 살펴보려고 한다. 다행히 폼의 코드는 다음과 같이 간단하게 세 개의 프로시저가 있다. 프로시저의 이름을 보면 "_"가 가운데 있는 것을 볼 수 있다. "_" 왼쪽은 개체의 이름이고 "_"의 오른쪽은 이벤트(예를 들어 사용자가 버튼을 클릭하는 것이나 폼이 화면에 보이는 것 등등이 이벤트이다)가 발생할 때 해당 이벤트를 가리킨다.
즉 (개체이름) + _ + (이벤트) 와 같은 형식으로 구성되어 있다.
  • Private Sub UserForm_Initialize()
  • Private Sub btnLogin_Click()
  • Private Sub XASession_Login_Login(ByVal szCode As String, ByVal szMsg As String)

  • Private Sub UserForm_Initialize()
    Userform은 화면에 뜨는 전체 대화상자를 말한다. 즉 다음과 같은 것이 Userform이다.

    이런 Userform이 화면에 뜨기 전에 사전에 필요한 준비가 있을 것이다. 그런 작업은 _Initialize에 넣어 두는 것이다.
    Private Sub btnLogin_Click()
    btnLogin은 [로그인]이라는 버튼이다. 이 버튼은 증권사의 서버에 접속을 하는 코드를 갖고 있어, 사용자가 서버,아이디,암호,공인인증서 암호를 입력하고 클릭할 때 실행되는 프로시저이다.

    Private Sub XASession_Login_Login(ByVal szCode As String, ByVal szMsg As String)
    XASession_Login은 지난 시간에 말한 대로 일반적인 컨트롤이 아니라 Xing API가 제공하는 XASession개체이다. btnLogin을 클릭하여 접속을 요청하면 그 결과(접속 성공 또는 실패)를 이 프로시저를 통해 알려준다. 즉 우리가 실행하는 게 아니라 호출을 당하는(말이 이상하지만) 프로시저인데, 이런 류의 프로시저 또는 함수를 콜백함수라고 한다.
    '-------------------------------------
    ' 화면이 초기화될때 호출
    '-------------------------------------
    Private Sub UserForm_Initialize()
    '-------------------------------------
    ' 서버콤보컨트롤에 서버주소를 넣어주고 첫번째 서버를 표시한다.
    ' 서버 추가

    cbServer는 서버주소를 선택할 수 있는 콤보상자의 이름이다. 여기 선택할 목록을 미리 집어 넣어야 할 것이다. 그래서 콤보상자의 AddItem 메서드(일종의 함수)를 이용하여 서버주소("hts.ebestsec.co.kr"와 "demo.ebestsec.co.kr")를 추가하는 것이다.
        cbServer.AddItem "hts.ebestsec.co.kr"         ' 실서버
    cbServer.AddItem "demo.ebestsec.co.kr" ' 모의서버

    ' 처음에는 실서버 선택
    앞서 서버목록상자인 cbServer에 두 개의 아이템을 입력하였다. 이때 목록중 기본값으로 보일 항목을 선택하는 것이 ListIndex 이다(프로퍼티) 0을 주면 가장 먼저 입력한 항목(이 경우엔 "hts.ebestsec.co.kr")이 화면에 보이게 된다.
        cbServer.ListIndex = 0
    '-------------------------------------
    End Sub
    '-------------------------------------
    ' 로그인 버튼을 클릭했을때 호출
    '-------------------------------------
    Private Sub btnLogin_Click()
    '-------------------------------------
    ' 서버 연결중일때에는 서버연결이 실패하므로 먼저 연결을 끊는다.
    XASession는 세션을 관리하는 개체이다. 즉 증권사 서버와의 연결을 유지/관리하는 개체이다. 서버에 연결하기 전에 먼저 확인해야 할 사항은 현재 세션이 연결된 상태인지 아닌지 살펴야 한다. 이미 연결되어 있는 데, 다시 연결할 필요는 없을 것이다. 그런데 이 코드에선 연결되어 있다면 끊어 버린다. 다음은 서버의 연결상태를 확인한다. IsConnected() 프로퍼티는 세션의 연결상태를 True 또는 False값으로 돌려준다. bValue는 연결상태결과를 받아 If문에서 판단을 한다. 즉 연결된 상태라면 DisconnectServer() 메서드를 호출하여 연결을 끊는다. 새로 연결하기 위한 것이다.
        bValue = XASession_Login.IsConnected()
    If bValue = True Then
    XASession_Login.DisconnectServer
    End If
    '-------------------------------------
    '-------------------------------------
    ' 서버 연결
    이번에는 ConnectServer()메서드를 호출하여 선택한 서버(cbServer.Text)로 연결을 시도한다. 연결이 성공하면 True이고 실패하면 False이다. 그 아래 If문에서는 연결에 실패하는 경우 "서버연결실패" 라는 대화상자를 띄운 후 종료(Exit Sub)할 것이다.
        bValue = XASession_Login.ConnectServer(cbServer.Text, 0)
    If bValue = False Then
    MsgBox "서버연결실패"
    Exit Sub
    End If
    '-------------------------------------
    '-------------------------------------
    ' 로그인
    ' 포트는 더이상 사용하지 않으므로 0 을 넣어준다.
    서버와의 연결이 성공했다면 이번에는 아이디, 암호, 공인인증서 번호를 입력하여 로그인한다. 일반인이 생각하는 것과 달리 서버 연결과 로그인은 별개의 문제이다. 로그인은 Login()메서드를 호출한다. 연결과 마찬가지로 그 결과는 True 또는 False로 돌려준다. 그러나 서버 연결 실패와 달리 If문에서 로그인에 실패해도 Exit Sub를 사용하지 않는다. 이것은 사용자의 입력실수로 로그인에 실패해도 다시 입력하도록 배려한 것이다.
        bValue = XASession_Login.Login(txtID, txtPwd, txtCertPwd.Text, 0, False)
    If bValue = False Then
    MsgBox "로그인 전송 실패"
    End If
    '-------------------------------------
    End Sub
    '-------------------------------------
    ' Login Event : 로그인 결과값이 온다.
    '-------------------------------------
    Private Sub XASession_Login_Login(ByVal szCode As String, ByVal szMsg As String)
    앞서 말한 바와 같이 XASession_Login_Login()프로시저는 콜백함수로서 사용자가 호출하는 함수가 아니다. 상대편에서 호출을 하는 것이다. 이때 szCode 와 szMsg는 매개변수인데, 여기에 콜백함수를 통해 결과가 전달된다.
        '-------------------------------------
    ' szCode 가 "0000" 이면 성공 나머지는 실패
    위의 주석에 밝힌 바와 같이 szCode는 로그인 결과가 담겨 있다. 문자열 "0000"이면 로그인에 성공한 것이며 현재의 Userform(Me는 Userform 자신을 말한다. 즉 현재의 코드는 Userform에서 작성된 것이므로 Me는 자기 자신을 가리킨다)을 Hide()메서드를 호출하여 화면에서 감춘다. 종료를 해버리면 세션이 끝나 서버와의 연결이 끊어진다. 그러나 로그인에 실패하면 szMsg를 통해 오류 메시지를 보내고 이를 MsgBox를 통해 알려준다.
        If szCode = "0000" Then
    Me.Hide ' 화면을 숨긴다.
    Else
    MsgBox "[" & szCode & "] " & szMsg ' 메시지 표시
    End If
    '-------------------------------------
    End Sub

    Viewing all articles
    Browse latest Browse all 204

    Latest Images

    Trending Articles