|
@@ -16,8 +16,8 @@ namespace parkspace_manager
|
|
|
{
|
|
|
public partial class FormParkSpaceStatus : Form
|
|
|
{
|
|
|
- public static int s_spacesInRow = 15;
|
|
|
- public static int s_floors = 11;
|
|
|
+ public static int s_spacesInRow = 18;
|
|
|
+ public static int s_floors = 13;
|
|
|
public static int s_rows = 1;
|
|
|
public static bool s_isClosing;
|
|
|
private static object s_map_update_lock;
|
|
@@ -28,47 +28,31 @@ namespace parkspace_manager
|
|
|
/// </summary>
|
|
|
private Dictionary<int, Parkspace_info> m_idPssMap;
|
|
|
/// <summary>
|
|
|
- /// 提示信息管理器
|
|
|
- /// </summary>
|
|
|
- private ToolTip m_toolTip_parkspace_info;
|
|
|
- ///// <summary>
|
|
|
- ///// 按钮与对应提示信息映射
|
|
|
- ///// </summary>
|
|
|
- //private Dictionary<Button, ToolTip> m_btnToolTipMap;
|
|
|
- /// <summary>
|
|
|
/// 强制更新反馈消息队列,用于处理同时收到多个反馈消息的情况
|
|
|
/// </summary>
|
|
|
private Queue<Parkspace_force_update_response_msg> m_parkspace_force_update_response_queue;
|
|
|
/// <summary>
|
|
|
/// 当前所有车位状态,由界面更新线程主动更新
|
|
|
/// </summary>
|
|
|
- Parkspace_allocation_status_msg m_parkspace_status;
|
|
|
+ Parkspace_allocation_data_msg m_parkspace_status;
|
|
|
Thread m_update_display_thread;
|
|
|
|
|
|
public FormParkSpaceStatus()
|
|
|
{
|
|
|
- m_parkspace_status = new Parkspace_allocation_status_msg();
|
|
|
+ m_parkspace_status = new Parkspace_allocation_data_msg();
|
|
|
s_map_update_lock = new object();
|
|
|
s_parkspace_force_update_queue_lock = new object();
|
|
|
s_parkspace_status_lock = new object();
|
|
|
m_parkspace_force_update_response_queue = new Queue<Parkspace_force_update_response_msg>();
|
|
|
m_idPssMap = new Dictionary<int, Parkspace_info>();
|
|
|
-
|
|
|
- m_toolTip_parkspace_info = new ToolTip();
|
|
|
- // 设置显示样式
|
|
|
- m_toolTip_parkspace_info.AutoPopDelay = 20000;//提示信息的可见时间
|
|
|
- m_toolTip_parkspace_info.InitialDelay = 500;//事件触发多久后出现提示
|
|
|
- m_toolTip_parkspace_info.ReshowDelay = 500;//指针从一个控件移向另一个控件时,经过多久才会显示下一个提示框
|
|
|
- m_toolTip_parkspace_info.ShowAlways = false;//是否显示提示框
|
|
|
-
|
|
|
- //m_btnToolTipMap = new Dictionary<Button, ToolTip>();
|
|
|
s_isClosing = false;
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
Communicator.Instance.Init();
|
|
|
- Communicator.Instance.Bind("tcp://192.168.2.144:20000");
|
|
|
- Communicator.Instance.Connect("tcp://192.168.2.125:20000");
|
|
|
+ Communicator.Instance.Bind("tcp://192.168.2.154:12333");
|
|
|
+ Communicator.Instance.Connect("tcp://192.168.2.127:30008");
|
|
|
+ Communicator.Instance.Connect("tcp://192.168.2.127:30000");
|
|
|
Communicator.Instance.SetParkspaceForceUpdateResponseDelegate(ParkspaceForceUpdateResponseCallback);
|
|
|
|
|
|
// 库位显示
|
|
@@ -114,7 +98,7 @@ namespace parkspace_manager
|
|
|
bool get_status_result = Communicator.Instance.Get_parkspace_status(ref m_parkspace_status);
|
|
|
lock (s_parkspace_status_lock)
|
|
|
{
|
|
|
- if (get_status_result && (m_parkspace_status == null || m_parkspace_status.ParkspaceInfo == null))
|
|
|
+ if (get_status_result && (m_parkspace_status == null || m_parkspace_status.ParkspaceInfoEx == null))
|
|
|
{
|
|
|
get_status_result = false;
|
|
|
}
|
|
@@ -131,7 +115,7 @@ namespace parkspace_manager
|
|
|
{
|
|
|
lock (s_parkspace_status_lock)
|
|
|
{
|
|
|
- psList = m_parkspace_status.ParkspaceInfo.ToList();
|
|
|
+ psList = m_parkspace_status.ParkspaceInfoEx.ToList();
|
|
|
}
|
|
|
}
|
|
|
if (psList == null || psList.Count <= 0)
|
|
@@ -149,14 +133,14 @@ namespace parkspace_manager
|
|
|
m_idPssMap.Clear();
|
|
|
for (int i = 0; i < psList.Count; i++)
|
|
|
{
|
|
|
- m_idPssMap.Add(psList[i].ParkspaceId, psList[i]);
|
|
|
+ m_idPssMap.Add(psList[i].ParkingspaceIndexId, psList[i]);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
for (int i = 0; i < psList.Count; i++)
|
|
|
{
|
|
|
- m_idPssMap[psList[i].ParkspaceId] = psList[i];
|
|
|
+ m_idPssMap[psList[i].ParkingspaceIndexId] = psList[i];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -211,8 +195,8 @@ namespace parkspace_manager
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- btn.Text = "车位" + psList[j].ParkspaceId;
|
|
|
- btn.BackColor = GetPSColor(psList[j].ParkspaceStatus);
|
|
|
+ btn.Text = "车位" + psList[j].ParkingspaceIndexId;
|
|
|
+ btn.BackColor = GetPSColor(psList[j].ParkingspaceStatus);
|
|
|
temp.Controls.Add(btn);
|
|
|
}
|
|
|
catch { Log.WriteLog(LogType.process, LogFile.WARNING, "实时更新单一库位异常"); }
|
|
@@ -250,7 +234,7 @@ namespace parkspace_manager
|
|
|
if (m_idPssMap.ContainsKey(index))
|
|
|
{
|
|
|
//Console.WriteLine("index:" + index+", status:"+ idPssMap[index].spaceStatus);
|
|
|
- space.BackColor = GetPSColor(m_idPssMap[index].ParkspaceStatus);
|
|
|
+ space.BackColor = GetPSColor(m_idPssMap[index].ParkingspaceStatus);
|
|
|
}
|
|
|
else if (result)
|
|
|
{
|
|
@@ -296,28 +280,26 @@ namespace parkspace_manager
|
|
|
{
|
|
|
Button btn = (Button)sender;
|
|
|
// 创建the ToolTip
|
|
|
- if (m_toolTip_parkspace_info == null)
|
|
|
- {
|
|
|
- m_toolTip_parkspace_info = new ToolTip();
|
|
|
- // 设置显示样式
|
|
|
- m_toolTip_parkspace_info.AutoPopDelay = 20000;//提示信息的可见时间
|
|
|
- m_toolTip_parkspace_info.InitialDelay = 500;//事件触发多久后出现提示
|
|
|
- m_toolTip_parkspace_info.ReshowDelay = 500;//指针从一个控件移向另一个控件时,经过多久才会显示下一个提示框
|
|
|
- m_toolTip_parkspace_info.ShowAlways = false;//是否显示提示框
|
|
|
- }
|
|
|
+ ToolTip toolTip_parkspace_info = new ToolTip();
|
|
|
+
|
|
|
+ // 设置显示样式
|
|
|
+ toolTip_parkspace_info.AutoPopDelay = 20000;//提示信息的可见时间
|
|
|
+ toolTip_parkspace_info.InitialDelay = 500;//事件触发多久后出现提示
|
|
|
+ toolTip_parkspace_info.ReshowDelay = 1000;//指针从一个控件移向另一个控件时,经过多久才会显示下一个提示框
|
|
|
+ toolTip_parkspace_info.ShowAlways = false;//是否显示提示框
|
|
|
|
|
|
// 获取车位信息,处理后显示
|
|
|
int parkspaceID = GetParkspaceIdFromButton(btn);
|
|
|
Parkspace_info space_info = null;
|
|
|
lock (s_parkspace_status_lock)
|
|
|
{
|
|
|
- if (parkspaceID <= 0 || m_parkspace_status == null || m_parkspace_status.ParkspaceInfo == null)
|
|
|
+ if (parkspaceID <= 0 || m_parkspace_status == null || m_parkspace_status.ParkspaceInfoEx == null)
|
|
|
return;
|
|
|
- for (int i = 0; i < m_parkspace_status.ParkspaceInfo.Count; i++)
|
|
|
+ for (int i = 0; i < m_parkspace_status.ParkspaceInfoEx.Count; i++)
|
|
|
{
|
|
|
- if (m_parkspace_status.ParkspaceInfo[i].ParkspaceId == parkspaceID)
|
|
|
+ if (m_parkspace_status.ParkspaceInfoEx[i].ParkingspaceIndexId == parkspaceID)
|
|
|
{
|
|
|
- space_info = m_parkspace_status.ParkspaceInfo[i];
|
|
|
+ space_info = m_parkspace_status.ParkspaceInfoEx[i];
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -325,7 +307,7 @@ namespace parkspace_manager
|
|
|
if (space_info == null)
|
|
|
return;
|
|
|
// 设置伴随的对象
|
|
|
- m_toolTip_parkspace_info.SetToolTip(btn, space_info.ToString().Replace(",", "\n"));//设置提示按钮和提示内容
|
|
|
+ toolTip_parkspace_info.SetToolTip(btn, space_info.ToString().Replace(",", "\n"));//设置提示按钮和提示内容
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -337,17 +319,24 @@ namespace parkspace_manager
|
|
|
int parkspaceID = GetParkspaceIdFromButton(btn);
|
|
|
lock(s_parkspace_status_lock)
|
|
|
{
|
|
|
- if (parkspaceID <= 0 || m_parkspace_status == null || m_parkspace_status.ParkspaceInfo == null)
|
|
|
+ if (parkspaceID <= 0 || m_parkspace_status == null || m_parkspace_status.ParkspaceInfoEx == null)
|
|
|
return;
|
|
|
}
|
|
|
+ SendAndReceive(status, parkspaceID);
|
|
|
+ }
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 发送后接收对应反馈消息
|
|
|
+ /// </summary>
|
|
|
+ private void SendAndReceive(Parkspace_status status, int parkspaceID)
|
|
|
+ {
|
|
|
// 遍历强制更新反馈队列,清除对应车位已存在的反馈消息,即将非对应车位的消息放回队列
|
|
|
lock (s_parkspace_force_update_queue_lock)
|
|
|
{
|
|
|
for (int i = 0; i < m_parkspace_force_update_response_queue.Count; i++)
|
|
|
{
|
|
|
Parkspace_force_update_response_msg response = m_parkspace_force_update_response_queue.Dequeue();
|
|
|
- if (response.UpdateSpaceInfo != null && response.UpdateSpaceInfo.ParkspaceId != parkspaceID)
|
|
|
+ if (response.ManualParkspaceInfoEx != null && response.ManualParkspaceInfoEx.Count > 0 && response.ManualParkspaceInfoEx[0].ParkingspaceIndexId != parkspaceID)
|
|
|
{
|
|
|
m_parkspace_force_update_response_queue.Enqueue(response);
|
|
|
}
|
|
@@ -357,12 +346,25 @@ namespace parkspace_manager
|
|
|
Parkspace_info space_info = null;
|
|
|
lock (s_parkspace_status_lock)
|
|
|
{
|
|
|
- for (int i = 0; i < m_parkspace_status.ParkspaceInfo.Count; i++)
|
|
|
+ //用于清除所有车位状态的特殊指令
|
|
|
+ if (parkspaceID == 9999)
|
|
|
{
|
|
|
- if (m_parkspace_status.ParkspaceInfo[i].ParkspaceId == parkspaceID)
|
|
|
+ space_info = new Parkspace_info();
|
|
|
+ if (m_parkspace_status.ParkspaceInfoEx.Count() > 0)
|
|
|
{
|
|
|
- space_info = m_parkspace_status.ParkspaceInfo[i];
|
|
|
- break;
|
|
|
+ space_info = m_parkspace_status.ParkspaceInfoEx[0];
|
|
|
+ }
|
|
|
+ space_info.ParkingspaceIndexId = 9999;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ for (int i = 0; i < m_parkspace_status.ParkspaceInfoEx.Count; i++)
|
|
|
+ {
|
|
|
+ if (m_parkspace_status.ParkspaceInfoEx[i].ParkingspaceIndexId == parkspaceID)
|
|
|
+ {
|
|
|
+ space_info = m_parkspace_status.ParkspaceInfoEx[i];
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -370,7 +372,7 @@ namespace parkspace_manager
|
|
|
string commandKey = startTime.ToString("yyyy-MM-dd_HH:mm:ss:ffff");
|
|
|
try
|
|
|
{
|
|
|
- space_info.ParkspaceStatus = status;
|
|
|
+ space_info.ParkingspaceStatus = status;
|
|
|
Parkspace_force_update_request_msg parkspace_force_update_request_msg = new Parkspace_force_update_request_msg();
|
|
|
Base_info base_Info = new Base_info();
|
|
|
base_Info.MsgType = Message_type.EParkspaceForceUpdateRequestMsg;
|
|
@@ -379,7 +381,7 @@ namespace parkspace_manager
|
|
|
base_Info.Receiver = Message.Communicator.EParkspace;
|
|
|
parkspace_force_update_request_msg.BaseInfo = base_Info;
|
|
|
parkspace_force_update_request_msg.CommandKey = commandKey;
|
|
|
- parkspace_force_update_request_msg.UpdateSpaceInfo = space_info;
|
|
|
+ parkspace_force_update_request_msg.ManualParkspaceInfoEx.Add(space_info);
|
|
|
Communicator.Instance.Send_msg(parkspace_force_update_request_msg.ToByteString());
|
|
|
}
|
|
|
catch (Exception ex) { Console.WriteLine(ex.StackTrace); }
|
|
@@ -393,7 +395,7 @@ namespace parkspace_manager
|
|
|
for (int i = 0; i < m_parkspace_force_update_response_queue.Count; i++)
|
|
|
{
|
|
|
Parkspace_force_update_response_msg response = m_parkspace_force_update_response_queue.Dequeue();
|
|
|
- if (response.UpdateSpaceInfo != null && response.CommandKey == commandKey && response.UpdateSpaceInfo.ParkspaceId == parkspaceID)
|
|
|
+ if (response.ManualParkspaceInfoEx != null && response.ManualParkspaceInfoEx.Count > 0 && response.CommandKey == commandKey && response.ManualParkspaceInfoEx[0].ParkingspaceIndexId== parkspaceID)
|
|
|
{
|
|
|
get_result = true;
|
|
|
if (response.ErrorManager != null)
|
|
@@ -416,6 +418,10 @@ namespace parkspace_manager
|
|
|
break;
|
|
|
Thread.Sleep(50);
|
|
|
}
|
|
|
+ if (!get_result && space_info != null)
|
|
|
+ {
|
|
|
+ MessageBox.Show("force update get response timeout: " + space_info.ToString());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -480,5 +486,15 @@ namespace parkspace_manager
|
|
|
////}
|
|
|
//Communicator.Instance.Uninit();
|
|
|
}
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 一键清除所有号牌,车位全部设置空闲,调试用
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ private void btn_clear_Click(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ SendAndReceive(Parkspace_status.EParkspaceEmpty, 9999);
|
|
|
+ }
|
|
|
}
|
|
|
}
|