buff[4096] = {0};
                  
                  
                      size_t bytesReceived = serverSocket->receive_from(asio::buffer(buff), clientEndPoint);
                  
                  
                      
                  
                  
                      if (bytesReceived != 0) {
                  
                  
                          auto message = message(buff);
                  
                  
                          std::thread t([message]() {
                  
                  
                              process(message);
                  
                  
                          });
                  
                  
                          t.join();
                  
                  
                      }
                  
                  
                  }
                  
                  
                  
                  
                  
                  Который обрабатывает входящее сообщение, откуда бы оно не пришло, адрес клиента записывает в clientEndPoint и запускает обработку сообщения в отдельном треде.
                  
                  
                  Но в методе process() описан сценарий диалога - что послать  обратно по этому адресу и что ожидать в ответ, с тем же receive_from под капотом. Но дело в том что сообщение которое относится к диалогу может приняться в этом куске который я скинул, а не внутри process()
                  
                  
                  Как это разрешить, и какой вообще нормальный архитектурный подход к такой проблеме?
                  
                  
                
делать один receive_from, завести dialog id, по треду на запрос весело =)
Стандартная схемка заводить сессию на каждый коннект, которая по сути fsm. Куски этой fsm реакции на сетевые или не сетевые события. Всё состояние хранится в членах класса или ссылаются на разделённые переменные. А вообще иди экзамплы от asio проботай
Обсуждают сегодня