Esempio n. 1
0
        public void CloseRTData(uint nReqID, object objDataAgent)
        {
            //========================================================================
            // ID로 RT정보의 포인터를 얻는다.
            //========================================================================
            uint  nID   = nReqID;
            RT_ID pRTID = null;

            if (m_mapID.TryGetValue(nID, out pRTID) == false)
            {
                return;
            }
            ushort wTR  = pRTID.wTR;
            int    hWnd = pRTID.hWnd;
            int    nCnt = pRTID.arrCode.Count;

            List <string> requestCodes = new List <string>();

            // 뉴스, 공시는 종목코드 없음.
            string strTRKey = string.Format("{0:D3}", pRTID.wTR);

            if (wTR == 200 || wTR == 300)
            {
                RT_TR pRTTR;
                //이미 서버에 요청한 경우 핸들만 삭제
                if (m_mapTR.TryGetValue(strTRKey, out pRTTR))
                {
                    pRTTR.arrWindow.Remove(hWnd);
                    //핸들 리스트의 개수가 0 이면 맵에서 삭제
                    if (pRTTR.arrWindow.Count < 1)
                    {
                        m_mapTR.Remove(strTRKey);
                        // 뉴스, 공시는 종목코드 없이 요청한다
                        requestCodes.Add("");
                    }
                }
            }
            else
            {
                foreach (string strCode in pRTID.arrCode)
                {
                    string strKey = strTRKey + strCode;
                    RT_TR  pRTTR;
                    //이미 서버에 요청한 경우 핸들만 추가
                    if (m_mapTR.TryGetValue(strKey, out pRTTR))
                    {
                        pRTTR.arrWindow.Remove(hWnd);
                        //핸들 리스트의 개수가 0 이면 맵에서 삭제
                        if (pRTTR.arrWindow.Count < 1)
                        {
                            m_mapTR.Remove(strKey);
                            // 뉴스, 공시는 종목코드 없이 요청한다
                            requestCodes.Add(strCode);
                        }
                    }
                }
            }

            //서버로 요청해야하는 종목코드가 있는경우
            if (requestCodes.Count > 0)
            {
                SessionPush.RequestDataToServer(wTR, requestCodes, hWnd, false);
            }

            //맵에서 삭제
            pRTID.arrCode.Clear();
            m_mapID.Remove(nID);
        }
Esempio n. 2
0
        //리얼데이터 요청
        public uint RequestRTData(ushort wTR, string strCodes, object objDataAgent)
        {
            // DataAgent 등록 ( 화면 종료시에 DataAgent의 유효성을 체크하는데 사용함 )
            // 대기중 또는 처리중인 TRItem을 소유하고 있는 DataAgent가 무효한 경우 자동 취소 처리된다.
            RegDataAgent(objDataAgent);

            int  hWnd   = objDataAgent.GetHashCode();
            uint nReqID = 0;

            unchecked
            {
                nReqID = s_RTID++;
            }

            RT_ID pRTID = null;

            //이미 등록된 RT_ID 이면 오류상황
            if (m_mapID.ContainsKey(nReqID))
            {
                return(0);
            }
            else
            {
                pRTID = new RT_ID();
                m_mapID.Add(nReqID, pRTID);
            }

            pRTID.dwID = nReqID;
            pRTID.wTR  = wTR;
            pRTID.hWnd = hWnd;

            string[] arrCodes = strCodes.Split(',');
            foreach (string code in arrCodes)
            {
                if (code != "")
                {
                    pRTID.arrCode.Add(code);
                }
            }

            List <string> requestCodes = new List <string>();

            // 뉴스, 공시는 종목코드 없음.
            string strTRKey = string.Format("{0:D3}", pRTID.wTR);

            if (pRTID.wTR == 200 || pRTID.wTR == 300)
            {
                RT_TR pRTTR;
                //이미 서버에 요청한 경우 핸들만 추가
                if (m_mapTR.TryGetValue(strTRKey, out pRTTR))
                {
                    pRTTR.arrWindow.Add(pRTID.hWnd);
                }
                //서버에 요청하지 않은 경우
                else
                {
                    pRTTR         = new RT_TR();
                    pRTTR.wTR     = pRTID.wTR;
                    pRTTR.strCode = "";
                    pRTTR.arrWindow.Add(pRTID.hWnd);
                    m_mapTR.Add(strTRKey, pRTTR);
                    // 뉴스, 공시는 종목코드 없이 요청한다
                    requestCodes.Add("");
                }
            }
            else
            {
                foreach (string strCode in pRTID.arrCode)
                {
                    string strKey = strTRKey + strCode;
                    RT_TR  pRTTR;
                    //이미 서버에 요청한 경우 핸들만 추가
                    if (m_mapTR.TryGetValue(strKey, out pRTTR))
                    {
                        pRTTR.arrWindow.Add(pRTID.hWnd);
                    }
                    //서버에 요청하지 않은 경우
                    else
                    {
                        pRTTR         = new RT_TR();
                        pRTTR.wTR     = pRTID.wTR;
                        pRTTR.strCode = "";
                        pRTTR.arrWindow.Add(pRTID.hWnd);
                        m_mapTR.Add(strKey, pRTTR);

                        // 2012.07.17. 일단 1001 -> 001 로 하자
                        string strReqCode = strCode;

                        /*
                         * if ( wTR == 100 )
                         * {
                         *  if ( strCode.Length == 4 )//20120717
                         *  {
                         *      strReqCode = strCode.Substring(1, 3);
                         *  }
                         * }
                         */
                        requestCodes.Add(strReqCode);
                    }
                }
            }

            //서버로 요청해야하는 종목코드가 있는경우
            if (requestCodes.Count > 0)
            {
                SessionPush.RequestDataToServer(wTR, requestCodes, hWnd, true);
            }

            // 리턴값이 0 이면 리얼요청 오류
            return(nReqID);
        }