# coding=utf-8
from cppy.adaptor import CpRqRpClass, CpSubPubClass
from cppy.processor import EventProcessor

evntproc = None

@CpRqRpClass('CpSysDib.StockChart')
class StkChart(object):
    def __init__(self):
        self.itm_cod = itm_cod
    
    def setInputValue(self, inputType, inputValue):
        self.inputType = inputType
        self.inputValue = inputValue
    
    def request(self, com_obj):
        com_obj.SetInputValue(0, self.itm_cod)
        com_obj.SetInputValue(1, ord('2'))
        com_obj.SetInputValue(4, 100)
        com_obj.SetInputValue(5, [0,5,8,9])
        com_obj.SetInputValue(6, ord('D'))

        com_obj.Request()

    def response(self, com_obj):
        cnt = com_obj.GetHeaderValue(3) #  수신개수
        for i in range(cnt):
            if i == 98:
                # 98번째에 show_series라는 키를 전달
                evntproc.push('show_series', self.itm_cod)

            if i == 0:
                evntproc.push('show_start', 'start')

            # 키와 값을 인자로 하여 이벤트처리기에 전달
            evntproc.push(self.itm_cod + '_clpr', com_obj.GetDataValue(0,i))



def echo(serieses, key, dat):
    print ('key:%s, dat:%s'%(key, dat))


def show_series(serieses, key, dat):
    if dat == 'start':
        print ('start')

    if dat == 'A003540':
        for val in serieses['A003540_clpr']:
            print (val)


# 윈도우의 경우 multiprocessing 사용시 (EventProcessor)
# if __name__ == "__main__" 에서 사용해야함
# https://docs.python.org/2/library/multiprocessing.html
if __name__ == "__main__":

    itm_cod = "A005930"

    # 이벤트처리기 구동
    evntproc = EventProcessor()
    # 옵저버를 등록함, A003540으로 시작하는 키가 도착하면 echo 를 수행함
    evntproc.add_observer([itm_cod + '*'], echo)
    # 옵저버를 등록함, show으로 시작하는 키가 도착하면 show_series를 수행
    evntproc.add_observer(['show*'], show_series)
    evntproc.start()

    # 차트 데이터 요청 (비동기)
    stkchart = StkChart()
    stkchart.request()


    import pythoncom, time
    while True:
        pythoncom.PumpWaitingMessages()
        time.sleep(0.01)
