websocketserver.cpp 4.1 KB

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