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
----------------------------------------------------------------------------------
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通