FixMissionManager.cs
5.2 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
using Common;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DeviceLibrary.manager
{
public class FixMissionManager
{
public delegate void MissionChangedEventHandler();
public static event MissionChangedEventHandler MissionChangedEvent;
static List<MissionInfo> fixMissionInfos = new List<MissionInfo>();
static WebService web = new WebService();
static object lockObj = new object();
public static void InitMission()
{
string path = AGVManager.CONFIG_PATH + SettingString.FileName_Missions;
if (!System.IO.File.Exists(path))
return;
string txt = System.IO.File.ReadAllText(path, Encoding.GetEncoding("utf-8"));
fixMissionInfos = JsonHelper.DeserializeJsonToList<MissionInfo>(txt);
}
static void WriteMission()
{
string path = AGVManager.CONFIG_PATH + SettingString.FileName_Missions;
string txt = JsonHelper.SerializeObject(fixMissionInfos);
try
{
System.IO.File.WriteAllText(path, txt);
}
catch (Exception e)
{
LogUtil.error("任务保存失败", e);
}
}
public static void InitView(DataGridView dataGridView)
{
// Set up the DataGridView.
dataGridView.Dock = DockStyle.Fill;
// Automatically generate the DataGridView columns.
dataGridView.AutoGenerateColumns = true;
foreach (DataGridViewColumn item in dataGridView.Columns)
{
item.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
dataGridView.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView.AllowUserToAddRows = false;
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = fixMissionInfos.ToList<MissionInfo>();
dataGridView.DataSource = bindingSource;
}
public static void UpdateDataSource(DataGridView dataGridView)
{
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = fixMissionInfos.ToList<MissionInfo>();
dataGridView.DataSource = bindingSource;
}
public static bool IsOpen()
{
return web.State;
}
public static void Open()
{
web.Open(AppConfigHelper.GetValue("WebService"));
}
public static void Close()
{
web.Close();
}
public static bool HasNext()
{
if (fixMissionInfos.Count > 0)
return true;
return false;
}
public static bool Contains(MissionInfo fixMissionInfo)
{
int id = fixMissionInfos.FindIndex(s => s.Equals(fixMissionInfo));
if (id > -1)
return true;
return false;
}
public static List<MissionInfo> GetMissions()
{
return fixMissionInfos;
}
public static void Add(MissionInfo fixMission)
{
try
{
if (Monitor.TryEnter(lockObj,1000))
{
fixMissionInfos.Add(fixMission);
}
}
catch(Exception e)
{
LogUtil.error("操作 fixMissionInfos 超时");
}
finally
{
Monitor.Exit(lockObj);
}
WriteMission();
MissionChangedEvent?.Invoke();
}
public static MissionInfo ExecuteMission()
{
MissionInfo missionInfo=null;
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
missionInfo = fixMissionInfos[0];
fixMissionInfos.RemoveAt(0);
}
}
catch (Exception e)
{
LogUtil.error("操作 fixMissionInfos 超时");
}
finally
{
Monitor.Exit(lockObj);
}
WriteMission();
MissionChangedEvent?.Invoke();
return missionInfo;
}
public static void SetMissionState(int id)
{
fixMissionInfos[id].On = !fixMissionInfos[id].On;
if (!fixMissionInfos[id].On)
{
LogUtil.info("取消呼叫任务:" + fixMissionInfos[id].ToString());
try
{
if (Monitor.TryEnter(lockObj, 1000))
{
fixMissionInfos.RemoveAt(id);
}
}
catch (Exception e)
{
LogUtil.error("操作 fixMissionInfos 超时");
}
finally
{
Monitor.Exit(lockObj);
}
}
WriteMission();
MissionChangedEvent?.Invoke();
}
}
}