Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Здравствуйте!!! Наглухо встает после 5 итераций записи на сокет из auto values = GetStringValues();
- .............................................................................
- namespace net = boost::asio;
- using tcp = net::ip::tcp;
- using task = std::unordered_map<std::string, std::string>;
- using task_complex = std::vector<task>;
- using shared_socket = std::shared_ptr<tcp::socket>;
- using shared_task = std::shared_ptr<task>;
- using shared_task_complex = std::vector<shared_task>;
- using strand = boost::asio::strand<boost::asio::io_context::executor_type>;
- using shared_strand = std::shared_ptr<strand>;
- КЛИЕНТ:
- namespace net = boost::asio;
- using tcp = net::ip::tcp;
- std::shared_ptr<std::ofstream> ofs = std::make_shared<std::ofstream>("log!.txt");
- net::io_context ioc(16);
- shared_socket socket__ = Service::MakeSharedSocket(ioc);
- //стримбуфер
- auto sb = Service::MakeSharedStreambuf();
- boost::system::error_code ec;
- auto endpoint = tcp::endpoint(net::ip::make_address("127.0.0.1"), 80);
- void InitSocket(){
- socket__->open(endpoint.protocol(), ec);
- if (ec)
- {
- std::cerr << "Open error: " << ec.message() << std::endl;
- }
- socket__->set_option(boost::asio::socket_base::reuse_address(true), ec);
- if (ec)
- {
- std::cerr << "Set option error: " << ec.message() << std::endl;
- }
- socket__->connect(endpoint, ec);
- if (ec)
- {
- std::cerr << "COnnect error: " << ec.message() << std::endl;
- }
- }
- std::shared_ptr<std::vector<std::string>> GetStringValues()
- {
- Service::TokenGen gen;
- std::vector<std::string> objs{
- UserInterface::US_ChrMakeSendMessage(gen.GenerateHEXToken(), "22sssssssswdqeefvqwef222222222222222222222222222222"),
- UserInterface::US_ChrMakeObjDisconnect(gen.GenerateHEXToken()),
- UserInterface::US_SrvMakeObjCreateRoom("YANDEX"),
- UserInterface::US_SrvMakeObjCreateUser("RRAT", "hjsjklk;l"),
- UserInterface::US_SrvMakeObjGetUsers("RRAT"),
- UserInterface::US_SrvMakeObjLogin("RRAT", "jijjiw", "kjjolpdpw"),
- UserInterface::US_SrvMakeObjRoomList()
- };
- return std::make_shared<std::vector<std::string>>(std::move(objs));
- }
- void Read()
- {
- auto handler = [](err ec, size_t bytes)
- {
- if (ec)
- {
- ZyncPrint(ec.what());
- system("pause");
- return;
- }
- auto i = Service::ExtractObjectsfromBuffer(*sb,bytes);
- Service::PrintUmap(i);
- sb->consume(bytes);
- Read();
- };
- net::async_read_until(*socket__, *sb, '\n', handler);
- }
- void test1()
- {
- try
- {
- auto values = GetStringValues();
- for (auto &&str : *values)
- {
- net::async_write(*socket__, net::buffer(str), [](err ec, size_t bytes) {
- });
- }
- }
- catch (const std::exception &ex)
- {
- std::cout << ex.what();
- system("pause");
- }
- }
- int main()
- {
- //инициализирую сокет
- InitSocket();
- //Сокет на прослушивание сообщений
- Read();
- for (int i = 0; i < 1; ++i)
- {
- net::post(ioc,[]{test1();});
- }
- //запуск ioc
- Service::MtreadRunContext(ioc);
- }
- СЕРВЕР:
- void MainServer::ServerSession::HandleSession()
- {
- if (!Service::IsAliveSocket(*socket_))
- {
- Service::ShutDownSocket(*socket_);
- return;
- }
- auto self = this->shared_from_this();
- net::async_read_until(*socket_, readbuf_, '\n', [self](err ec, size_t bytes)
- {
- if(!ec){
- auto obj = Service::ExtractObjectsfromBuffer(self->readbuf_, bytes);
- Service::PrintUmap(obj);
- self->readbuf_.consume(bytes);
- net::async_write(*(self->socket_),
- net::buffer(ServiceChatroomServer::MakeAnswerError("TESTR"," TESTR")),[self](err ec, size_t bytes){
- if(!ec){
- self->HandleSession();
- }
- });
- }});
- return;
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement