public NewSpeedWindow(IEventAggregator eventAggregator, MsgSpeedCommand cmd, bool isCheck = false) { this.eventAggregator = eventAggregator; this.isCheck = isCheck; MsgSpeedCommand speedCmd = new MsgSpeedCommand() { }; speedCmd.Targets = new ObservableCollection <Target>(); using (XmlReader reader = XmlReader.Create("AllTargets.xml")) { while (!reader.EOF) { if (reader.MoveToContent() == XmlNodeType.Element && reader.Name == "target") { speedCmd.Targets.Add(new Target() { Name = reader.GetAttribute("name") }); } reader.Read(); } } DataContext = speedCmd; InitializeComponent(); if (isCheck) { GenerateCmdContent(cmd); } }
private async void ActivateSpeedCmd(MsgSpeedCommand cmd, string topic) { await Task.Run(() => { IO.SendMsg(cmd, topic); }); }
/// <summary> /// 收到广播到本地的列控命令,加入缓存 /// </summary> /// <param name="cmd"></param> private void CacheSpeedCmd(MsgSpeedCommand cmd) { UpdateCacheCmd(cmd); cmd.SpeedCmdState = SpeedCmdState.已拟定; ((AppVM)DataContext).SpeedCmds.Add(cmd); ((AppVM)DataContext).SpeedCmds = ((AppVM)DataContext).SpeedCmds; }
/// <summary> /// 校验广播到本地的列控命令 /// </summary> /// <param name="cmd"></param> private void CheckSpeedCmd(MsgSpeedCommand cmd) { // 非此命令编辑用户才能校验 if (cmd.User != ConfigurationManager.ConnectionStrings["User"].ConnectionString) { NewSpeedWindow window = new NewSpeedWindow(eventAggregator, cmd, true); window.Show(); } }
/// <summary> /// 收到广播到本地的列控命令,置状态为已设置 /// </summary> /// <param name="cmd"></param> private void ExecuteSpeedCmd(MsgSpeedCommand cmd) { var result = ((AppVM)DataContext).SpeedCmds.Where(i => i.CmdSN == cmd.CmdSN); if (result.Count() != 0) { result.First().SpeedCmdState = SpeedCmdState.已设置; ((AppVM)DataContext).SpeedCmds = ((AppVM)DataContext).SpeedCmds; } }
/// <summary> /// 通过列控校验,并开始向网络广播 /// </summary> /// <param name="cmd"></param> private void PassSpeedCmd(MsgSpeedCommand cmd) { int count = ((AppVM)DataContext).CachedCmds.Count + ((AppVM)DataContext).SendingCmds.Count + ((AppVM)DataContext).SendCmds.Count; cmd.CmdSN = (count + 1).ToString(); cmd.Title = "列控指令"; cmd.Category = MsgCategoryEnum.SpeedCache; SendCmd("DSIM.Command.SpeedCache", cmd); MessageBox.Show("完成校验,已缓存"); }
/// <summary> /// 生成网络命令的文本 /// </summary> /// <param name="cmd"></param> private void GenerateCmdContent(MsgSpeedCommand cmd) { Height = 650; Title = "校验列控命令"; TB.Visibility = Visibility.Visible; cmdFromNet = cmd; var s = ""; s += "命令类型:" + cmd.CmdType + "\n"; s += "限速原因:" + cmd.Reason + "\n"; s += "线路:" + cmd.RouteName + "\n"; s += "公里标:" + "K" + cmd.BeginKMark1 + cmd.BeginKMark2 + " + " + cmd.BeginKMark3 + cmd.BeginKMark4 + "-----" + "K" + cmd.EndKMark1 + cmd.EndKMark2 + "+" + cmd.EndKMark3 + cmd.EndKMark4 + "\n"; s += "开始时间:" + (cmd.BeginNow ? "立即执行" : cmd.BeginTime) + "\n"; s += "结束时间:" + (cmd.EndLasting ? "持久有效" : cmd.EndTime) + "\n"; s += "限速值:" + cmd.LimitValue + "\n"; s += "取消限速:" + cmd.IsCancel + "\n"; TB.Text = s; }
/// <summary> /// 广播列控命令等待校验 /// </summary> /// <param name="cmd"></param> private void SendSpeedCmd(MsgSpeedCommand cmd) { cmd.Category = MsgCategoryEnum.CommandCheck; SendCmd("DSIM.Command.Check", cmd); }
private bool CheckEquality(MsgSpeedCommand local, MsgSpeedCommand net) { if (local.EndTime != net.EndTime) { return(false); } if (local.BeginTime != net.BeginTime) { return(false); } if (local.IsCancel != net.IsCancel) { return(false); } if (local.LimitValue != net.LimitValue) { return(false); } if (local.EndKMark4 != net.EndKMark4) { return(false); } if (local.EndKMark3 != net.EndKMark3) { return(false); } if (local.EndKMark2 != net.EndKMark2) { return(false); } if (local.EndKMark1 != net.EndKMark1) { return(false); } if (local.BeginKMark4 != net.BeginKMark4) { return(false); } if (local.BeginKMark3 != net.BeginKMark3) { return(false); } if (local.BeginKMark2 != net.BeginKMark2) { return(false); } if (local.BeginKMark1 != net.BeginKMark1) { return(false); } if (local.RouteName != net.RouteName) { return(false); } if (local.CmdType != net.CmdType) { return(false); } if (local.Reason != net.Reason) { return(false); } if (local.EndLasting != net.EndLasting) { return(false); } return(true); }