1use ctp_rs::{MdApi, MdSpiMsg, ReqUserLoginField};
2use std::sync::{Arc, mpsc::channel};
3
4const FRONT_ADDR: &str = "tcp://210.14.72.12:4602";
6const FLOW_PATH: &str = "MdFlow/";
7const INSTRUMENTS: &[&str] = &["au2509", "cu2509"];
8
9fn main() {
10 let (tx, rx) = channel();
11 let api = Arc::new(MdApi::CreateMdApiAndSpi(
12 tx,
13 FLOW_PATH.to_string(),
14 false,
15 false,
16 true,
17 ));
18 api.RegisterFront(FRONT_ADDR.to_string());
19 api.Init();
20
21 loop {
22 let msg = rx.recv().unwrap();
23 match msg {
24 MdSpiMsg::OnFrontConnected => {
25 println!("front connected");
26 let mut req = ReqUserLoginField::default();
27 req.BrokerID = "".to_string();
28 req.UserID = "".to_string();
29 req.Password = "".to_string();
30 api.ReqUserLogin(req, 0);
31 }
32 MdSpiMsg::OnRspUserLogin(_, rsp_info, _, _) => {
33 if rsp_info.ErrorID != 0 {
34 println!("user login failed: {:?}", rsp_info);
35 continue;
36 } else {
37 println!("user login success: {:?}", rsp_info);
38 let instruments: Vec<String> =
39 INSTRUMENTS.iter().map(|&s| s.to_string()).collect();
40 let len = instruments.len() as i32;
41 api.SubscribeMarketData(instruments, len);
42 }
43 }
44 MdSpiMsg::OnRtnDepthMarketData(tick) => {
45 println!("{:?}", tick);
46 }
47 _ => {}
48 }
49 }
50}