模拟行情服务器

来源:互联网 发布:知世公主动画出场 编辑:程序博客网 时间:2024/04/19 02:16
//message.txt18-7-30 4000 4001 4002 4003 4004 4000 4001 4002 4003 4004 4000 4001 4002 4003 4004 4000 4001 4002 4003 400418-7-35 4005 4006 400718-7-40 400818-7-45 4009 4010#
//SimulateMessage.h#ifndef SIMULATE_MESSAGE_H#define SIMULATE_MESSAGE_H#include <iostream>     // std::cout#include <fstream>      // std::ifstream#include <string>#include <time.h>#include <vector>struct my_message{time_t m_time;//size_t m_count;std::vector<std::string> m_prices;};class SimulateMessage{public:SimulateMessage();~SimulateMessage();public:void prepare_message();time_t SimulateMessage::time_convert(const std::string& rawTime);protected:void push_data_queue();private:std::string m_strFileStream;std::string m_strs[1024];};#endif // SIMULATE_MESSAGE_H
//SimulateMessage.cpp#include "stdafx.h"#include "SimulateMessage.h"std::vector<my_message> g_simuMsgQueue;SimulateMessage::SimulateMessage(){std::ifstream is ("message.txt", std::ifstream::binary);if (is) {// get length of file:is.seekg (0, is.end);int length = is.tellg();is.seekg (0, is.beg);char * buffer = new char [length];is.read (buffer,length);m_strFileStream = buffer;is.close();delete[] buffer;}}SimulateMessage::~SimulateMessage(){}void SimulateMessage::prepare_message(){// 统计模拟行情测试次数std::cout << "\n2====================================" << std::endl;size_t _pos = m_strFileStream.find('#');m_strFileStream.erase(_pos);std::cout << "Before processing:\n" << m_strFileStream.c_str() << std::endl;int _count = 0;//std::string strs[1024];int _index = 0;while(true){size_t _pos = m_strFileStream.find("\r\n");if(_pos != std::string::npos){std::string subString = m_strFileStream.substr(0, _pos);m_strs[_index++] = subString;m_strFileStream.erase(0, _pos + 1);}else{std::string subString = m_strFileStream;m_strs[_index] = subString;break;}}std::cout << "\n3====================================" << std::endl;for(int i = 0; i < 1024; i++){int _size = m_strs[i].size();if(_size != 1 && _size != 0){std::cout << m_strs[i].c_str()/* << std::endl*/;}else{_count = i;break;}}std::cout << "\n\n4====================================" << std::endl;std::cout << "count = " << _count << std::endl;for(int i = 0; i < _count; i++){std::cout << m_strs[i].c_str();}// 统计模拟行情的发送时间和每次测试发送的行情个数std::cout << "\n\n5====================================" << std::endl;std::string sendMessages[1024];//std::vector<std::string> sendMessages;_index = 0;for(int i = 0; i < _count; i++){my_message simuMsg;std::string sendMessage = m_strs[i];bool _isHead = true;std::string headString;while(true){if(_isHead){size_t _pos = sendMessage.find(' ');headString = sendMessage.substr(0, _pos);sendMessage.erase(0, _pos + 1);_pos = headString.find('\n');if(_pos != std::string::npos){headString.erase(headString.begin());}_isHead = false;simuMsg.m_time =  time_convert(headString);}else{size_t _pos = sendMessage.find(' ');if(_pos != std::string::npos){std::string subString = sendMessage.substr(0, _pos);sendMessages[_index++] = headString + " " + subString;simuMsg.m_prices.push_back(subString);sendMessage.erase(0, _pos + 1);}else{std::string subString = sendMessage;sendMessages[_index++] = headString + " " + subString;simuMsg.m_prices.push_back(subString);break;}}}g_simuMsgQueue.push_back(simuMsg);}for(int i = 0; i < 1024; ++i){int _size = sendMessages[i].size();if(_size != 1 && _size != 0){std::cout << sendMessages[i].c_str() << std::endl;}else{_count = i;break;}}std::cout << "\n6====================================" << std::endl;std::cout << "_count = " << _count << std::endl;my_message simuMsg;for(int i = 0; i < _count; i++){std::string subMessage = sendMessages[i];_pos = subMessage.find(' ');std::string strTime = subMessage.substr(0, _pos);simuMsg.m_time =  time_convert(strTime);subMessage.erase(0, _pos + 1);std::string strPrice = subMessage.substr();}}void SimulateMessage::push_data_queue(){my_message _message;time_t now;time(&now);_message.m_time = now + 30;std::string _price("3987.65");_message.m_prices.push_back(_price);_message.m_prices.push_back(_price);_message.m_prices.push_back(_price);g_simuMsgQueue.push_back(_message);}time_t SimulateMessage::time_convert(const std::string& rawTime){std::string strTime = rawTime;//std::string strTime = "2013-12-16-13-21-56";std::string strTimes[3];unsigned int _index = 0;while(true){size_t _pos = strTime.find('-');std::string strCurrent = strTime.substr(0, _pos);if(_pos != std::string::npos){std::string subString = strTime.substr(0, _pos);strTimes[_index++] = subString;strTime.erase(0, _pos + 1);}else{std::string subString = strTime;strTimes[_index] = subString;break;}}time_t now;time(&now);struct tm _tmTime = *localtime(&now);//_tmTime.tm_year= atoi(strTimes[0].c_str()) - 1900;//_tmTime.tm_mon= atoi(strTimes[1].c_str())  - 1;//_tmTime.tm_mday= atoi(strTimes[2].c_str()) ;_tmTime.tm_hour= atoi(strTimes[0].c_str()) ;_tmTime.tm_min= atoi(strTimes[1].c_str()) ;_tmTime.tm_sec= atoi(strTimes[2].c_str()) ;printf("%s", asctime(&_tmTime));return mktime(&_tmTime);}
//ServerDlg.cppunsigned int __stdcall CServerDlg::ThreadSimulateProc(PVOID lpParam){::AllocConsole();    // 打开控件台资源freopen("CONOUT$", "w+t", stdout);    // 申请写freopen( "CONIN$", "r+t", stdin ); // 申请读printf("call console successfully !\n");CServerDlg *pServerDlg = (CServerDlg *)lpParam;SimulateMessage  *pSimuMsg = new SimulateMessage;pSimuMsg->prepare_message();int _count = 0;int _size = g_simuMsgQueue.size();std::cout << "\nsize of g_simuMsgQueue is " << _size << std::endl;int __count = 0;for(std::vector<my_message>::iterator it = g_simuMsgQueue.begin(); it != g_simuMsgQueue.end(); ++it){my_message _message = *it;for(std::vector<std::string>::iterator itPrice = _message.m_prices.begin(); itPrice != _message.m_prices.end(); ++itPrice){std::cout << _message.m_time << ": " << (*itPrice) << std::endl;}std::cout << std::endl;}while(g_simuMsgQueue.size() >= _count +1){my_message _message = g_simuMsgQueue[_count++];while(true){time_t _now;time(&_now);if(_now == _message.m_time){int countSend = _message.m_prices.size();cout << "sum of messages is: " << _message.m_prices.size() << std::endl;int interval = 1000/countSend;int _count = 0;while(countSend >= _count + 1){std::string strPrice = _message.m_prices[_count];char chSrz[256];strcpy(chSrz, strPrice.c_str());WaitForSingleObject( g_hMutex , INFINITE );for(std::deque<CONNID>::iterator it = connQueue.begin(); it != connQueue.end(); it++){CServerDlg* pServerDlg = (CServerDlg*)lpParam;pServerDlg->m_Server.Send(*it, (const BYTE*)chSrz, strlen(chSrz) + 1);}ReleaseMutex( g_hMutex );Sleep(interval);++_count;}std::cout << "send simulated messages successfully!" << std::endl;break;}elsecontinue;}}delete pSimuMsg;//::FreeConsole();return 0;}



0 0
原创粉丝点击