/** Request update data received data handler. */ void ResponseListener::onTablesUpdates(IO2GResponse *data) { if (data) { O2G2Ptr<IO2GResponseReaderFactory> factory = mSession->getResponseReaderFactory(); if (factory) { O2G2Ptr<IO2GTablesUpdatesReader> reader = factory->createTablesUpdatesReader(data); if (reader) { for (int i = 0; i < reader->size(); ++i) { switch (reader->getUpdateTable(i)) { case Orders: { O2G2Ptr<IO2GOrderRow> order = reader->getOrderRow(i); if (mRequestID != order->getRequestID()) break; switch (reader->getUpdateType(i)) { case Insert: if ((isClosingOrder(order) || isOpeningOrder(order)) && mOrderMonitorNetting == NULL) { std::cout << "The order has been added. OrderID='" << order->getOrderID() << "', " << "Rate='" << order->getRate() << "', " << "TimeInForce='" << order->getTimeInForce() << "'" << std::endl; O2G2Ptr<IO2GTradeRow> trade = NULL; std::string sTradeID = std::string(order->getTradeID()); if (mTradesTable) { for (int j = 0; j < mTradesTable->size(); ++j) { if (sTradeID == mTradesTable->getRow(j)->getTradeID()) { trade = mTradesTable->getRow(j); break; } } } if (trade) mOrderMonitorNetting = new OrderMonitorNetting(order, trade->getAmount()); else mOrderMonitorNetting = new OrderMonitorNetting(order, 0); } break; case Delete: if (mOrderMonitorNetting) { std::cout << "The order has been deleted. OrderID='" << order->getOrderID() << "'" << std::endl; mOrderMonitorNetting->onOrderDeleted(order); if (mOrderMonitorNetting->isOrderCompleted()) { printResult(); SetEvent(mResponseEvent); } } break; } } break; case Trades: { O2G2Ptr<IO2GTradeRow> trade = reader->getTradeRow(i); switch (reader->getUpdateType(i)) { case Insert: { if (mOrderMonitorNetting) { mOrderMonitorNetting->onTradeAdded(trade); if (mOrderMonitorNetting->isOrderCompleted()) { printResult(); SetEvent(mResponseEvent); } } } break; case Update: { if (mOrderMonitorNetting) { mOrderMonitorNetting->onTradeUpdated(trade); if (mOrderMonitorNetting->isOrderCompleted()) { printResult(); SetEvent(mResponseEvent); } } } break; } } break; case ClosedTrades: { if (reader->getUpdateType(i) == Insert) { O2G2Ptr<IO2GClosedTradeRow> closedTrade = reader->getClosedTradeRow(i); if (mOrderMonitorNetting) { mOrderMonitorNetting->onClosedTradeAdded(closedTrade); if (mOrderMonitorNetting->isOrderCompleted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case Messages: { if (reader->getUpdateType(i) == Insert) { O2G2Ptr<IO2GMessageRow> message = reader->getMessageRow(i); if (mOrderMonitorNetting) { mOrderMonitorNetting->onMessageAdded(message); if (mOrderMonitorNetting->isOrderCompleted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case Accounts: { if (reader->getUpdateType(i) == Update && reader->getUpdateTable(i) == Accounts) { O2G2Ptr<IO2GAccountRow> account = reader->getAccountRow(i); std::cout << "The balance has been changed. AccountID=" << account->getAccountID() << ", " << "Balance=" << std::fixed << account->getBalance() << std::endl; } } break; } } } } } }
/** Request update data received data handler. */ void ResponseListener::onTablesUpdates(IO2GResponse *data) { if (data) { O2G2Ptr<IO2GResponseReaderFactory> factory = mSession->getResponseReaderFactory(); if (factory) { O2G2Ptr<IO2GTablesUpdatesReader> reader = factory->createTablesUpdatesReader(data); if (reader) { for (int i = 0; i < reader->size(); ++i) { switch (reader->getUpdateTable(i)) { case Orders: { O2G2Ptr<IO2GOrderRow> order = reader->getOrderRow(i); if (reader->getUpdateType(i) == Insert) { if (mBatchOrderMonitor) { std::cout << "The order has been added. OrderID='" << order->getOrderID() << "', " << "Rate='" << order->getRate() << "', " << "TimeInForce='" << order->getTimeInForce() << "'" << std::endl; mBatchOrderMonitor->onOrderAdded(order); } } else if (reader->getUpdateType(i) == Delete) { if (mBatchOrderMonitor) { std::cout << "The order has been deleted. OrderID='" << order->getOrderID() << "'" << std::endl; mBatchOrderMonitor->onOrderDeleted(order); if (mBatchOrderMonitor->isBatchExecuted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case Trades: { if (reader->getUpdateType(i) == Insert) { O2G2Ptr<IO2GTradeRow> trade = reader->getTradeRow(i); if (mBatchOrderMonitor) { mBatchOrderMonitor->onTradeAdded(trade); if (mBatchOrderMonitor->isBatchExecuted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case ClosedTrades: { if (reader->getUpdateType(i) == Insert) { O2G2Ptr<IO2GClosedTradeRow> closedTrade = reader->getClosedTradeRow(i); if (mBatchOrderMonitor) { mBatchOrderMonitor->onClosedTradeAdded(closedTrade); if (mBatchOrderMonitor->isBatchExecuted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case Messages: { if (reader->getUpdateType(i) == Insert) { O2G2Ptr<IO2GMessageRow> message = reader->getMessageRow(i); if (mBatchOrderMonitor) { mBatchOrderMonitor->onMessageAdded(message); if (mBatchOrderMonitor->isBatchExecuted()) { printResult(); SetEvent(mResponseEvent); } } } } break; case Accounts: { if (reader->getUpdateType(i) == Update && reader->getUpdateTable(i) == Accounts) { O2G2Ptr<IO2GAccountRow> account = reader->getAccountRow(i); std::cout << "The balance has been changed. AccountID=" << account->getAccountID() << ", " << "Balance=" << std::fixed << account->getBalance() << std::endl; } } break; } } } } } }