티스토리 뷰
XingAPI는 COM과 DLL로 제공한다. python에서 COM을 사용하는 방법은 여기를 참고하면 된다.
COM을 사용하기 위해서 win32com.client를 import하고 win32com.client.DispatchWithEvents()로 COM 객체를 만들면 된다. DispatchWithEvents()에 2개의 인자가 전달된다. 첫번째는 COM이름, 두번째는 이벤트 콜백시 호출될 클래스명이다.
XingAPI는 3개의 COM이 제공된다.
- XA_Session.XASession
- XA_DataSet.XAQuery
- XA_DataSet.XAReal
각 COM에는 콜백으로 사용되는 이벤트 함수들이 정해져 있다. 예로 들어 XASession에서는 서버에서 로그인 요청이 끝나면 발생하는 Login()과 서버와 연결이 끊어졌을 때 발생하는 Disconnect()가 있다. 그래서 XA_Session.XASession을 사용할 때는 이벤트 콜백시 호출될 OnLogin()과 OnDisconnect()를 포함하는 클래스가 필요하다. DispatchWithEvents()에 클래스를 전달 할 때, 클래스의 인스턴스(객체)를 사용하지 않고, 클래스명을 사용한다는 점을 꼭 기억하자.
DispatchWithEvents()시 COM객체가 만들어지는데, 이때 이벤트 콜백시 호출될 클래스도 같이 다중상속되어서 만들어진다. 그래서 COM객체의 기능과 이벤트 콜백시 호출될 클래스의 기능를 모두 사용할 수 있게 된다.
import win32com.client
class XASessionEventHandler:
def __init__(self):
self.parent = None
self.is_login = False
self.is_waiting_message = False
def OnLogin(self, code, msg):
self.is_login = True if code == "0000" else False
self.is_waiting_message = False
if self.parent:
self.parent.on_login(code, msg)
def OnDisconnect(self):
self.is_login = False
self.is_waiting_message = False
if self.parent:
self.parent.on_disconnect()
class XASession:
def __init__(self, parent=None):
self.session = win32com.client.DispatchWithEvents("XA_Session.XASession", XASessionEventHandler)
self.session.parent = parent
def login(self, id, passwd, cert_passwd="", server="demo.ebestsec.co.kr"):
# server: demo.ebestsec.co.kr / hts.ebestsec.co.kr
is_connect = self.session.ConnectServer(server, 20001)
if not is_connect:
return False
is_request = self.session.Login(id, passwd, cert_passwd, 0, 0)
if not is_request:
return False
self.session.is_waiting_message = True
return True
XASession 클래스에서 DispatchWithEvents()로 만들어진 COM객체에서 XASessionEventHandler클래스의 parent속성에 접근할 수 있는 점을 보면 XA_Session.XASession과 XASessionEventHandler가 다중상속되었다는 것을 볼 수 있다.
'XingAPI' 카테고리의 다른 글
꼭 32bit로 설치하자... (0) | 2018.09.08 |
---|---|
XAReal Reference (0) | 2018.08.19 |
XAQuery Reference (0) | 2018.08.19 |
XASession Reference (0) | 2018.08.19 |
xingAPI COM Reference 개요 (0) | 2018.08.19 |