Skip to content

Commit 3a8cc34

Browse files
committed
feat: add support for go binding
1 parent 926b11b commit 3a8cc34

File tree

37 files changed

+783
-59
lines changed

37 files changed

+783
-59
lines changed

binding/CMakeLists.txt

Lines changed: 88 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,18 @@ else()
7676
endforeach()
7777
endif()
7878

79-
option(BUILD_PYTHON "Build Python Library" OFF)
80-
message(STATUS "Build Python: ${BUILD_PYTHON}")
81-
82-
option(BUILD_JAVA "Build Java Library" OFF)
83-
message(STATUS "Build Java: ${BUILD_JAVA}")
84-
85-
option(BUILD_CSHARP "Build C# Library" OFF)
86-
message(STATUS "Build C#: ${BUILD_CSHARP}")
87-
8879
set(CMAKE_CXX_STANDARD 17)
8980
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
9081
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
9182
endif()
9283
get_filename_component(CCAPI_PROJECT_DIR ../ ABSOLUTE)
9384
message(STATUS "CCAPI_PROJECT_DIR: ${CCAPI_PROJECT_DIR}")
85+
find_package(OpenSSL REQUIRED)
86+
message(STATUS "OPENSSL_INCLUDE_DIR: ${OPENSSL_INCLUDE_DIR}")
87+
message(STATUS "OPENSSL_CRYPTO_LIBRARY: ${OPENSSL_CRYPTO_LIBRARY}")
88+
get_filename_component(OPENSSL_CRYPTO_LIBRARY_DIR ${OPENSSL_CRYPTO_LIBRARY} DIRECTORY)
89+
message(STATUS "OPENSSL_SSL_LIBRARY: ${OPENSSL_SSL_LIBRARY}")
90+
get_filename_component(OPENSSL_SSL_LIBRARY_DIR ${OPENSSL_SSL_LIBRARY} DIRECTORY)
9491
if(NOT CCAPI_LEGACY_USE_WEBSOCKETPP)
9592
message(STATUS "use boost beast websocket")
9693
if(NOT BOOST_INCLUDE_DIR)
@@ -145,12 +142,19 @@ else()
145142
set(HFFIX_INCLUDE_DIR ${CCAPI_PROJECT_DIR}/dependency/hffix/include)
146143
include_directories(${CCAPI_PROJECT_DIR}/include ${WEBSOCKETPP_INCLUDE_DIR} ${BOOST_INCLUDE_DIR} ${RAPIDJSON_INCLUDE_DIR} ${HFFIX_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR})
147144
endif()
148-
find_package(OpenSSL REQUIRED)
145+
149146
link_libraries(OpenSSL::Crypto OpenSSL::SSL)
150147

148+
find_package(ZLIB REQUIRED)
149+
link_libraries(ZLIB::ZLIB)
150+
message(STATUS "ZLIB_INCLUDE_DIRS: ${ZLIB_INCLUDE_DIRS}")
151+
message(STATUS "ZLIB_LIBRARIES: ${ZLIB_LIBRARIES}")
152+
151153
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
152154
set(SOURCE_LOGGER ${CCAPI_PROJECT_DIR}/binding/ccapi_logger.cpp)
153155
find_package(SWIG REQUIRED)
156+
message(STATUS "SWIG_VERSION: ${SWIG_VERSION}")
157+
message(STATUS "SWIG_EXECUTABLE: ${SWIG_EXECUTABLE}")
154158
include(UseSWIG)
155159
if(BUILD_TEST)
156160
include(CTest)
@@ -217,33 +221,79 @@ add_compile_definitions(CCAPI_ENABLE_EXCHANGE_MEXC_FUTURES)
217221

218222
add_compile_definitions(CCAPI_ENABLE_EXCHANGE_WHITEBIT)
219223

220-
find_package(ZLIB REQUIRED)
221-
link_libraries(ZLIB::ZLIB)
224+
if(CCAPI_ENABLE_LOG_ERROR)
225+
add_compile_definitions(CCAPI_ENABLE_LOG_ERROR)
226+
endif()
222227

223-
if(BUILD_PYTHON)
224-
configure_file(
225-
swig_interface.i.in
226-
${CMAKE_BINARY_DIR}/python/swig_interface.i
227-
@ONLY)
228-
set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/python/swig_interface.i)
229-
add_subdirectory(python)
230-
endif()
231-
232-
if(BUILD_JAVA)
233-
configure_file(
234-
swig_interface.i.in
235-
${CMAKE_BINARY_DIR}/java/swig_interface.i
236-
@ONLY)
237-
set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/java/swig_interface.i)
238-
add_subdirectory(java)
239-
endif()
240-
241-
if(BUILD_CSHARP)
242-
file(READ csharp/swig_interface_ccapi_language_specific.i SWIG_INTERFACE_CCAPI_LANGUAGE_SPECIFIC)
243-
configure_file(
244-
swig_interface.i.in
245-
${CMAKE_BINARY_DIR}/csharp/swig_interface.i
246-
@ONLY)
247-
set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/csharp/swig_interface.i)
248-
add_subdirectory(csharp)
228+
if(CCAPI_ENABLE_LOG_WARN)
229+
add_compile_definitions(CCAPI_ENABLE_LOG_WARN)
249230
endif()
231+
232+
if(CCAPI_ENABLE_LOG_INFO)
233+
add_compile_definitions(CCAPI_ENABLE_LOG_INFO)
234+
endif()
235+
236+
if(CCAPI_ENABLE_LOG_DEBUG)
237+
add_compile_definitions(CCAPI_ENABLE_LOG_DEBUG)
238+
endif()
239+
240+
if(CCAPI_ENABLE_LOG_TRACE)
241+
add_compile_definitions(CCAPI_ENABLE_LOG_TRACE)
242+
endif()
243+
244+
set(LANG_LIST "python" "java" "csharp" "go" "javascript")
245+
# option(BUILD_GO "Build ${LANG} library" OFF)
246+
foreach(LANG IN LISTS LANG_LIST)
247+
# message(STATUS "language is ${LANG}")
248+
string(TOUPPER ${LANG} LANG_UPPER)
249+
option(BUILD_${LANG_UPPER} "Build ${LANG} library" OFF)
250+
message(STATUS "Build ${LANG_UPPER}: ${BUILD_${LANG_UPPER}}")
251+
if(BUILD_${LANG_UPPER})
252+
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${LANG}/swig_interface_ccapi_language_specific.i")
253+
file(READ ${LANG}/swig_interface_ccapi_language_specific.i SWIG_INTERFACE_CCAPI_LANGUAGE_SPECIFIC)
254+
endif()
255+
configure_file(
256+
swig_interface.i.in
257+
${CMAKE_BINARY_DIR}/${LANG}/swig_interface.i
258+
@ONLY)
259+
set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/${LANG}/swig_interface.i)
260+
add_subdirectory(${LANG})
261+
endif()
262+
endforeach()
263+
264+
# option(BUILD_PYTHON "Build Python Library" OFF)
265+
# message(STATUS "Build Python: ${BUILD_PYTHON}")
266+
267+
# option(BUILD_JAVA "Build Java Library" OFF)
268+
# message(STATUS "Build Java: ${BUILD_JAVA}")
269+
270+
# option(BUILD_CSHARP "Build C# Library" OFF)
271+
# message(STATUS "Build C#: ${BUILD_CSHARP}")
272+
273+
# if(BUILD_PYTHON)
274+
# configure_file(
275+
# swig_interface.i.in
276+
# ${CMAKE_BINARY_DIR}/python/swig_interface.i
277+
# @ONLY)
278+
# set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/python/swig_interface.i)
279+
# add_subdirectory(python)
280+
# endif()
281+
282+
# if(BUILD_JAVA)
283+
# configure_file(
284+
# swig_interface.i.in
285+
# ${CMAKE_BINARY_DIR}/java/swig_interface.i
286+
# @ONLY)
287+
# set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/java/swig_interface.i)
288+
# add_subdirectory(java)
289+
# endif()
290+
291+
# if(BUILD_CSHARP)
292+
# file(READ csharp/swig_interface_ccapi_language_specific.i SWIG_INTERFACE_CCAPI_LANGUAGE_SPECIFIC)
293+
# configure_file(
294+
# swig_interface.i.in
295+
# ${CMAKE_BINARY_DIR}/csharp/swig_interface.i
296+
# @ONLY)
297+
# set(SWIG_INTERFACE ${CMAKE_BINARY_DIR}/csharp/swig_interface.i)
298+
# add_subdirectory(csharp)
299+
# endif()

binding/csharp/example/enable_library_logging/MainProgram.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// usage: when generating the binding code, do cmake -DCCAPI_ENABLE_LOG_TRACE=ON ..., see https://github.com/crypto-chassis/ccapi#non-c
12
public class MainProgram {
23
class MyLogger : ccapi.Logger {
34
public override void LogMessage(string severity, string threadId, string timeISO, string fileName, string lineNumber, string message) {

binding/csharp/example/enable_library_logging/user_specified_cmake_include.cmake

Lines changed: 0 additions & 3 deletions
This file was deleted.

binding/csharp/example/handle_exception/MainProgram.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public override bool ProcessEvent(ccapi.Event event_, ccapi.Session session) {
55
throw new System.Exception("oops");
66
} catch (System.Exception e) {
77
System.Console.WriteLine(e.ToString());
8-
System.Environment.Exit(0);
8+
System.Environment.Exit(1);
99
}
1010
return true;
1111
}

binding/csharp/example/market_data_simple_subscription/MainProgram.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
class MainProgram {
22
class MyEventHandler : ccapi.EventHandler {
33
public override bool ProcessEvent(ccapi.Event event_, ccapi.Session session) {
4-
if (event_.GetType_() == ccapi.Event.Type.SUBSCRIPTION_DATA) {
4+
if (event_.GetType_() == ccapi.Event.Type.SUBSCRIPTION_STATUS) {
5+
System.Console.WriteLine(string.Format("Received an event of type SUBSCRIPTION_STATUS:\n{0}", event_.ToStringPretty(2, 2)));
6+
} else if (event_.GetType_() == ccapi.Event.Type.SUBSCRIPTION_DATA) {
57
foreach (var message in event_.GetMessageList()) {
68
System.Console.WriteLine(string.Format("Best bid and ask at {0} are:", message.GetTimeISO()));
79
foreach (var element in message.GetElementList()) {

binding/go/CMakeLists.txt

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
set(NAME binding_${LANG})
2+
project(${NAME})
3+
set(SWIG_TARGET_NAME ccapi_${NAME})
4+
5+
# Find go cli
6+
find_program(GO_EXECUTABLE NAMES go REQUIRED)
7+
if(NOT GO_EXECUTABLE)
8+
message(FATAL_ERROR "Check for go Program: not found")
9+
else()
10+
message(STATUS "Found go Program: ${GO_EXECUTABLE}")
11+
endif()
12+
13+
execute_process(
14+
COMMAND ${GO_EXECUTABLE} version
15+
OUTPUT_VARIABLE GO_EXECUTABLE_VERSION
16+
OUTPUT_STRIP_TRAILING_WHITESPACE
17+
)
18+
message(STATUS "Go version: ${GO_EXECUTABLE_VERSION}")
19+
20+
set(GO_PACKAGE "ccapi")
21+
22+
# set_property(SOURCE ${SWIG_INTERFACE} PROPERTY CPLUSPLUS ON)
23+
# set_property(SOURCE ${SWIG_INTERFACE} PROPERTY COMPILE_OPTIONS "-package;${GO_PACKAGE};-use-shlib")
24+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_TARGET_NAME})
25+
# set(SWIG_TARGET_NAME ${SWIG_TARGET_NAME})
26+
add_custom_target(${SWIG_TARGET_NAME} ALL
27+
COMMAND ${SWIG_EXECUTABLE} -outcurrentdir -c++ -go -package ${GO_PACKAGE} -I${CCAPI_PROJECT_DIR}/include ${SWIG_INTERFACE}
28+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_TARGET_NAME}
29+
)
30+
add_dependencies(${SWIG_TARGET_NAME} boost rapidjson hffix)
31+
32+
33+
# swig_add_library(${SWIG_TARGET_NAME}
34+
# LANGUAGE ${LANG}
35+
# OUTPUT_DIR ${CMAKE_BINARY_DIR}/${LANG}/${SWIG_TARGET_NAME}
36+
# SOURCES ${SWIG_INTERFACE})
37+
38+
# if(NOT CCAPI_LEGACY_USE_WEBSOCKETPP)
39+
# add_dependencies(${SWIG_TARGET_NAME} boost rapidjson hffix)
40+
# endif()
41+
# set_property(TARGET ${SWIG_TARGET_NAME} PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON)
42+
43+
set(PACKAGING_DIR packaging)
44+
set(PACKAGING_DIR_FULL ${CMAKE_CURRENT_BINARY_DIR}/${PACKAGING_DIR}/${BUILD_VERSION})
45+
file(MAKE_DIRECTORY ${PACKAGING_DIR_FULL})
46+
set(GO_PACKAGING_TARGET_NAME ${LANG}_${PACKAGING_DIR})
47+
48+
set(COMPILER_OPTIONS_FILE_PATH ${PACKAGING_DIR_FULL}/compiler_options.txt)
49+
file(WRITE ${COMPILER_OPTIONS_FILE_PATH} "")
50+
set(CGO_CXXFLAGS_LIST "")
51+
list(APPEND CGO_CXXFLAGS_LIST -std=c++17 -fPIC -Wno-deprecated-declarations)
52+
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
53+
list(APPEND CGO_CXXFLAGS_LIST -g)
54+
else()
55+
list(APPEND CGO_CXXFLAGS_LIST -O3 -DNDEBUG)
56+
endif()
57+
list(APPEND CGO_CXXFLAGS_LIST -I${CCAPI_PROJECT_DIR}/include -I${BOOST_INCLUDE_DIR} -I${RAPIDJSON_INCLUDE_DIR} -I${HFFIX_INCLUDE_DIR} -I${OPENSSL_INCLUDE_DIR})
58+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_SERVICE_MARKET_DATA -DCCAPI_ENABLE_SERVICE_EXECUTION_MANAGEMENT -DCCAPI_ENABLE_SERVICE_FIX -DCCAPI_ENABLE_EXCHANGE_COINBASE -DCCAPI_ENABLE_EXCHANGE_GEMINI -DCCAPI_ENABLE_EXCHANGE_KRAKEN -DCCAPI_ENABLE_EXCHANGE_KRAKEN_FUTURES -DCCAPI_ENABLE_EXCHANGE_BITSTAMP -DCCAPI_ENABLE_EXCHANGE_BITFINEX -DCCAPI_ENABLE_EXCHANGE_BITMEX -DCCAPI_ENABLE_EXCHANGE_BINANCE_US -DCCAPI_ENABLE_EXCHANGE_BINANCE -DCCAPI_ENABLE_EXCHANGE_BINANCE_MARGIN -DCCAPI_ENABLE_EXCHANGE_BINANCE_USDS_FUTURES -DCCAPI_ENABLE_EXCHANGE_BINANCE_COIN_FUTURES -DCCAPI_ENABLE_EXCHANGE_HUOBI -DCCAPI_ENABLE_EXCHANGE_HUOBI_USDT_SWAP -DCCAPI_ENABLE_EXCHANGE_HUOBI_COIN_SWAP -DCCAPI_ENABLE_EXCHANGE_OKX -DCCAPI_ENABLE_EXCHANGE_ERISX -DCCAPI_ENABLE_EXCHANGE_KUCOIN -DCCAPI_ENABLE_EXCHANGE_KUCOIN_FUTURES -DCCAPI_ENABLE_EXCHANGE_DERIBIT -DCCAPI_ENABLE_EXCHANGE_GATEIO -DCCAPI_ENABLE_EXCHANGE_GATEIO_PERPETUAL_FUTURES -DCCAPI_ENABLE_EXCHANGE_CRYPTOCOM -DCCAPI_ENABLE_EXCHANGE_BYBIT -DCCAPI_ENABLE_EXCHANGE_BYBIT_DERIVATIVES -DCCAPI_ENABLE_EXCHANGE_ASCENDEX -DCCAPI_ENABLE_EXCHANGE_BITGET -DCCAPI_ENABLE_EXCHANGE_BITGET_FUTURES -DCCAPI_ENABLE_EXCHANGE_BITMART -DCCAPI_ENABLE_EXCHANGE_MEXC -DCCAPI_ENABLE_EXCHANGE_MEXC_FUTURES -DCCAPI_ENABLE_EXCHANGE_WHITEBIT)
59+
if(CCAPI_ENABLE_LOG_ERROR)
60+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_LOG_ERROR)
61+
endif()
62+
if(CCAPI_ENABLE_LOG_WARN)
63+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_LOG_WARN)
64+
endif()
65+
if(CCAPI_ENABLE_LOG_INFO)
66+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_LOG_INFO)
67+
endif()
68+
if(CCAPI_ENABLE_LOG_DEBUG)
69+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_LOG_DEBUG)
70+
endif()
71+
if(CCAPI_ENABLE_LOG_TRACE)
72+
list(APPEND CGO_CXXFLAGS_LIST -DCCAPI_ENABLE_LOG_TRACE)
73+
endif()
74+
list(JOIN CGO_CXXFLAGS_LIST " " CGO_CXXFLAGS)
75+
message(STATUS "CGO_CXXFLAGS: ${CGO_CXXFLAGS}")
76+
file(APPEND ${COMPILER_OPTIONS_FILE_PATH} "export CGO_CXXFLAGS='${CGO_CXXFLAGS}'\n\n")
77+
78+
set(CGO_LDFLAGS_LIST "")
79+
if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
80+
list(APPEND CGO_LDFLAGS_LIST -g)
81+
endif()
82+
list(APPEND CGO_LDFLAGS_LIST -L${OPENSSL_CRYPTO_LIBRARY_DIR} -L${OPENSSL_SSL_LIBRARY_DIR} -lcrypto -lssl)
83+
foreach(ZLIB_LIBRARY IN LISTS ZLIB_LIBRARIES)
84+
get_filename_component(ZLIB_LIBRARY_DIR ${ZLIB_LIBRARY} DIRECTORY)
85+
list(APPEND CGO_LDFLAGS_LIST -L${ZLIB_LIBRARY_DIR} -lz)
86+
endforeach()
87+
list(JOIN CGO_LDFLAGS_LIST " " CGO_LDFLAGS)
88+
message(STATUS "CGO_LDFLAGS: ${CGO_LDFLAGS}")
89+
file(APPEND ${COMPILER_OPTIONS_FILE_PATH} "export CGO_LDFLAGS='${CGO_LDFLAGS}'\n")
90+
91+
add_custom_target(${GO_PACKAGING_TARGET_NAME} ALL
92+
# COMMAND ${GO_EXECUTABLE} -o ${PACKAGING_DIR_FULL} ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_TARGET_NAME}/*.go
93+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_TARGET_NAME} ${PACKAGING_DIR_FULL}
94+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/go.mod ${PACKAGING_DIR_FULL}
95+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/ccapi_logger.cpp ${PACKAGING_DIR_FULL}
96+
WORKING_DIRECTORY ${PACKAGING_DIR_FULL}
97+
)
98+
add_dependencies(${GO_PACKAGING_TARGET_NAME} ${SWIG_TARGET_NAME})
99+
100+
# # Test
101+
# if(BUILD_TEST)
102+
# # message(STATUS "BUILD_TEST")
103+
# set(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/test)
104+
# file(COPY example DESTINATION ${TEST_DIR})
105+
# set(SUBDIRECTORY_LIST "enable_library_logging" "execution_management_simple_request" "execution_management_simple_subscription" "fix_simple" "handle_exception" "market_data_multiple_subscription" "market_data_simple_request" "market_data_simple_subscription")
106+
# foreach(SUBDIRECTORY IN LISTS SUBDIRECTORY_LIST)
107+
# # message(STATUS "SUBDIRECTORY=${SUBDIRECTORY}")
108+
# set(GO_TEST_TARGET_NAME go_test_${SUBDIRECTORY})
109+
# set(GO_TEST_BUILD_DIRECTORY ${TEST_DIR}/example/${SUBDIRECTORY}/build)
110+
# file(MAKE_DIRECTORY ${GO_TEST_BUILD_DIRECTORY})
111+
# add_custom_target(${GO_TEST_TARGET_NAME} ALL
112+
# COMMAND ${CMAKE_COMMAND} -E rm -rf *
113+
# COMMAND ${Go_GOC_EXECUTABLE} -cp ${PACKAGING_DIR_FULL}/ccapi-${BUILD_VERSION}.jar -d . ../Main.go
114+
# WORKING_DIRECTORY ${GO_TEST_BUILD_DIRECTORY}
115+
# )
116+
# add_dependencies(${GO_TEST_TARGET_NAME} ${GO_PACKAGING_TARGET_NAME})
117+
# endforeach()
118+
# file(COPY test DESTINATION ${TEST_DIR})
119+
# set(GO_TEST_TARGET_NAME go_test_test)
120+
# set(GO_TEST_BUILD_DIRECTORY ${TEST_DIR}/test/build)
121+
# file(MAKE_DIRECTORY ${GO_TEST_BUILD_DIRECTORY})
122+
# add_custom_target(${GO_TEST_TARGET_NAME} ALL
123+
# COMMAND ${CMAKE_COMMAND} -E rm -rf *
124+
# COMMAND ${Go_GOC_EXECUTABLE} -cp ${PACKAGING_DIR_FULL}/ccapi-${BUILD_VERSION}.jar -d . ../Main.go
125+
# WORKING_DIRECTORY ${GO_TEST_BUILD_DIRECTORY}
126+
# )
127+
# add_dependencies(${GO_TEST_TARGET_NAME} ${GO_PACKAGING_TARGET_NAME})
128+
# add_test(NAME go_test
129+
# COMMAND ${Go_GO_EXECUTABLE} -cp ".:${PACKAGING_DIR_FULL}" -Dgo.library.path=${PACKAGING_DIR_FULL} Main
130+
# WORKING_DIRECTORY ${GO_TEST_BUILD_DIRECTORY})
131+
# endif()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module main
2+
3+
require (
4+
cryptochassis.com/ccapi v1.0.0
5+
)
6+
7+
replace cryptochassis.com/ccapi => ../../../build/go/packaging/1.0.0
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// usage: when generating the binding code, do cmake -DCCAPI_ENABLE_LOG_TRACE=ON ..., see https://github.com/crypto-chassis/ccapi#non-c
2+
package main
3+
4+
import (
5+
"cryptochassis.com/ccapi"
6+
"fmt"
7+
"strings"
8+
"sync"
9+
"time"
10+
)
11+
12+
type MyLogger struct {
13+
ccapi.Logger
14+
m sync.Mutex
15+
}
16+
17+
func (ml *MyLogger) LogMessage(severity string, threadId string, timeISO string, fileName string, lineNumber string, message string) {
18+
ml.m.Lock()
19+
defer ml.m.Unlock()
20+
fmt.Printf("%s: [%s] {%s:%s} %s%s%s\n", threadId, timeISO, fileName, lineNumber, severity, strings.Repeat(" ", 8), message)
21+
}
22+
23+
func main() {
24+
ml := &MyLogger{}
25+
ml.Logger = ccapi.NewDirectorLogger(ml)
26+
defer func() {
27+
ccapi.DeleteDirectorLogger(ml.Logger)
28+
}()
29+
ccapi.SetLoggerLogger(ml)
30+
option := ccapi.NewSessionOptions()
31+
defer ccapi.DeleteSessionOptions(option)
32+
config := ccapi.NewSessionConfigs()
33+
defer ccapi.DeleteSessionConfigs(config)
34+
session := ccapi.NewSession(option, config)
35+
defer ccapi.DeleteSession(session)
36+
subscriptionList := ccapi.NewSubscriptionList()
37+
defer ccapi.DeleteSubscriptionList(subscriptionList)
38+
subscription := ccapi.NewSubscription("okx", "BTC-USDT", "MARKET_DEPTH")
39+
defer ccapi.DeleteSubscription(subscription)
40+
subscriptionList.Add(subscription)
41+
session.Subscribe(subscriptionList)
42+
time.Sleep(10 * time.Second)
43+
session.Stop()
44+
fmt.Println("Bye")
45+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module main
2+
3+
require (
4+
cryptochassis.com/ccapi v1.0.0
5+
)
6+
7+
replace cryptochassis.com/ccapi => ../../../build/go/packaging/1.0.0

0 commit comments

Comments
 (0)