• paper3—Algorithm1-Engine-Trigger-on-FCD—temp


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

    Description: when FCD start, this algorithm will run as a deamon

    normterm: normal termination;
      normterm=0, SMD is not normal termination;
      normterm=1, SMD is normal termination;
    smdtime: time of receiving heartbeat from SMD last;
    selftime: the most current time of FCD being active;
    initconn: Initial connection from SMD to FCD;
      initconn=1, initial value is 1;
    downtime: suppose server restart time is 30s;

    select selftime from fcd_state_table where id=1;
    downtime=currenttime - selftime;
    update fcd_state_table set selftime=currenttime where id=1;

    PROCEDURE: MAIN
      socket();
      bind();
      listen();
      while true do
        accept();  //waiting for connect from SMD
        pthread_create(THREAD);
      done
    END PROCEDURE

    PROCEDURE: THREAD
      receive guestname from SMD;
      select normterm from user_table where username=guestname;
      select processid from process_table where username=guestname and state=active and exectime≈current;

      while true do //communication between FCD & SMD
        select smdtime from user_table where username=guestname;
        period=-1; //used to determine whether SMD access FCD continuously
        if receive heartbeat from SMD then
          period=currenttime - smdtime;
        end if
        update user_table set smdtime=currenttime where username=guestname;
        if 0< period< 8 or initconn then //normal visits
          send heartbeat to SMD;
          send information for current process to SMD;
          initconn=0;
        end if
        if receive finish from SMD then //normal termination
          update user_table set normterm=1 where username=guestname;
          exit; //guest finished his tasks
        end if
        //server restart, process is not normal end
        //after disconnect, SMD reconnect FCD
        if downtime > 30 and !normterm or receive reconnect from SMD then
          FCD receive current process information from SMD;
          update correlative tables where processid=processid;
        end if
        sleep 1s;
      done
    END PROCEDURE







  • 相关阅读:
    json取值(key是中文或者数字)方式详解
    快速排序
    百度地图 获取矩形point
    ArcGIS
    天眼
    shapefile文件
    SQL Server 2008 的gis函数
    查看某一个点是否在某个多边形内 使用ST_Contains函数
    PostgreSQL+PostGIS的使用 函数清单
    地理坐标计算
  • 原文地址:https://www.cnblogs.com/ztguang/p/12649318.html
Copyright © 2020-2023  润新知