Пример #1
0
        public IActionResult Index()
        {
            ChooseDevice chooseDevice = new ChooseDevice()
            {
                DeviceList = new SelectList(IotMessageSender.DeviceToConnectionString.Keys)
            };

            return(View(chooseDevice));
        }
Пример #2
0
 public IActionResult Index(ChooseDevice device)
 {
     if (!ModelState.IsValid)
     {
         return(View());
     }
     if (!IotMessageSender.DeviceToConnectionString.Keys.Contains(device.DeviceName))
     {
         return(Index());
     }
     Email = device.Email;
     if (Email != null)
     {
         HttpContext.Session.SetString("Email", Email);
     }
     return(RedirectToAction("Detect", "home", new { deviceName = device.DeviceName }));
 }
Пример #3
0
        /// <summary>
        ///     启动指定的模块。
        /// </summary>
        /// <param name="models">需要启动的模块列表。</param>
        /// <returns>成功返回true,错误返回false。</returns>
        private static bool StartupModels(IEnumerable <BasicClass> models)
        {
            // 判断模块是否初始化
            var modelsList = models.ToList();

            if (modelsList.Contains(null))
            {
                return(false);
            }

            // 选择设备
            var index        = new PointerPacker("");
            var chooseDevice = new ChooseDevice(ref index);

            while (true)
            {
                chooseDevice.ShowDialog();

                // 用户点击了取消,中止本次操作
                var value = (string)index.Item;
                if (value.Length == 0)
                {
                    return(true);
                }

                // 检查设备网络是否有效
                var device  = (WinPcapDevice)CaptureDeviceList.Instance[value];
                var isValid = false;
                foreach (var address in device.Addresses)
                {
                    if (address.Addr.sa_family != 2)
                    {
                        continue;
                    }
                    isValid = true;
                    break;
                }

                if (isValid)
                {
                    break;
                }
                var dialogResult = MessageBox.Show("无法确定指定设备的IPv4网络环境,仍然继续?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
                if (dialogResult == DialogResult.OK)
                {
                    break;
                }
            }

            // 创建载入界面
            var task = new Thread(init => {
                try {
                    foreach (var model in modelsList)
                    {
                        model.CurDevName = index.Item.ToString();
                    }
                }
                catch (ThreadAbortException) {
                    foreach (var model in modelsList)
                    {
                        model.CurDevName = "";
                    }
                }
            })
            {
                Name = RegisteredThreadName.StartupModels.ToString()
            };

            MessagePipe.SendInMessage(new KeyValuePair <Message, Thread>(Message.TaskIn, task));
            var loading = new Loading("设置模块中,请稍候", task);

            loading.ShowDialog();

            // 等待结果
            var result = Message.NoAvailableMessage;

            new WaitTimeoutChecker(30000).ThreadSleep(500, () => (result = MessagePipe.GetNextOutMessage(task)) == Message.NoAvailableMessage);

            // 用户取消
            if (result == Message.UserCancel)
            {
                MessagePipe.SendInMessage(new KeyValuePair <Message, Thread>(Message.TaskCancel, task));
                new WaitTimeoutChecker(30000).ThreadSleep(500, () => (result = MessagePipe.GetNextOutMessage(task)) == Message.NoAvailableMessage);

                switch (result)
                {
                case Message.TaskAborted:
                    return(false);

                case Message.TaskOut:
                    break;

                case Message.TaskNotFound:
                    MessageBox.Show("未能找到指定名称的工作线程。", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return(false);

                default:
                    throw new Exception($"无效的消息类型:{result}");
                }
            }

            // 任务完成
            MessagePipe.ClearAllMessage(task);
            return(true);
        }