MoveJob.cs
3.4 KB
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
using System;
using Model;
namespace BLL
{
public class MoveJob : IJob
{
private string _id;
private string _mission;
private AgvInfo _info;
private DateTime _getTime;
private JobStep<MoveStep> moveStep;
public MoveJob(string mission)
{
IsEnd = false;
_mission = mission;
moveStep = new JobStep<MoveStep>(MoveStep.Send);
}
public bool IsEnd { get; private set; }
public IJob Execute(AgvInfo info)
{
_info = info;
if (moveStep.Equals(MoveStep.Send))
Send();
else if (moveStep.Equals(MoveStep.Working))
Working();
else if (moveStep.Equals(MoveStep.Error))
Error();
else if (moveStep.Equals(MoveStep.End))
IsEnd = true;
return this;
}
private void Send()
{
bool rtn;
if (Common.FLEET_SEND)
rtn = Common.mir.Add_Mission_Fleet(_info.FleetID, _info.Authorization, _mission, out _id);
else
rtn = Common.mir.Add_Mission(_info.IP, _info.Authorization, _mission, out _id);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 发送成功");
moveStep.NextStep(MoveStep.Working);
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 发送失败");
}
}
private void Working()
{
TimeSpan span = DateTime.Now - _getTime;
if (span.TotalMilliseconds > 5000)
{
bool rtn;
string state;
if (Common.FLEET_SEND)
rtn = Common.mir.Get_MissionState_Fleet(_info.Authorization, _id, out state);
else
rtn = Common.mir.Get_MissionState(_info.IP, _info.Authorization, _id, out state);
if (rtn)
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + ", " + state.ToString());
if (state == MissionState.Done.ToString())
moveStep.NextStep(MoveStep.End);
else if (state == MissionState.Aborted.ToString())
moveStep.NextStep(MoveStep.Error);
else if (state == MissionState.Executing.ToString())
_getTime = DateTime.Now;
}
else
{
Common.log.Warn("MoveJob To:" + _info.Name + ", " + _mission + " 获取状态失败");
}
}
}
private void Error()
{
Common.log.Debug("MoveJob To:" + _info.Name + ", " + _mission + " 重新发送");
Common.mir.Clear_Error(_info.IP, _info.Authorization);
Common.mir.Del_Mission(_info.IP, _info.Authorization);
moveStep.NextStep(MoveStep.Send);
}
private enum MoveStep
{
Send,
Working,
Error,
End
}
private enum MissionState
{
Aborted,
Executing,
Done,
Pending
}
}
}