|
@@ -85,43 +85,13 @@ namespace parkMonitor.server.CoreThread
|
|
|
//停车先遍历
|
|
|
else if (cmd.commandType.Equals('s'))
|
|
|
{
|
|
|
- lock (StoreCmdQueue)
|
|
|
- {
|
|
|
- NumberMachineNode num = null;
|
|
|
- bool matched = false;
|
|
|
- num = new NumberMachineNode();
|
|
|
- lock (LicenseQueue)
|
|
|
- {
|
|
|
- for (int i = 0; i < LicenseQueue.Count; i++)
|
|
|
- {
|
|
|
- num = LicenseQueue.Dequeue();
|
|
|
- //匹配成功
|
|
|
- if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
|
|
|
- {
|
|
|
- cmd.TimeRecord = num.TimeRecord;
|
|
|
- cmd.ip = num.ip;
|
|
|
- cmd.id = num.id;
|
|
|
- ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- matched = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (!matched)
|
|
|
- {
|
|
|
- StoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- }
|
|
|
- }
|
|
|
+ UserCmdMatch(cmd);
|
|
|
UILogServer.ins.info("收到web停车指令:" + cmd.LicenseNum);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Console.WriteLine("invalid user command.");
|
|
|
- UILogServer.ins.error("无法识别用户指令");
|
|
|
+ UILogServer.ins.error("无法识别用户指令,并非停取车");
|
|
|
}
|
|
|
}
|
|
|
Thread.Sleep(500);
|
|
@@ -139,7 +109,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
{
|
|
|
lock (LicenseQueue)
|
|
|
{
|
|
|
- bool matched = false;
|
|
|
//本地号牌已使用,则接收新的号牌消息
|
|
|
if (numMachineHandle != null && !NumMachineNodeValidation(license))
|
|
|
{
|
|
@@ -150,33 +119,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
UILogServer.ins.info("已扫描到号牌:" + license.LicenseNum + ",匹配中");
|
|
|
Console.WriteLine("已扫描到号牌:" + license.LicenseNum + ",匹配中");
|
|
|
//先匹配指令
|
|
|
- cmd = new Command();
|
|
|
- lock (StoreCmdQueue)
|
|
|
- {
|
|
|
- for (int i = 0; NumMachineNodeValidation(license) && i < StoreCmdQueue.Count; i++)
|
|
|
- {
|
|
|
- cmd = StoreCmdQueue.Dequeue();
|
|
|
- //匹配成功
|
|
|
- if (license.LicenseNum.Equals(cmd.LicenseNum))
|
|
|
- {
|
|
|
- cmd.TimeRecord = license.TimeRecord;
|
|
|
- cmd.ip = license.ip;
|
|
|
- cmd.id = license.id;
|
|
|
- ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- matched = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- StoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (!matched)
|
|
|
- {
|
|
|
- LicenseQueue.Enqueue((NumberMachineNode)license.Clone());
|
|
|
- }
|
|
|
- license.ip = "used";
|
|
|
+ NumMatch(ref license);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -200,9 +143,9 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
lock (LicenseQueue)
|
|
|
{
|
|
|
- LicTimeOut();
|
|
|
+ NumTimeOut();
|
|
|
}
|
|
|
- Thread.Sleep(100);
|
|
|
+ Thread.Sleep(500);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -250,7 +193,7 @@ namespace parkMonitor.server.CoreThread
|
|
|
/// <summary>
|
|
|
/// 号牌超时处理
|
|
|
/// </summary>
|
|
|
- private void LicTimeOut()
|
|
|
+ private void NumTimeOut()
|
|
|
{
|
|
|
for (int i = 0; i < LicenseQueue.Count; i++)
|
|
|
{
|
|
@@ -270,106 +213,84 @@ namespace parkMonitor.server.CoreThread
|
|
|
numberMachineMessage.aNode.LicenseNum = node.LicenseNum;
|
|
|
numMachineHandle.SetMessage(numberMachineMessage);
|
|
|
node.ip = "used";
|
|
|
-
|
|
|
- //Command cmd = new Command();
|
|
|
- //cmd.ip = node.ip;
|
|
|
- //cmd.commandType = 's';
|
|
|
- //cmd.LicenseNum = node.LicenseNum;
|
|
|
- //cmd.userID = "";
|
|
|
- //cmd.garageID = 0;
|
|
|
- //cmd.parkingRecordsID = 0;
|
|
|
- //cmd.TimeRecord = node.TimeRecord;
|
|
|
- //lock (ValidStoreCmdQueue)
|
|
|
- //{
|
|
|
- // ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- //}
|
|
|
- ////numMachineHandle.SetMessage((AbstractMessage)cmd.Clone());
|
|
|
}
|
|
|
}
|
|
|
LicenseQueue.Enqueue(node);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /*/// <summary>
|
|
|
- /// 注:匹配已分别在获得号牌与指令时进行!!!
|
|
|
- /// 停车匹配,一轮中从停车指令队列取一个,遍历号牌队列;之后反之,以号牌遍历停车指令队列
|
|
|
- /// 匹配上则入合法指令队列,并标记号牌队列相应元素为已使用
|
|
|
+ /// <summary>
|
|
|
+ /// 单用户指令匹配号牌队列
|
|
|
/// </summary>
|
|
|
- private void UserCmdMatch()
|
|
|
+ private void UserCmdMatch(Command cmd)
|
|
|
{
|
|
|
- Command cmd = null;
|
|
|
- NumberMachineNode num = null;
|
|
|
-
|
|
|
- //以单用户指令遍历号牌队列
|
|
|
lock (StoreCmdQueue)
|
|
|
{
|
|
|
- if (StoreCmdQueue.Count != 0)
|
|
|
+ NumberMachineNode num = null;
|
|
|
+ bool matched = false;
|
|
|
+ num = new NumberMachineNode();
|
|
|
+ lock (LicenseQueue)
|
|
|
{
|
|
|
- cmd = StoreCmdQueue.Dequeue();
|
|
|
- num = new NumberMachineNode();
|
|
|
- lock (LicenseQueue)
|
|
|
+ for (int i = 0; i < LicenseQueue.Count; i++)
|
|
|
{
|
|
|
- for (int i = 0; i < LicenseQueue.Count; i++)
|
|
|
+ num = LicenseQueue.Dequeue();
|
|
|
+ //匹配成功
|
|
|
+ if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
|
|
|
{
|
|
|
- num = LicenseQueue.Dequeue();
|
|
|
- //匹配成功
|
|
|
- if (NumMachineNodeValidation(num) && cmd.LicenseNum.Equals(num.LicenseNum))
|
|
|
- {
|
|
|
- cmd.TimeRecord = num.TimeRecord;
|
|
|
- cmd.ip = num.ip;
|
|
|
- cmd.id = num.id;
|
|
|
- ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- cmd = null;
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
|
|
|
- }
|
|
|
+ cmd.TimeRecord = num.TimeRecord;
|
|
|
+ cmd.ip = num.ip;
|
|
|
+ cmd.id = num.id;
|
|
|
+ ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
+ matched = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LicenseQueue.Enqueue((NumberMachineNode)num.Clone());
|
|
|
}
|
|
|
}
|
|
|
- if (cmd != null)
|
|
|
- {
|
|
|
- StoreCmdQueue.Enqueue(cmd);
|
|
|
- }
|
|
|
+ }
|
|
|
+ if (!matched)
|
|
|
+ {
|
|
|
+ StoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- //以单号牌遍历停车指令队列
|
|
|
- lock (LicenseQueue)
|
|
|
+ /// <summary>
|
|
|
+ /// 单号牌匹配用户指令队列
|
|
|
+ /// </summary>
|
|
|
+ private void NumMatch(ref NumberMachineNode license)
|
|
|
+ {
|
|
|
+ Command cmd = new Command();
|
|
|
+ bool matched = false;
|
|
|
+ lock (StoreCmdQueue)
|
|
|
{
|
|
|
- if (LicenseQueue.Count != 0)
|
|
|
+ for (int i = 0; NumMachineNodeValidation(license) && i < StoreCmdQueue.Count; i++)
|
|
|
{
|
|
|
- num = LicenseQueue.Dequeue();
|
|
|
- cmd = new Command();
|
|
|
- lock (StoreCmdQueue)
|
|
|
+ cmd = StoreCmdQueue.Dequeue();
|
|
|
+ //匹配成功
|
|
|
+ if (license.LicenseNum.Equals(cmd.LicenseNum))
|
|
|
{
|
|
|
- for (int i = 0; NumMachineNodeValidation(num) && i < StoreCmdQueue.Count; i++)
|
|
|
- {
|
|
|
- cmd = StoreCmdQueue.Dequeue();
|
|
|
- //匹配成功
|
|
|
- if (num.LicenseNum.Equals(cmd.LicenseNum))
|
|
|
- {
|
|
|
- cmd.TimeRecord = num.TimeRecord;
|
|
|
- cmd.ip = num.ip;
|
|
|
- cmd.id = num.id;
|
|
|
- ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- cmd = null;
|
|
|
- break;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- StoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
- }
|
|
|
- }
|
|
|
+ cmd.TimeRecord = license.TimeRecord;
|
|
|
+ cmd.ip = license.ip;
|
|
|
+ cmd.id = license.id;
|
|
|
+ ValidStoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
+ matched = true;
|
|
|
+ break;
|
|
|
}
|
|
|
- if (cmd != null)
|
|
|
+ else
|
|
|
{
|
|
|
- LicenseQueue.Enqueue(num);
|
|
|
+ StoreCmdQueue.Enqueue((Command)cmd.Clone());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- }*/
|
|
|
+ if (!matched)
|
|
|
+ {
|
|
|
+ LicenseQueue.Enqueue((NumberMachineNode)license.Clone());
|
|
|
+ }
|
|
|
+ license.ip = "used";
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 停取车调度,控制停取车比例,可多取一停,也可一取一停
|
|
@@ -414,14 +335,6 @@ namespace parkMonitor.server.CoreThread
|
|
|
/// 功能一:由核心线程调用,传入已存车完成需要标记的号牌
|
|
|
/// 功能二:添加手动停取车指令
|
|
|
/// </summary>
|
|
|
- /// <example>
|
|
|
- /// NumberMachineMessage numberMachineMessage = new NumberMachineMessage();
|
|
|
- /// numberMachineMessage.aNode = new NumberMachineNode();
|
|
|
- /// numberMachineMessage.aNode.ip = "";
|
|
|
- /// numberMachineMessage.aNode.LicenseNum = "the number plate that has been used";
|
|
|
- /// QueueingHandle.SetMessage(numberMachineMessage);
|
|
|
- /// </example>
|
|
|
- /// <param name="message"></param>
|
|
|
public void SetMessage(AbstractMessage message)
|
|
|
{
|
|
|
//号牌机重置消息
|
|
@@ -462,16 +375,13 @@ namespace parkMonitor.server.CoreThread
|
|
|
}
|
|
|
else if (command.commandType.Equals('s'))
|
|
|
{
|
|
|
- lock (StoreCmdQueue)
|
|
|
- {
|
|
|
- StoreCmdQueue.Enqueue((Command)command.Clone());
|
|
|
- }
|
|
|
+ UserCmdMatch(command);
|
|
|
UILogServer.ins.info("收到手动的停车指令:" + command.LicenseNum);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
Console.WriteLine("invalid user command.");
|
|
|
- UILogServer.ins.error("无法识别用户指令");
|
|
|
+ UILogServer.ins.error("收到无法识别的手动用户指令");
|
|
|
}
|
|
|
}
|
|
|
}
|