test.rs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  1. // use exchanges::gate_swap_rest::GateSwapRest;
  2. // use std::collections::BTreeMap;
  3. // use tokio::io::{AsyncReadExt};
  4. // use exchanges::kucoin_swap_rest::KucoinSwapRest;
  5. // use exchanges::kucoin_swap_ws::{KucoinSwapSubscribeType, KucoinSwapWs, KucoinSwapWsType};
  6. // use exchanges::{proxy};
  7. // use exchanges::okx_swap_ws::{OkxSwapSubscribeType, OkxSwapWs, OkxSwapWsType};
  8. //
  9. // use std::io::{Read, Write};
  10. // use std::sync::Arc;
  11. // use std::sync::atomic::AtomicBool;
  12. // use tokio::sync::mpsc::channel;
  13. // use tokio::try_join;
  14. // use tracing::{trace};
  15. // use tracing::instrument::WithSubscriber;
  16. // use exchanges::binance_swap_rest::BinanceSwapRest;
  17. // use exchanges::binance_swap_ws::{BinanceSwapSubscribeType, BinanceSwapWs, BinanceSwapWsType};
  18. // use exchanges::okx_swap_rest::OkxSwapRest;
  19. //
  20. // #[tokio::test]
  21. // async fn test_import() {
  22. // global::log_utils::init_log_with_trace();
  23. //
  24. //
  25. // /*******走代理:根据环境变量配置来决定,如果配置了走代理,没有配置不走*******/
  26. // if proxy::ParsingDetail::http_enable_proxy() {
  27. // trace!("检测有代理配置,配置走代理");
  28. // }
  29. //
  30. //
  31. // //获取代理
  32. // // demo_get_http_proxy();
  33. //
  34. // //币安---深度socket-公共频道订阅
  35. // // demo_pub_ws_ba().await;
  36. // // 币安-rest-获取账户信息
  37. // // demo_rest_ba().await;
  38. // //本次更新成功
  39. //
  40. //
  41. // //gate-rest -账户信息
  42. // // demo_rest_gate().await;
  43. // //gate-ws-public-private频道
  44. // // demo_ws_gate().await;
  45. //
  46. //
  47. // //kucoin_rest -账户信息
  48. // // demo_rest_kucoin().await;
  49. // //Kucoin-ws--公共频道
  50. // // demo_ws_kucoin_pu().await;
  51. // //Kucoin-ws--私有频道
  52. // // demo_ws_kucoin_pr().await;
  53. //
  54. // //okx - Business 频道
  55. // // demo_ws_okx_bu().await;
  56. // //okx - public 频道
  57. // // demo_ws_okx_pu().await;
  58. // //okx - rest 频道
  59. // // demo_okx_rest().await;
  60. //
  61. // // demo_so();
  62. //
  63. //
  64. // // let mut ku_ws = KucoinSwapWs::new(false, btree_map.clone(),
  65. // // KucoinWsType::Private, tx).await;
  66. // // ku_ws.set_subscribe(vec![KucoinSubscribeType::PrContractMarketTradeOrdersSys]);
  67. // //
  68. // // let t1 = tokio::spawn(async move {
  69. // // ku_ws.custom_subscribe(vec!["ACHUSDTM".to_string(), "ROSEUSDTM".to_string()]).await;
  70. // // });
  71. // //
  72. // // let t2 = tokio::spawn(async move {
  73. // // let mut stdout = std::io::stdout();
  74. // // loop {
  75. // // if let Ok(received) = rx.try_recv() {
  76. // // writeln!(stdout, "age: {:?}", received).unwrap();
  77. // // }
  78. // // }
  79. // // let t01 = tokio::spawn(async move {
  80. // // loop {
  81. // // tokio::time::sleep(Duration::from_secs(2)).await;
  82. // // trace!( "发送-指令: ");
  83. // // }
  84. // // });
  85. // // let t02 = tokio::spawn(async move {
  86. // // loop {
  87. // // tokio::time::sleep(Duration::from_secs(3)).await;
  88. // // trace!( "接收 -指令: ");
  89. // // }
  90. // // });
  91. // // try_join!(t01,t02).unwrap();
  92. //
  93. //
  94. // // let (mut tx_end, mut rx_end) = channel::<String>(1024);
  95. // // let (mut tx_read, mut rx_read) = channel::<String>(1024);
  96. // // let mut stream = tokio::net::TcpStream::connect("127.0.0.1:8080").await.unwrap();
  97. // // stream.write_all( b"Hello, server!").await.unwrap();
  98. // // stream.flush().await.unwrap();
  99. // // let mutex_stream = Arc::new(Mutex::new(stream));
  100. // //
  101. // // //捕捉用户的主动发送的订阅指令
  102. // // let stream_clone = Arc::clone(&mutex_stream);
  103. // // let t_1 = tokio::spawn(async move {
  104. // // loop {
  105. // // tokio::time::sleep(Duration::from_secs(1)).await;
  106. // // if let Ok(received) = rx_end.try_recv() {
  107. // // trace!("动态订阅内容: {:?}", received);
  108. // // let mut stream_lock = stream_clone.lock().await;
  109. // // // stream_lock.write_all( b"1111!").await.unwrap();
  110. // // // stream_lock.flush().await.unwrap();
  111. // //
  112. // // // stream_lock.write_all(b"Hello, server!").await.unwrap();
  113. // // }
  114. // // }
  115. // // });
  116. // //
  117. // //
  118. // // //socket数据获取,装入回显通道
  119. // // let stream_clone = Arc::clone(&mutex_stream);
  120. // // let t_2 = tokio::spawn(async move {
  121. // // // 创建一个用于存储服务器响应的缓冲区
  122. // // let mut buffer = [0; 512];
  123. // // loop {
  124. // // let mut stream_lock = stream_clone.lock().await;
  125. // // tokio::time::sleep(Duration::from_secs(1)).await;
  126. // //
  127. // // let _ = match stream_lock.read(&mut buffer).await {
  128. // // Ok(n) => {
  129. // // tokio::time::sleep(Duration::from_secs(1)).await;
  130. // // if n == 0 {
  131. // // // 没有读取到数据
  132. // // trace!("没有数据,主动发送");
  133. // // } else {
  134. // // // 打印服务器的响应
  135. // // trace!("有数据: {}", String::from_utf8_lossy(&buffer[..n]));
  136. // // tx_read.send(format!("{}", String::from_utf8_lossy(&buffer[..n]))).await.unwrap()
  137. // // }
  138. // // }
  139. // // Err(ref e) if e.kind() == io::ErrorKind::WouldBlock => {
  140. // // // 如果读取操作会阻塞,则等待一会儿再试
  141. // // trace!("Would block, sleeping会阻碍睡眠??");
  142. // // tokio::time::sleep(Duration::from_secs(3)).await;
  143. // // continue;
  144. // // }
  145. // // Err(e) => {
  146. // // trace!("Err:{:?}",e);
  147. // // break;
  148. // // }
  149. // // };
  150. // // }
  151. // // });
  152. // //
  153. // //
  154. // // //socket 数据回显
  155. // // let t02 = tokio::spawn(async move {
  156. // // loop {
  157. // // tokio::time::sleep(Duration::from_secs(1)).await;
  158. // // // tx.send("hai!!!".to_string()).await.unwrap();
  159. // // if let Ok(received) = rx_read.try_recv() {
  160. // // trace!("拿到 socket 的数据: {:?}", received);
  161. // // }
  162. // // }
  163. // // });
  164. // //
  165. // // //模拟用户动态发送
  166. // // let t03 = tokio::spawn(async move {
  167. // // loop {
  168. // // tokio::time::sleep(Duration::from_secs(1)).await;
  169. // // tx_end.send("这里是 动态订阅".to_string()).await.unwrap();
  170. // // }
  171. // // });
  172. // //
  173. // // try_join!(t_1,t_2,t02,t03).unwrap();
  174. // }
  175. //
  176. //
  177. // async fn demo_okx_rest() {
  178. // // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  179. // // btree_map.insert("access_key".to_string(), "".to_string());
  180. // // btree_map.insert("secret_key".to_string(), "".to_string());
  181. // // btree_map.insert("pass_key".to_string(), "".to_string());
  182. // //
  183. // // let mut okx_rest = OkxSwapRest::new(false, btree_map);
  184. // // let res_data = okx_rest.get_account("BTC".to_string()).await;
  185. // // trace!("okx_rest-rest - get_account- {:?}", res_data);
  186. // }
  187. //
  188. // async fn demo_ws_gate() {}
  189. //
  190. //
  191. // fn demo_so() {
  192. // // 代理服务器地址和端口
  193. // // let proxy_address = "127.0.0.1:7890";
  194. // // // 目标服务器地址和端口
  195. // // let target_address = "wss://ws.okx.com:8443/ws/v5/public";
  196. // //
  197. // // // 建立与代理服务器的连接
  198. // // let mut proxy_stream = TcpStream::connect(proxy_address).expect("Failed to connect to proxy");
  199. // //
  200. // // // 发送代理请求
  201. // // let request = format!("CONNECT {}\r\n\r\n", target_address);
  202. // // proxy_stream.write_all(request.as_bytes()).expect("Failed to send proxy request");
  203. // //
  204. // // // 读取代理响应
  205. // // let mut response = String::new();
  206. // // proxy_stream.read_to_string(&mut response).expect("Failed to read proxy response");
  207. // //
  208. // // // 检查代理响应是否成功
  209. // // if !response.contains("200 Connection established") {
  210. // // trace!("Proxy connection failed: {}", response);
  211. // // }
  212. // //
  213. // // // 从代理连接中获取原始 TCP 流
  214. // // let mut tcp_stream = std::mem::ManuallyDrop::new(proxy_stream);
  215. // //
  216. // // // 现在你可以使用 `tcp_stream` 来进行与目标服务器的通信
  217. // // // 例如,发送和接收数据
  218. // // // tcp_stream.write_all(b"Hello, server!").expect("Failed to send data");
  219. // //
  220. // // thread::spawn(move || {
  221. // // loop {
  222. // // let mut buffer = [0u8; 1024]; // 用于存储读取的数据的缓冲区
  223. // // let bytes_read = tcp_stream.read(&mut buffer).expect("Failed to read data");
  224. // //
  225. // // // 将读取的数据转换为字符串并打印
  226. // // if let Ok(data) = std::str::from_utf8(&buffer[..bytes_read]) {
  227. // // trace!("Received data: {}", data);
  228. // // } else {
  229. // // trace!("Received data contains non-UTF8 characters");
  230. // // }
  231. // // }
  232. // //
  233. // // });
  234. // //
  235. // // // 最后记得手动释放套接字
  236. // // // 注意:不要调用 `drop(tcp_stream)`,因为我们使用了 `ManuallyDrop` 来避免自动释放
  237. // // unsafe {
  238. // // std::mem::ManuallyDrop::drop(&mut tcp_stream);
  239. // // }
  240. // }
  241. //
  242. //
  243. // async fn demo_ws_okx_pu() {
  244. //
  245. // // let btree_map: BTreeMap<String, String> = BTreeMap::new();
  246. // // let (tx, mut rx) = channel(1024);
  247. // // let mut ku_ws = OkxSwapWs::new(false, btree_map, OkxWsType::Public, tx);
  248. // // ku_ws.set_subscribe(vec![OkxSubscribeType::PuIndexTickers]);
  249. // // let t1 = tokio::spawn(async move {
  250. // // ku_ws.custom_subscribe(vec!["BTC-USD".to_string()]).await;
  251. // // });
  252. // // let t2 = tokio::spawn(async move {
  253. // // let mut stdout = std::io::stdout();
  254. // // loop {
  255. // // if let Ok(received) = rx.try_recv() {
  256. // // writeln!(stdout, "age: {:?}", received).unwrap();
  257. // // }
  258. // // }
  259. // // });
  260. // // try_join!(t1,t2).unwrap();
  261. // }
  262. //
  263. // async fn demo_ws_okx_bu() {
  264. // // let btree_map: BTreeMap<String, String> = BTreeMap::new();
  265. // // let (tx, mut rx) = channel(1024);
  266. // // let mut ku_ws = OkxSwapWs::new(false, btree_map, OkxWsType::Business, tx);
  267. // // ku_ws.set_subscribe(vec![OkxSubscribeType::BuIndexCandle30m]);
  268. // // let t1 = tokio::spawn(async move {
  269. // // ku_ws.custom_subscribe(vec!["BTC-USD".to_string()]).await;
  270. // // });
  271. // // let t2 = tokio::spawn(async move {
  272. // // let mut stdout = std::io::stdout();
  273. // // loop {
  274. // // if let Ok(received) = rx.try_recv() {
  275. // // writeln!(stdout, "age: {:?}", received).unwrap();
  276. // // }
  277. // // }
  278. // // });
  279. // // try_join!(t1,t2).unwrap();
  280. // }
  281. //
  282. // async fn demo_ws_kucoin_pr() {
  283. // // let mut is_shutdown_arc = Arc::new(AtomicBool::new(true));
  284. // // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  285. // // btree_map.insert("access_key".to_string(), "".to_string());
  286. // // btree_map.insert("secret_key".to_string(), "".to_string());
  287. // // btree_map.insert("pass_key".to_string(), "".to_string());
  288. // // trace!("----------------------btree_map{:?}", btree_map.clone());
  289. // // let (tx, mut rx) = channel(1024);
  290. // // let mut ku_ws = KucoinSwapWs::new(false, btree_map.clone(),
  291. // // KucoinWsType::Private, tx).await;
  292. // // ku_ws.set_subscribe(vec![KucoinSubscribeType::PrContractMarketTradeOrdersSys]);
  293. // //
  294. // // let t1 = tokio::spawn(async move {
  295. // // ku_ws.custom_subscribe(is_shutdown_arc, vec!["ACHUSDTM".to_string(), "ROSEUSDTM".to_string()]).await;
  296. // // });
  297. // //
  298. // // let t2 = tokio::spawn(async move {
  299. // // loop {
  300. // // if let Ok(received) = rx.try_recv() {
  301. // // trace!( "age: {:?}", received);
  302. // // }
  303. // // }
  304. // // });
  305. // //
  306. // // try_join!(t1,t2).unwrap();
  307. // }
  308. //
  309. // async fn demo_ws_kucoin_pu() {
  310. // // let mut is_shutdown_arc = Arc::new(AtomicBool::new(true));
  311. // // let btree_map: BTreeMap<String, String> = BTreeMap::new();
  312. // // let (tx, mut rx) = channel(1024);
  313. // // let mut ku_ws = KucoinSwapWs::new(false, btree_map, KucoinWsType::Public, tx).await;
  314. // // ku_ws.set_subscribe(vec![
  315. // // KucoinSubscribeType::PuContractMarketLevel2Depth50,
  316. // // KucoinSubscribeType::PuContractMarkettickerV2,
  317. // // ]);
  318. // //
  319. // // let t1 = tokio::spawn(async move {
  320. // // ku_ws.custom_subscribe(is_shutdown_arc, vec!["ACHUSDTM".to_string(), "ROSEUSDTM".to_string()]).await;
  321. // // });
  322. // // let t2 = tokio::spawn(async move {
  323. // // loop {
  324. // // if let Ok(received) = rx.try_recv() {
  325. // // trace!("age: {:?}", received);
  326. // // }
  327. // // }
  328. // // });
  329. // //
  330. // // try_join!(t1,t2).unwrap();
  331. // }
  332. //
  333. // async fn demo_rest_kucoin() {
  334. // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  335. // btree_map.insert("access_key".to_string(), "".to_string());
  336. // btree_map.insert("secret_key".to_string(), "".to_string());
  337. // btree_map.insert("pass_key".to_string(), "".to_string());
  338. //
  339. // let mut kucoin_exc = KucoinSwapRest::new(false, btree_map);
  340. // // let res_data = kucoin_exc.get_server_time().await;
  341. // // trace!("kucoin_exc-rest - get_server_time- {:?}", res_data);
  342. // // trace!("kucoin_exc-rest-get_delays{:?}", kucoin_exc.get_delays() );
  343. // // trace!("kucoin_exc-rest -get_avg_delay{:?}", kucoin_exc.get_avg_delay());
  344. // // let res_data = kucoin_exc.get_account("USDT".to_string()).await;
  345. // // trace!("kucoin_exc-rest - get_account- {:?}", res_data);
  346. // // let res_data = kucoin_exc.get_position("XBT1USDM".to_string()).await;
  347. // // trace!("kucoin_exc-rest - get_position- {:?}", res_data);
  348. // // let res_data = kucoin_exc.get_market_details().await;
  349. // // trace!("kucoin_exc-rest - get_market_details- {:?}", res_data);
  350. // // let res_data = kucoin_exc.get_ticker("ROSEUSDTM".to_string()).await;
  351. // // trace!("kucoin_exc-rest - get_ticker- {:?}", res_data);
  352. // let res_data = kucoin_exc.get_orders("".to_string(),
  353. // "".to_string()).await;
  354. // trace!("kucoin_exc-rest - get_orders- {:?}", res_data);
  355. // // let res_data = kucoin_exc.get_positions("USDT".to_string()).await;
  356. // // trace!("kucoin_exc-rest - get_positions- {:?}", res_data);
  357. // // let res_data = kucoin_exc.get_orders_details("111".to_string(), "".to_string()).await;
  358. // // trace!("kucoin_exc-rest - get_orders_details- {:?}", res_data);
  359. // // let res_data = kucoin_exc.swap_bazaar_order(
  360. // // "cs_202309111808".to_string(),
  361. // // "ROSEUSDTM".to_string(),
  362. // // "pd".to_string(),
  363. // // 1,
  364. // // "10".to_string(),
  365. // // "0.03856".to_string(),
  366. // // "limit".to_string(),
  367. // // ).await;
  368. // // trace!("kucoin_exc-rest - swap_bazaar_order- {:?}
  369. // // let res_data = kucoin_exc.cancel_order("".to_string(), "999999".to_string()).await;
  370. // // trace!("kucoin_exc-rest - cancel_order- {:?}", res_data);
  371. // // let res_data = kucoin_exc.get_public_token().await;
  372. // // trace!("kucoin_exc-rest - get_public_token- {:?}", res_data);
  373. // }
  374. //
  375. // async fn demo_rest_gate() {
  376. // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  377. // btree_map.insert("access_key".to_string(), "".to_string());
  378. // btree_map.insert("secret_key".to_string(), "".to_string());
  379. //
  380. // let mut gate_exc = GateSwapRest::new(false, btree_map);
  381. // let res_data = gate_exc.get_account("usdt".to_string()).await;
  382. // trace!("gate-rest -账户信息{:?}", res_data);
  383. // trace!("gate-rest -get_delays{:?}", gate_exc.get_delays() );
  384. // trace!("gate-rest -get_avg_delay{:?}", gate_exc.get_avg_delay());
  385. // // let res_data = gate_exc.get_position("usdt".to_string(), "CYBER_USDT".to_string()).await;
  386. // // trace!("gate-rest -持仓信息{:?}", res_data);
  387. // // let res_data = gate_exc.get_ticker("usdt".to_string()).await;
  388. // // trace!("gate-rest -ticker{:?}", res_data);
  389. // // let res_data = gate_exc.get_server_time().await;
  390. // // trace!("gate-rest -get_server_time{:?}", res_data);
  391. // // let res_data = gate_exc.get_user_position("usdt".to_string()).await;
  392. // // trace!("gate-rest -get_server_time{:?}", res_data);
  393. // // let res_data = gate_exc.get_order_details("usdt".to_string(), "11335522".to_string()).await;
  394. // // trace!("gate-rest -get_order_details{:?}", res_data);
  395. // // let res_data = gate_exc.get_orders("usd1t".to_string(), "open".to_string()).await;
  396. // // trace!("gate-rest -get_orders{:?}", res_data);
  397. // // let params = serde_json::json!({
  398. // // "contract":"CYBER_USDT",
  399. // // "size":-1,
  400. // // "price":"0",
  401. // // "tif":"ioc",
  402. // // });
  403. // // let res_data = gate_exc.take_order("usdt".to_string(), params).await;
  404. // // trace!("gate-rest -get_orders{:?}", res_data);
  405. // // let res_data = gate_exc.setting_dual_mode("usdt".to_string(), true).await;
  406. // // trace!("gate-rest -setting_dual_mode{:?}", res_data);
  407. // // let res_data = gate_exc.setting_dual_leverage("usdt".to_string(),
  408. // // "CYBER_USDT".to_string(),
  409. // // "20".to_string(),
  410. // // ).await;
  411. // // trace!("gate-rest -setting_dual_mode{:?}", res_data);
  412. // // let res_data = gate_exc.wallet_transfers("usdt".to_string(),
  413. // // "CYBER_USDT".to_string(),
  414. // // "20".to_string(),
  415. // // ).await;
  416. // // trace!("gate-rest -setting_dual_mode{:?}", res_data);
  417. // // let res_data = gate_exc.cancel_order("usdt".to_string(),
  418. // // "12345".to_string(),
  419. // // ).await;
  420. // // trace!("gate-rest -setting_dual_mode{:?}", res_data);
  421. // // let res_data = gate_exc.cancel_orders("usdt".to_string(),
  422. // // "CYBER_USDT".to_string(),
  423. // // ).await;
  424. // // trace!("gate-rest -cancel_orders{:?}", res_data);
  425. // // let res_data = gate_exc.order(
  426. // // "usdt".to_string(),
  427. // // "long".to_string(),
  428. // // "buy".to_string(),
  429. // // "ROSE_USDT".to_string(),
  430. // // 1,
  431. // // "0.03888".to_string(),
  432. // // "t-my-custom-id-001".to_string(),
  433. // // ).await;
  434. // // trace!("gate-rest -order{:?}", res_data);
  435. //
  436. //
  437. // // let res_data = gate_exc.my_trades("usdt".to_string()).await;
  438. // // trace!("gate-rest -my_trades{:?}", res_data);
  439. // let res_data = gate_exc.account_book("usdt".to_string()).await;
  440. // trace!("gate-rest -account_book{:?}", res_data);
  441. // }
  442. //
  443. // async fn demo_rest_ba() {
  444. // let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  445. // btree_map.insert("access_key".to_string(), "".to_string());
  446. // btree_map.insert("secret_key".to_string(), "".to_string());
  447. //
  448. // // let ba_exc = BinanceUsdtSwapRest::new(false, btree_map);
  449. // // let res_data = ba_exc.get_account().await;
  450. // let mut ba_exc = BinanceSwapRest::new(false, btree_map);
  451. // // let res_data = ba_exc.get_server_time().await;
  452. // // trace!("币安-rest - get_server_time{:?}", res_data);
  453. // // let res_data = ba_exc.get_exchange_info().await;
  454. // // trace!("币安-restget_ get_exchange_info{:?}", res_data);
  455. //
  456. //
  457. // let res_data = ba_exc.get_account().await;
  458. // trace!("币安-rest-获取账户信息{:?}", res_data);
  459. // // trace!("币安-rest- -get_delays{:?}", ba_exc.get_delays() );
  460. // // trace!("币安-rest--get_avg_delay{:?}", ba_exc.get_avg_delay());
  461. //
  462. // // let res_data = ba_exc.get_order("BTCUSDT".to_string(), 131, "".to_string()).await;
  463. // // trace!("币安-rest--get_order{:?}", res_data);
  464. // // let res_data = ba_exc.get_open_orders("BTCUSDT".to_string()).await;
  465. // // trace!("币安-rest--get_open_orders{:?}", res_data);
  466. // // let timestamp_start = chrono::Utc::now().timestamp_millis() - 60 * 100 * 1000;
  467. // // let timestamp_end = chrono::Utc::now().timestamp_millis() + 60 * 100 * 1000;
  468. // // let res_data = ba_exc.get_all_orders("BTCUSDT".to_string(), 1000, timestamp_start, timestamp_end).await;
  469. // // trace!("币安-rest--get_all_orders{:?}", res_data);
  470. // // let res_data = ba_exc.get_book_ticker("BTCUSDT".to_string()).await;
  471. // // trace!("币安-rest--get_book_ticker{:?}", res_data);
  472. // // let res_data = ba_exc.get_position_risk("BTCUS1DT".to_string()).await;
  473. // // trace!("币安-rest--get_position_risk{:?}", res_data);
  474. // // let res_data = ba_exc.change_pos_side(true).await;
  475. // // trace!("币安-rest--change_pos_side{:?}", res_data);
  476. // // let res_data = ba_exc.cancel_order("BTCUSDT".to_string(), 3312331, "".to_string()).await;
  477. // // trace!("币安-rest--cancel_order{:?}", res_data);
  478. // }
  479. //
  480. // async fn demo_pub_ws_ba() {
  481. // // let mut is_shutdown_arc = Arc::new(AtomicBool::new(true));
  482. // // let btree_map: BTreeMap<String, String> = BTreeMap::new();
  483. // // let (tx, mut rx) = channel(1024);
  484. // // let mut binance_ws = BinanceSwapWs::new(false, btree_map, BinanceWsType::PublicAndPrivate, tx);
  485. // // binance_ws.set_subscribe(vec![
  486. // // BinanceSubscribeType::PuAggTrade,
  487. // // BinanceSubscribeType::PuDepth20levels100ms,
  488. // // BinanceSubscribeType::PuBookTicker,
  489. // // ]);
  490. // // let t1 = tokio::spawn(async move {
  491. // // binance_ws.custom_subscribe(is_shutdown_arc,vec!["BTCUSDT".to_string()]).await;
  492. // // });
  493. // // let t2 = tokio::spawn(async move {
  494. // // loop {
  495. // // if let Ok(received) = rx.try_recv() {
  496. // // trace!( "age: {:?}", received);
  497. // // }
  498. // // }
  499. // // });
  500. // // try_join!(t1,t2).unwrap();
  501. // }
  502. //
  503. // fn demo_get_http_proxy() {
  504. // //代理地址
  505. // let parsing_detail = proxy::ParsingDetail::parsing_environment_variables();
  506. // trace!("----代理信息:{:?}", parsing_detail);
  507. // }
  508. //
  509. //
  510. // // /*********************web服务*/
  511. // // fn demo_http() {
  512. // // let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
  513. // // for stream in listener.incoming() {
  514. // // let stream = stream.unwrap();
  515. // //
  516. // // handle_connection(TcpStream::try_from(stream).unwrap());
  517. // // }
  518. // // }
  519. // //
  520. // //
  521. // // fn handle_connection(mut stream: TcpStream) {
  522. // // let buf_reader = BufReader::new(&mut stream);
  523. // // let http_request: Vec<_> = buf_reader
  524. // // .lines()
  525. // // .map(|result| result.unwrap())
  526. // // .take_while(|line| !line.is_empty())
  527. // // .collect();
  528. // // trace!("Request: {:#?}", http_request);
  529. // // trace!("Request2: {:#?}", http_request[0]);
  530. // // trace!("Request3: {:#?}", http_request[1]);
  531. // //
  532. // // let (status_line, filename) = if http_request[0] == "GET / HTTP/1.1" {
  533. // // ("HTTP/1.1 200 OK", "hello.html")
  534. // // } else {
  535. // // ("HTTP/1.1 404 NOT FOUND", "404.html")
  536. // // };
  537. // //
  538. // // let status_line = "HTTP/1.1 200 OK";
  539. // // let contents = fs::read_to_string("src/404.html").unwrap();
  540. // // let length = contents.len();
  541. // //
  542. // // let response =
  543. // // format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
  544. // // // let response = "HTTP/1.1 200 OK\r\n\r\nccccc";
  545. // //
  546. // // stream.write_all(response.as_bytes()).unwrap();
  547. // // }