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); }
//리얼데이터 요청 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); }