/* * SEARCH * FUZZING * - small * - lager * - equal * - notequal * WRITE * PROCESS(Process List) * THREADLIST * ATTACH * CONTROL * - STOP * - START * SHOWLIST(Data List) * CLEAR * EXIT */ int main(int argc, const char* argv[]) { getUUID(); char message[BUFSIZE]; char command1[BUFSIZE] = { '\0', }, command2[BUFSIZE] = { '\0', },command3[BUFSIZE] = { '\0', }; while (1) { printf("Lazenca$ "); fgets(message, BUFSIZE, stdin); fflush (stdin); //입력값이 있는지 없는지 확인 if (strlen(message) > 1) { sscanf(message, "%s%s%s", command1, command2, command3); /*printf("command1 : %s, command2 : %s, command3 : %s\n", strupr(command1), command2, command3);*/ //Process Attach if (!strcmp(ATTACH, strupr(command1))) { ListClear(); ProcAttach(command2); continue; //Process List } else if (!strcmp(PROCESSLIST, strupr(command1))) { showProcessList(); continue; //Process Exit } else if (!strcmp(EXIT, strupr(command1))) { exit(0); } char tempPath[256]; sprintf(tempPath, "/proc/%d", privatePid); if (checkDir(tempPath)) { //검색 if (!strcmp(SEARCH, strupr(command1))) { MemorySearch(command2); //퍼징 } else if (!strcmp(FUZZING, strupr(command1))) { MemoryFuzzing(command2); //값 변경 } else if (!strcmp(WRITE, strupr(command1))) { MemoryWrite(command2, command3); //Thread List } else if (!strcmp(THREADLIST, strupr(command1))) { showThreadList(); //Process Control } else if (!strcmp(CONTROL, strupr(command1))) { ThreadControl(command2, command3); //Data List } else if (!strcmp(DATALIST, strupr(command1))) { ShowDataList(); //Data List Clear } else if (!strcmp(CLEAR, strupr(command1))) { ListClear(); //Data Lock } else if (!strcmp(DATALOCK, strupr(command1))) { DataLock(command2); } else if (!strcmp(LOCKLIST, strupr(command1))) { ShowLockDataList(); } else { printf("Main Command Input Error!\n"); } } else { ListClear(); printf("%s\n", errorMsgPid); } } } return 0; }
bool CISEMultiSession::SendQuotes(vector<CQuoteParams>& vecQuotes) { CAutoLock Lock(&m_MultiSessionLock); map<uint8, CBookRequests> mapBook2Requests; { // check for connection state CAutoLock DataLock(this); if(IsLoaded() == false || m_bMultiSessionLoggedOn == false) { for(vector<CQuoteParams>::iterator itQuotes = vecQuotes.begin(); itQuotes != vecQuotes.end(); itQuotes++) { itQuotes->m_SendResult.m_Error = enNotConnected; itQuotes->m_SendResult.m_sOrderID = ""; } return false; } static quote_trans_mo106_t Mo106; static const int nMaxItems = /*1;*/sizeof(Mo106.item) / sizeof(quote_trans_mo106_item_t); { CAutoLock ClassesLock(&m_ISE.m_InstrumentClasses); CAutoLock UndLock(&m_ISE.m_Underlyings); CAutoLock SeriesLock(&m_ISE.m_Series); for(vector<CQuoteParams>::iterator itQuotes = vecQuotes.begin(); itQuotes != vecQuotes.end(); itQuotes++) { // find series CSeries* pSeries = GetSeriesByRequest(itQuotes->m_sSeries); if(pSeries && pSeries->m_pUnderlying && pSeries->m_pInstrumentClass) { // check for premium if(itQuotes->m_dPremium == 0) { CDeleteQuoteRequest DeleteRequest; DeleteRequest.m_Data.series = pSeries->m_Series; DeleteRequest.m_Data.orderbook_c = pSeries->m_pUnderlying->m_uiOrderbook; DeleteRequest.m_Data.bid_or_ask_c = itQuotes->m_BidOrAsk; //ThEN/B/ DeleteRequest.m_Data.order_category_n = ORDER_CAT_QUOTE; DeleteRequest.m_Data.order_category_filter_n = ORDER_CAT_QUOTE; //ThEN/E/ { CAutoLock UserLock(&(CISESession0::m_User)); StringToClickString(CISESession0::m_User.m_sCountryID, sizeof(DeleteRequest.m_Data.whose.trading_code.country_id_s), DeleteRequest.m_Data.whose.trading_code.country_id_s); StringToClickString(CISESession0::m_User.m_sCustomerID, sizeof(DeleteRequest.m_Data.whose.trading_code.ex_customer_s), DeleteRequest.m_Data.whose.trading_code.ex_customer_s); } DeleteRequest.m_Ref = &(*itQuotes); mapBook2Requests[pSeries->m_pUnderlying->m_uiOrderbook].m_DeleteRequests.push_back(DeleteRequest); } else { vector<CSubmitQuoteRequest>& vecSubmitRequests = mapBook2Requests[pSeries->m_pUnderlying->m_uiOrderbook].m_SubmitRequests; if(vecSubmitRequests.size() == 0 || vecSubmitRequests.back().m_Data.items_n == nMaxItems) vecSubmitRequests.push_back(CSubmitQuoteRequest()); CSubmitQuoteRequest& SubmitRequest = vecSubmitRequests.back(); uint16_t& nItems = SubmitRequest.m_Data.items_n; SubmitRequest.m_Data.item[nItems].series = pSeries->m_Series; SubmitRequest.m_Data.item[nItems].open_quantity_u = itQuotes->m_lOpenQuantity; SubmitRequest.m_Data.item[nItems].premium_i = DBL2DEC(itQuotes->m_dPremium, pSeries->m_pInstrumentClass->m_uiDecInPremium); SubmitRequest.m_Data.item[nItems].quantity_u = itQuotes->m_lQuantity; SubmitRequest.m_Data.item[nItems].step_up_buffer_n = itQuotes->m_lQuantity; SubmitRequest.m_Data.item[nItems].bid_or_ask_c = itQuotes->m_BidOrAsk; nItems++; SubmitRequest.m_Refs.push_back(&(*itQuotes)); } } else { itQuotes->m_SendResult.m_Error = enSymbolNotSupported; itQuotes->m_SendResult.m_sOrderID = ""; } } } } map<uint8, CBookRequests >::iterator itBook; ErrorNumberEnum Error = enNoError; InitAsync(); for(itBook = mapBook2Requests.begin(); itBook != mapBook2Requests.end(); itBook++) { CBookRequests& BookRequests = itBook->second; vector<CSubmitQuoteRequest>::iterator itSubmReq; for(itSubmReq = BookRequests.m_SubmitRequests.begin(); itSubmReq != BookRequests.m_SubmitRequests.end();itSubmReq++) { CSubmitQuoteRequest& Req = *itSubmReq; Req.m_Data.orderbook_c = itBook->first; CallAsync(enArtSumbit, &Req); } vector<CDeleteQuoteRequest>::iterator itDelReq; for(itDelReq = BookRequests.m_DeleteRequests.begin(); itDelReq != BookRequests.m_DeleteRequests.end();itDelReq++) { CallAsync(enArtDelete, &(*itDelReq)); } } WaitAsyncComplete(); // update cache CAutoLock SeriesLock(&m_ISE.m_Series); for(vector<CQuoteParams>::iterator itQuotes = vecQuotes.begin(); itQuotes != vecQuotes.end(); itQuotes++) { const CQuoteParams& Quote = *itQuotes; if(Quote.m_SendResult.m_Error == enNoError) { // find series CSeries* pSeries = GetSeriesByRequest(itQuotes->m_sSeries); if(pSeries) { pSeries->UpdateQuoteCache(Quote, 0); } } } return true; }