void Server::connect()
{
    
    boost::asio::ip::tcp::resolver resolver(_io);
    auto endpoint = resolver.resolve( boost::asio::ip::tcp::resolver::query("192.168.200.157", "40000"));
    boost::asio::async_connect(_socket, endpoint,
                               [this](const boost::system::error_code& ec,
                                      boost::asio::ip::tcp::resolver::iterator iter)
                               {
                                   if ( !ec )
                                   {
                                       cocos2d::log("<Server::connect> connected!");
                                       
                                       Packet* packet = new Packet();
                                       packet->encode(nullptr, 0, PacketType::LOGIN);
                                       this->write(packet);
                                       
                                       doReadHeader();
                                   }
                                   else
                                   {
                                       cocos2d::log("<Server::connect> error code: %d", ec.value());
                                   }
                               });
    
    boost::thread t(boost::bind(&boost::asio::io_service::run, &_io));
}
Esempio n. 2
0
	void connect(const std::string& host, const std::string& port){
		auto endpoint_it = _resolver.resolve({host, port});
		boost::asio::async_connect(_socket, endpoint_it,
				[this](boost::system::error_code ec, boost::asio::ip::tcp::resolver::iterator)
				{
			if (!ec)
			{
				doReadHeader();
			}
				});
	}
void Server::doReadBody()
{
    boost::asio::async_read(_socket, boost::asio::buffer(_recvBuf.body(), _recvBuf.bodyLength()),
                            [this](const boost::system::error_code& ec, size_t length)
                            {
                                if ( !ec )
                                {
                                    Packet* packet = new Packet();
                                    memcpy(packet->data(), _recvBuf.data(), _recvBuf.length());
                                    enqueue(packet);
                                    
                                    doReadHeader();
                                }
                            });
}
Esempio n. 4
0
	void doReadBody(MktDataGlobalHeaderMsg* header, char* msgType){

		switch(*msgType){
		case 'N':
		case 'M':
		case 'X':
		case 'G':
		case 'H':
		case 'J':
		{
			boost::asio::async_read(_socket,
					boost::asio::buffer(_data, sizeof(MktDataOrderMsg)),
					[this, &header, &msgType](boost::system::error_code ec, std::size_t length)
					{
				if(!ec){
					MktDataOrderMsg* body = new MktDataOrderMsg;
					memcpy((void*)body, (void*)_data, sizeof(MktDataOrderMsg));
					Order::SharedPtr order(new SimpleOrder(*header, *msgType, *body));
					{
						std::string str;
						try{
							LatencyChecker<> lc(str);
							_orderBookManager.addOrder(order);
						}catch(const std::runtime_error& err){
							std::cout << " Exception " << err.what() << std::endl;
						}
						order->toString(str);
						_orderBookManager.printOrderBookForSymbol(str, body->_toeknNo);
						_logger.log(std::move(str));
					}

					delete body;

					doReadHeader();
				}else{
					std::cout << "Exception comes - Socket Closed. " << std::endl;
					_socket.close();
				}
					});

		}
		break;
		case 'T':
		case 'K':
		{
			boost::asio::async_read(_socket,
					boost::asio::buffer(_data, sizeof(MktDataTradeMsg)),
					[this, &header, &msgType](boost::system::error_code ec, std::size_t length)
					{
				if(!ec){
					MktDataTradeMsg* body = new MktDataTradeMsg;
					memcpy((void*)body, (void*)_data, sizeof(MktDataTradeMsg));
					Trade::SharedPtr trade(new SimpleTrade(*header, *msgType, *body));

					{
						std::string str;
						try{
							LatencyChecker<> lc(str);
							_orderBookManager.addTrade(trade);
						}catch(const std::runtime_error& err){
							std::cout << " Exception " << err.what() << std::endl;
						}
						trade->toString(str);
						_orderBookManager.printOrderBookForSymbol(str, body->_toeknNo);
						_logger.log(std::move(str));
					}
					delete body;

					doReadHeader();
				}else{
					std::cout << "Exception comes - Socket Closed. " << std::endl;
					_socket.close();
				}
					});
		}
		break;
		default:
			std::cout << " Error: Unknown Packet comes.... " << std::endl;
			break;
		}
	}