Get Last Order Update
Brief
Get the up-to-date order information from the server.
Details
This command is used to request the latest available information on the order from the server.
The command is useful in case the trader wants to get the information about his order after the relogin or the automatic reconnection.
The method can be called in the "logged in" state.
If the request has been executed successfuly, the response will be received in
IO2GResponseListener
.onRequestCompleted
.
The repsonse can be converted to IO2GLastOrderUpdateResponseReader
.
If the order has been executed, the server returns IO2GLastOrderUpdateResponseReader
with
the 'Delete' type of the table update and the 'F' status ('Executed') in the order row.
To get the updated order information, please fill the following values in the value map:
Parameter name |
Datatype |
Description |
||||||
Command |
const char* |
The command. Must be |
||||||
Key |
const char* |
The order field to search the order.
|
||||||
Id |
const char* |
The value of the order field to search. |
||||||
AccountName |
const char* |
The name of the account. Note that it is not AccountID. |
To use the command:
Create a request and send it to the server.
Wait for the response using IO2GResponseListener
.
Example: Get last order update [hide]
// Forward definition std::string getAccountName(IO2GSession *session); IO2GResponse* sendGetLastOrderUpdateRequest(IO2GSession *session, LPCSTR accountName, LPCSTR orderID, IO2GResponseListener *responseListener); IO2GLastOrderUpdateResponseReader* processResponse(IO2GSession *session, IO2GResponse *response); void printLastOrderUpdateResponse(IO2GLastOrderUpdateResponseReader *lastOrderUpdateResponseReader); // Program entry point int main(int argc, char *argv[]) { IO2Session *session = NULL; // Must be implemented by the user IO2GResponseListener *responseListener = NULL; //.... Obtain session object and connect to the server std::string accountName = getAccountName(session); std::string orderID = "XXXXX"; // Should be specified by the user IO2GResponse *response = sendGetLastOrderUpdateRequest(accountName, orderID); if (response) { O2G2Ptr<IO2GLastOrderUpdateResponseReader> lastOrderUpdateResponseReader = processResponse(response); printLastOrderUpdate(lastOrderUpdateResponseReader); } response->release(); //...Logout } std::string getAccountName(IO2GSession *session) { O2G2Ptr<IO2GLoginRules> loginRules = session->getLoginRules(); std::string sAccountName = ""; if(loginRules->isTableLoadedByDefault(::Accounts)) { O2G2Ptr<IO2GResponse> response = loginRules->getTableRefreshResponse(::Accounts); if(response) { O2G2Ptr<IO2GResponseReaderFactory> readerFactory = session->getResponseReaderFactory(); O2G2Ptr<IO2GAccountsTableResponseReader> responseReader = readerFactory->createAccountsTableReader(response); O2G2Ptr<IO2GAccountRow> row = responseReader->getRow(0); sAccountName = row->getAccountName(); std::cout << "Using account Name: " << accountName << std::endl;! } } return sAccountName; } /** Sync method. Send a request and wait for the response/ IO2GResponse* sendGetLastOrderUpdateRequest(IO2GSession *session, LPCSTR accountName, LPCSTR orderID, IO2GResponseListener *responseListener) { O2G2Ptr<IO2GRequestFactory> requestFactory = session->getRequestFactory(); O2G2Ptr<IO2GValueMap> valuemap = requestFactory->createValueMap(); valuemap->setString(Command, O2G2::Commands::GetLastOrderUpdate); valuemap->setString(AccountName, sAccountName.c_str()); valuemap->setString(Key, O2G2::KeyType::OrderID); valuemap->setString(Id, orderID); O2G2Ptr<IO2GRequest> lastOrderUpdateRequest = requestFactory->createOrderRequest(valuemap); // Response listener receives async callback. Therefore, request ID must be set // before sending the request. responseListener->setRequest(lastOrderUpdateRequest->getRequestID()); session->sendRequest(lastOrderUpdateRequest); uni::WaitForSingleObject(responseListener->getResponseEvent(), INFINITE); return responseListener->getLastUpdateOrderUpdateResponse(); } IO2GLastOrderUpdateReader* processResponse(IO2GSession *session, IO2GResponse *response) { O2G2Ptr<IO2GResponseReaderFactory> readerFactory = session->getResponseReaderFactory(); return readerFactory->createLastOrderUpdateResponseReader(response); } void printLastOrderUpdate(IO2GLastOrderUpdateReader *lastOrderUpdateReader) { O2GTableUpdateType updateType = lastOrderUpdateResponseReader->getUpdateType(); std::string updateTypeString; switch(updateType) { case Delete: updateTypeString = "Delete"; break; case Insert: updateTypeString = "Insert"; break; case Update: updateTypeString = "Update"; break; default: updateTypeString = "Undefined"; } O2G2Ptr<IO2GOrderRow> orderRow = lastOrderUpdateResponseReader->getOrder(); std::cout << "UpdateType: " << updateTypeString << "; Order ID: " << orderRow->getOrderID() << "; Status: " << orderRow->getStatus() << std::endl; } // In response listener file void ResponseListener::onRequestCompleted(const char *requestId, IO2GResponse *response) { if (response != 0 && mRequestID == requestID) { mLastOrderUpdateResponseLast = response; } uni::SetEvent(mResponseEvent); }