• paper3—Algorithm2-Engine-Trigger-on-SMD—temp


    //source code: /run/media/root/E6B2798BB279614B/.../PAPER/paper-3/twin-engine-trigger-code/server-client-pthread-c
    ----------------------------------------------------------------------------------

    Description: guest access FCD by using SMD, there are two parts: browser on SMD and daemon written in c language

    //browser on SMD:
    guest access server on FCD by using browser on SMD;
    socket();  //use WebSocket
    connect(); //connect to daemon on SMD
    send username to daemon WAIT on the same SMD;
    executing tasks in brower; // take some time
    if finish tasks then
      send finish=1 to daemon WAIT on the same SMD;
    end if

    //---------------------------------------------------------

    //daemon WAIT on SMD that waiting data sent by brower
    PROCEDURE: WAIT
    socket();
    bind();
    recvfrom();
    if receive username from browser then
      write username to pipe;
    end if
    if receive finish=1 from browser then
      write finish=1 to pipe; // send to daemon MAIN
    end if
    END PROCEDURE

    //daemon MAIN on SMD
    PROCEDURE: MAIN
    socket();
    connect(); //connect to TCP Socket on FCD;
    //fcdtime: time of sending heartbeat to FCD last;
    fcdtime = currenttime;
    pthread_create(WAIT); //daemon WAIT on SMD

    while true do
      read from pipe; //receive from daemon WAIT
      if read username from pipe then
        send heartbeat to FCD;
        send username, processid to FCD;
        if receive heartbeat from FCD then
          SMD receive current process information from FCD;
          update correlative tables in database;
        end if
        period = currenttime - fcdtime;
     
        if period < 5 then  //connectiong to FCD is normal
          fcdtime = currenttime;
        else if period > 30 then //server shutdown or connectiong to FCD is abnormal
          trigger SMD;
          redirect to localhost and invoke task in SMD
          while true do
            send heartbeat to FCD; //probe whether FCD is active
            if receive heartbeat from FCD then
              read from pipe; //receive from daemon WAIT
              if finish=1 then
                send finish to FCD;
                send information for current process to FCD;
                exit;
              else
                stop accessing MPE;
                send information for current process to FCD;
                sleep 3s; //waiting for FCD to update it's database
                trigger FCD;
                redirect to FCD and invoke task in FCD;
              end if
            end if
            sleep 60s;
          done //end while
        end if
      else if read finish=1 from pipe
        send finish to FCD;
        send information for current process to FCD;
        exit;
      end if
      sleep 5s; //send heartbeat request every 5s to FPE
    done
    END PROCEDURE
  • 相关阅读:
    Flowable学习笔记(二、BPMN 2.0-基础 )
    Flowable学习笔记(一、入门)
    只有程序员才懂的幽默
    Navicat自动备份数据库
    两个原因导致Spring @Autowired注入的组件为空
    设计模式—— 十二 :代理模式
    设计模式—— 十 一:建造者模式
    SpringBoot学习笔记(十一:使用MongoDB存储文件 )
    Swagger API文档集中化注册管理
    Spring Boot2从入门到实战:集成AOPLog来记录接口访问日志
  • 原文地址:https://www.cnblogs.com/ztguang/p/12646712.html
Copyright © 2020-2023  润新知