test.rs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. use std::{fs, thread};
  2. use exchanges::gate_swap_rest::GateSwapRest;
  3. use std::collections::BTreeMap;
  4. use std::io::{BufRead, BufReader, Write};
  5. use std::net::{TcpListener, TcpStream};
  6. use std::sync::{mpsc};
  7. use exchanges::binance_usdt_swap_rest::BinanceUsdtSwapRest;
  8. use exchanges::kucoin_swap_rest::KucoinSwapRest;
  9. use exchanges::kuconin_swap_ws::{KuconinSubscribeType, KuconinSwapWs, KuconinWsType};
  10. use exchanges::{proxy};
  11. use exchanges::binance_usdt_swap_ws::BinanceUsdtSwapWs;
  12. use exchanges::okx_swap_ws::{OkxSubscribeType, OkxSwapWs, OkxWsType};
  13. #[tokio::test]
  14. async fn test_import() {
  15. /*******走代理:根据环境变量配置来决定,如果配置了走代理,没有配置不走*******/
  16. if proxy::ParsingDetail::http_enable_proxy() {
  17. println!("检测有代理配置,配置走代理")
  18. }
  19. //获取代理
  20. // demo_get_http_proxy();
  21. //币安---深度socket-公共频道订阅
  22. // demo_pub_ws_ba();
  23. // 币安-rest-获取账户信息
  24. // demo_rest_ba().await;
  25. //gate-rest -账户信息
  26. // demo_rest_gate().await;
  27. //kucoin_rest -账户信息
  28. // demo_rest_kucoin().await;
  29. //Kuconin-ws--公共频道
  30. // demo_ws_kucoin_pu().await;
  31. //Kuconin-ws--私有频道
  32. demo_ws_kucoin_pr().await;
  33. //okx - Business 频道
  34. // demo_ws_okx_bu().await;
  35. //okx - public 频道
  36. // demo_ws_okx_pu().await;
  37. }
  38. async fn demo_ws_okx_pu() {
  39. let btree_map: BTreeMap<String, String> = BTreeMap::new();
  40. let (tx, rx) = mpsc::channel();
  41. let mut ku_ws = OkxSwapWs::new(false, btree_map, OkxWsType::Public, tx).await;
  42. ku_ws.set_subscribe(vec![OkxSubscribeType::PuIndexTickers]);
  43. thread::spawn(move || {
  44. ku_ws.custom_subscribe(vec!["BTC-USD".to_string()]);
  45. });
  46. let mut stdout = std::io::stdout();
  47. loop {
  48. if let Ok(received) = rx.try_recv() {
  49. writeln!(stdout, "age: {:?}", received).unwrap();
  50. }
  51. }
  52. }
  53. async fn demo_ws_okx_bu() {
  54. let btree_map: BTreeMap<String, String> = BTreeMap::new();
  55. let (tx, rx) = mpsc::channel();
  56. let mut ku_ws = OkxSwapWs::new(false, btree_map, OkxWsType::Business, tx).await;
  57. ku_ws.set_subscribe(vec![OkxSubscribeType::BuIndexCandle30m]);
  58. thread::spawn(move || {
  59. ku_ws.custom_subscribe(vec!["BTC-USD".to_string()]);
  60. });
  61. let mut stdout = std::io::stdout();
  62. loop {
  63. if let Ok(received) = rx.try_recv() {
  64. writeln!(stdout, "age: {:?}", received).unwrap();
  65. }
  66. }
  67. }
  68. async fn demo_ws_kucoin_pr() {
  69. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  70. btree_map.insert("access_key".to_string(), "6393f3565f0d4500011f846b".to_string());
  71. btree_map.insert("secret_key".to_string(), "9c0df8b7-daaa-493e-a53a-82703067f7dd".to_string());
  72. btree_map.insert("pass_key".to_string(), "b87d055f".to_string());
  73. println!("----------------------btree_map{:?}", btree_map.clone());
  74. let (tx, rx) = mpsc::channel();
  75. let mut ku_ws = KuconinSwapWs::new(false, btree_map.clone(),
  76. KuconinWsType::Private, tx).await;
  77. ku_ws.set_subscribe(vec![KuconinSubscribeType::PrContractMarketTradeOrdersSys]);
  78. thread::spawn(move || {
  79. ku_ws.custom_subscribe(vec!["ACHUSDTM".to_string(), "ROSEUSDTM".to_string()]);
  80. });
  81. let mut stdout = std::io::stdout();
  82. loop {
  83. if let Ok(received) = rx.try_recv() {
  84. writeln!(stdout, "age: {:?}", received).unwrap();
  85. }
  86. }
  87. }
  88. async fn demo_ws_kucoin_pu() {
  89. let btree_map: BTreeMap<String, String> = BTreeMap::new();
  90. let (tx, rx) = mpsc::channel();
  91. let mut ku_ws = KuconinSwapWs::new(false, btree_map, KuconinWsType::Public, tx).await;
  92. ku_ws.set_subscribe(vec![KuconinSubscribeType::PuContractMarketLevel2Depth50]);
  93. thread::spawn(move || {
  94. ku_ws.custom_subscribe(vec!["ACHUSDTM".to_string(), "ROSEUSDTM".to_string()]);
  95. });
  96. let mut stdout = std::io::stdout();
  97. loop {
  98. if let Ok(received) = rx.try_recv() {
  99. writeln!(stdout, "age: {:?}", received).unwrap();
  100. }
  101. }
  102. }
  103. async fn demo_rest_kucoin() {
  104. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  105. btree_map.insert("access_key".to_string(), "".to_string());
  106. btree_map.insert("secret_key".to_string(), "".to_string());
  107. btree_map.insert("pass_key".to_string(), "".to_string());
  108. let kucoin_exc = KucoinSwapRest::new(false, btree_map);
  109. let res_data = kucoin_exc.get_server_time().await;
  110. println!("kucoin_exc-rest - get_server_time- {:?}", res_data);
  111. // let res_data = kucoin_exc.get_account("USDT".to_string()).await;
  112. // println!("kucoin_exc-rest - get_account- {:?}", res_data);
  113. // let res_data = kucoin_exc.get_position("XBTUSDM".to_string()).await;
  114. // println!("kucoin_exc-rest - get_position- {:?}", res_data);
  115. // let res_data = kucoin_exc.get_market_details().await;
  116. // println!("kucoin_exc-rest - get_market_details- {:?}", res_data);
  117. // let res_data = kucoin_exc.get_ticker("ROSEUSDTM".to_string()).await;
  118. // println!("kucoin_exc-rest - get_ticker- {:?}", res_data);
  119. // let res_data = kucoin_exc.get_orders("active".to_string(), "ROSEUSDTM".to_string()).await;
  120. // println!("kucoin_exc-rest - get_orders- {:?}", res_data);
  121. // let res_data = kucoin_exc.get_positions("USDT".to_string()).await;
  122. // println!("kucoin_exc-rest - get_positions- {:?}", res_data);
  123. // let res_data = kucoin_exc.get_orders_details("111".to_string(), "".to_string()).await;
  124. // println!("kucoin_exc-rest - get_orders_details- {:?}", res_data);
  125. // let res_data = kucoin_exc.swap_bazaar_order(
  126. // "cs_202309111808".to_string(),
  127. // "ROSEUSDTM".to_string(),
  128. // "pd".to_string(),
  129. // 1,
  130. // "10".to_string(),
  131. // "0.03856".to_string(),
  132. // "limit".to_string(),
  133. // ).await;
  134. // println!("kucoin_exc-rest - swap_bazaar_order- {:?}
  135. // let res_data = kucoin_exc.cancel_order("12312".to_string(), "".to_string()).await;
  136. // println!("kucoin_exc-rest - cancel_order- {:?}", res_data);
  137. // let res_data = kucoin_exc.get_public_token().await;
  138. // println!("kucoin_exc-rest - get_public_token- {:?}", res_data);
  139. }
  140. async fn demo_rest_gate() {
  141. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  142. btree_map.insert("access_key".to_string(), "".to_string());
  143. btree_map.insert("secret_key".to_string(), "".to_string());
  144. let gate_exc = GateSwapRest::new(false, btree_map);
  145. let res_data = gate_exc.get_account("usdt".to_string()).await;
  146. println!("gate-rest -账户信息{:?}", res_data);
  147. // let res_data = gate_exc.get_position("usdt".to_string(), "CYBER_USDT".to_string()).await;
  148. // println!("gate-rest -持仓信息{:?}", res_data);
  149. // let res_data = gate_exc.get_ticker("usdt".to_string()).await;
  150. // println!("gate-rest -ticker{:?}", res_data);
  151. // let res_data = gate_exc.get_server_time().await;
  152. // println!("gate-rest -get_server_time{:?}", res_data);
  153. // let res_data = gate_exc.get_user_position("usdt".to_string()).await;
  154. // println!("gate-rest -get_server_time{:?}", res_data);
  155. // let res_data = gate_exc.get_order_details("usdt".to_string(), "11335522".to_string()).await;
  156. // println!("gate-rest -get_order_details{:?}", res_data);
  157. // let res_data = gate_exc.get_orders("usdt".to_string(), "open".to_string()).await;
  158. // println!("gate-rest -get_orders{:?}", res_data);
  159. // let params = serde_json::json!({
  160. // "contract":"CYBER_USDT",
  161. // "size":-1,
  162. // "price":"0",
  163. // "tif":"ioc",
  164. // });
  165. // let res_data = gate_exc.take_order("usdt".to_string(), params).await;
  166. // println!("gate-rest -get_orders{:?}", res_data);
  167. // let res_data = gate_exc.setting_dual_mode("usdt".to_string(), true).await;
  168. // println!("gate-rest -setting_dual_mode{:?}", res_data);
  169. // let res_data = gate_exc.setting_dual_leverage("usdt".to_string(),
  170. // "CYBER_USDT".to_string(),
  171. // "20".to_string(),
  172. // ).await;
  173. // println!("gate-rest -setting_dual_mode{:?}", res_data);
  174. // let res_data = gate_exc.wallet_transfers("usdt".to_string(),
  175. // "CYBER_USDT".to_string(),
  176. // "20".to_string(),
  177. // ).await;
  178. // println!("gate-rest -setting_dual_mode{:?}", res_data);
  179. // let res_data = gate_exc.cancel_order("usdt".to_string(),
  180. // "12345".to_string(),
  181. // ).await;
  182. // println!("gate-rest -setting_dual_mode{:?}", res_data);
  183. // let res_data = gate_exc.cancel_orders("usdt".to_string(),
  184. // "CYBER_USDT".to_string(),
  185. // ).await;
  186. // println!("gate-rest -cancel_orders{:?}", res_data);
  187. // let res_data = gate_exc.order(
  188. // "usdt".to_string(),
  189. // "long".to_string(),
  190. // "buy".to_string(),
  191. // "ROSE_USDT".to_string(),
  192. // 1,
  193. // "0.03888".to_string(),
  194. // "t-my-custom-id-001".to_string(),
  195. // ).await;
  196. // println!("gate-rest -order{:?}", res_data);
  197. }
  198. async fn demo_rest_ba() {
  199. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  200. btree_map.insert("access_key".to_string(), "".to_string());
  201. btree_map.insert("secret_key".to_string(), "".to_string());
  202. let ba_exc = BinanceUsdtSwapRest::new(false, btree_map);
  203. let res_data = ba_exc.get_account().await;
  204. println!("币安-rest-获取账户信息{:?}", res_data);
  205. }
  206. fn demo_pub_ws_ba() {
  207. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  208. btree_map.insert("lable".parse().unwrap(), "binance".parse().unwrap());//交易行名称
  209. let (tx, rx) = mpsc::channel();
  210. thread::spawn(move || {
  211. let ba_exc = BinanceUsdtSwapWs::new(false, btree_map, tx);
  212. ba_exc.custom_subscribe(vec![&"BTCUSDT", "ROSEUSDT"], 1, 0);
  213. });
  214. let mut stdout = std::io::stdout();
  215. loop {
  216. if let Ok(received) = rx.try_recv() {
  217. writeln!(stdout, "age: {:?}", received).unwrap();
  218. }
  219. }
  220. }
  221. fn demo_get_http_proxy() {
  222. //代理地址
  223. let parsing_detail = proxy::ParsingDetail::parsing_environment_variables();
  224. println!("----代理信息:{:?}", parsing_detail);
  225. }
  226. /*********************web服务*/
  227. fn demo_http() {
  228. let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
  229. for stream in listener.incoming() {
  230. let stream = stream.unwrap();
  231. handle_connection(stream);
  232. }
  233. }
  234. fn handle_connection(mut stream: TcpStream) {
  235. let buf_reader = BufReader::new(&mut stream);
  236. let http_request: Vec<_> = buf_reader
  237. .lines()
  238. .map(|result| result.unwrap())
  239. .take_while(|line| !line.is_empty())
  240. .collect();
  241. println!("Request: {:#?}", http_request);
  242. println!("Request2: {:#?}", http_request[0]);
  243. println!("Request3: {:#?}", http_request[1]);
  244. let (status_line, filename) = if http_request[0] == "GET / HTTP/1.1" {
  245. ("HTTP/1.1 200 OK", "hello.html")
  246. } else {
  247. ("HTTP/1.1 404 NOT FOUND", "404.html")
  248. };
  249. let status_line = "HTTP/1.1 200 OK";
  250. let contents = fs::read_to_string("src/404.html").unwrap();
  251. let length = contents.len();
  252. let response =
  253. format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
  254. // let response = "HTTP/1.1 200 OK\r\n\r\nccccc";
  255. stream.write_all(response.as_bytes()).unwrap();
  256. }