20220928
프로그램의 소켓통신 메시지 RCV 조건에 타임아웃을 추가해야된다.
메시지 리시브의 타임아웃을 설정하는 방법을 몇가지 생각해봤다.
maxD = TimeSpan.FromSeconds(3);
sw1 = Stopwatch.StartNew();
※ TimeSpan : 시간 간격을 나타냅니다.
※ FromSeconds : 지정된 시간(초단위)를 나타내는 TimeSpan 반환
※ Stopwatch : 경과 시간을 측정하는데 사용할 수 있는 메서드와 속성 제공.
// 12V ON Flag가 false인 동안 기다리기(while반복문) 시작
// 다른 함수에서, 12V ON이 OK되면 해당 flag를 true로 바꿔주는 구문이 있다.
while (!Store.getInstance().flagReceive12VON)
{
Thread.Sleep(10);
// 측정한 시간이 Max 대기 시간을 초과하면...
if (sw1.Elapsed > maxD)
{
// 시간 측정 변수 정지
sw1.Stop();
// 시간 측정 flag false로 전환
Store.getInstance().waitReceive12VON = false;
// 서버에 PinCheck NG가 발생했다고 메시지 Send.
if (Store.getInstance().client.IsConnected())
{
Store.getInstance().client.SendMessage("[CTACT,PINCHECK,NG]");
}
// 여기 if문 탈출
break;
}
// 위에서 전환한 시간 측정 falg가 false면서,
if (!Store.getInstance().waitReceive12VON)
{
// 시간 측정 중이면,
if (sw1.IsRunning)
{
// 측정 중단 후
sw1.Stop();
// 측정 초기화.
sw1.Reset();
}
break;
}
//이외 사항에도 아직까지 시간 측정이 가동중이면,
if (sw1.IsRunning)
{
// 측정 중단 후
sw1.Stop();
// 측정 초기화.
sw1.Reset();
}
}
일단 허접한 알고리즘으로 구현 및 방어까지 해놨는데...
정상적으로 돌아가는 것을 확인했다.
일단 Demo SW를 배보해야 하므로 주석을 달아놓고,
추후 논리 설명 내용을 추가할 예정...