diff --git a/README.md b/README.md index bf887d7d..2d13d836 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ * Supported exchanges: * Market Data: ascendex, binance, binanceds-futures, binance-coin-futures, binance, bitfinex, bitget, bitget-futures, bitmart, bitmex, bitstamp, bybit, okx, cryptocom, deribit, erisx (Cboe Digital), gateio, gateio-perpetual-futures, gemini, huobi, huobi-usdt-swap, huobi-coin-swap, kraken, kraken-futures, kucoin, kucoin-futures, mexc, mexc-futures, okx, whitebit. * Execution Management: ascendex, binance, binanceds-futures, binance-coin-futures, binance, bitfinex, bitget, bitget-futures, bitmart, bitmex, bitstamp, bybit, okx, cryptocom, deribit, erisx (Cboe Digital), gateio, gateio-perpetual-futures, gemini, huobi, huobi-usdt-swap, huobi-coin-swap, kraken, kraken-futures, kucoin, kucoin-futures, mexc, okx. - * FIX: okx, gemini. + * FIX: coinbase, gemini. * Join us on Discord https://discord.gg/b5EKcp9s8T and Medium https://cryptochassis.medium.com. ## Branches diff --git a/example/src/test_order_latency/main.cpp b/example/src/test_order_latency/main.cpp index b8f92a1c..ce6307ee 100644 --- a/example/src/test_order_latency/main.cpp +++ b/example/src/test_order_latency/main.cpp @@ -145,6 +145,20 @@ int main(int argc, char** argv) { const auto& byWebsocket = UtilSystem::getEnvAsBool("BY_WEBSOCKET"); SessionOptions sessionOptions; SessionConfigs sessionConfigs; + + const auto& okx_rest_fast_url = ccapi::UtilSystem::getEnvAsString("OKX_REST_FAST_URL"); + const auto& okx_websocket_fast_url = ccapi::UtilSystem::getEnvAsString("OKX_WEBSOCKET_FAST_URL"); + auto url_rest_base = sessionConfigs.getUrlRestBase(); + if (!okx_rest_fast_url.empty()) { + url_rest_base.at("okx") = okx_rest_fast_url; + } + sessionConfigs.setUrlRestBase(url_rest_base); + std::map url_websocket_base = sessionConfigs.getUrlWebsocketBase(); + if (!okx_websocket_fast_url.empty()) { + url_websocket_base.at("okx") = okx_websocket_fast_url; + } + sessionConfigs.setUrlWebsocketBase(url_websocket_base); + std::string websocketOrderEntrySubscriptionCorrelationId("any"); MyEventHandler eventHandler(symbol, side, quantity, price, clientOrderIdLength, cancelByClientOrderId, numOrders, byWebsocket, websocketOrderEntrySubscriptionCorrelationId); diff --git a/include/ccapi_cpp/ccapi_hmac.h b/include/ccapi_cpp/ccapi_hmac.h index f58c3e36..066dbd9c 100644 --- a/include/ccapi_cpp/ccapi_hmac.h +++ b/include/ccapi_cpp/ccapi_hmac.h @@ -4,9 +4,9 @@ #include #include #include -#include #include +#include namespace ccapi { class Hmac { diff --git a/include/ccapi_cpp/service/ccapi_execution_management_service_bybit.h b/include/ccapi_cpp/service/ccapi_execution_management_service_bybit.h index 81ae7205..6f28275e 100644 --- a/include/ccapi_cpp/service/ccapi_execution_management_service_bybit.h +++ b/include/ccapi_cpp/service/ccapi_execution_management_service_bybit.h @@ -365,15 +365,26 @@ class ExecutionManagementServiceBybit : public ExecutionManagementService { if (document.HasMember("op")) { std::string op = document["op"].GetString(); if (op == "auth") { + message.setCorrelationIdList({subscription.getCorrelationId()}); std::string retCode = document["retCode"].GetString(); if (retCode == "0") { event.setType(Event::Type::AUTHORIZATION_STATUS); - Message message; message.setType(Message::Type::AUTHORIZATION_SUCCESS); Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); element.insert(CCAPI_INFO_MESSAGE, textMessage); message.setElementList({element}); messageList.emplace_back(std::move(message)); + } else { + event.setType(Event::Type::AUTHORIZATION_STATUS); + message.setType(Message::Type::AUTHORIZATION_FAILURE); + Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); + element.insert(CCAPI_ERROR_MESSAGE, textMessage); + message.setElementList({element}); + messageList.emplace_back(std::move(message)); } } else if (op == "order.create" || op == "order.cancel") { unsigned long wsRequestId = std::stoul(document["reqId"].GetString()); @@ -520,9 +531,10 @@ class ExecutionManagementServiceBybit : public ExecutionManagementService { bool success = document["success"].GetBool(); if (success) { event.setType(Event::Type::AUTHORIZATION_STATUS); - Message message; message.setType(Message::Type::AUTHORIZATION_SUCCESS); Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); element.insert(CCAPI_INFO_MESSAGE, textMessage); message.setElementList({element}); messageList.emplace_back(std::move(message)); @@ -555,6 +567,15 @@ class ExecutionManagementServiceBybit : public ExecutionManagementService { if (ec) { this->onError(Event::Type::SUBSCRIPTION_STATUS, Message::Type::SUBSCRIPTION_FAILURE, ec, "subscribe"); } + } else { + event.setType(Event::Type::AUTHORIZATION_STATUS); + message.setType(Message::Type::AUTHORIZATION_FAILURE); + Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); + element.insert(CCAPI_ERROR_MESSAGE, textMessage); + message.setElementList({element}); + messageList.emplace_back(std::move(message)); } } else if (op == "subscribe") { bool success = document["success"].GetBool(); diff --git a/include/ccapi_cpp/service/ccapi_execution_management_service_cryptocom.h b/include/ccapi_cpp/service/ccapi_execution_management_service_cryptocom.h index 54b995d7..c5511390 100644 --- a/include/ccapi_cpp/service/ccapi_execution_management_service_cryptocom.h +++ b/include/ccapi_cpp/service/ccapi_execution_management_service_cryptocom.h @@ -483,6 +483,8 @@ class ExecutionManagementServiceCryptocom : public ExecutionManagementService { event.setType(Event::Type::AUTHORIZATION_STATUS); message.setType(Message::Type::AUTHORIZATION_FAILURE); Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); element.insert(CCAPI_ERROR_MESSAGE, textMessage); message.setElementList({element}); messageList.emplace_back(std::move(message)); @@ -490,6 +492,8 @@ class ExecutionManagementServiceCryptocom : public ExecutionManagementService { event.setType(Event::Type::AUTHORIZATION_STATUS); message.setType(Message::Type::AUTHORIZATION_SUCCESS); Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); element.insert(CCAPI_INFO_MESSAGE, textMessage); message.setElementList({element}); messageList.emplace_back(std::move(message)); diff --git a/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h b/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h index e1c1a108..f491967f 100644 --- a/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h +++ b/include/ccapi_cpp/service/ccapi_execution_management_service_okx.h @@ -393,6 +393,8 @@ class ExecutionManagementServiceOkx : public ExecutionManagementService { Message message; message.setType(Message::Type::AUTHORIZATION_SUCCESS); Element element; + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); + element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); element.insert(CCAPI_INFO_MESSAGE, textMessage); message.setElementList({element}); std::vector messageList; diff --git a/include/ccapi_cpp/service/ccapi_market_data_service_binance_base.h b/include/ccapi_cpp/service/ccapi_market_data_service_binance_base.h index 3957669e..146ec1de 100644 --- a/include/ccapi_cpp/service/ccapi_market_data_service_binance_base.h +++ b/include/ccapi_cpp/service/ccapi_market_data_service_binance_base.h @@ -22,7 +22,6 @@ class MarketDataServiceBinanceBase : public MarketDataService { void onOpen(std::shared_ptr wsConnectionPtr) override { CCAPI_LOGGER_FUNCTION_ENTER; - auto now = UtilTime::now(); Service::onOpen(wsConnectionPtr); this->startSubscribe(wsConnectionPtr); } diff --git a/include/ccapi_cpp/service/ccapi_service.h b/include/ccapi_cpp/service/ccapi_service.h index f6ed34aa..92891483 100644 --- a/include/ccapi_cpp/service/ccapi_service.h +++ b/include/ccapi_cpp/service/ccapi_service.h @@ -1189,8 +1189,7 @@ class Service : public std::enable_shared_from_this { message.setType(Message::Type::SESSION_CONNECTION_DOWN); message.setCorrelationIdList(wsConnectionPtr->correlationIdList); Element element; - auto& connectionId = wsConnectionPtr->id; - element.insert(CCAPI_CONNECTION_ID, connectionId); + element.insert(CCAPI_CONNECTION_ID, wsConnectionPtr->id); element.insert(CCAPI_CONNECTION_URL, wsConnectionPtr->url); message.setElementList({element}); event.setMessageList({message}); diff --git a/test/test_build/CMakeLists.txt b/test/test_build/CMakeLists.txt index 977f14e9..9770d106 100644 --- a/test/test_build/CMakeLists.txt +++ b/test/test_build/CMakeLists.txt @@ -7,24 +7,14 @@ set(SERVICE_LIST "MARKET_DATA" "EXECUTION_MANAGEMENT" "FIX") set(MARKET_DATA_EXCHANGE_LIST "COINBASE" - # "GEMINI" - # "KRAKEN" - # "KRAKEN_FUTURES" - # "BITSTAMP" - # "BITFINEX" - # "BITMEX" + # "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" # "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" - # "HUOBI" - # "HUOBI_USDT_SWAP" - # "HUOBI_COIN_SWAP" + # "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKX" - # "ERISX" - # "KUCOIN" - # "KUCOIN_FUTURES" - # "DERIBIT" + # "ERISX" "KUCOIN" "KUCOIN_FUTURES" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" @@ -32,32 +22,19 @@ set(MARKET_DATA_EXCHANGE_LIST "BYBIT" "BITGET" "BITGET_FUTURES" - # "BITMART" - # "MEXC" - # "MEXC_FUTURES" - # "WHITEBIT" - ) + # "BITMART" "MEXC" "MEXC_FUTURES" "WHITEBIT" +) set(EXECUTION_MANAGEMENT_EXCHANGE_LIST "COINBASE" - # "GEMINI" - # "KRAKEN" - # "KRAKEN_FUTURES" - # "BITSTAMP" - # "BITFINEX" - # "BITMEX" + # "GEMINI" "KRAKEN" "KRAKEN_FUTURES" "BITSTAMP" "BITFINEX" "BITMEX" # "BINANCE_US" "BINANCE" "BINANCE_USDS_FUTURES" "BINANCE_COIN_FUTURES" - # "HUOBI" - # "HUOBI_USDT_SWAP" - # "HUOBI_COIN_SWAP" + # "HUOBI" "HUOBI_USDT_SWAP" "HUOBI_COIN_SWAP" "OKX" - # "ERISX" - # "KUCOIN" - # "KUCOIN_FUTURES" - # "DERIBIT" + # "ERISX" "KUCOIN" "KUCOIN_FUTURES" "DERIBIT" "GATEIO" "GATEIO_PERPETUAL_FUTURES" "CRYPTOCOM" @@ -65,10 +42,8 @@ set(EXECUTION_MANAGEMENT_EXCHANGE_LIST "BYBIT" "BITGET" "BITGET_FUTURES" - # "BITMART" - # "MEXC" - # "WHITEBIT" - ) + # "BITMART" "MEXC" "WHITEBIT" +) set(FIX_EXCHANGE_LIST "COINBASE" "GEMINI")