123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- #include "WebsocketServer.h"
- #include "QtWebSockets/QWebSocketServer"
- #include "QtWebSockets/QWebSocket"
- #include <QtCore/QDebug>
- #include "cstrapi.hxx"
- #include "appdoc.h"
- //! constructor
- WebsocketServer::WebsocketServer(quint16 port, QObject *parent) :
- QObject(parent),
- m_pWebSocketServer(Q_NULLPTR)
- {
- m_pWebSocketServer = new QWebSocketServer(QStringLiteral("Chat Server"),
- QWebSocketServer::NonSecureMode,
- this);
- if (m_pWebSocketServer->listen(QHostAddress::Any, port))
- {
- qDebug() << "Chat Server listening on port" << port;
- connect(m_pWebSocketServer, &QWebSocketServer::newConnection,
- this, &WebsocketServer::onNewConnection);
- }
- }
- //! 关闭服务
- WebsocketServer::~WebsocketServer()
- {
- m_pWebSocketServer->close();
- // delete model;
- // model =0;
- qDeleteAll(m_clientMap);
- }
- //! 创建连接
- void WebsocketServer::onNewConnection()
- {
- QWebSocket *pSocket = m_pWebSocketServer->nextPendingConnection();
- connect(pSocket, &QWebSocket::textMessageReceived, this, &WebsocketServer::processMessage);
- connect(pSocket, &QWebSocket:: textFrameReceived, this, &WebsocketServer::textFrameReceived);
- connect(pSocket, &QWebSocket::disconnected, this, &WebsocketServer::socketDisconnected);
- connect(pSocket, &QWebSocket::binaryMessageReceived, this, &WebsocketServer::binaryMessageReceived);
- AppDoc* doc =new AppDoc();
- doc->OnNewDocument();
- m_clientDocMap.insert(1,doc);
- AppView *view = new AppView(doc->GetHoopsModel(),NULL,"opengl");
- view->Init();
- view->Update();
- m_clientMap.insert(1,view);
- AppDoc* doc2 =new AppDoc();
- doc2->OnNewDocument();
- m_clientDocMap.insert(2,doc2);
- AppView *view2 = new AppView(doc2->GetHoopsModel(),NULL,"opengl");
- view2->Init();
- view2->Update();
- m_clientMap.insert(2,view2);
- }
- //! textFrameReceived
- void WebsocketServer::textFrameReceived(const QString &frame)
- {
- qDebug() << u8"收到消息" << frame;
- QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
- AppView *view = (AppView *)m_clientMap.value(1);
- AppModel* model= ((AppModel*)(view->GetModel()));
- HC_KEY model_key = view->GetModel()->GetModelKey();
- HC_Open_Segment_By_Key(model_key);
- HC_Open_Segment("");
- ENTITY_LIST entityList;
- BODY* sphere = NULL;
- api_solid_sphere(SPAposition(0, 0, 0), 1, sphere, NULL);
- entityList.add(sphere);
- HA_Render_Entities(entityList);
- model->AddAcisEntity(sphere);
- HC_Close_Segment();
- HC_Close_Segment();
- model->Write("E://1.png",view,1,400, 400);
- AppView *view2 = (AppView *)m_clientMap.value(2);
- AppModel* model2= ((AppModel*)(view2->GetModel()));
- HC_KEY model_key2 = view2->GetModel()->GetModelKey();
- HC_Open_Segment_By_Key(model_key2);
- HC_Open_Segment("2");
- ENTITY_LIST entityList2;
- BODY* sphere2 = NULL;
- api_solid_sphere(SPAposition(1, 0, 0), 1, sphere2, NULL);
- entityList2.add(sphere2);
- HA_Render_Entities(entityList2);
- model2->AddAcisEntity(sphere2);
- HC_Close_Segment();
- HC_Close_Segment();
- model2->Write("E://2.png",view,1,400, 400);
- }
- //! 发送二进制消息 发送给消息来源方
- void WebsocketServer::binaryMessageReceived(const QByteArray &message)
- {
- QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());
- pSender->sendBinaryMessage(message);
- }
- //! 发送文本消息 发送给消息来源方
- void WebsocketServer::processMessage(QString message)
- {
- //获取当前信号槽 对应连接 sender()
- QWebSocket *pSender = qobject_cast<QWebSocket *>(sender());
- pSender->sendTextMessage(message);
- }
- //! 连接断开
- void WebsocketServer::socketDisconnected()
- {
- QWebSocket *pClient = qobject_cast<QWebSocket *>(sender());
- if (pClient)
- {
- AppView *view = m_clientMap.value(1);
- // AppModel* model= ((AppModel*)(view->GetModel()));
- // delete model;
- // model =0;
- delete view;
- view = 0;
- m_clientMap.remove(1);
- AppDoc * doc = m_clientDocMap.value(1);
- delete doc;
- doc =0;
- m_clientDocMap.remove(1);
- AppView *view2 = m_clientMap.value(2);
- // AppModel* model= ((AppModel*)(view->GetModel()));
- // delete model;
- // model =0;
- delete view2;
- view2 = 0;
- m_clientMap.remove(2);
- AppDoc * doc2 = m_clientDocMap.value(2);
- delete doc2;
- doc2 =0;
- m_clientDocMap.remove(2);
- pClient->deleteLater();
- }
- }
|