#[allow(unused_imports)]
use std::fs::create_dir_all;
#[allow(unused_imports)]
use std::path::Path;
use std::sync::mpsc::Sender;
pub use ffi::*;
pub type UniquePtr<T> = cxx::UniquePtr<T>;
#[derive(Debug, Clone, Copy)]
pub enum TORA_TE_RESUME_TYPE {
TORA_TERT_RESTART = 0,
TORA_TERT_RESUME = 1,
TORA_TERT_QUICK = 2,
}
pub const TORA_TSTP_LACT_UserID: u8 = '0' as u8;
pub const TORA_TSTP_LACT_AccountID: u8 = '1' as u8;
pub const TORA_TSTP_LACT_SHAStock: u8 = '2' as u8;
pub const TORA_TSTP_LACT_SZAStock: u8 = '3' as u8;
pub const TORA_TSTP_LACT_SHBStock: u8 = '4' as u8;
pub const TORA_TSTP_LACT_SZBStock: u8 = '5' as u8;
pub const TORA_TSTP_LACT_ThreeNewBoardA: u8 = '6' as u8;
pub const TORA_TSTP_LACT_ThreeNewBoardB: u8 = '7' as u8;
pub const TORA_TSTP_LACT_HKStock: u8 = '8' as u8;
pub const TORA_TSTP_LACT_UnifiedUserID: u8 = '9' as u8;
pub const TORA_TSTP_AM_Password: u8 = '0' as u8;
pub const TORA_TSTP_AM_FingerPrint: u8 = '1' as u8;
pub const TORA_TSTP_AM_CertInfo: u8 = '2' as u8;
pub const TORA_TSTP_LGT_ZHCN: u8 = '0' as u8;
pub const TORA_TSTP_LGT_ZHHK: u8 = '1' as u8;
pub const TORA_TSTP_LGT_ENUS: u8 = '2' as u8;
pub const TORA_TSTP_DT_PC: u8 = '0' as u8;
pub const TORA_TSTP_DT_Mobile: u8 = '1' as u8;
pub const TORA_TSTP_UTYPE_BrokerUser: u8 = '0' as u8;
pub const TORA_TSTP_UTYPE_SuperUser: u8 = '1' as u8;
pub const TORA_TSTP_UTYPE_Investor: u8 = '2' as u8;
pub const TORA_TSTP_EXD_SSE: u8 = '1' as u8;
pub const TORA_TSTP_EXD_SZSE: u8 = '2' as u8;
pub const TORA_TSTP_EXD_HK: u8 = '3' as u8;
pub const TORA_TSTP_EXD_BSE: u8 = '4' as u8;
pub const TORA_TSTP_MKD_SHA: u8 = '1' as u8;
pub const TORA_TSTP_MKD_SZA: u8 = '2' as u8;
pub const TORA_TSTP_MKD_SHB: u8 = '3' as u8;
pub const TORA_TSTP_MKD_SZB: u8 = '4' as u8;
pub const TORA_TSTP_MKD_SZThreeA: u8 = '5' as u8;
pub const TORA_TSTP_MKD_SZThreeB: u8 = '6' as u8;
pub const TORA_TSTP_MKD_Foreign: u8 = '7' as u8;
pub const TORA_TSTP_MKD_SZHK: u8 = '8' as u8;
pub const TORA_TSTP_MKD_SHHK: u8 = '9' as u8;
pub const TORA_TSTP_MKD_BJMain: u8 = 'a' as u8;
pub const TORA_TSTP_MSST_PreOpen: u8 = '0' as u8;
pub const TORA_TSTP_MSST_CallAuction: u8 = '1' as u8;
pub const TORA_TSTP_MSST_Continous: u8 = '2' as u8;
pub const TORA_TSTP_MSST_Pause: u8 = '3' as u8;
pub const TORA_TSTP_MSST_Suspend: u8 = '4' as u8;
pub const TORA_TSTP_MSST_LongSuspend: u8 = '5' as u8;
pub const TORA_TSTP_MSST_UndulationInt: u8 = '6' as u8;
pub const TORA_TSTP_MSST_CircuitBreak: u8 = '7' as u8;
pub const TORA_TSTP_MSST_CircuitBreakU: u8 = '8' as u8;
pub const TORA_TSTP_MSST_Close: u8 = '9' as u8;
pub const TORA_TSTP_MSST_Other: u8 = 'a' as u8;
pub const TORA_TSTP_MSST_CloseCallAuction: u8 = 'b' as u8;
pub const TORA_TSTP_MSST_CallMatch: u8 = 'c' as u8;
pub const TORA_TSTP_MSST_PostContinous: u8 = 'd' as u8;
pub const TORA_TSTP_MSST_PostClose: u8 = 'e' as u8;
pub const TORA_TSTP_MSST_PrePostOpen: u8 = 'f' as u8;
pub const TORA_TSTP_EF_ToBeContinued: u8 = '1' as u8;
pub const TORA_TSTP_EF_BatchEnd: u8 = '2' as u8;
pub const TORA_TSTP_EF_Completed: u8 = '3' as u8;
pub const TORA_TSTP_EF_NOP: u8 = '4' as u8;
pub const TORA_TSTP_MST_UnKnown: u8 = '#' as u8;
pub const TORA_TSTP_MST_BeforeTrading: u8 = '0' as u8;
pub const TORA_TSTP_MST_Continous: u8 = '1' as u8;
pub const TORA_TSTP_MST_Closed: u8 = '2' as u8;
pub const TORA_TSTP_MST_OpenCallAuction: u8 = '3' as u8;
pub const TORA_TSTP_MST_SZSEHKUnopened: u8 = 'a' as u8;
pub const TORA_TSTP_MST_SZSEHKOpenCallAuctionInput: u8 = 'b' as u8;
pub const TORA_TSTP_MST_SZSEHKOpenCallAuctionBeforeMatch: u8 = 'c' as u8;
pub const TORA_TSTP_MST_SZSEHKOpenCallAuctionMatch: u8 = 'd' as u8;
pub const TORA_TSTP_MST_SZSEHKHalt: u8 = 'e' as u8;
pub const TORA_TSTP_MST_SZSEHKContinous: u8 = 'f' as u8;
pub const TORA_TSTP_MST_SZSEHKExchangeIntervention: u8 = 'g' as u8;
pub const TORA_TSTP_MST_SZSEHKCloseCallAuctionReferencePrice: u8 = 'h' as u8;
pub const TORA_TSTP_MST_SZSEHKCloseCallAuctionInput: u8 = 'i' as u8;
pub const TORA_TSTP_MST_SZSEHKCloseCallAuctionCannotCancel: u8 = 'j' as u8;
pub const TORA_TSTP_MST_SZSEHKCloseCallAuctionMatch: u8 = 'k' as u8;
pub const TORA_TSTP_MST_SZSEHKCloseCallAuctionRandomClosed: u8 = 'l' as u8;
pub const TORA_TSTP_MST_SZSEHKCancel: u8 = 'm' as u8;
pub const TORA_TSTP_MST_SZSEHKClosed: u8 = 'n' as u8;
pub const TORA_TSTP_MST_SZSEHKWholeClosed: u8 = 'o' as u8;
pub const TORA_TSTP_MST_TCP: u8 = '0' as u8;
pub const TORA_TSTP_MST_UDP: u8 = '1' as u8;
pub const TORA_TSTP_MST_MCAST: u8 = '2' as u8;
unsafe impl Send for XMdApi {}
unsafe impl Sync for XMdApi {}
impl XMdApi {
pub fn CreateXMdApiAndSpi(tx: Sender<XMdSpiMsg>, md_sub_mode: u8, derive_md_sub_mode: u8) -> UniquePtr<XMdApi> {
CreateXMdApi(Box::new(XMdSpi { tx }), md_sub_mode, derive_md_sub_mode)
}
}
#[derive(Debug, Clone)]
pub enum XMdSpiMsg {
OnFrontConnected,
OnFrontDisconnected(i32),
OnRspGetConnectionInfo(Box<ConnectionInfoField>, Box<RspInfoField>, i32),
OnRspUserLogin(Box<RspUserLoginField>, Box<RspInfoField>, i32),
OnRspUserLogout(Box<UserLogoutField>, Box<RspInfoField>, i32),
OnRspSubMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubPHMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubPHMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSpecialMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSpecialMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSimplifyMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSimplifyMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubIOPV(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubIOPV(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSecurityStatus(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSecurityStatus(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubMarketStatus(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspUnSubMarketStatus(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspSubImcParams(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspUnSubImcParams(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspInquiryMarketDataMirror(Box<MarketDataField>, Box<RspInfoField>, i32, bool),
OnRspInquiryPHMarketDataMirror(Box<PHMarketDataField>, Box<RspInfoField>, i32, bool),
OnRspInquirySpecialMarketDataMirror(Box<SpecialMarketDataField>, Box<RspInfoField>, i32, bool),
OnRspSubSPMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSPMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSPSimplifyMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSPSimplifyMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSPSecurityStatus(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubSPSecurityStatus(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspSubSPMarketStatus(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspUnSubSPMarketStatus(Box<SpecificMarketField>, Box<RspInfoField>),
OnRspInquirySPMarketDataMirror(Box<MarketDataField>, Box<RspInfoField>, i32, bool),
OnRtnMarketData(Box<MarketDataField>),
OnRtnPHMarketData(Box<PHMarketDataField>),
OnRtnSpecialMarketData(Box<SpecialMarketDataField>),
OnRtnSimplifyMarketData(Box<SimplifyMarketDataField>),
OnRtnIOPV(Box<IOPVField>),
OnRtnSecurityStatus(Box<SecurityStatusField>),
OnRtnMarketStatus(Box<MarketStatusField>),
OnRtnImcParams(Box<ImcParamsField>),
OnRtnSPMarketData(Box<MarketDataField>),
OnRtnSPSimplifyMarketData(Box<SimplifyMarketDataField>),
OnRtnSPSecurityStatus(Box<SecurityStatusField>),
OnRtnSPMarketStatus(Box<MarketStatusField>),
OnRspSubRapidMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRspUnSubRapidMarketData(Box<SpecificSecurityField>, Box<RspInfoField>),
OnRtnRapidMarketData(Box<RapidMarketDataField>),
}
pub struct XMdSpi {
tx: Sender<XMdSpiMsg>,
}
impl XMdSpi {
pub fn OnFrontConnected(&self) { self.tx.send(XMdSpiMsg::OnFrontConnected).ok(); }
pub fn OnFrontDisconnected(&self, nReason: i32) { self.tx.send(XMdSpiMsg::OnFrontDisconnected(nReason)).ok(); }
pub fn OnRspGetConnectionInfo(&self, pConnectionInfoField: ConnectionInfoField, pRspInfoField: RspInfoField, nRequestID: i32) { self.tx.send(XMdSpiMsg::OnRspGetConnectionInfo(Box::new(pConnectionInfoField), Box::new(pRspInfoField), nRequestID)).ok(); }
pub fn OnRspUserLogin(&self, pRspUserLoginField: RspUserLoginField, pRspInfoField: RspInfoField, nRequestID: i32) { self.tx.send(XMdSpiMsg::OnRspUserLogin(Box::new(pRspUserLoginField), Box::new(pRspInfoField), nRequestID)).ok(); }
pub fn OnRspUserLogout(&self, pUserLogoutField: UserLogoutField, pRspInfoField: RspInfoField, nRequestID: i32) { self.tx.send(XMdSpiMsg::OnRspUserLogout(Box::new(pUserLogoutField), Box::new(pRspInfoField), nRequestID)).ok(); }
pub fn OnRspSubMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubPHMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubPHMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubPHMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubPHMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSpecialMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSpecialMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSpecialMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSpecialMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSimplifyMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSimplifyMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubIOPV(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubIOPV(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubIOPV(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubIOPV(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSecurityStatus(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSecurityStatus(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubMarketStatus(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubMarketStatus(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubImcParams(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubImcParams(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubImcParams(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubImcParams(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspInquiryMarketDataMirror(&self, pMarketDataField: MarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(XMdSpiMsg::OnRspInquiryMarketDataMirror(Box::new(pMarketDataField), Box::new(pRspInfoField), nRequestID, bIsLast)).ok(); }
pub fn OnRspInquiryPHMarketDataMirror(&self, pPHMarketDataField: PHMarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(XMdSpiMsg::OnRspInquiryPHMarketDataMirror(Box::new(pPHMarketDataField), Box::new(pRspInfoField), nRequestID, bIsLast)).ok(); }
pub fn OnRspInquirySpecialMarketDataMirror(&self, pMarketDataField: SpecialMarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(XMdSpiMsg::OnRspInquirySpecialMarketDataMirror(Box::new(pMarketDataField), Box::new(pRspInfoField), nRequestID, bIsLast)).ok(); }
pub fn OnRspSubSPMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSPMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSPMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSPMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSPSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSPSimplifyMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSPSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSPSimplifyMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSPSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSPSecurityStatus(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSPSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSPSecurityStatus(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspSubSPMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubSPMarketStatus(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubSPMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubSPMarketStatus(Box::new(pSpecificMarketField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspInquirySPMarketDataMirror(&self, pMarketDataField: MarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool) { self.tx.send(XMdSpiMsg::OnRspInquirySPMarketDataMirror(Box::new(pMarketDataField), Box::new(pRspInfoField), nRequestID, bIsLast)).ok(); }
pub fn OnRtnMarketData(&self, pMarketDataField: MarketDataField) { self.tx.send(XMdSpiMsg::OnRtnMarketData(Box::new(pMarketDataField))).ok(); }
pub fn OnRtnPHMarketData(&self, pPHMarketDataField: PHMarketDataField) { self.tx.send(XMdSpiMsg::OnRtnPHMarketData(Box::new(pPHMarketDataField))).ok(); }
pub fn OnRtnSpecialMarketData(&self, pSpecialMarketDataField: SpecialMarketDataField) { self.tx.send(XMdSpiMsg::OnRtnSpecialMarketData(Box::new(pSpecialMarketDataField))).ok(); }
pub fn OnRtnSimplifyMarketData(&self, pSimplifyMarketDataField: SimplifyMarketDataField) { self.tx.send(XMdSpiMsg::OnRtnSimplifyMarketData(Box::new(pSimplifyMarketDataField))).ok(); }
pub fn OnRtnIOPV(&self, pIOPVField: IOPVField) { self.tx.send(XMdSpiMsg::OnRtnIOPV(Box::new(pIOPVField))).ok(); }
pub fn OnRtnSecurityStatus(&self, pSecurityStatusField: SecurityStatusField) { self.tx.send(XMdSpiMsg::OnRtnSecurityStatus(Box::new(pSecurityStatusField))).ok(); }
pub fn OnRtnMarketStatus(&self, pMarketStatusField: MarketStatusField) { self.tx.send(XMdSpiMsg::OnRtnMarketStatus(Box::new(pMarketStatusField))).ok(); }
pub fn OnRtnImcParams(&self, pImcParamsField: ImcParamsField) { self.tx.send(XMdSpiMsg::OnRtnImcParams(Box::new(pImcParamsField))).ok(); }
pub fn OnRtnSPMarketData(&self, pMarketDataField: MarketDataField) { self.tx.send(XMdSpiMsg::OnRtnSPMarketData(Box::new(pMarketDataField))).ok(); }
pub fn OnRtnSPSimplifyMarketData(&self, pSimplifyMarketDataField: SimplifyMarketDataField) { self.tx.send(XMdSpiMsg::OnRtnSPSimplifyMarketData(Box::new(pSimplifyMarketDataField))).ok(); }
pub fn OnRtnSPSecurityStatus(&self, pSecurityStatusField: SecurityStatusField) { self.tx.send(XMdSpiMsg::OnRtnSPSecurityStatus(Box::new(pSecurityStatusField))).ok(); }
pub fn OnRtnSPMarketStatus(&self, pMarketStatusField: MarketStatusField) { self.tx.send(XMdSpiMsg::OnRtnSPMarketStatus(Box::new(pMarketStatusField))).ok(); }
pub fn OnRspSubRapidMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspSubRapidMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRspUnSubRapidMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField) { self.tx.send(XMdSpiMsg::OnRspUnSubRapidMarketData(Box::new(pSpecificSecurityField), Box::new(pRspInfoField))).ok(); }
pub fn OnRtnRapidMarketData(&self, pRapidMarketDataField: RapidMarketDataField) { self.tx.send(XMdSpiMsg::OnRtnRapidMarketData(Box::new(pRapidMarketDataField))).ok(); }
}
#[cxx::bridge(namespace = "tora_xmd")]
mod ffi {
extern "Rust" {
type XMdSpi;
pub fn OnFrontConnected(&self);
pub fn OnFrontDisconnected(&self, nReason: i32);
pub fn OnRspGetConnectionInfo(&self, pConnectionInfoField: ConnectionInfoField, pRspInfoField: RspInfoField, nRequestID: i32);
pub fn OnRspUserLogin(&self, pRspUserLoginField: RspUserLoginField, pRspInfoField: RspInfoField, nRequestID: i32);
pub fn OnRspUserLogout(&self, pUserLogoutField: UserLogoutField, pRspInfoField: RspInfoField, nRequestID: i32);
pub fn OnRspSubMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubPHMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubPHMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSpecialMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSpecialMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubIOPV(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubIOPV(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspSubImcParams(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubImcParams(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspInquiryMarketDataMirror(&self, pMarketDataField: MarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspInquiryPHMarketDataMirror(&self, pPHMarketDataField: PHMarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspInquirySpecialMarketDataMirror(&self, pMarketDataField: SpecialMarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRspSubSPMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSPMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSPSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSPSimplifyMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSPSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSPSecurityStatus(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspSubSPMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubSPMarketStatus(&self, pSpecificMarketField: SpecificMarketField, pRspInfoField: RspInfoField);
pub fn OnRspInquirySPMarketDataMirror(&self, pMarketDataField: MarketDataField, pRspInfoField: RspInfoField, nRequestID: i32, bIsLast: bool);
pub fn OnRtnMarketData(&self, pMarketDataField: MarketDataField);
pub fn OnRtnPHMarketData(&self, pPHMarketDataField: PHMarketDataField);
pub fn OnRtnSpecialMarketData(&self, pSpecialMarketDataField: SpecialMarketDataField);
pub fn OnRtnSimplifyMarketData(&self, pSimplifyMarketDataField: SimplifyMarketDataField);
pub fn OnRtnIOPV(&self, pIOPVField: IOPVField);
pub fn OnRtnSecurityStatus(&self, pSecurityStatusField: SecurityStatusField);
pub fn OnRtnMarketStatus(&self, pMarketStatusField: MarketStatusField);
pub fn OnRtnImcParams(&self, pImcParamsField: ImcParamsField);
pub fn OnRtnSPMarketData(&self, pMarketDataField: MarketDataField);
pub fn OnRtnSPSimplifyMarketData(&self, pSimplifyMarketDataField: SimplifyMarketDataField);
pub fn OnRtnSPSecurityStatus(&self, pSecurityStatusField: SecurityStatusField);
pub fn OnRtnSPMarketStatus(&self, pMarketStatusField: MarketStatusField);
pub fn OnRspSubRapidMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRspUnSubRapidMarketData(&self, pSpecificSecurityField: SpecificSecurityField, pRspInfoField: RspInfoField);
pub fn OnRtnRapidMarketData(&self, pRapidMarketDataField: RapidMarketDataField);
}
unsafe extern "C++" {
include!("tora-rs/wrapper/include/XMdApi.h");
type XMdApi;
fn CreateXMdApi(spi: Box<XMdSpi>, md_sub_mode: u8, derive_md_sub_mode: u8) -> UniquePtr<XMdApi>;
fn GetApiVersion(&self) -> String;
fn Init(&self, cpuCores: String);
fn Join(&self) -> i32;
fn RegisterFront(&self, pszFrontAddress: String);
fn RegisterNameServer(&self, pszNsAddress: String);
fn RegisterFensUserInfo(&self, pFensUserInfoField: FensUserInfoField);
fn RegisterMulticast(&self, pszMulticastAddress: String, pszInterfaceIP: String, pszSourceIp: String);
fn RegisterDeriveServer(&self, pszDeriveAddress: String);
fn RegisterDeriveMulticast(&self, pszMulticastAddress: String, pszInterfaceIP: String, pszSourceIp: String);
fn ReqGetConnectionInfo(&self, nRequestID: i32) -> i32;
fn ReqUserLogin(&self, pReqUserLoginField: ReqUserLoginField, nRequestID: i32) -> i32;
fn ReqUserLogout(&self, pUserLogoutField: UserLogoutField, nRequestID: i32) -> i32;
fn SubscribeMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribePHMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribePHMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSpecialMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSpecialMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSimplifyMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSimplifyMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeIOPV(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeIOPV(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSecurityStatus(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSecurityStatus(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeMarketStatus(&self, MarketID: u8) -> i32;
fn UnSubscribeMarketStatus(&self, MarketID: u8) -> i32;
fn SubscribeImcParams(&self, MarketID: u8) -> i32;
fn UnSubscribeImcParams(&self, MarketID: u8) -> i32;
fn ReqInquiryMarketDataMirror(&self, pInquiryMarketDataField: InquiryMarketDataField, nRequestID: i32) -> i32;
fn ReqInquiryPHMarketDataMirror(&self, pInquiryMarketDataField: InquiryMarketDataField, nRequestID: i32) -> i32;
fn ReqInquirySpecialMarketDataMirror(&self, pInquirySpecialMarketDataField: InquirySpecialMarketDataField, nRequestID: i32) -> i32;
fn SubscribeSPMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSPMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSPSimplifyMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSPSimplifyMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSPSecurityStatus(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeSPSecurityStatus(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn SubscribeSPMarketStatus(&self, MarketID: u8) -> i32;
fn UnSubscribeSPMarketStatus(&self, MarketID: u8) -> i32;
fn ReqInquirySPMarketDataMirror(&self, pInquiryMarketDataField: InquiryMarketDataField, nRequestID: i32) -> i32;
fn SubscribeRapidMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
fn UnSubscribeRapidMarketData(&self, ppSecurityID: Vec<String>, ExchangeID: u8) -> i32;
}
#[derive(Debug, Clone, Default)]
struct ReqUserLoginField {
is_null: bool,
LogInAccount: String,
LogInAccountType: u8,
DepartmentID: String,
AuthMode: u8,
Password: String,
UserProductInfo: String,
InterfaceProductInfo: String,
TerminalInfo: String,
InnerIPAddress: String,
OuterIPAddress: String,
MacAddress: String,
Lang: u8,
DynamicPassword: String,
DeviceID: String,
CertSerial: String,
DeviceType: u8,
}
#[derive(Debug, Clone, Default)]
struct RspUserLoginField {
is_null: bool,
DepartmentID: String,
LogInAccount: String,
LogInAccountType: u8,
FrontID: i32,
SessionID: i32,
MaxOrderRef: i32,
PrivateFlowCount: i32,
PublicFlowCount: i32,
LoginTime: String,
SystemName: String,
TradingDay: String,
UserID: String,
UserName: String,
UserType: u8,
OrderInsertCommFlux: i32,
OrderActionCommFlux: i32,
PasswordExpiryDate: String,
NeedUpdatePassword: i32,
CertSerial: String,
InnerIPAddress: String,
OuterIPAddress: String,
MacAddress: String,
}
#[derive(Debug, Clone, Default)]
struct RspInfoField {
is_null: bool,
ErrorID: i32,
ErrorMsg: String,
}
#[derive(Debug, Clone, Default)]
struct UserLogoutField {
is_null: bool,
UserID: String,
}
#[derive(Debug, Clone, Default)]
struct SpecificSecurityField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
}
#[derive(Debug, Clone, Default)]
struct SpecificMarketField {
is_null: bool,
MarketID: u8,
}
#[derive(Debug, Clone, Default)]
struct InquiryMarketDataField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
}
#[derive(Debug, Clone, Default)]
struct MarketDataField {
is_null: bool,
TradingDay: String,
SecurityID: String,
ExchangeID: u8,
SecurityName: String,
PreClosePrice: f64,
OpenPrice: f64,
Volume: i64,
Turnover: f64,
TradingCount: i64,
LastPrice: f64,
HighestPrice: f64,
LowestPrice: f64,
BidPrice1: f64,
AskPrice1: f64,
UpperLimitPrice: f64,
LowerLimitPrice: f64,
PERatio1: f64,
PERatio2: f64,
PriceUpDown1: f64,
PriceUpDown2: f64,
OpenInterest: f64,
BidVolume1: i64,
AskVolume1: i64,
BidPrice2: f64,
BidVolume2: i64,
AskPrice2: f64,
AskVolume2: i64,
BidPrice3: f64,
BidVolume3: i64,
AskPrice3: f64,
AskVolume3: i64,
BidPrice4: f64,
BidVolume4: i64,
AskPrice4: f64,
AskVolume4: i64,
BidPrice5: f64,
BidVolume5: i64,
AskPrice5: f64,
AskVolume5: i64,
UpdateTime: String,
UpdateMillisec: i32,
ClosePrice: f64,
SettlementPrice: f64,
MDSecurityStat: u8,
HWLevel: i32,
PreCloseIOPV: f64,
IOPV: f64,
ETFPurVolume: i64,
ETFPurCount: i64,
ETFRedVolume: i64,
ETFRedCount: i64,
}
#[derive(Debug, Clone, Default)]
struct QryRspInfoField {
is_null: bool,
EndFlag: u8,
ErrorID: i32,
ErrorMsg: String,
}
#[derive(Debug, Clone, Default)]
struct PHMarketDataField {
is_null: bool,
TradingDay: String,
SecurityID: String,
ExchangeID: u8,
SecurityName: String,
Volume: i64,
Turnover: f64,
ClosePrice: f64,
UpperLimitPrice: f64,
LowerLimitPrice: f64,
BidVolume: i64,
AskVolume: i64,
UpdateTime: String,
UpdateMillisec: i32,
MDSecurityStat: u8,
HWLevel: i32,
}
#[derive(Debug, Clone, Default)]
struct InquirySpecialMarketDataField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
}
#[derive(Debug, Clone, Default)]
struct SpecialMarketDataField {
is_null: bool,
TradingDay: String,
SecurityID: String,
ExchangeID: u8,
SecurityName: String,
MovingAvgPrice: f64,
MovingAvgPriceSamplingNum: i32,
UpdateTime: String,
UpdateMillisec: i32,
}
#[derive(Debug, Clone, Default)]
struct SimplifyMarketDataField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
SecurityName: String,
PreClosePrice: f64,
LastPrice: f64,
BidPrice1: f64,
AskPrice1: f64,
HighestPrice: f64,
LowestPrice: f64,
UpperLimitPrice: f64,
LowerLimitPrice: f64,
ClosePrice: f64,
SettlementPrice: f64,
UpdateTime: String,
}
#[derive(Debug, Clone, Default)]
struct SecurityStatusField {
is_null: bool,
ExchangeID: u8,
SecurityID: String,
IsSuspend: i32,
IsBreak: i32,
IsLongSuspend: i32,
IsCircuitBreak: i32,
IsSupportMarginBuy: i32,
IsSupportShortSell: i32,
IsSupportPur: i32,
IsSupportRed: i32,
IsSupportSplit: i32,
IsSupportMerge: i32,
IsSupportPleadgeIn: i32,
IsSupportPleadgeOut: i32,
IsSupportRoundLotBuy: i32,
IsSupportRoundLotSell: i32,
IsSupportOddLotBuy: i32,
IsSupportOddLotSell: i32,
IsSupportExercise: i32,
IsLimitBuy: i32,
IsLimitSell: i32,
IsLimitCover: i32,
IsLimitMarketMaker: i32,
}
#[derive(Debug, Clone, Default)]
struct MarketStatusField {
is_null: bool,
MarketID: u8,
MarketStatus: u8,
}
#[derive(Debug, Clone, Default)]
struct ImcParamsField {
is_null: bool,
MarketID: u8,
OpenFlag: i32,
ThresholdAmount: f64,
PosAmt: f64,
AmountStatus: i32,
}
#[derive(Debug, Clone, Default)]
struct IOPVField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
SecurityName: String,
UpdateTime: String,
UpdateMillisec: i32,
IOPV: f64,
MDSecurityStat: u8,
}
#[derive(Debug, Clone, Default)]
struct RapidMarketDataField {
is_null: bool,
SecurityID: String,
ExchangeID: u8,
DataTimeStamp: i32,
PreClosePrice: f64,
OpenPrice: f64,
NumTrades: i64,
TotalVolumeTrade: i64,
TotalValueTrade: f64,
HighestPrice: f64,
LowestPrice: f64,
LastPrice: f64,
BidPrice1: f64,
BidVolume1: i64,
AskPrice1: f64,
AskVolume1: i64,
AskPrice2: f64,
AskVolume2: i64,
AskPrice3: f64,
AskVolume3: i64,
BidPrice2: f64,
BidVolume2: i64,
BidPrice3: f64,
BidVolume3: i64,
AskPrice4: f64,
AskVolume4: i64,
AskPrice5: f64,
AskVolume5: i64,
BidPrice4: f64,
BidVolume4: i64,
BidPrice5: f64,
BidVolume5: i64,
AskPrice6: f64,
AskVolume6: i64,
AskPrice7: f64,
AskVolume7: i64,
BidPrice6: f64,
BidVolume6: i64,
BidPrice7: f64,
BidVolume7: i64,
AskPrice8: f64,
AskVolume8: i64,
AskPrice9: f64,
AskVolume9: i64,
BidPrice8: f64,
BidVolume8: i64,
BidPrice9: f64,
BidVolume9: i64,
BidPrice10: f64,
BidVolume10: i64,
AskPrice10: f64,
AskVolume10: i64,
UpperLimitPrice: f64,
LowerLimitPrice: f64,
ClosePrice: f64,
MDSecurityStat: u8,
IOPV: f64,
InnerSell: i64,
OuterBuy: i64,
BidCount1: i32,
AskCount1: i32,
AskCount2: i32,
AskCount3: i32,
BidCount2: i32,
BidCount3: i32,
AskCount4: i32,
AskCount5: i32,
BidCount4: i32,
BidCount5: i32,
AskCount6: i32,
AskCount7: i32,
BidCount6: i32,
BidCount7: i32,
AskCount8: i32,
AskCount9: i32,
BidCount8: i32,
BidCount9: i32,
BidCount10: i32,
AskCount10: i32,
}
#[derive(Debug, Clone, Default)]
struct FensUserInfoField {
is_null: bool,
FensVer: u16,
FensEnvID: String,
FensNodeID: String,
FensUserID: String,
UserID: String,
ClientInfo: String,
}
#[derive(Debug, Clone, Default)]
struct ConnectionInfoField {
is_null: bool,
InnerIPAddress: String,
InnerPort: i32,
OuterIPAddress: String,
OuterPort: i32,
MacAddress: String,
}
}