|
|
@@ -0,0 +1,140 @@
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using GSG.NET.Concurrent;
|
|
|
+using GSG.NET.Logging;
|
|
|
+using OHV.Common.Shareds;
|
|
|
+using VehicleControlSystem.ControlLayer.IO;
|
|
|
+
|
|
|
+namespace VehicleControlSystem.Managers
|
|
|
+{
|
|
|
+ public class AutoManager : IDisposable
|
|
|
+ {
|
|
|
+ static Logger logger = Logger.GetLogger();
|
|
|
+
|
|
|
+ Thread threadWorker = null;
|
|
|
+ bool isThreadAlive = false;
|
|
|
+
|
|
|
+ IIO iO = null;
|
|
|
+
|
|
|
+ private eOperatationMode operationMode;
|
|
|
+
|
|
|
+ public eOperatationMode OperationModeProperty
|
|
|
+ {
|
|
|
+ get { return operationMode; }
|
|
|
+ set { operationMode = value; }
|
|
|
+ }
|
|
|
+
|
|
|
+ private eAutoModeState autoModeState;
|
|
|
+
|
|
|
+ public eAutoModeState AutoModeStateProperty
|
|
|
+ {
|
|
|
+ get { return autoModeState; }
|
|
|
+ set { autoModeState = value; }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public AutoManager( IIO io )
|
|
|
+ {
|
|
|
+ this.iO = io;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Init()
|
|
|
+ {
|
|
|
+ this.isThreadAlive = true;
|
|
|
+ this.threadWorker = ThreadUtils.Invoke(this.ThreadWork);
|
|
|
+ }
|
|
|
+
|
|
|
+ void ThreadWork()
|
|
|
+ {
|
|
|
+ while (this.isThreadAlive)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Thread.Sleep(5);
|
|
|
+
|
|
|
+ DoWork();
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ logger.E($"{GetType().Name} - Thread Exception : {ex.StackTrace}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void DoWork()
|
|
|
+ {
|
|
|
+ switch (this.OperationModeProperty)
|
|
|
+ {
|
|
|
+ case eOperatationMode.ManualMode:
|
|
|
+ break;
|
|
|
+ case eOperatationMode.AutoMode:
|
|
|
+ switch (this.AutoModeStateProperty)
|
|
|
+ {
|
|
|
+ case eAutoModeState.ErrorStop:
|
|
|
+ break;
|
|
|
+ case eAutoModeState.StartRun:
|
|
|
+ break;
|
|
|
+ case eAutoModeState.Run:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case eOperatationMode.InitialMode:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void ProcessAlarm()
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #region IDisposable Support
|
|
|
+ private bool disposedValue = false; // 중복 호출을 검색하려면
|
|
|
+
|
|
|
+ protected virtual void Dispose(bool disposing)
|
|
|
+ {
|
|
|
+ if (!disposedValue)
|
|
|
+ {
|
|
|
+ if (disposing)
|
|
|
+ {
|
|
|
+ // TODO: 관리되는 상태(관리되는 개체)를 삭제합니다.
|
|
|
+ this.isThreadAlive = false;
|
|
|
+ if (!this.threadWorker.Join(3000))
|
|
|
+ ThreadUtils.Kill(this.threadWorker);
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: 관리되지 않는 리소스(관리되지 않는 개체)를 해제하고 아래의 종료자를 재정의합니다.
|
|
|
+ // TODO: 큰 필드를 null로 설정합니다.
|
|
|
+
|
|
|
+ disposedValue = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // TODO: 위의 Dispose(bool disposing)에 관리되지 않는 리소스를 해제하는 코드가 포함되어 있는 경우에만 종료자를 재정의합니다.
|
|
|
+ // ~AutoManager()
|
|
|
+ // {
|
|
|
+ // // 이 코드를 변경하지 마세요. 위의 Dispose(bool disposing)에 정리 코드를 입력하세요.
|
|
|
+ // Dispose(false);
|
|
|
+ // }
|
|
|
+
|
|
|
+ // 삭제 가능한 패턴을 올바르게 구현하기 위해 추가된 코드입니다.
|
|
|
+ public void Dispose()
|
|
|
+ {
|
|
|
+ // 이 코드를 변경하지 마세요. 위의 Dispose(bool disposing)에 정리 코드를 입력하세요.
|
|
|
+ Dispose(true);
|
|
|
+ // TODO: 위의 종료자가 재정의된 경우 다음 코드 줄의 주석 처리를 제거합니다.
|
|
|
+ // GC.SuppressFinalize(this);
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+}
|