浏览代码

0327 状态机

caizm 2 年之前
父节点
当前提交
53882a4c2a
共有 28 个文件被更改,包括 239 次插入0 次删除
  1. 二进制
      CAE_Solution/src/release/QVTKRenderer.obj
  2. 二进制
      CAE_Solution/src/release/crabbitmqclient.obj
  3. 二进制
      CAE_Solution/src/release/display.obj
  4. 二进制
      CAE_Solution/src/release/loadxyplotdata.obj
  5. 二进制
      CAE_Solution/src/release/main.obj
  6. 二进制
      CAE_Solution/src/release/mesh.obj
  7. 二进制
      CAE_Solution/src/release/mesh_adi.obj
  8. 二进制
      CAE_Solution/src/release/mesh_tecplot.obj
  9. 二进制
      CAE_Solution/src/release/mesh_ugrid.obj
  10. 二进制
      CAE_Solution/src/release/meshbase.obj
  11. 二进制
      CAE_Solution/src/release/meshmanager.obj
  12. 二进制
      CAE_Solution/src/release/meshstructured.obj
  13. 二进制
      CAE_Solution/src/release/meshunstructured.obj
  14. 二进制
      CAE_Solution/src/release/points.obj
  15. 二进制
      CAE_Solution/src/release/rabbitClient.obj
  16. 二进制
      CAE_Solution/src/release/rabbitmq.4.dll
  17. 二进制
      CAE_Solution/src/release/readconf.obj
  18. 二进制
      CAE_Solution/src/release/src.exe
  19. 二进制
      CAE_Solution/src/release/vtkviscameramanager.obj
  20. 二进制
      CAE_Solution/src/release/vtkvismanager.obj
  21. 二进制
      CAE_Solution/src/release/vtkvismeshbasetovtksource.obj
  22. 二进制
      CAE_Solution/src/release/vtkvisunglyph.obj
  23. 二进制
      CAE_Solution/src/release/vtkvisunshademesh.obj
  24. 二进制
      CAE_Solution/src/release/vtkvisunstructuredgridmanager.obj
  25. 二进制
      CAE_Solution/src/release/vtkvisunstructuredgridsource.obj
  26. 7 0
      CAE_Solution/src/stateMachine/stateMachine.pri
  27. 190 0
      CAE_Solution/src/stateMachine/statemachine.cpp
  28. 42 0
      CAE_Solution/src/stateMachine/statemachine.h

二进制
CAE_Solution/src/release/QVTKRenderer.obj


二进制
CAE_Solution/src/release/crabbitmqclient.obj


二进制
CAE_Solution/src/release/display.obj


二进制
CAE_Solution/src/release/loadxyplotdata.obj


二进制
CAE_Solution/src/release/main.obj


二进制
CAE_Solution/src/release/mesh.obj


二进制
CAE_Solution/src/release/mesh_adi.obj


二进制
CAE_Solution/src/release/mesh_tecplot.obj


二进制
CAE_Solution/src/release/mesh_ugrid.obj


二进制
CAE_Solution/src/release/meshbase.obj


二进制
CAE_Solution/src/release/meshmanager.obj


二进制
CAE_Solution/src/release/meshstructured.obj


二进制
CAE_Solution/src/release/meshunstructured.obj


二进制
CAE_Solution/src/release/points.obj


二进制
CAE_Solution/src/release/rabbitClient.obj


二进制
CAE_Solution/src/release/rabbitmq.4.dll


二进制
CAE_Solution/src/release/readconf.obj


二进制
CAE_Solution/src/release/src.exe


二进制
CAE_Solution/src/release/vtkviscameramanager.obj


二进制
CAE_Solution/src/release/vtkvismanager.obj


二进制
CAE_Solution/src/release/vtkvismeshbasetovtksource.obj


二进制
CAE_Solution/src/release/vtkvisunglyph.obj


二进制
CAE_Solution/src/release/vtkvisunshademesh.obj


二进制
CAE_Solution/src/release/vtkvisunstructuredgridmanager.obj


二进制
CAE_Solution/src/release/vtkvisunstructuredgridsource.obj


+ 7 - 0
CAE_Solution/src/stateMachine/stateMachine.pri

@@ -0,0 +1,7 @@
+HEADERS += \
+        $$PWD/*.h  \
+        $$PWD/statemachine.h
+
+SOURCES += \
+        $$PWD/*.cpp \
+        $$PWD/statemachine.cpp

+ 190 - 0
CAE_Solution/src/stateMachine/statemachine.cpp

@@ -0,0 +1,190 @@
+#include "statemachine.h"
+
+/*
+ * @brief: the constructor
+ * @param: void
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+stateMachine::stateMachine()
+{
+    init();
+}
+
+/*
+ * @brief: the destructor
+ * @param: void
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+stateMachine::~stateMachine()
+{
+    recvThread->quit();
+    delete recvThread;
+    recvThread =NULL;
+
+    sendThread->quit();
+    delete sendThread;
+    sendThread = NULL;
+
+    if(recvClient){
+        delete recvClient;
+        recvClient = NULL;
+    }
+
+    if(sendClient){
+        delete sendClient;
+        sendClient = NULL;
+    }
+
+}
+
+/*
+ * @brief: init
+ * @param: void
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::init(){
+    recvThread = new QThread();
+    recvClient = new rabbitClient("recvClient");
+    connect(recvClient,SIGNAL(recv(QString)),this,SLOT(recv(QString)));
+    connect(recvClient,SIGNAL(sendState_recv(bool)),this,SLOT(getState_Recv(bool)));
+    recvClient->moveToThread(recvThread);
+    connect(recvThread,&QThread::finished,[=](){
+        delete recvClient;
+        delete recvThread;
+        recvClient = NULL;
+        recvThread = NULL;
+    });
+    connect(recvThread,&QThread::started,[=](){
+        recvClient->recvMsg();
+    });
+    recvThread->start();
+    recvState = true;
+
+    sendThread = new QThread();
+    sendClient = new rabbitClient("sendClient");
+    connect(this,SIGNAL(send(std::string)),sendClient,SLOT(sendMsg(std::string)));
+    connect(sendClient,SIGNAL(sendState_send(bool)),this,SLOT(getState_Send(bool)));
+    sendClient->moveToThread(sendThread);
+    connect(sendThread,&QThread::finished,sendClient,[=](){
+        delete sendClient;
+        delete sendThread;
+        sendClient = NULL;
+        sendThread = NULL;
+    });
+    //    connect(sendThread,&QThread::started,[=](){
+    //       // sendClient->sendMsg("str",NULL);
+    //    });
+    sendThread->start();
+    sendState = true;
+    //cout<<"hello world"<<endl;
+
+    listenThread = new QThread();
+    this->moveToThread(listenThread);
+    connect(listenThread,SIGNAL(started()),this,SLOT(isLive()));
+    listenThread->start();
+}
+
+/*
+ * @brief: restart recvClient
+ * @param: void
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::restartRecv()
+{
+    if(recvState) return;
+    if(recvClient){
+        delete recvClient;
+        recvClient = NULL;
+    }
+    recvClient = new rabbitClient();
+    if(recvThread){
+        delete recvThread;
+        recvThread = NULL;
+    }
+    recvThread = new QThread();
+    recvClient->moveToThread(recvThread);
+    recvThread->start();
+    recvState = true;
+}
+
+/*
+ * @brief: restart sendClient
+ * @param: void
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::restartSend()
+{
+    if(sendState) return;
+    if(sendClient){
+        delete sendClient;
+        sendClient = NULL;
+    }
+    sendClient = new rabbitClient();
+    if(sendThread){
+        delete sendThread;
+        sendThread = NULL;
+    }
+    sendThread = new QThread();
+    sendClient->moveToThread(sendThread);
+    sendThread->start();
+    sendState = true;
+}
+
+/*
+ * @brief: judge sendClient is live //must move to Qthread
+ * @param: void
+ * @ret: bool
+ * @birth: created by czm in 20230326
+ */
+bool stateMachine::isLive()
+{
+    while(true){
+        if(!recvState){
+            recvClient->recv_connect();
+        }
+        if(!sendState){
+            sendClient->send_connect();
+        }
+        QThread::sleep(15);
+    }
+}
+
+/*
+ * @brief: get the recvClient's message which is consumed and push them into queue
+ * @param: recv msg
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::recv(QString Recvmsg)
+{
+    recvMsgQueue.push_back(Recvmsg);
+}
+
+/*
+ * @brief: judge recvClient state
+ * @param: bool
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::getState_Recv(bool state)
+{
+
+    recvState = state;
+
+}
+
+/*
+ * @brief: judge sendClient state
+ * @param: bool
+ * @ret: void
+ * @birth: created by czm in 20230326
+ */
+void stateMachine::getState_Send(bool state)
+{
+    sendState = state;
+}

+ 42 - 0
CAE_Solution/src/stateMachine/statemachine.h

@@ -0,0 +1,42 @@
+#ifndef STATEMACHINE_H
+#define STATEMACHINE_H
+#include "rabbitClient/rabbitclient.h"
+#include <QThread>
+#include <QObject>
+#include <QQueue>
+
+class stateMachine :public QObject
+{
+    Q_OBJECT
+private:
+    stateMachine();
+
+public:
+    ~stateMachine();
+    static stateMachine& Instance(){
+        static stateMachine m_state;
+        return m_state;
+    }
+    void init();
+    void restartRecv();
+    void restartSend();
+
+
+protected:
+    rabbitClient *recvClient, *sendClient;
+    bool recvState,sendState;
+    QThread *recvThread,*sendThread;
+    QThread *listenThread;
+    QQueue<QString> sendMsgQueue,recvMsgQueue;
+
+signals:
+    void send(std::string);
+
+public slots:
+    void recv(QString);
+    void getState_Recv(bool);
+    void getState_Send(bool);
+bool isLive();
+};
+
+#endif // STATEMACHINE_H