websocketserver.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #include "WebsocketServer.h"
  2. #include "QtWebSockets/QWebSocketServer"
  3. #include "QtWebSockets/QWebSocket"
  4. #include <QtCore/QDebug>
  5. #include "cstrapi.hxx"
  6. #include "appdoc.h"
  7. //! constructor
  8. WebsocketServer::WebsocketServer(quint16 port, QObject *parent) :
  9. QObject(parent),
  10. m_pWebSocketServer(Q_NULLPTR)
  11. {
  12. m_pWebSocketServer = new QWebSocketServer(QStringLiteral("Chat Server"),
  13. QWebSocketServer::NonSecureMode,
  14. this);
  15. if (m_pWebSocketServer->listen(QHostAddress::Any, port))
  16. {
  17. qDebug() << "Chat Server listening on port" << port;
  18. connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
  19. this, &WebsocketServer::onNewConnection);
  20. }
  21. }
  22. //! 关闭服务
  23. WebsocketServer::~WebsocketServer()
  24. {
  25. m_pWebSocketServer->close();
  26. // delete model;
  27. // model =0;
  28. qDeleteAll(m_clientMap);
  29. }
  30. //! 创建连接
  31. void WebsocketServer::onNewConnection()
  32. {
  33. QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
  34. connect(pSocket, &QWebSocket::textMessageReceived, this, &WebsocketServer::processMessage);
  35. connect(pSocket, &QWebSocket:: textFrameReceived, this, &WebsocketServer::textFrameReceived);
  36. connect(pSocket, &QWebSocket::disconnected, this, &WebsocketServer::socketDisconnected);
  37. connect(pSocket, &QWebSocket::binaryMessageReceived, this, &WebsocketServer::binaryMessageReceived);
  38. AppDoc* doc =new AppDoc();
  39. doc->OnNewDocument();
  40. m_clientDocMap.insert(1,doc);
  41. AppView *view = new AppView(doc->GetHoopsModel(),NULL,"opengl");
  42. view->Init();
  43. view->Update();
  44. m_clientMap.insert(1,view);
  45. AppDoc* doc2 =new AppDoc();
  46. doc2->OnNewDocument();
  47. m_clientDocMap.insert(2,doc2);
  48. AppView *view2 = new AppView(doc2->GetHoopsModel(),NULL,"opengl");
  49. view2->Init();
  50. view2->Update();
  51. m_clientMap.insert(2,view2);
  52. }
  53. //! textFrameReceived
  54. void WebsocketServer::textFrameReceived(const QString &frame)
  55. {
  56. qDebug() << u8"收到消息" << frame;
  57. QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  58. AppView *view = (AppView *)m_clientMap.value(1);
  59. AppModel* model= ((AppModel*)(view->GetModel()));
  60. HC_KEY model_key = view->GetModel()->GetModelKey();
  61. HC_Open_Segment_By_Key(model_key);
  62. HC_Open_Segment("");
  63. ENTITY_LIST entityList;
  64. BODY* sphere = NULL;
  65. api_solid_sphere(SPAposition(0, 0, 0), 1, sphere, NULL);
  66. entityList.add(sphere);
  67. HA_Render_Entities(entityList);
  68. model->AddAcisEntity(sphere);
  69. HC_Close_Segment();
  70. HC_Close_Segment();
  71. model->Write("E://1.png",view,1,400, 400);
  72. AppView *view2 = (AppView *)m_clientMap.value(2);
  73. AppModel* model2= ((AppModel*)(view2->GetModel()));
  74. HC_KEY model_key2 = view2->GetModel()->GetModelKey();
  75. HC_Open_Segment_By_Key(model_key2);
  76. HC_Open_Segment("2");
  77. ENTITY_LIST entityList2;
  78. BODY* sphere2 = NULL;
  79. api_solid_sphere(SPAposition(1, 0, 0), 1, sphere2, NULL);
  80. entityList2.add(sphere2);
  81. HA_Render_Entities(entityList2);
  82. model2->AddAcisEntity(sphere2);
  83. HC_Close_Segment();
  84. HC_Close_Segment();
  85. model2->Write("E://2.png",view,1,400, 400);
  86. }
  87. //! 发送二进制消息 发送给消息来源方
  88. void WebsocketServer::binaryMessageReceived(const QByteArray &message)
  89. {
  90. QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());
  91. pSender->sendBinaryMessage(message);
  92. }
  93. //! 发送文本消息 发送给消息来源方
  94. void WebsocketServer::processMessage(QString message)
  95. {
  96. //获取当前信号槽 对应连接 sender()
  97. QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());
  98. pSender->sendTextMessage(message);
  99. }
  100. //! 连接断开
  101. void WebsocketServer::socketDisconnected()
  102. {
  103. QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
  104. if (pClient)
  105. {
  106. AppView *view = m_clientMap.value(1);
  107. // AppModel* model= ((AppModel*)(view->GetModel()));
  108. // delete model;
  109. // model =0;
  110. delete view;
  111. view = 0;
  112. m_clientMap.remove(1);
  113. AppDoc * doc = m_clientDocMap.value(1);
  114. delete doc;
  115. doc =0;
  116. m_clientDocMap.remove(1);
  117. AppView *view2 = m_clientMap.value(2);
  118. // AppModel* model= ((AppModel*)(view->GetModel()));
  119. // delete model;
  120. // model =0;
  121. delete view2;
  122. view2 = 0;
  123. m_clientMap.remove(2);
  124. AppDoc * doc2 = m_clientDocMap.value(2);
  125. delete doc2;
  126. doc2 =0;
  127. m_clientDocMap.remove(2);
  128. pClient->deleteLater();
  129. }
  130. }