VMSCommServer-Client.cpp 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. 1. machine state
  2. typedef enum eEN_CLIENT_MACHINE_STATE
  3. {
  4. /* common */
  5. CT_IDLE = 1,
  6. CT_LOGIN,
  7. CT_SECTION,
  8. CT_CLOSE,
  9. /* sender */
  10. CT_LOCAL_COMMAND,
  11. CT_CLIENT_COMMAND,
  12. /* receiver */
  13. CT_LOGIN_WAIT,
  14. CT_FRED_WAIT,
  15. CT_LOCAL_WAIT,
  16. CT_CLIENT_WAIT
  17. } EN_CLIENT_MACHINE_STATE;
  18. 2. machine state cycle
  19. CT_IDLE (초기상태)
  20. CT_LOGIN (제어기로부터 AI_Initiate 명령을 수신한 경우 또는 CT_IDLE 상태에서 타임아웃)
  21. CT_LOGIN_WAIT (제어기로 AI_Login 명령을 전송한 후)
  22. CT_IDLE (CT_LOGIN_WAIT 상태에서 응답 타임아웃 시간일때)
  23. CT_CLOSE (CT_LOGIN_WAIT 상태에서 응답 타임아웃 시간과 재전송 횟수 이상일때)
  24. CT_SECTION (제어기로 부터 AI_Login 응답으로 Accept를 수신한 경우)
  25. CT_IDLE (제어기로 부터 AI_Login 응답으로 Reject를 수신한 경우)
  26. 2.1 각 상태별 상태전이 단계
  27. CT_IDLE
  28. - CT_CLOSE (로그인 요청후 응답이 없이 재시도횠수가 지났을 경우)
  29. - CT_LOGIN (로그인 요청후 응답이 로그인 대기 시간보다 클 경우)
  30. CT_LOGIN
  31. - CT_LOGIN_WAIT (제어기로 로그인 요청을 전송 한 후 - AI_Login)
  32. - CT_CLOSE (제어기로 로그인 요청을 재시도 횟수보다 요청하지 못한 경우)
  33. CT_SECTION
  34. - CT_CLOSE (*WatchDogTimer가 타임아웃 된 경우)
  35. - CT_FRED_WAIT (+제어기로 부터 마지막으로 수신한 시각이 MaxHeartbeatTime/3 보다 큰경우 AI_FrED 명령 전송 성공)
  36. - CT_CLOSE (+제어기로 부터 마지막으로 수신한 시각이 MaxHeartbeatTime/3 보다 큰경우 AI_FrED 명령 전송 실패 - 재시도횟수 초과)
  37. - CT_LOCAL_COMMAND (-마지막 정보 수집시각이 수집주기 보다 큰경우: 상태정보 요청 플래그 초기화)
  38. - CT_LOCAL_COMMAND (-마지막 정보 수집시각이 수집주기 보다 작은경우)
  39. CT_CLOSE
  40. - Terminate
  41. CT_LOCAL_COMMAND
  42. - CT_CLIENT_COMMAND (상태정보 요청 플래그 확인결과 요청할 필요가 없는 경우)
  43. - CT_LOCAL_WAIT (상태정보 요청 플래그 확인결과 상태정보 요청이 성공한 경우)
  44. - CT_CLOSE (상태정보 요청 플래그 확인결과 상태정보 요청이 실패하고 재시도 횟수를 초과한 경우)
  45. CT_CLIENT_COMMAND
  46. - CT_CLIENT_WAIT (운영단말의 요청이 있는 경우 해당 요청을 제어기로 전송 성공한 경우 - VMS Client 모듈에서는 해당사항 없음)
  47. - CT_CLOSE (운영단말의 요청이 있는 경우 해당 요청이 실패하고 재시도 횟수를 초과한 경우 - VMS Client 모듈에서는 해당사항 없음)
  48. - CT_SECTION (운영단말의 요청이 없는 경우 - VMS Client 모듈에서는 항상 이상태로 변경됨)
  49. CT_LOGIN_WAIT
  50. - CT_IDLE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
  51. - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
  52. CT_FRED_WAIT
  53. - CT_SECTION (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
  54. - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
  55. CT_LOCAL_WAIT
  56. - CT_LOCAL_COMMAND (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
  57. - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
  58. CT_CLIENT_WAIT
  59. - CT_CLIENT_COMMAND (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패)
  60. - CT_CLOSE (제어기로 명령 전송 후 응답 타임아웃 시간 보다 클경우-명령전송 타임아웃, 즉 명령전송 실패 && 재시도 횟수 초과)
  61. 2.2 제어기 송수신에 따른 상태 전이
  62. CT_LOGIN_WAIT
  63. - CT_SECTION (송수신 성공)
  64. - CT_IDLE (송수신 실패)
  65. CT_FRED_WAIT
  66. - CT_SECTION (송수신 성공/실패와 상관 없음)
  67. CT_LOCAL_WAIT
  68. - CT_CLIENT_COMMAND (송수신 성공)
  69. - CT_LOCAL_COMMAND (송수신 실패)
  70. CT_CLIENT_WAIT
  71. - CT_SECTION (송수신 성공)
  72. - CT_CLIENT_COMMAND (송수신 실패)
  73. ProcessCommand
  74. - AI_FrED 에서 arg 가 NULL 로 넘어오는데 함수호출에서 사용하고 있음(메모리 오류 확인 필요)