FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

#include "include/XtpQuoteApi.h" #include "include/glog/logging.h" #include #include #include #include #include #include using namespace std; std::string get_now_date() { char tmp[20]; memset(tmp,0x00,20); time_t nowtime; struct tm* p; time(&nowtime); p = localtime(&nowtime); sprintf(tmp, "%04d%02d%02d",p->tm_year+1900,p->tm_mon+1,p->tm_mday); return std::string(tmp); } double get_mean(std::vector& vec) { double sum = std::accumulate(std::begin(vec), std::end(vec), 0.0); double mean = sum / vec.size(); return mean; } double get_stdev(std::vector& vec) { double mean = get_mean(vec); double accum = 0.0; std::for_each (std::begin(vec), std::end(vec), [&](const double d) { accum += (d-mean)*(d-mean); }); double stdev = sqrt(accum/(vec.size())); return stdev; } XtpQuote::XtpQuote(uint64_t thread_num, uint64_t ring_buffer_size, uint16_t full_market_data_available) :live_(true),count_(0),marketdata_available_(false),quote_thread_available_(false), thread_num_(thread_num), ring_buffer_size_(ring_buffer_size), full_market_data_available_(full_market_data_available) { server_ip_ = ""; server_port_ = 0; username_ = ""; password_ = ""; socket_type_ = XTP_PROTOCOL_TYPE::XTP_PROTOCOL_TCP; client_id_ = 13; file_path_ = "./"; //initialize the jvm parameters att_args_.version = JNI_VERSION_1_8; att_args_.name = NULL; att_args_.group = NULL; std::string delay_file_name = std::string("delay_log_") + get_now_date() + ".log"; std::string delay_log_file = std::string("/usr/local/project/log/") + delay_file_name; delay_log_file_.open(delay_log_file.c_str() , std::ios::app); #ifdef COUNT_QUOTE std::string count_file_name = std::string("queue_deep_log_") + get_now_date() + ".log"; std::string count_log_file = std::string("/usr/local/project/log/") + count_file_name; queue_deep_file_.open(count_log_file.c_str() , std::ios::app); #endif if (thread_num_ < thread_num_min_) { thread_num_ = thread_num_min_; } if (thread_num_ > thread_num_max_) { thread_num_ = thread_num_max_; } if (ring_buffer_size_ < ring_buffer_size_min_) { ring_buffer_size_ = ring_buffer_size_min_; } if (ring_buffer_size_ > ring_buffer_size_max_) { ring_buffer_size_ = ring_buffer_size_max_; } queue_lock_ = new std::mutex[thread_num_]; queue_lock_order_book_ = new std::mutex[thread_num_]; // if (full_market_data_available_ == 1) { queue_full_ = new RingBuffer*[thread_num_]; for(int i=0; iDetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubMarketData(XTPST *ticker, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubMarketData", "(Lcom/zts/xtp/quote/model/response/SpecificTickerResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::CountDepthMarketData() { std::vector queue_deep; int64_t num = 0; while(live_) { std::this_thread::sleep_for(std::chrono::seconds(1)); for(int i=0; iamount(); queue_deep.push_back(num); } for(int i=0; iNewLongArray(50); env->SetLongArrayRegion(jarray_setAsk1Qty, 0, 50, (jlong *)full_market_data->ask1_qty); if (full_market_data->market_data.data_type_v2 == XTP_MARKETDATA_V2_ACTUAL) { generateMarketDataSeObj(env, mdseObj, &full_market_data->market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, full_market_data->market_data.exchange_id, nTicker, nTickerLength, full_market_data->market_data.last_price, full_market_data->market_data.pre_close_price, full_market_data->market_data.open_price, full_market_data->market_data.high_price, full_market_data->market_data.low_price, full_market_data->market_data.close_price, full_market_data->market_data.upper_limit_price, full_market_data->market_data.lower_limit_price, full_market_data->market_data.data_time, full_market_data->market_data.qty, full_market_data->market_data.turnover, full_market_data->market_data.avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], full_market_data->market_data.trades_count, jstr_ticker_status, full_market_data->market_data.stk.iopv, full_market_data->market_data.data_type_v2, mdseObj, mdoeObj, mdbeObj, jarray_setBid1Qty, full_market_data->bid1_count, full_market_data->max_bid1_count, jarray_setAsk1Qty, full_market_data->ask1_count, full_market_data->max_ask1_count); } if (full_market_data->market_data.data_type_v2 == XTP_MARKETDATA_V2_OPTION) { generateMarketDataOeObj(env, mdoeObj, &full_market_data->market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, full_market_data->market_data.exchange_id, nTicker, nTickerLength, full_market_data->market_data.last_price, full_market_data->market_data.pre_close_price, full_market_data->market_data.open_price, full_market_data->market_data.high_price, full_market_data->market_data.low_price, full_market_data->market_data.close_price, full_market_data->market_data.upper_limit_price, full_market_data->market_data.lower_limit_price, full_market_data->market_data.data_time, full_market_data->market_data.qty, full_market_data->market_data.turnover, full_market_data->market_data.avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], full_market_data->market_data.trades_count, jstr_ticker_status, 0.0, full_market_data->market_data.data_type_v2, mdseObj, mdoeObj, mdbeObj, jarray_setBid1Qty, full_market_data->bid1_count, full_market_data->max_bid1_count, jarray_setAsk1Qty, full_market_data->ask1_count, full_market_data->max_ask1_count); } if (full_market_data->market_data.data_type_v2 == XTP_MARKETDATA_V2_BOND && full_market_data->market_data.exchange_id == XTP_EXCHANGE_SH) { //L2 if (full_market_data->market_data.bond.instrument_status != NULL) { if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "ADD")) { jstr_ticker_status = env->NewStringUTF(" 0"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "START")) { jstr_ticker_status = env->NewStringUTF("S 1"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "OCALL")) { jstr_ticker_status = env->NewStringUTF("C11"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "TRADE")) { jstr_ticker_status = env->NewStringUTF("T11"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "SUSP")) { jstr_ticker_status = env->NewStringUTF("P01"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "CLOSE")) { jstr_ticker_status = env->NewStringUTF("E01"); } if (0 == strcmp(full_market_data->market_data.bond.instrument_status, "ENDTR")) { jstr_ticker_status = env->NewStringUTF("E01"); } generateMarketDataBeObj(env, mdbeObj, &full_market_data->market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, full_market_data->market_data.exchange_id, nTicker, nTickerLength, full_market_data->market_data.last_price, full_market_data->market_data.pre_close_price, full_market_data->market_data.open_price, full_market_data->market_data.high_price, full_market_data->market_data.low_price, full_market_data->market_data.close_price, full_market_data->market_data.upper_limit_price, full_market_data->market_data.lower_limit_price, full_market_data->market_data.data_time, full_market_data->market_data.qty, full_market_data->market_data.turnover, full_market_data->market_data.avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], full_market_data->market_data.trades_count, jstr_ticker_status, 0.0, full_market_data->market_data.data_type_v2, mdseObj, mdoeObj, mdbeObj, jarray_setBid1Qty, full_market_data->bid1_count, full_market_data->max_bid1_count, jarray_setAsk1Qty, full_market_data->ask1_count, full_market_data->max_ask1_count); } else { //L1 generateMarketDataSeObj(env, mdseObj, &full_market_data->market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, full_market_data->market_data.exchange_id, nTicker, nTickerLength, full_market_data->market_data.last_price, full_market_data->market_data.pre_close_price, full_market_data->market_data.open_price, full_market_data->market_data.high_price, full_market_data->market_data.low_price, full_market_data->market_data.close_price, full_market_data->market_data.upper_limit_price, full_market_data->market_data.lower_limit_price, full_market_data->market_data.data_time, full_market_data->market_data.qty, full_market_data->market_data.turnover, full_market_data->market_data.avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], full_market_data->market_data.trades_count, jstr_ticker_status, 0.0, full_market_data->market_data.data_type_v2, mdseObj, mdoeObj, mdbeObj, jarray_setBid1Qty, full_market_data->bid1_count, full_market_data->max_bid1_count, jarray_setAsk1Qty, full_market_data->ask1_count, full_market_data->max_ask1_count); } } if (full_market_data->market_data.data_type_v2 == XTP_MARKETDATA_V2_INDEX) { generateMarketDataSeObj(env, mdseObj, &full_market_data->market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, full_market_data->market_data.exchange_id, nTicker, nTickerLength, full_market_data->market_data.last_price, full_market_data->market_data.pre_close_price, full_market_data->market_data.open_price, full_market_data->market_data.high_price, full_market_data->market_data.low_price, full_market_data->market_data.close_price, full_market_data->market_data.upper_limit_price, full_market_data->market_data.lower_limit_price, full_market_data->market_data.data_time, full_market_data->market_data.qty, full_market_data->market_data.turnover, full_market_data->market_data.avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], full_market_data->market_data.trades_count, jstr_ticker_status, 0.0, full_market_data->market_data.data_type_v2, mdseObj, mdoeObj, mdbeObj, jarray_setBid1Qty, full_market_data->bid1_count, full_market_data->max_bid1_count, jarray_setAsk1Qty, full_market_data->ask1_count, full_market_data->max_ask1_count); } if (env2==NULL) { jvm_->DetachCurrentThread(); } } void XtpQuote::OnDepthMarketData2(XTPMD *market_data, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count, JNIEnv* env2, jmethodID jm_event2) { JNIEnv* env; jmethodID jm_event; if(env2==NULL || (jvm_->GetEnv((void **)&env2, JNI_VERSION_1_8) != JNI_OK)) { env = preInvoke(); jclass pluginClass = env->GetObjectClass(quote_plugin_obj_); assert(pluginClass != NULL); jm_event = env->GetMethodID(pluginClass, "onDepthMarketData","(IIIDDDDDDDDJJDDDDDDDDDDDDDDDDDDDDDDJJJJJJJJJJJJJJJJJJJJJLjava/lang/String;DILcom/zts/xtp/quote/model/response/MarketDataStockExDataResponse;Lcom/zts/xtp/quote/model/response/MarketDataOptionExDataResponse;Lcom/zts/xtp/quote/model/response/MarketDataBondExDataResponse;)V"); } else { env = env2; jm_event = jm_event2; } uint32_t nTicker = atol(market_data->ticker); uint32_t nTickerLength = strlen(market_data->ticker); jstring jstr_ticker_status = env->NewStringUTF(market_data->ticker_status); double bid[10]; double ask[10]; long long bidQty[10]; long long askQty[10]; for (int i=0; ibid[i]; ask[i] = market_data->ask[i]; bidQty[i] = market_data->bid_qty[i]; askQty[i] = market_data->ask_qty[i]; } //md ex data jobject mdseObj = NULL; jobject mdoeObj = NULL; jobject mdbeObj = NULL; jmethodID mdseConstr = env->GetMethodID(xtp_market_data_se_class_, "","()V"); jmethodID mdoeConstr = env->GetMethodID(xtp_market_data_oe_class_, "","()V"); jmethodID mdbeConstr = env->GetMethodID(xtp_market_data_be_class_, "","()V"); if (mdseConstr == NULL || mdoeConstr == NULL || mdbeConstr == NULL) { jvm_->DetachCurrentThread(); return; } mdseObj = env->NewObject(xtp_market_data_se_class_, mdseConstr); mdoeObj = env->NewObject(xtp_market_data_oe_class_, mdoeConstr); mdbeObj = env->NewObject(xtp_market_data_be_class_, mdbeConstr); if (mdseObj == NULL || mdoeObj == NULL || mdbeObj == NULL) { jvm_->DetachCurrentThread(); return; } if (market_data->data_type_v2 == XTP_MARKETDATA_V2_ACTUAL) { generateMarketDataSeObj(env, mdseObj, market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, market_data->exchange_id, nTicker, nTickerLength, market_data->last_price, market_data->pre_close_price, market_data->open_price, market_data->high_price, market_data->low_price, market_data->close_price, market_data->upper_limit_price, market_data->lower_limit_price, market_data->data_time, market_data->qty, market_data->turnover, market_data->avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], market_data->trades_count, jstr_ticker_status, market_data->stk.iopv, market_data->data_type_v2, mdseObj, mdoeObj, mdbeObj); } if (market_data->data_type_v2 == XTP_MARKETDATA_V2_OPTION) { generateMarketDataOeObj(env, mdoeObj, market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, market_data->exchange_id, nTicker, nTickerLength, market_data->last_price, market_data->pre_close_price, market_data->open_price, market_data->high_price, market_data->low_price, market_data->close_price, market_data->upper_limit_price, market_data->lower_limit_price, market_data->data_time, market_data->qty, market_data->turnover, market_data->avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], market_data->trades_count, jstr_ticker_status, 0.0, market_data->data_type_v2, mdseObj, mdoeObj, mdbeObj); } if (market_data->data_type_v2 == XTP_MARKETDATA_V2_BOND && market_data->exchange_id == XTP_EXCHANGE_SH) { //L2 if (market_data->bond.instrument_status != NULL) { if (0 == strcmp(market_data->bond.instrument_status, "ADD")) { jstr_ticker_status = env->NewStringUTF(" 0"); } if (0 == strcmp(market_data->bond.instrument_status, "START")) { jstr_ticker_status = env->NewStringUTF("S 1"); } if (0 == strcmp(market_data->bond.instrument_status, "OCALL")) { jstr_ticker_status = env->NewStringUTF("C11"); } if (0 == strcmp(market_data->bond.instrument_status, "TRADE")) { jstr_ticker_status = env->NewStringUTF("T11"); } if (0 == strcmp(market_data->bond.instrument_status, "SUSP")) { jstr_ticker_status = env->NewStringUTF("P01"); } if (0 == strcmp(market_data->bond.instrument_status, "CLOSE")) { jstr_ticker_status = env->NewStringUTF("E01"); } if (0 == strcmp(market_data->bond.instrument_status, "ENDTR")) { jstr_ticker_status = env->NewStringUTF("E01"); } generateMarketDataBeObj(env, mdbeObj, market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, market_data->exchange_id, nTicker, nTickerLength, market_data->last_price, market_data->pre_close_price, market_data->open_price, market_data->high_price, market_data->low_price, market_data->close_price, market_data->upper_limit_price, market_data->lower_limit_price, market_data->data_time, market_data->qty, market_data->turnover, market_data->avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], market_data->trades_count, jstr_ticker_status, 0.0, market_data->data_type_v2, mdseObj, mdoeObj, mdbeObj); } else { //L1 generateMarketDataSeObj(env, mdseObj, market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, market_data->exchange_id, nTicker, nTickerLength, market_data->last_price, market_data->pre_close_price, market_data->open_price, market_data->high_price, market_data->low_price, market_data->close_price, market_data->upper_limit_price, market_data->lower_limit_price, market_data->data_time, market_data->qty, market_data->turnover, market_data->avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], market_data->trades_count, jstr_ticker_status, 0.0, market_data->data_type_v2, mdseObj, mdoeObj, mdbeObj); } } if (market_data->data_type_v2 == XTP_MARKETDATA_V2_INDEX) { generateMarketDataSeObj(env, mdseObj, market_data); env->CallVoidMethod(quote_plugin_obj_, jm_event, market_data->exchange_id, nTicker, nTickerLength, market_data->last_price, market_data->pre_close_price, market_data->open_price, market_data->high_price, market_data->low_price, market_data->close_price, market_data->upper_limit_price, market_data->lower_limit_price, market_data->data_time, market_data->qty, market_data->turnover, market_data->avg_price, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6],bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6],ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6],bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6],askQty[7], askQty[8], askQty[9], market_data->trades_count, jstr_ticker_status, 0.0, market_data->data_type_v2, mdseObj, mdoeObj, mdbeObj); } if (env2==NULL) { jvm_->DetachCurrentThread(); } } void XtpQuote::OnSubOrderBook(XTPST *ticker, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubOrderBook", "(Lcom/zts/xtp/quote/model/response/SpecificTickerResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubOrderBook(XTPST *ticker, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubOrderBook", "(Lcom/zts/xtp/quote/model/response/SpecificTickerResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnOrderBook(XTPOB *order_book) { int64_t id = int64_t(order_book->ticker[5] - '0'); id = id % thread_num_; { bool ret = true; ret = queue_order_book_[id]->push(order_book); if (!ret) LOG(ERROR) last_price, order_book->qty, order_book->turnover, order_book->trades_count, bid[0], bid[1], bid[2], bid[3], bid[4], bid[5], bid[6], bid[7], bid[8], bid[9], ask[0], ask[1], ask[2], ask[3], ask[4], ask[5], ask[6], ask[7], ask[8], ask[9], bidQty[0], bidQty[1], bidQty[2], bidQty[3], bidQty[4], bidQty[5], bidQty[6], bidQty[7], bidQty[8], bidQty[9], askQty[0], askQty[1], askQty[2], askQty[3], askQty[4], askQty[5], askQty[6], askQty[7], askQty[8], askQty[9], order_book->data_time); } void XtpQuote::DealOrderBook(int64_t id) { JNIEnv* env = NULL; // env = preInvoke(); jclass pluginClass = NULL; jmethodID jm_event = NULL; int count = 0; int mask = 10000; // bool flag = true; int64_t id_ = id; XTPOB order_book; while (live_) { while (!queue_order_book_[id]->isEmpty()) { { bool ret = queue_order_book_[id]->pop(order_book); if (!ret) { LOG(ERROR) DetachCurrentThread(); } } void XtpQuote::OnSubTickByTick(XTPST *ticker, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubTickByTick", "(Lcom/zts/xtp/quote/model/response/SpecificTickerResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubTickByTick(XTPST *ticker, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubTickByTick", "(Lcom/zts/xtp/quote/model/response/SpecificTickerResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_specific_ticker_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_specific_ticker_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_specific_ticker_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_specific_ticker_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastResp = env->GetMethodID(xtp_specific_ticker_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::DoTickByTick(XTPTBT *tbt_data, JNIEnv* env, jmethodID jm_event) { //LOG(INFO) ticker); switch(tbt_data->type) { // when type is entrust case XTP_TBT_ENTRUST: { // tbt entrust should not be null XTPTickByTickEntrust *xtp_tbt_entrust = &(tbt_data->entrust); if (xtp_tbt_entrust == NULL) { LOG(ERROR) CallVoidMethod(quote_plugin_obj_, jm_event, tbt_data->exchange_id, jstr_ticker, tbt_data->seq, tbt_data->data_time, tbt_data->type, xtp_tbt_entrust->channel_no, xtp_tbt_entrust->seq, xtp_tbt_entrust->price, xtp_tbt_entrust->qty, xtp_tbt_entrust->side, xtp_tbt_entrust->ord_type); break; } // when type is trade case XTP_TBT_TRADE: { // tbt trade should not be null XTPTickByTickTrade *xtp_tbt_trade = &(tbt_data->trade); if (xtp_tbt_trade == NULL) { LOG(ERROR) CallVoidMethod(quote_plugin_obj_, jm_event, tbt_data->exchange_id, jstr_ticker, tbt_data->seq, tbt_data->data_time, tbt_data->type, xtp_tbt_trade->channel_no, xtp_tbt_trade->seq, xtp_tbt_trade->price, xtp_tbt_trade->qty, xtp_tbt_trade->money, xtp_tbt_trade->bid_no, xtp_tbt_trade->ask_no, xtp_tbt_trade->trade_flag); break; } } } void XtpQuote::OnTickByTick(XTPTBT *tbt_data) { int64_t id = int64_t(tbt_data->ticker[5] - '0'); id = id % thread_num_; { bool ret = true; ret = queue_ticker_[id]->push(tbt_data); if (!ret) LOG(ERROR) DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllMarketData", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubscribeAllOrderBook", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllOrderBook", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubscribeAllTickByTick", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllTickByTick", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnQueryAllTickers(XTPQSI* ticker_info, XTPRI *error_info, bool is_last) { // //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onQueryAllTickers", "(Lcom/zts/xtp/quote/model/response/TickerInfoResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_quote_static_info_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_quote_static_info_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_quote_static_info_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker_info->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker_info->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_quote_static_info_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jstring jstr_tickerName = env->NewStringUTF(ticker_info->ticker_name); jmethodID jm_setTickerName = env->GetMethodID(xtp_quote_static_info_class_, "setTickerName", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTickerName, jstr_tickerName); jmethodID jm_setTickerType= env->GetMethodID(xtp_quote_static_info_class_, "setTickerType", "(I)V"); assert(jm_setTickerType != NULL); env->CallVoidMethod(rspObj, jm_setTickerType, ticker_info->ticker_type); jmethodID jm_setPreClosePrice = env->GetMethodID(xtp_quote_static_info_class_, "setPreClosePrice", "(D)V"); assert(jm_setPreClosePrice != NULL); double new_pre_close_price = ticker_info->pre_close_price; env->CallVoidMethod(rspObj, jm_setPreClosePrice, new_pre_close_price); jmethodID jm_setUpperLimitPrice = env->GetMethodID(xtp_quote_static_info_class_, "setUpperLimitPrice", "(D)V"); assert(jm_setUpperLimitPrice != NULL); double new_upper_limit_price = ticker_info->upper_limit_price; env->CallVoidMethod(rspObj, jm_setUpperLimitPrice, new_upper_limit_price); jmethodID jm_setLowerLimitPrice = env->GetMethodID(xtp_quote_static_info_class_, "setLowerLimitPrice", "(D)V"); assert(jm_setLowerLimitPrice != NULL); double new_lower_limit_price = ticker_info->lower_limit_price; env->CallVoidMethod(rspObj, jm_setLowerLimitPrice, new_lower_limit_price); jmethodID jm_setPriceTick = env->GetMethodID(xtp_quote_static_info_class_, "setPriceTick", "(D)V"); assert(jm_setPriceTick != NULL); double new_price_tick = ticker_info->price_tick; env->CallVoidMethod(rspObj, jm_setPriceTick, new_price_tick); jmethodID jm_setBuyQtyUnit = env->GetMethodID(xtp_quote_static_info_class_, "setBuyQtyUnit", "(I)V"); assert(jm_setBuyQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setBuyQtyUnit, ticker_info->buy_qty_unit); jmethodID jm_setSellQtyUnit = env->GetMethodID(xtp_quote_static_info_class_, "setSellQtyUnit", "(I)V"); assert(jm_setSellQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setSellQtyUnit, ticker_info->sell_qty_unit); jmethodID jm_setLastResp = env->GetMethodID(xtp_quote_static_info_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnQueryTickersPriceInfo(XTPTPI* ticker_info, XTPRI *error_info, bool is_last) { //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onQueryTickersPriceInfo", "(Lcom/zts/xtp/quote/model/response/TickerPriceInfoResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_ticker_price_info_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_ticker_price_info_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType= env->GetMethodID(xtp_ticker_price_info_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker_info->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker_info->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_ticker_price_info_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastPrice = env->GetMethodID(xtp_ticker_price_info_class_, "setLastPrice", "(D)V"); assert(jm_setLastPrice != NULL); double new_last_price = ticker_info->last_price; env->CallVoidMethod(rspObj, jm_setLastPrice, new_last_price); jmethodID jm_setLastResp = env->GetMethodID(xtp_ticker_price_info_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubscribeAllOptionMarketData", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllOptionMarketData(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllOptionMarketData", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubscribeAllOptionOrderBook", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllOptionOrderBook(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllOptionOrderBook", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onSubscribeAllOptionTickByTick", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnUnSubscribeAllOptionTickByTick(XTP_EXCHANGE_TYPE exchange_id, XTPRI *error_info){ //LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onUnSubscribeAllOptionTickByTick", "(ILcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); env->CallVoidMethod(quote_plugin_obj_, jm_event, (int)exchange_id, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::OnQueryAllTickersFullInfo(XTPQFI* ticker_info, XTPRI *error_info, bool is_last) { // LOG(INFO) error_id!=0){ LOG(ERROR) GetMethodID(pluginClass, "onQueryAllTickersFullInfo", "(Lcom/zts/xtp/quote/model/response/TickerFullInfoResponse;Lcom/zts/xtp/common/model/ErrorMessage;)V"); //generate the error msg object //fetch the errormsg default construct jmethodID defaultErrorConstr = env->GetMethodID(xtp_error_msg_class_, "","()V"); if (defaultErrorConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the errormsg object jobject errorMsgObj = env->NewObject(xtp_error_msg_class_, defaultErrorConstr); if (errorMsgObj == NULL) { jvm_->DetachCurrentThread(); return; } generateErrorMsgObj(env, errorMsgObj, error_info, 0); jobject rspObj=NULL; //error_info = null or error_id =0 means successful if (error_info == NULL || error_info->error_id == 0) { //fetch the default construct jmethodID defaultConstr = env->GetMethodID(xtp_quote_static_full_info_class_, "","()V"); if (defaultConstr == NULL) { jvm_->DetachCurrentThread(); return; } //create the object rspObj = env->NewObject(xtp_quote_static_full_info_class_, defaultConstr); if (rspObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setExchangeType = env->GetMethodID(xtp_quote_static_full_info_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, ticker_info->exchange_id); jstring jstr_ticker = env->NewStringUTF(ticker_info->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_quote_static_full_info_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jstring jstr_tickerName = env->NewStringUTF(ticker_info->ticker_name); jmethodID jm_setTickerName = env->GetMethodID(xtp_quote_static_full_info_class_, "setTickerName", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTickerName, jstr_tickerName); jmethodID jm_setSecurityType = env->GetMethodID(xtp_quote_static_full_info_class_, "setSecurityType", "(I)V"); assert(jm_setSecurityType != NULL); env->CallVoidMethod(rspObj, jm_setSecurityType, ticker_info->security_type); jmethodID jm_setQualificationType = env->GetMethodID(xtp_quote_static_full_info_class_, "setQualificationType", "(I)V"); assert(jm_setQualificationType != NULL); env->CallVoidMethod(rspObj, jm_setQualificationType, ticker_info->ticker_qualification_class); jmethodID jm_setIsRegistration = env->GetMethodID(xtp_quote_static_full_info_class_, "setIsRegistration", "(Z)V"); assert(jm_setIsRegistration != NULL); env->CallVoidMethod(rspObj, jm_setIsRegistration, ticker_info->is_registration); jmethodID jm_setIsVIE = env->GetMethodID(xtp_quote_static_full_info_class_, "setIsVIE", "(Z)V"); assert(jm_setIsVIE != NULL); env->CallVoidMethod(rspObj, jm_setIsVIE, ticker_info->is_VIE); jmethodID jm_setIsNoprofit = env->GetMethodID(xtp_quote_static_full_info_class_, "setIsNoprofit", "(Z)V"); assert(jm_setIsNoprofit != NULL); env->CallVoidMethod(rspObj, jm_setIsNoprofit, ticker_info->is_noprofit); jmethodID jm_setIsWeightedVotingRights = env->GetMethodID(xtp_quote_static_full_info_class_, "setIsWeightedVotingRights", "(Z)V"); assert(jm_setIsWeightedVotingRights != NULL); env->CallVoidMethod(rspObj, jm_setIsWeightedVotingRights, ticker_info->is_weighted_voting_rights); jmethodID jm_setIsHavePriceLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setIsHavePriceLimit", "(Z)V"); assert(jm_setIsHavePriceLimit != NULL); env->CallVoidMethod(rspObj, jm_setIsHavePriceLimit, ticker_info->is_have_price_limit); jmethodID jm_setPreClosePrice = env->GetMethodID(xtp_quote_static_full_info_class_, "setPreClosePrice", "(D)V"); assert(jm_setPreClosePrice != NULL); double new_pre_close_price = ticker_info->pre_close_price; env->CallVoidMethod(rspObj, jm_setPreClosePrice, new_pre_close_price); jmethodID jm_setUpperLimitPrice = env->GetMethodID(xtp_quote_static_full_info_class_, "setUpperLimitPrice", "(D)V"); assert(jm_setUpperLimitPrice != NULL); double new_upper_limit_price = ticker_info->upper_limit_price; env->CallVoidMethod(rspObj, jm_setUpperLimitPrice, new_upper_limit_price); jmethodID jm_setLowerLimitPrice = env->GetMethodID(xtp_quote_static_full_info_class_, "setLowerLimitPrice", "(D)V"); assert(jm_setLowerLimitPrice != NULL); double new_lower_limit_price = ticker_info->lower_limit_price; env->CallVoidMethod(rspObj, jm_setLowerLimitPrice, new_lower_limit_price); jmethodID jm_setPriceTick = env->GetMethodID(xtp_quote_static_full_info_class_, "setPriceTick", "(D)V"); assert(jm_setPriceTick != NULL); double new_price_tick = ticker_info->price_tick; env->CallVoidMethod(rspObj, jm_setPriceTick, new_price_tick); jmethodID jm_setBidQtyUpperLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setBidQtyUpperLimit", "(I)V"); assert(jm_setBidQtyUpperLimit != NULL); env->CallVoidMethod(rspObj, jm_setBidQtyUpperLimit, ticker_info->bid_qty_upper_limit); jmethodID jm_setBidQtyLowerLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setBidQtyLowerLimit", "(I)V"); assert(jm_setBidQtyLowerLimit != NULL); env->CallVoidMethod(rspObj, jm_setBidQtyLowerLimit, ticker_info->bid_qty_lower_limit); jmethodID jm_setBidQtyUnit = env->GetMethodID(xtp_quote_static_full_info_class_, "setBidQtyUnit", "(I)V"); assert(jm_setBidQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setBidQtyUnit, ticker_info->bid_qty_unit); jmethodID jm_setAskQtyUpperLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setAskQtyUpperLimit", "(I)V"); assert(jm_setAskQtyUpperLimit != NULL); env->CallVoidMethod(rspObj, jm_setAskQtyUpperLimit, ticker_info->ask_qty_upper_limit); jmethodID jm_setAskQtyLowerLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setAskQtyLowerLimit", "(I)V"); assert(jm_setAskQtyLowerLimit != NULL); env->CallVoidMethod(rspObj, jm_setAskQtyLowerLimit, ticker_info->ask_qty_lower_limit); jmethodID jm_setAskQtyUnit = env->GetMethodID(xtp_quote_static_full_info_class_, "setAskQtyUnit", "(I)V"); assert(jm_setAskQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setAskQtyUnit, ticker_info->ask_qty_unit); jmethodID jm_setMarketBidQtyUpperLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketBidQtyUpperLimit", "(I)V"); assert(jm_setMarketBidQtyUpperLimit != NULL); env->CallVoidMethod(rspObj, jm_setMarketBidQtyUpperLimit, ticker_info->market_bid_qty_upper_limit); jmethodID jm_setMarketBidQtyLowerLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketBidQtyLowerLimit", "(I)V"); assert(jm_setMarketBidQtyLowerLimit != NULL); env->CallVoidMethod(rspObj, jm_setMarketBidQtyLowerLimit, ticker_info->market_bid_qty_lower_limit); jmethodID jm_setMarketBidQtyUnit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketBidQtyUnit", "(I)V"); assert(jm_setMarketBidQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setMarketBidQtyUnit, ticker_info->market_bid_qty_unit); jmethodID jm_setMarketAskQtyUpperLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketAskQtyUpperLimit", "(I)V"); assert(jm_setMarketAskQtyUpperLimit != NULL); env->CallVoidMethod(rspObj, jm_setMarketAskQtyUpperLimit, ticker_info->market_ask_qty_upper_limit); jmethodID jm_setMarketAskQtyLowerLimit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketAskQtyLowerLimit", "(I)V"); assert(jm_setMarketAskQtyLowerLimit != NULL); env->CallVoidMethod(rspObj, jm_setMarketAskQtyLowerLimit, ticker_info->market_ask_qty_lower_limit); jmethodID jm_setMarketAskQtyUnit = env->GetMethodID(xtp_quote_static_full_info_class_, "setMarketAskQtyUnit", "(I)V"); assert(jm_setMarketAskQtyUnit != NULL); env->CallVoidMethod(rspObj, jm_setMarketAskQtyUnit, ticker_info->market_ask_qty_unit); jmethodID jm_setSecurityStatus = env->GetMethodID(xtp_quote_static_full_info_class_, "setSecurityStatus", "(I)V"); assert(jm_setSecurityStatus != NULL); env->CallVoidMethod(rspObj, jm_setSecurityStatus, ticker_info->security_status); jmethodID jm_setUnknown1 = env->GetMethodID(xtp_quote_static_full_info_class_, "setUnknown1", "(I)V"); env->CallVoidMethod(rspObj, jm_setUnknown1, ticker_info->unknown1); jmethodID jm_setUnknown = env->GetMethodID(xtp_quote_static_full_info_class_, "setUnknown", "(I)V"); env->CallVoidMethod(rspObj, jm_setUnknown, ticker_info->unknown); jmethodID jm_setLastResp = env->GetMethodID(xtp_quote_static_full_info_class_, "setLastResp", "(Z)V"); assert(jm_setLastResp != NULL); env->CallVoidMethod(rspObj, jm_setLastResp, is_last); } env->CallVoidMethod(quote_plugin_obj_, jm_event, rspObj, errorMsgObj); jvm_->DetachCurrentThread(); } void XtpQuote::generateErrorMsgObj(JNIEnv* env, jobject& errorMsgObj,XTPRI *error_info, int request_id) { //call setRequestId jmethodID jm_setRequestId = env->GetMethodID(xtp_error_msg_class_, "setRequestId", "(I)V"); assert(jm_setRequestId != NULL); env->CallVoidMethod(errorMsgObj, jm_setRequestId, request_id); //call setErrorId if (error_info != NULL) { jmethodID jm_setErrorId = env->GetMethodID(xtp_error_msg_class_, "setErrorId", "(I)V"); assert(jm_setErrorId != NULL); env->CallVoidMethod(errorMsgObj, jm_setErrorId, error_info->error_id); //call setErrorMsg jstring jerrorMsgStr = env->NewStringUTF(error_info->error_msg); jmethodID jm_setErrorMsg = env->GetMethodID(xtp_error_msg_class_, "setErrorMsg", "(Ljava/lang/String;)V"); env->CallVoidMethod(errorMsgObj, jm_setErrorMsg, jerrorMsgStr); } } void XtpQuote::generateMarketDataObj(JNIEnv* env, jobject& rspObj, XTPMD *sourceObj) { jmethodID jm_setExchangeType= env->GetMethodID(xtp_market_data_class_, "setExchangeType", "(I)V"); assert(jm_setExchangeType != NULL); env->CallVoidMethod(rspObj, jm_setExchangeType, sourceObj->exchange_id); jstring jstr_ticker = env->NewStringUTF(sourceObj->ticker); jmethodID jm_setTicker = env->GetMethodID(xtp_market_data_class_, "setTicker", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTicker, jstr_ticker); jmethodID jm_setLastPrice = env->GetMethodID(xtp_market_data_class_, "setLastPrice", "(D)V"); assert(jm_setLastPrice != NULL); double new_last_price = sourceObj->last_price; env->CallVoidMethod(rspObj, jm_setLastPrice, new_last_price); jmethodID jm_setPreClosePrice = env->GetMethodID(xtp_market_data_class_, "setPreClosePrice", "(D)V"); assert(jm_setPreClosePrice != NULL); double new_pre_close_price = sourceObj->pre_close_price; env->CallVoidMethod(rspObj, jm_setPreClosePrice, new_pre_close_price); jmethodID jm_setOpenPrice = env->GetMethodID(xtp_market_data_class_, "setOpenPrice", "(D)V"); assert(jm_setOpenPrice != NULL); double new_open_price = sourceObj->open_price; env->CallVoidMethod(rspObj, jm_setOpenPrice, new_open_price); jmethodID jm_setHighPrice = env->GetMethodID(xtp_market_data_class_, "setHighPrice", "(D)V"); assert(jm_setHighPrice != NULL); double new_high_price = sourceObj->high_price; env->CallVoidMethod(rspObj, jm_setHighPrice, new_high_price); jmethodID jm_setLowPrice = env->GetMethodID(xtp_market_data_class_, "setLowPrice", "(D)V"); assert(jm_setLowPrice != NULL); double new_low_price = sourceObj->low_price; env->CallVoidMethod(rspObj, jm_setLowPrice, new_low_price); jmethodID jm_setClosePrice = env->GetMethodID(xtp_market_data_class_, "setClosePrice", "(D)V"); assert(jm_setClosePrice != NULL); double new_close_price = sourceObj->close_price; env->CallVoidMethod(rspObj, jm_setClosePrice, new_close_price); jmethodID jm_setPreTotalLongPositon = env->GetMethodID(xtp_market_data_class_, "setPreTotalLongPositon", "(J)V"); assert(jm_setPreTotalLongPositon != NULL); env->CallVoidMethod(rspObj, jm_setPreTotalLongPositon, sourceObj->pre_total_long_positon); jmethodID jm_setTotalLongPositon = env->GetMethodID(xtp_market_data_class_, "setTotalLongPositon", "(J)V"); assert(jm_setTotalLongPositon != NULL); env->CallVoidMethod(rspObj, jm_setTotalLongPositon, sourceObj->total_long_positon); jmethodID jm_setPreSettlementPrice = env->GetMethodID(xtp_market_data_class_, "setPreSettlementPrice", "(D)V"); assert(jm_setPreSettlementPrice != NULL); double new_pre_settlement_price = sourceObj->pre_settl_price; env->CallVoidMethod(rspObj, jm_setPreSettlementPrice, new_pre_settlement_price); jmethodID jm_setSettlementPrice = env->GetMethodID(xtp_market_data_class_, "setSettlementPrice", "(D)V"); assert(jm_setSettlementPrice != NULL); double new_settlement_price = sourceObj->settl_price; env->CallVoidMethod(rspObj, jm_setSettlementPrice, new_settlement_price); jmethodID jm_setUpperLimitPrice = env->GetMethodID(xtp_market_data_class_, "setUpperLimitPrice", "(D)V"); assert(jm_setUpperLimitPrice != NULL); double new_upper_limit_price = sourceObj->upper_limit_price; env->CallVoidMethod(rspObj, jm_setUpperLimitPrice, new_upper_limit_price); jmethodID jm_setLowerLimitPrice = env->GetMethodID(xtp_market_data_class_, "setLowerLimitPrice", "(D)V"); assert(jm_setLowerLimitPrice != NULL); double new_lower_limit_price = sourceObj->lower_limit_price; env->CallVoidMethod(rspObj, jm_setLowerLimitPrice, new_lower_limit_price); jmethodID jm_setPreDelta = env->GetMethodID(xtp_market_data_class_, "setPreDelta", "(D)V"); assert(jm_setPreDelta != NULL); env->CallVoidMethod(rspObj, jm_setPreDelta, sourceObj->pre_delta); jmethodID jm_setCurrDelta = env->GetMethodID(xtp_market_data_class_, "setCurrDelta", "(D)V"); assert(jm_setCurrDelta != NULL); env->CallVoidMethod(rspObj, jm_setCurrDelta, sourceObj->curr_delta); jmethodID jm_setDataTime = env->GetMethodID(xtp_market_data_class_, "setDataTime", "(J)V"); env->CallVoidMethod(rspObj, jm_setDataTime, sourceObj->data_time); jmethodID jm_setQty = env->GetMethodID(xtp_market_data_class_, "setQty", "(J)V"); env->CallVoidMethod(rspObj, jm_setQty, sourceObj->qty); jmethodID jm_setTurnover = env->GetMethodID(xtp_market_data_class_, "setTurnover", "(D)V"); assert(jm_setTurnover != NULL); env->CallVoidMethod(rspObj, jm_setTurnover, sourceObj->turnover); jmethodID jm_setAvgPrice = env->GetMethodID(xtp_market_data_class_, "setAvgPrice", "(D)V"); assert(jm_setAvgPrice != NULL); double new_avg_price = sourceObj->avg_price; env->CallVoidMethod(rspObj, jm_setAvgPrice, new_avg_price); jdoubleArray jarray_setBid = env->NewDoubleArray(10); env->SetDoubleArrayRegion(jarray_setBid, 0, 10, sourceObj->bid); jmethodID jm_setBid = env->GetMethodID(xtp_market_data_class_, "setBid", "([D)V"); env->CallVoidMethod(rspObj, jm_setBid, jarray_setBid); jdoubleArray jarray_setAsk = env->NewDoubleArray(10); env->SetDoubleArrayRegion(jarray_setAsk, 0, 10, sourceObj->ask); jmethodID jm_setAsk = env->GetMethodID(xtp_market_data_class_, "setAsk", "([D)V"); env->CallVoidMethod(rspObj, jm_setAsk, jarray_setAsk); jlongArray jarray_setBidQty = env->NewLongArray(10); env->SetLongArrayRegion(jarray_setBidQty, 0, 10, (jlong *)sourceObj->bid_qty); jmethodID jm_setBidQty = env->GetMethodID(xtp_market_data_class_, "setBidQty", "([J)V"); env->CallVoidMethod(rspObj, jm_setBidQty, jarray_setBidQty); jlongArray jarray_setAskQty = env->NewLongArray(10); env->SetLongArrayRegion(jarray_setAskQty, 0, 10, (jlong *)sourceObj->ask_qty); jmethodID jm_setAskQty = env->GetMethodID(xtp_market_data_class_, "setAskQty", "([J)V"); env->CallVoidMethod(rspObj, jm_setAskQty, jarray_setAskQty); jmethodID jm_setTradesCount = env->GetMethodID(xtp_market_data_class_, "setTradesCount", "(J)V"); env->CallVoidMethod(rspObj, jm_setTradesCount, sourceObj->trades_count); jstring jstr_setTickerStatus = env->NewStringUTF(sourceObj->ticker_status); jmethodID jm_setTickerStatus = env->GetMethodID(xtp_market_data_class_, "setTickerStatus", "(Ljava/lang/String;)V"); env->CallVoidMethod(rspObj, jm_setTickerStatus, jstr_setTickerStatus); //only use XTPMarketDataStockExData if (sourceObj->data_type == XTP_MARKETDATA_ACTUAL) { jobject mdseObj = NULL; jmethodID mdseConstr = env->GetMethodID(xtp_market_data_se_class_, "","()V"); if (mdseConstr == NULL) { jvm_->DetachCurrentThread(); return; } mdseObj = env->NewObject(xtp_market_data_se_class_, mdseConstr); if (mdseObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setTotalBidQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalBidQty", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalBidQty, sourceObj->stk.total_bid_qty); jmethodID jm_setTotalAskQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalAskQty", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalAskQty, sourceObj->stk.total_ask_qty); jmethodID jm_setMaBidPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBidPrice", "(D)V"); assert(jm_setMaBidPrice != NULL); double new_ma_bid_price = sourceObj->stk.ma_bid_price; env->CallVoidMethod(mdseObj, jm_setMaBidPrice, new_ma_bid_price); jmethodID jm_setMaAskPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaAskPrice", "(D)V"); assert(jm_setMaAskPrice != NULL); double new_ma_ask_price = sourceObj->stk.ma_ask_price; env->CallVoidMethod(mdseObj, jm_setMaAskPrice, new_ma_ask_price); jmethodID jm_setMaBondBidPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBondBidPrice", "(D)V"); assert(jm_setMaBondBidPrice != NULL); double new_ma_bond_bid_price = sourceObj->stk.ma_bond_bid_price; env->CallVoidMethod(mdseObj, jm_setMaBondBidPrice, new_ma_bond_bid_price); jmethodID jm_setMaBondAskPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBondAskPrice", "(D)V"); assert(jm_setMaBondAskPrice != NULL); double new_ma_bond_ask_price = sourceObj->stk.ma_bond_ask_price; env->CallVoidMethod(mdseObj, jm_setMaBondAskPrice, new_ma_bond_ask_price); jmethodID jm_setYieldToMaturity = env->GetMethodID(xtp_market_data_se_class_, "setYieldToMaturity", "(D)V"); assert(jm_setYieldToMaturity != NULL); env->CallVoidMethod(mdseObj, jm_setYieldToMaturity, sourceObj->stk.yield_to_maturity); jmethodID jm_setIopv = env->GetMethodID(xtp_market_data_se_class_, "setIopv", "(D)V"); assert(jm_setIopv != NULL); env->CallVoidMethod(mdseObj, jm_setIopv, sourceObj->stk.iopv); jmethodID jm_setEtfBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyCount", "(I)V"); assert(jm_setEtfBuyCount != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyCount, sourceObj->stk.etf_buy_count); jmethodID jm_setEtfSellCount = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellCount", "(I)V"); assert(jm_setEtfSellCount != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellCount, sourceObj->stk.etf_sell_count); jmethodID jm_setEtfBuyQty = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyQty", "(D)V"); assert(jm_setEtfBuyQty != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyQty, sourceObj->stk.etf_buy_qty); jmethodID jm_setEtfBuyMoney = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyMoney", "(D)V"); assert(jm_setEtfBuyMoney != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyMoney, sourceObj->stk.etf_buy_money); jmethodID jm_setEtfSellQty = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellQty", "(D)V"); assert(jm_setEtfSellQty != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellQty, sourceObj->stk.etf_sell_qty); jmethodID jm_setEtfSellMoney = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellMoney", "(D)V"); assert(jm_setEtfSellMoney != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellMoney, sourceObj->stk.etf_sell_money); jmethodID jm_setTotalWarrantExecQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalWarrantExecQty", "(D)V"); assert(jm_setTotalWarrantExecQty != NULL); env->CallVoidMethod(mdseObj, jm_setTotalWarrantExecQty, sourceObj->stk.total_warrant_exec_qty); jmethodID jm_setWarrantLowerPrice = env->GetMethodID(xtp_market_data_se_class_, "setWarrantLowerPrice", "(D)V"); assert(jm_setWarrantLowerPrice != NULL); double new_warrant_lower_price = sourceObj->stk.warrant_lower_price; env->CallVoidMethod(mdseObj, jm_setWarrantLowerPrice, new_warrant_lower_price); jmethodID jm_setWarrantUpperPrice = env->GetMethodID(xtp_market_data_se_class_, "setWarrantUpperPrice", "(D)V"); assert(jm_setWarrantUpperPrice != NULL); double new_warrant_upper_price = sourceObj->stk.warrant_upper_price; env->CallVoidMethod(mdseObj, jm_setWarrantUpperPrice, new_warrant_upper_price); jmethodID jm_setCancelBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyCount", "(I)V"); assert(jm_setCancelBuyCount != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyCount, sourceObj->stk.cancel_buy_count); jmethodID jm_setCancelSellCount = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellCount", "(I)V"); assert(jm_setCancelSellCount != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellCount, sourceObj->stk.cancel_sell_count); jmethodID jm_setCancelBuyQty = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyQty", "(D)V"); assert(jm_setCancelBuyQty != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyQty, sourceObj->stk.cancel_buy_qty); jmethodID jm_setCancelSellQty = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellQty", "(D)V"); assert(jm_setCancelSellQty != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellQty, sourceObj->stk.cancel_sell_qty); jmethodID jm_setCancelBuyMoney = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyMoney", "(D)V"); assert(jm_setCancelBuyMoney != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyMoney, sourceObj->stk.cancel_buy_money); jmethodID jm_setCancelSellMoney = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellMoney", "(D)V"); assert(jm_setCancelSellMoney != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellMoney, sourceObj->stk.cancel_sell_money); jmethodID jm_setTotalBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setTotalBuyCount", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalBuyCount, sourceObj->stk.total_buy_count); jmethodID jm_setTotalSellCount = env->GetMethodID(xtp_market_data_se_class_, "setTotalSellCount", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalSellCount, sourceObj->stk.total_sell_count); jmethodID jm_setDurationAfterBuy = env->GetMethodID(xtp_market_data_se_class_, "setDurationAfterBuy", "(I)V"); assert(jm_setDurationAfterBuy != NULL); env->CallVoidMethod(mdseObj, jm_setDurationAfterBuy, sourceObj->stk.duration_after_buy); jmethodID jm_setDurationAfterSell = env->GetMethodID(xtp_market_data_se_class_, "setDurationAfterSell", "(I)V"); assert(jm_setDurationAfterSell != NULL); env->CallVoidMethod(mdseObj, jm_setDurationAfterSell, sourceObj->stk.duration_after_sell); jmethodID jm_setNumBidOrders = env->GetMethodID(xtp_market_data_se_class_, "setNumBidOrders", "(I)V"); assert(jm_setNumBidOrders != NULL); env->CallVoidMethod(mdseObj, jm_setNumBidOrders, sourceObj->stk.num_bid_orders); jmethodID jm_setNumAskOrders = env->GetMethodID(xtp_market_data_se_class_, "setNumAskOrders", "(I)V"); assert(jm_setNumAskOrders != NULL); env->CallVoidMethod(mdseObj, jm_setNumAskOrders, sourceObj->stk.num_ask_orders); jmethodID jm_setPreIopv = env->GetMethodID(xtp_market_data_se_class_, "setPreIopv", "(D)V"); assert(jm_setPreIopv != NULL); env->CallVoidMethod(mdseObj, jm_setPreIopv, sourceObj->stk.pre_iopv); jmethodID jm_setStk = env->GetMethodID(xtp_market_data_class_, "setStk", "(Lcom/zts/xtp/quote/model/response/MarketDataStockExDataResponse;)V"); env->CallVoidMethod(rspObj, jm_setStk, mdseObj); } else{ jobject mdoeObj = NULL; jmethodID mdoeConstr = env->GetMethodID(xtp_market_data_oe_class_, "","()V"); if (mdoeConstr == NULL) { jvm_->DetachCurrentThread(); return; } mdoeObj = env->NewObject(xtp_market_data_oe_class_, mdoeConstr); if (mdoeObj == NULL) { jvm_->DetachCurrentThread(); return; } jmethodID jm_setAuctionPrice = env->GetMethodID(xtp_market_data_oe_class_, "setAuctionPrice", "(D)V"); assert(jm_setAuctionPrice != NULL); env->CallVoidMethod(mdoeObj, jm_setAuctionPrice, sourceObj->opt.auction_price); jmethodID jm_setAuctionQty = env->GetMethodID(xtp_market_data_oe_class_, "setAuctionQty", "(J)V"); assert(jm_setAuctionQty != NULL); env->CallVoidMethod(mdoeObj, jm_setAuctionQty, sourceObj->opt.auction_qty); jmethodID jm_setLastEnquiryTime = env->GetMethodID(xtp_market_data_oe_class_, "setLastEnquiryTime", "(J)V"); assert(jm_setLastEnquiryTime != NULL); env->CallVoidMethod(mdoeObj, jm_setLastEnquiryTime, sourceObj->opt.last_enquiry_time); jmethodID jm_setOpt = env->GetMethodID(xtp_market_data_class_, "setOpt", "(Lcom/zts/xtp/quote/model/response/MarketDataOptionExDataResponse;)V"); env->CallVoidMethod(rspObj, jm_setOpt, mdoeObj); } jmethodID jm_setDataType = env->GetMethodID(xtp_market_data_class_, "setDataType", "(I)V"); env->CallVoidMethod(rspObj, jm_setDataType, sourceObj->data_type); } void XtpQuote::generateMarketDataSeObj(JNIEnv* env, jobject& mdseObj, XTPMD *sourceObj) { jmethodID jm_setTotalBidQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalBidQty", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalBidQty, sourceObj->stk.total_bid_qty); jmethodID jm_setTotalAskQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalAskQty", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalAskQty, sourceObj->stk.total_ask_qty); jmethodID jm_setMaBidPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBidPrice", "(D)V"); assert(jm_setMaBidPrice != NULL); double new_ma_bid_price = sourceObj->stk.ma_bid_price; env->CallVoidMethod(mdseObj, jm_setMaBidPrice, new_ma_bid_price); jmethodID jm_setMaAskPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaAskPrice", "(D)V"); assert(jm_setMaAskPrice != NULL); double new_ma_ask_price = sourceObj->stk.ma_ask_price; env->CallVoidMethod(mdseObj, jm_setMaAskPrice, new_ma_ask_price); jmethodID jm_setMaBondBidPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBondBidPrice", "(D)V"); assert(jm_setMaBondBidPrice != NULL); double new_ma_bond_bid_price = sourceObj->stk.ma_bond_bid_price; env->CallVoidMethod(mdseObj, jm_setMaBondBidPrice, new_ma_bond_bid_price); jmethodID jm_setMaBondAskPrice = env->GetMethodID(xtp_market_data_se_class_, "setMaBondAskPrice", "(D)V"); assert(jm_setMaBondAskPrice != NULL); double new_ma_bond_ask_price = sourceObj->stk.ma_bond_ask_price; env->CallVoidMethod(mdseObj, jm_setMaBondAskPrice, new_ma_bond_ask_price); jmethodID jm_setYieldToMaturity = env->GetMethodID(xtp_market_data_se_class_, "setYieldToMaturity", "(D)V"); assert(jm_setYieldToMaturity != NULL); env->CallVoidMethod(mdseObj, jm_setYieldToMaturity, sourceObj->stk.yield_to_maturity); jmethodID jm_setIopv = env->GetMethodID(xtp_market_data_se_class_, "setIopv", "(D)V"); assert(jm_setIopv != NULL); env->CallVoidMethod(mdseObj, jm_setIopv, sourceObj->stk.iopv); jmethodID jm_setEtfBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyCount", "(I)V"); assert(jm_setEtfBuyCount != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyCount, sourceObj->stk.etf_buy_count); jmethodID jm_setEtfSellCount = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellCount", "(I)V"); assert(jm_setEtfSellCount != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellCount, sourceObj->stk.etf_sell_count); jmethodID jm_setEtfBuyQty = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyQty", "(D)V"); assert(jm_setEtfBuyQty != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyQty, sourceObj->stk.etf_buy_qty); jmethodID jm_setEtfBuyMoney = env->GetMethodID(xtp_market_data_se_class_, "setEtfBuyMoney", "(D)V"); assert(jm_setEtfBuyMoney != NULL); env->CallVoidMethod(mdseObj, jm_setEtfBuyMoney, sourceObj->stk.etf_buy_money); jmethodID jm_setEtfSellQty = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellQty", "(D)V"); assert(jm_setEtfSellQty != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellQty, sourceObj->stk.etf_sell_qty); jmethodID jm_setEtfSellMoney = env->GetMethodID(xtp_market_data_se_class_, "setEtfSellMoney", "(D)V"); assert(jm_setEtfSellMoney != NULL); env->CallVoidMethod(mdseObj, jm_setEtfSellMoney, sourceObj->stk.etf_sell_money); jmethodID jm_setTotalWarrantExecQty = env->GetMethodID(xtp_market_data_se_class_, "setTotalWarrantExecQty", "(D)V"); assert(jm_setTotalWarrantExecQty != NULL); env->CallVoidMethod(mdseObj, jm_setTotalWarrantExecQty, sourceObj->stk.total_warrant_exec_qty); jmethodID jm_setWarrantLowerPrice = env->GetMethodID(xtp_market_data_se_class_, "setWarrantLowerPrice", "(D)V"); assert(jm_setWarrantLowerPrice != NULL); double new_warrant_lower_price = sourceObj->stk.warrant_lower_price; env->CallVoidMethod(mdseObj, jm_setWarrantLowerPrice, new_warrant_lower_price); jmethodID jm_setWarrantUpperPrice = env->GetMethodID(xtp_market_data_se_class_, "setWarrantUpperPrice", "(D)V"); assert(jm_setWarrantUpperPrice != NULL); double new_warrant_upper_price = sourceObj->stk.warrant_upper_price; env->CallVoidMethod(mdseObj, jm_setWarrantUpperPrice, new_warrant_upper_price); jmethodID jm_setCancelBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyCount", "(I)V"); assert(jm_setCancelBuyCount != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyCount, sourceObj->stk.cancel_buy_count); jmethodID jm_setCancelSellCount = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellCount", "(I)V"); assert(jm_setCancelSellCount != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellCount, sourceObj->stk.cancel_sell_count); jmethodID jm_setCancelBuyQty = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyQty", "(D)V"); assert(jm_setCancelBuyQty != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyQty, sourceObj->stk.cancel_buy_qty); jmethodID jm_setCancelSellQty = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellQty", "(D)V"); assert(jm_setCancelSellQty != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellQty, sourceObj->stk.cancel_sell_qty); jmethodID jm_setCancelBuyMoney = env->GetMethodID(xtp_market_data_se_class_, "setCancelBuyMoney", "(D)V"); assert(jm_setCancelBuyMoney != NULL); env->CallVoidMethod(mdseObj, jm_setCancelBuyMoney, sourceObj->stk.cancel_buy_money); jmethodID jm_setCancelSellMoney = env->GetMethodID(xtp_market_data_se_class_, "setCancelSellMoney", "(D)V"); assert(jm_setCancelSellMoney != NULL); env->CallVoidMethod(mdseObj, jm_setCancelSellMoney, sourceObj->stk.cancel_sell_money); jmethodID jm_setTotalBuyCount = env->GetMethodID(xtp_market_data_se_class_, "setTotalBuyCount", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalBuyCount, sourceObj->stk.total_buy_count); jmethodID jm_setTotalSellCount = env->GetMethodID(xtp_market_data_se_class_, "setTotalSellCount", "(J)V"); env->CallVoidMethod(mdseObj, jm_setTotalSellCount, sourceObj->stk.total_sell_count); jmethodID jm_setDurationAfterBuy = env->GetMethodID(xtp_market_data_se_class_, "setDurationAfterBuy", "(I)V"); assert(jm_setDurationAfterBuy != NULL); env->CallVoidMethod(mdseObj, jm_setDurationAfterBuy, sourceObj->stk.duration_after_buy); jmethodID jm_setDurationAfterSell = env->GetMethodID(xtp_market_data_se_class_, "setDurationAfterSell", "(I)V"); assert(jm_setDurationAfterSell != NULL); env->CallVoidMethod(mdseObj, jm_setDurationAfterSell, sourceObj->stk.duration_after_sell); jmethodID jm_setNumBidOrders = env->GetMethodID(xtp_market_data_se_class_, "setNumBidOrders", "(I)V"); assert(jm_setNumBidOrders != NULL); env->CallVoidMethod(mdseObj, jm_setNumBidOrders, sourceObj->stk.num_bid_orders); jmethodID jm_setNumAskOrders = env->GetMethodID(xtp_market_data_se_class_, "setNumAskOrders", "(I)V"); assert(jm_setNumAskOrders != NULL); env->CallVoidMethod(mdseObj, jm_setNumAskOrders, sourceObj->stk.num_ask_orders); jmethodID jm_setPreIopv = env->GetMethodID(xtp_market_data_se_class_, "setPreIopv", "(D)V"); assert(jm_setPreIopv != NULL); env->CallVoidMethod(mdseObj, jm_setPreIopv, sourceObj->stk.pre_iopv); } void XtpQuote::generateMarketDataOeObj(JNIEnv* env, jobject& mdoeObj, XTPMD *sourceObj) { jmethodID jm_setAuctionPrice = env->GetMethodID(xtp_market_data_oe_class_, "setAuctionPrice", "(D)V"); assert(jm_setAuctionPrice != NULL); env->CallVoidMethod(mdoeObj, jm_setAuctionPrice, sourceObj->opt.auction_price); jmethodID jm_setAuctionQty = env->GetMethodID(xtp_market_data_oe_class_, "setAuctionQty", "(J)V"); assert(jm_setAuctionQty != NULL); env->CallVoidMethod(mdoeObj, jm_setAuctionQty, sourceObj->opt.auction_qty); jmethodID jm_setLastEnquiryTime = env->GetMethodID(xtp_market_data_oe_class_, "setLastEnquiryTime", "(J)V"); assert(jm_setLastEnquiryTime != NULL); env->CallVoidMethod(mdoeObj, jm_setLastEnquiryTime, sourceObj->opt.last_enquiry_time); } void XtpQuote::generateMarketDataBeObj(JNIEnv* env, jobject& mdbeObj, XTPMD *sourceObj) { jmethodID jm_setTotalBidQty = env->GetMethodID(xtp_market_data_be_class_, "setTotalBidQty", "(J)V"); env->CallVoidMethod(mdbeObj, jm_setTotalBidQty, sourceObj->bond.total_bid_qty); jmethodID jm_setTotalAskQty = env->GetMethodID(xtp_market_data_be_class_, "setTotalAskQty", "(J)V"); env->CallVoidMethod(mdbeObj, jm_setTotalAskQty, sourceObj->bond.total_ask_qty); jmethodID jm_setMaBidPrice = env->GetMethodID(xtp_market_data_be_class_, "setMaBidPrice", "(D)V"); assert(jm_setMaBidPrice != NULL); double new_ma_bid_price = sourceObj->bond.ma_bid_price; env->CallVoidMethod(mdbeObj, jm_setMaBidPrice, new_ma_bid_price); jmethodID jm_setMaAskPrice = env->GetMethodID(xtp_market_data_be_class_, "setMaAskPrice", "(D)V"); assert(jm_setMaAskPrice != NULL); double new_ma_ask_price = sourceObj->bond.ma_ask_price; env->CallVoidMethod(mdbeObj, jm_setMaAskPrice, new_ma_ask_price); jmethodID jm_setMaBondBidPrice = env->GetMethodID(xtp_market_data_be_class_, "setMaBondBidPrice", "(D)V"); assert(jm_setMaBondBidPrice != NULL); double new_ma_bond_bid_price = sourceObj->bond.ma_bond_bid_price; env->CallVoidMethod(mdbeObj, jm_setMaBondBidPrice, new_ma_bond_bid_price); jmethodID jm_setMaBondAskPrice = env->GetMethodID(xtp_market_data_be_class_, "setMaBondAskPrice", "(D)V"); assert(jm_setMaBondAskPrice != NULL); double new_ma_bond_ask_price = sourceObj->bond.ma_bond_ask_price; env->CallVoidMethod(mdbeObj, jm_setMaBondAskPrice, new_ma_bond_ask_price); jmethodID jm_setYieldToMaturity = env->GetMethodID(xtp_market_data_be_class_, "setYieldToMaturity", "(D)V"); assert(jm_setYieldToMaturity != NULL); env->CallVoidMethod(mdbeObj, jm_setYieldToMaturity, sourceObj->stk.yield_to_maturity); jmethodID jm_setCancelBuyCount = env->GetMethodID(xtp_market_data_be_class_, "setCancelBuyCount", "(I)V"); assert(jm_setCancelBuyCount != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelBuyCount, sourceObj->bond.cancel_buy_count); jmethodID jm_setCancelSellCount = env->GetMethodID(xtp_market_data_be_class_, "setCancelSellCount", "(I)V"); assert(jm_setCancelSellCount != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelSellCount, sourceObj->bond.cancel_sell_count); jmethodID jm_setCancelBuyQty = env->GetMethodID(xtp_market_data_be_class_, "setCancelBuyQty", "(D)V"); assert(jm_setCancelBuyQty != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelBuyQty, sourceObj->bond.cancel_buy_qty); jmethodID jm_setCancelSellQty = env->GetMethodID(xtp_market_data_be_class_, "setCancelSellQty", "(D)V"); assert(jm_setCancelSellQty != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelSellQty, sourceObj->bond.cancel_sell_qty); jmethodID jm_setCancelBuyMoney = env->GetMethodID(xtp_market_data_be_class_, "setCancelBuyMoney", "(D)V"); assert(jm_setCancelBuyMoney != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelBuyMoney, sourceObj->bond.cancel_buy_money); jmethodID jm_setCancelSellMoney = env->GetMethodID(xtp_market_data_be_class_, "setCancelSellMoney", "(D)V"); assert(jm_setCancelSellMoney != NULL); env->CallVoidMethod(mdbeObj, jm_setCancelSellMoney, sourceObj->bond.cancel_sell_money); jmethodID jm_setTotalBuyCount = env->GetMethodID(xtp_market_data_be_class_, "setTotalBuyCount", "(J)V"); env->CallVoidMethod(mdbeObj, jm_setTotalBuyCount, sourceObj->bond.total_buy_count); jmethodID jm_setTotalSellCount = env->GetMethodID(xtp_market_data_be_class_, "setTotalSellCount", "(J)V"); env->CallVoidMethod(mdbeObj, jm_setTotalSellCount, sourceObj->bond.total_sell_count); jmethodID jm_setDurationAfterBuy = env->GetMethodID(xtp_market_data_be_class_, "setDurationAfterBuy", "(I)V"); assert(jm_setDurationAfterBuy != NULL); env->CallVoidMethod(mdbeObj, jm_setDurationAfterBuy, sourceObj->bond.duration_after_buy); jmethodID jm_setDurationAfterSell = env->GetMethodID(xtp_market_data_be_class_, "setDurationAfterSell", "(I)V"); assert(jm_setDurationAfterSell != NULL); env->CallVoidMethod(mdbeObj, jm_setDurationAfterSell, sourceObj->bond.duration_after_sell); jmethodID jm_setNumBidOrders = env->GetMethodID(xtp_market_data_be_class_, "setNumBidOrders", "(I)V"); assert(jm_setNumBidOrders != NULL); env->CallVoidMethod(mdbeObj, jm_setNumBidOrders, sourceObj->bond.num_bid_orders); jmethodID jm_setNumAskOrders = env->GetMethodID(xtp_market_data_be_class_, "setNumAskOrders", "(I)V"); assert(jm_setNumAskOrders != NULL); env->CallVoidMethod(mdbeObj, jm_setNumAskOrders, sourceObj->bond.num_ask_orders); //call setErrorMsg jstring jinstrumentStatusStr = env->NewStringUTF(sourceObj->bond.instrument_status); jmethodID jm_setInstrumentStatus = env->GetMethodID(xtp_market_data_be_class_, "setInstrumentStatus", "(Ljava/lang/String;)V"); env->CallVoidMethod(mdbeObj, jm_setInstrumentStatus, jinstrumentStatusStr); } void XtpQuote::generateDepthMarketDataExtObj(JNIEnv* env, jobject& rspObj, int64_t bid1_qty[], int32_t bid1_count, int32_t max_bid1_count, int64_t ask1_qty[], int32_t ask1_count, int32_t max_ask1_count) { jlongArray jarray_setBid1Qty = env->NewLongArray(bid1_count); env->SetLongArrayRegion(jarray_setBid1Qty, 0, bid1_count, (jlong *)bid1_qty); jmethodID jm_setBid1Qty = env->GetMethodID(depth_market_data_ext_class_, "setBid1Qty", "([J)V"); env->CallVoidMethod(rspObj, jm_setBid1Qty, jarray_setBid1Qty); jmethodID jm_setBid1Count = env->GetMethodID(depth_market_data_ext_class_, "setBid1Count", "(I)V"); assert(jm_setBid1Count != NULL); env->CallVoidMethod(rspObj, jm_setBid1Count, bid1_count); jmethodID jm_setMaxBid1Count = env->GetMethodID(depth_market_data_ext_class_, "setMaxBid1Count", "(I)V"); assert(jm_setMaxBid1Count != NULL); env->CallVoidMethod(rspObj, jm_setMaxBid1Count, max_bid1_count); jlongArray jarray_setAsk1Qty = env->NewLongArray(ask1_count); env->SetLongArrayRegion(jarray_setAsk1Qty, 0, ask1_count, (jlong *)ask1_qty); jmethodID jm_setAsk1Qty = env->GetMethodID(depth_market_data_ext_class_, "setAsk1Qty", "([J)V"); env->CallVoidMethod(rspObj, jm_setAsk1Qty, jarray_setAsk1Qty); jmethodID jm_setAsk1Count = env->GetMethodID(depth_market_data_ext_class_, "setAsk1Count", "(I)V"); assert(jm_setAsk1Count != NULL); env->CallVoidMethod(rspObj, jm_setAsk1Count, ask1_count); jmethodID jm_setMaxAsk1Count = env->GetMethodID(depth_market_data_ext_class_, "setMaxAsk1Count", "(I)V"); assert(jm_setMaxAsk1Count != NULL); env->CallVoidMethod(rspObj, jm_setMaxAsk1Count, max_ask1_count); }

Back | FazBrowse Home | New Git URL