Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6660068
  • 博文数量: 1159
  • 博客积分: 12444
  • 博客等级: 上将
  • 技术积分: 12570
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-13 21:34
文章分类

全部博文(1159)

文章存档

2016年(126)

2015年(350)

2014年(56)

2013年(91)

2012年(182)

2011年(193)

2010年(138)

2009年(23)

分类: Web开发

2015-12-03 11:27:03

//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
阅读(690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~