1use ctp_rs::{
2 QryInstrumentField, ReqAuthenticateField, ReqUserLoginField, THOST_TE_RESUME_TYPE, TraderApi,
3 TraderSpiMsg,
4};
5use std::sync::{Arc, mpsc::channel};
6
7const BROKER_ID: &str = "...";
8const USER_ID: &str = "...";
9const PASSWORD: &str = "...";
10const APP_ID: &str = "...";
11const AUTH_CODE: &str = "...";
12const FRONT_ADDR: &str = "...";
13const FLOW_PATH: &str = "TraderFlow/";
14
15fn main() {
16 let (tx, rx) = channel();
17 let api = Arc::new(TraderApi::CreateTraderApiAndSpi(
18 tx,
19 FLOW_PATH.to_string(),
20 true,
21 ));
22 api.RegisterFront(FRONT_ADDR.to_string());
23 api.SubscribePublicTopic(THOST_TE_RESUME_TYPE::THOST_TERT_QUICK as i32);
24 api.SubscribePrivateTopic(THOST_TE_RESUME_TYPE::THOST_TERT_RESTART as i32);
25 api.Init();
26
27 loop {
28 let msg = rx.recv().unwrap();
29 match msg {
30 TraderSpiMsg::OnFrontConnected => {
31 println!("front connected");
32 let req = ReqAuthenticateField {
33 BrokerID: BROKER_ID.to_string(),
34 UserID: USER_ID.to_string(),
35 AuthCode: AUTH_CODE.to_string(),
36 AppID: APP_ID.to_string(),
37 ..Default::default()
38 };
39 api.ReqAuthenticate(req, 0);
40 }
41 TraderSpiMsg::OnRspAuthenticate(_, rsp_info, _, _) => {
42 if rsp_info.ErrorID != 0 {
43 println!("auth failed: {:?}", rsp_info);
44 std::process::exit(1);
45 } else {
46 println!("auth success: {:?}", rsp_info);
47
48 let req = ReqUserLoginField {
49 BrokerID: BROKER_ID.to_string(),
50 UserID: USER_ID.to_string(),
51 Password: PASSWORD.to_string(),
52 ..Default::default()
53 };
54 api.ReqUserLogin(req, 0);
55 }
56 }
57 TraderSpiMsg::OnRspUserLogin(_, rsp_info, _, _) => {
58 if rsp_info.ErrorID != 0 {
59 println!("user login failed: {:?}", rsp_info);
60 std::process::exit(1);
61 } else {
62 println!("user login success: {:?}", rsp_info);
63
64 api.ReqQryInstrument(QryInstrumentField::default(), 0);
65 }
66 }
67 TraderSpiMsg::OnRspQryInstrument(instrument, rsp_info, _, _) => {
68 if instrument.is_null {
69 eprintln!("qry instrument: {:?}", rsp_info);
70 std::process::exit(1);
71 }
72
73 println!("{:?}", instrument);
74 }
75 _ => {}
76 }
77 }
78}