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)); }
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(); } }); }
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; } }