woo_swap_test.rs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. use std::collections::BTreeMap;
  2. use std::sync::Arc;
  3. use std::sync::atomic::AtomicBool;
  4. use serde_json::json;
  5. use tokio::sync::Mutex;
  6. use tracing::trace;
  7. use exchanges::response_base::ResponseData;
  8. use exchanges::woo_swap_rest::WooSwapRest;
  9. use exchanges::woo_swap_ws::{WooSwapLogin, WooSwapSubscribeType, WooSwapWs, WooSwapWsType};
  10. const APPLICATION_ID: &str = "4bd2d1a1-c033-43a1-b977-1aefa754e715";
  11. const ACCESS_KEY: &str = "";
  12. const SECRET_KEY: &str = "";
  13. const PASS_KEY: &str = "";
  14. #[tokio::test(flavor = "multi_thread", worker_threads = 2)]
  15. async fn ws_custom_subscribe() {
  16. global::log_utils::init_log_with_trace();
  17. let (write_tx, write_rx) = futures_channel::mpsc::unbounded();
  18. let (_, mut read_rx) = futures_channel::mpsc::unbounded::<ResponseData>();
  19. // let (write_tx, write_rx) = tokio::sync::broadcast::channel::<Message>(10);
  20. // let (read_tx, mut read_rx) = tokio::sync::broadcast::channel::<ResponseData>(10);
  21. let write_tx_am = Arc::new(Mutex::new(write_tx));
  22. let is_shutdown_arc = Arc::new(AtomicBool::new(true));
  23. //读取
  24. let _is_shutdown_arc_clone = Arc::clone(&is_shutdown_arc);
  25. let _tr = tokio::spawn(async move {
  26. trace!("线程-数据读取-开启");
  27. loop {
  28. // 从通道中接收并丢弃所有的消息,直到通道为空
  29. while let Ok(Some(_)) = read_rx.try_next() {
  30. // 从通道中接收并丢弃所有的消息,直到通道为空
  31. while let Ok(Some(_)) = read_rx.try_next() {
  32. // 消息被忽略
  33. }
  34. }
  35. }
  36. // trace!("线程-数据读取-结束");
  37. });
  38. //写数据
  39. // let bool_v2_clone = Arc::clone(&is_shutdown_arc);
  40. // let write_tx_clone = Arc::clone(&write_tx_am);
  41. // let su = ws.get_subscription();
  42. // let tw = tokio::spawn(async move {
  43. // trace!("线程-数据写入-开始");
  44. // loop {
  45. // tokio::time::sleep(Duration::from_millis(20 * 1000)).await;
  46. // // let close_frame = CloseFrame {
  47. // // code: CloseCode::Normal,
  48. // // reason: Cow::Borrowed("Bye bye"),
  49. // // };
  50. // // let message = Message::Close(Some(close_frame));
  51. //
  52. //
  53. // let message = Message::Text(su.clone());
  54. // AbstractWsMode::send_subscribe(write_tx_clone.clone(), message.clone()).await;
  55. // trace!("发送指令成功");
  56. // }
  57. // trace!("线程-数据写入-结束");
  58. // });
  59. let fun = move |data: ResponseData| {
  60. async move {
  61. trace!("---传入的方法~~~~{:?}", data);
  62. }
  63. };
  64. let param = WooSwapLogin {
  65. api_key: "".to_string(),
  66. secret: "".to_string(),
  67. api_memo: "".to_string(),
  68. };
  69. let t1 = tokio::spawn(async move {
  70. let mut ws = get_ws(Option::from(param), WooSwapWsType::Public(APPLICATION_ID.to_string()));
  71. ws.set_symbols(vec!["BTC_USDT".to_string(),"ETC_USDT".to_string()]);
  72. ws.set_subscribe(vec![
  73. WooSwapSubscribeType::PuFuturesTrades,
  74. WooSwapSubscribeType::PuFuturesDepth,
  75. WooSwapSubscribeType::PuFuturesRecords,
  76. ]);
  77. //链接
  78. let bool_v3_clone = Arc::clone(&is_shutdown_arc);
  79. ws.ws_connect_async(bool_v3_clone, fun, &write_tx_am, write_rx).await.expect("链接失败(内部一个心跳线程应该已经关闭了)");
  80. trace!("test 唯一线程结束--");
  81. });
  82. tokio::try_join!(t1).unwrap();
  83. trace!("当此结束");
  84. trace!("重启!");
  85. trace!("参考交易所关闭");
  86. return;
  87. }
  88. fn get_ws(btree_map: Option<WooSwapLogin>, ws_type: WooSwapWsType) -> WooSwapWs {
  89. let Woo_ws = WooSwapWs::new(false, btree_map, ws_type);
  90. Woo_ws
  91. }
  92. //查询服务器时间是
  93. #[tokio::test]
  94. async fn rest_get_server_time_test() {
  95. global::log_utils::init_log_with_trace();
  96. let mut ret = get_rest();
  97. let req_data = ret.get_server_time().await;
  98. println!("Woo--查询服务器时间是--{:?}", req_data);
  99. }
  100. //查詢合約基礎信息
  101. #[tokio::test]
  102. async fn rest_get_market_test() {
  103. global::log_utils::init_log_with_trace();
  104. let mut ret = get_rest();
  105. let req_data = ret.get_market(json!({
  106. })).await;
  107. println!("Woo--查詢合約基礎信息--{:?}", req_data);
  108. }
  109. fn get_rest() -> WooSwapRest {
  110. let mut btree_map: BTreeMap<String, String> = BTreeMap::new();
  111. btree_map.insert("access_key".to_string(), ACCESS_KEY.to_string());
  112. btree_map.insert("secret_key".to_string(), SECRET_KEY.to_string());
  113. btree_map.insert("pass_key".to_string(), PASS_KEY.to_string());
  114. let woo_exc = WooSwapRest::new(false, btree_map.clone());
  115. woo_exc
  116. }