text: void MdApi::OnFrontConnected()
  {
  	Task task = Task();
  	task.task_name = ONFRONTCONNECTED;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnFrontDisconnected(int nReason)
  {
  	Task task = Task();
  	task.task_name = ONFRONTDISCONNECTED;
  	task.task_id = nReason;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnHeartBeatWarning(int nTimeLapse)
  {
  	Task task = Task();
  	task.task_name = ONHEARTBEATWARNING;
  	task.task_id = nTimeLapse;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPUSERLOGIN;
  	if (pRspUserLogin)
  	{
  		CThostFtdcRspUserLoginField *task_data = new CThostFtdcRspUserLoginField();
  		*task_data = *pRspUserLogin;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspUserLogout(CThostFtdcUserLogoutField *pUserLogout, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPUSERLOGOUT;
  	if (pUserLogout)
  	{
  		CThostFtdcUserLogoutField *task_data = new CThostFtdcUserLogoutField();
  		*task_data = *pUserLogout;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspError(CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPERROR;
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPSUBMARKETDATA;
  	if (pSpecificInstrument)
  	{
  		CThostFtdcSpecificInstrumentField *task_data = new CThostFtdcSpecificInstrumentField();
  		*task_data = *pSpecificInstrument;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPUNSUBMARKETDATA;
  	if (pSpecificInstrument)
  	{
  		CThostFtdcSpecificInstrumentField *task_data = new CThostFtdcSpecificInstrumentField();
  		*task_data = *pSpecificInstrument;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPSUBFORQUOTERSP;
  	if (pSpecificInstrument)
  	{
  		CThostFtdcSpecificInstrumentField *task_data = new CThostFtdcSpecificInstrumentField();
  		*task_data = *pSpecificInstrument;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRspUnSubForQuoteRsp(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) 
  {
  	Task task = Task();
  	task.task_name = ONRSPUNSUBFORQUOTERSP;
  	if (pSpecificInstrument)
  	{
  		CThostFtdcSpecificInstrumentField *task_data = new CThostFtdcSpecificInstrumentField();
  		*task_data = *pSpecificInstrument;
  		task.task_data = task_data;
  	}
  	if (pRspInfo)
  	{
  		CThostFtdcRspInfoField *task_error = new CThostFtdcRspInfoField();
  		*task_error = *pRspInfo;
  		task.task_error = task_error;
  	}
  	task.task_id = nRequestID;
  	task.task_last = bIsLast;
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData) 
  {
  	Task task = Task();
  	task.task_name = ONRTNDEPTHMARKETDATA;
  	if (pDepthMarketData)
  	{
  		CThostFtdcDepthMarketDataField *task_data = new CThostFtdcDepthMarketDataField();
  		*task_data = *pDepthMarketData;
  		task.task_data = task_data;
  	}
  	this->task_queue.push(task);
  };
  
  void MdApi::OnRtnForQuoteRsp(CThostFtdcForQuoteRspField *pForQuoteRsp) 
  {
  	Task task = Task();
  	task.task_name = ONRTNFORQUOTERSP;
  	if (pForQuoteRsp)
  	{
  		CThostFtdcForQuoteRspField *task_data = new CThostFtdcForQuoteRspField();
  		*task_data = *pForQuoteRsp;
  		task.task_data = task_data;
  	}
  	this->task_queue.push(task);
  };
  
  