천호석
2022-06-27 5471442aaee7ee0f8e6f4cac472fc4cb15f6f26c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;
using System;
using System.Collections.Generic;
using System.Text;
 
namespace SHARP_CLAS_UI
{
    public abstract class Unit
    {
        #region Property
        public abstract bool IsHomeComplete
        {
            get;
        }
 
        public abstract bool IsExist
        {
            get;
        }
 
        public abstract bool IsWorkEnd
        {
            get;
        }
 
        public abstract bool IsStayPosition
        {
            get;
        }
 
        public En_Equipment_Mode UnitMode
        {
            get
            {
                return _unitMode;
            }
 
            set
            {
                _unitMode = value;
            }
        }
        #endregion
 
        #region Field
        public SequenceTimer sequenceChangedTime;
        protected SequenceTimer homeCheckedTime;
        protected Equipment equipment;
 
        private string _unitName;
        protected En_Equipment_Mode _unitMode;
        private ILog _sequenceLog;
 
        protected List<object> pauseDisableList = new List<object>();
 
        public bool isHomeComplete;
        #endregion
 
        #region Construct
        public Unit(Equipment equipment, string unitName = "Unit")
        {
            this.equipment = equipment;
            _unitName = unitName;
            _unitMode = En_Equipment_Mode.Pause;
            sequenceChangedTime = new SequenceTimer();
            homeCheckedTime = new SequenceTimer();
            CreateSequenceLogger();
        }
        #endregion
 
        #region Function
        private void CreateSequenceLogger()
        {
            var hierarchy = (Hierarchy)LogManager.GetRepository();
            var rollingAppender = new RollingFileAppender();
 
            var layout = new PatternLayout();
            hierarchy.Configured = true;
 
            rollingAppender.Name = "SequenceRoolingFile";
            rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
            rollingAppender.File = $@"D:\Logger\Sequence\";
            rollingAppender.AppendToFile = true;
            rollingAppender.DatePattern = "yyyy\\\\MM\\\\dd\\\\'" + _unitName + ".log'";
            rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
            rollingAppender.MaxSizeRollBackups = 10;
            rollingAppender.MaximumFileSize = "200MB";
            rollingAppender.StaticLogFileName = false;
            rollingAppender.Encoding = Encoding.UTF8;
            rollingAppender.PreserveLogFileNameExtension = true;
            layout = new PatternLayout("%d{yyyy/MM/dd HH:mm:ss.fff}, %m%n");
            layout.ActivateOptions();
            rollingAppender.Layout = layout;
            rollingAppender.ActivateOptions();
 
            hierarchy.GetLogger($"{_unitName}");
            ILog log = LogManager.GetLogger($"{_unitName}");
            Logger logger = (Logger)log.Logger;
            logger.Level = log4net.Core.Level.Debug;
            logger.AddAppender(rollingAppender);
 
            _sequenceLog = LogManager.GetLogger($"{_unitName}");
        }
 
        public void WriteSequenceLog(string message)
        {
            if (_sequenceLog != null) _sequenceLog.Debug($"{message}");
        }
        
        public void ExecuteProcess()
        {
            MonitoringStatus();
            ExecuteStep();
        }
 
        public abstract void MonitoringStatus();
        
        public abstract void ExecuteStep();
        #endregion
    }
}