nnxx_server.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // Created by zx on 2020/6/10.
  3. //
  4. #include "nnxx_server.h"
  5. Server::Server()
  6. {
  7. m_service_thread= nullptr;
  8. m_socket=nnxx::socket{nnxx::SP_RAW, nnxx::REP};
  9. }
  10. Server::~Server()
  11. {
  12. mb_close=true;
  13. if(m_service_thread!= nullptr)
  14. {
  15. if(m_service_thread->joinable())
  16. {
  17. m_service_thread->join();
  18. }
  19. delete m_service_thread;
  20. m_service_thread= nullptr;
  21. }
  22. m_socket.close();
  23. }
  24. bool Server::bind(std::string connect_str) {
  25. m_socket.bind(connect_str);
  26. mb_close=false;
  27. m_service_thread=new std::thread(service_handle,this);
  28. }
  29. bool Server::service_response(nnxx::message& message,nnxx::message_control& c1)
  30. {
  31. static int response_num=0;
  32. std::string msg=to_string(message);
  33. std::cout<<" recieve request : "<<msg<<"total response : "<<++response_num<<std::endl;
  34. std::string response="response : ";
  35. response+=msg;
  36. m_socket.send(response.c_str(),response.length(),0,std::move(c1));
  37. }
  38. void Server::service_handle(Server* pServer)
  39. {
  40. if(pServer== nullptr)
  41. return;
  42. nnxx::message_control msg_control;
  43. while(pServer->mb_close==false)
  44. {
  45. //非阻塞式读取
  46. nnxx::message msg = pServer->m_socket.recv(1, msg_control);
  47. if(msg.size()!=0)
  48. pServer->service_response(msg,msg_control);
  49. std::this_thread::yield();
  50. }
  51. }