Skip to content
Snippets Groups Projects
Select Git revision
  • 77e5e7bb9eb0e585d8ed35b94dd29510e4aa819a
  • master default
  • library-names
  • fix_script_header
  • fix_libdir
  • fix_cmake_hdf5
  • partition
  • cgnsUnstructured
  • partitioning
  • HighOrderBLCurving
  • gmsh_3_0_5
  • gmsh_3_0_4
  • gmsh_3_0_3
  • gmsh_3_0_2
  • gmsh_3_0_1
  • gmsh_3_0_0
  • gmsh_2_16_0
  • gmsh_2_15_0
  • gmsh_2_14_1
  • gmsh_2_14_0
  • gmsh_2_13_2
  • gmsh_2_13_1
  • gmsh_2_12_0
  • gmsh_2_11_0
  • gmsh_2_10_1
  • gmsh_2_10_0
  • gmsh_2_9_3
  • gmsh_2_9_2
  • gmsh_2_9_1
  • gmsh_2_9_0
30 results

Callbacks.cpp

Blame
  • Forked from gmsh / gmsh
    Source project has a limited visibility.
    OnelabDatabase.cpp 4.28 KiB
    #include "OnelabDatabase.h"
    
    OnelabServer *OnelabServer::_server = NULL;
    
    #ifndef WIN32
    void *OnelabDatabase_listen(void *arg)
    #else
    DWORD WINAPI OnelabDatabase_listen(LPVOID arg)
    #endif
    {
      std::string *client = (std::string *)arg;
      OnelabProtocol msg(-1);
      UInt8 buff[1024];
      int recvlen = 0;
      while(1) {
        recvlen = OnelabDatabase::instance()->listen(msg);
        if(recvlen <= 0)
          break; // invalid len
        switch(msg.msgType()) {
          case OnelabProtocol::OnelabStop:
            std::clog << "\033[0;35m" << "Client is going to stop" << "\033[0;0m" << std::endl;
            OnelabDatabase::instance()->networkClientHaveToStop(true);
            return NULL;
          case OnelabProtocol::OnelabMessage:
            if(msg.attrs.size()==1 && msg.attrs[0]->getAttributeType() == OnelabAttrMessage::attributeType()) {
              OnelabNetworkClient *gui = OnelabDatabase::instance()->getNetworkClient();
              if(gui) gui->onMessage("Server", ((OnelabAttrMessage *)msg.attrs[0])->getMessage(), ((OnelabAttrMessage *)msg.attrs[0])->getLevel());
            }
            break;
          case OnelabProtocol::OnelabResponse:
          case OnelabProtocol::OnelabUpdate:
            std::clog << "\033[0;35m" << "Update " << msg.attrs.size() << " parameter(s) on client:" << "\033[0;0m" << std::endl;
            for(std::vector<OnelabAttr *>::iterator it = msg.attrs.begin() ; it != msg.attrs.end(); ++it) {
              std::clog << "  - " << ((onelab::parameter *)*it)->getName() << std::endl; // FIXME
              if((*it)->getAttributeType() == OnelabAttr::Number) {
                onelab::number *attr = (onelab::number *)*it;
                OnelabDatabase::instance()->set(*attr, false);
              }
              else if((*it)->getAttributeType() == OnelabAttr::String) {
                onelab::string *attr = (onelab::string *)*it;
                OnelabDatabase::instance()->set(*attr, false);
              }
              else if((*it)->getAttributeType() == OnelabAttr::Region) {
                onelab::region *attr = (onelab::region *)*it;
                OnelabDatabase::instance()->set(*attr, false);
              }
              else if((*it)->getAttributeType() == OnelabAttr::Function) {
                onelab::function *attr = (onelab::function *)*it;
                OnelabDatabase::instance()->set(*attr, false);
              }
              else if((*it)->getAttributeType() == OnelabAttrFileQuery::attributeType()) {
                OnelabAttrFileQuery *attr = (OnelabAttrFileQuery *)*it;
                const char *filename = attr->getFilename();
                // FIXME path/filename ?
                std::clog << "try to open " << filename << " for reading" << std::endl;
                FILE *fp = fopen(filename, "rb");
                if(fp != NULL){
                  OnelabProtocol rep(OnelabProtocol::OnelabUpdate);
                  rep.attrs.push_back(new OnelabAttrFile(std::string(filename), fp));
                  recvlen = rep.encodeMsg(buff, 1024);
                  OnelabDatabase::instance()->sendbytes(buff, recvlen);
                  while((recvlen = fread(buff, 1, 1024, fp)) > 0)
                    OnelabDatabase::instance()->sendbytes(buff, recvlen);
                }
              }
              else if((*it)->getAttributeType() == OnelabAttrFile::attributeType()) {
                OnelabAttrFile *attr = (OnelabAttrFile *)*it;
                const char *filename = attr->getFilename();
                std::clog << "try to open " << filename << " for writing" << std::endl;
                FILE *fp = fopen(filename, "wb");