예제 #1
0
        private void DeviceObjectChanged(object source, DeviceObjectChangedArgs e)
        {
            if (e == null)
            {
                return;
            }

            try
            {
                //---------------------实时数据显示--------------------//
                GraphicsShowManager.BatchUpdateDevice(e.DeviceID, e.Object);

                //---------------------服务输出-----------------------//
                ServiceManager.BatchUpdateDevice(e.DeviceID, e.Object);

                //---------------------检测虚拟设备-------------------//
                if (e.DeviceType != DeviceType.Virtual)
                {
                    IRunDevice[] vdevList = DeviceManager.GetDevices(DeviceType.Virtual);
                    foreach (IRunDevice dev in vdevList)
                    {
                        dev.RunVirtualDevice(e.DeviceID, e.Object);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error(true, ex.Message);
            }
        }
예제 #2
0
        internal ServerBase(IServerConfig config, IDeviceContainer deviceContainer = null, ILogContainer logContainer = null)
        {
            if (config == null)
            {
                throw new ArgumentNullException("配制信息", "参数为空");
            }
            ServerConfig = config;

            _deviceContainer = deviceContainer;
            if (_deviceContainer != null)
            {
                _deviceContainer.MouseRightContextMenu += Device_MouseRightContextMenu;
            }

            if (logContainer == null)
            {
                logContainer = new ConsoleContainer();
            }

            Logger = (new LogFactory()).GetLog(ServerName, logContainer);

            _monitorException = new MonitorException();

            ServiceManager      = new ServiceManager(Logger);
            GraphicsShowManager = new GraphicsShowManager(Logger);
            DeviceManager       = new DeviceManager(Logger);
            ChannelManager      = new ChannelManager(Logger);
            ControllerManager   = new ControllerManager(Logger);

            IsDisposed = false;
        }
예제 #3
0
        public bool AddGraphicsShow(Show.IGraphicsShow graphicsShow, IWin32Window window)
        {
            if (GraphicsShowManager.AddShow(graphicsShow.ShowKey, graphicsShow))
            {
                graphicsShow.MouseRightContextMenu += Device_MouseRightContextMenu;
                graphicsShow.GraphicsShowClosed    += GraphicsShow_GraphicsShowClosed;

                try
                {
                    graphicsShow.ShowGraphics(window);
                }
                catch (Exception ex)
                {
                    Logger.Error(true, "", ex);
                }

                Logger.Info(true, String.Format("<{0}>显示视图显示成功", graphicsShow.ShowName));
                return(true);
            }
            else
            {
                Logger.Info(true, String.Format("<{0}>显示视图显示失败", graphicsShow.ShowName));
                return(false);
            }
        }
예제 #4
0
        public bool RemoveGraphicsShow(string showKey)
        {
            IGraphicsShow gShow = GraphicsShowManager.GetShow(showKey);

            if (gShow != null)
            {
                GraphicsShowManager.RemoveShow(showKey);
                Logger.Info(true, String.Format("<{0}>显示视图关闭成功", gShow.ShowName));
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #5
0
        public void RemoveDevice(string devid)
        {
            IRunDevice dev = DeviceManager.GetDevice(devid);

            if (dev != null)
            {
                string desc    = String.Empty;
                string devname = dev.DeviceParameter.DeviceName;
                if (DeviceManager.RemoveDevice(dev.DeviceParameter.DeviceID))
                {
                    if (dev.DeviceType == DeviceType.Virtual)
                    {
                        desc = "删除虚拟设备";
                    }
                    else
                    {
                        #region
                        if (dev.CommunicateType == CommunicateType.COM)
                        {
                            IRunDevice[] comDevices = DeviceManager.GetDevices(dev.DeviceParameter.COM.Port.ToString(), CommunicateType.COM);

                            if (comDevices.Length == 0)
                            {
                                string      key        = ComUtils.PortToString(dev.DeviceParameter.COM.Port);
                                IController controller = ControllerManager.GetController(key);
                                if (controller != null)
                                {
                                    controller.IsWorking = false;
                                    if (ControllerManager.RemoveController(controller.Key))
                                    {
                                        controller.StopController();
                                        controller.Dispose();

                                        IComSession comChannel = (IComSession)((IComController)controller).ComChannel;
                                        comChannel.Close();
                                        comChannel.COMOpen  -= ComChannel_COMOpen;
                                        comChannel.COMClose -= ComChannel_COMClose;
                                        comChannel.COMError -= ComChannel_COMError;

                                        if (ChannelManager.RemoveChannel(comChannel.Key))
                                        {
                                            comChannel.Close();
                                            comChannel.Dispose();
                                        }
                                    }
                                }
                            }

                            desc = String.Format("{0},从串口'{1}'删除", dev.DeviceParameter.DeviceName, dev.DeviceParameter.COM.Port.ToString());
                        }
                        else if (dev.CommunicateType == CommunicateType.NET)
                        {
                            desc = String.Format("{0}-{1},从网络中删除成功", dev.DeviceParameter.DeviceName, dev.DeviceParameter.NET.RemoteIP);
                        }
                        #endregion
                    }

                    GraphicsShowManager.BatchRemoveDevice(dev.DeviceParameter.DeviceID);

                    ServiceManager.BatchRemoveDevice(dev.DeviceParameter.DeviceID);

                    if (_deviceContainer != null)
                    {
                        _deviceContainer.RemoveDevice(dev.DeviceParameter.DeviceID);
                    }

                    dev.DeviceParameter.Delete();
                    dev.DeviceDynamic.Delete();
                    dev.Delete();
                    dev.Dispose();

                    BindDeviceHandler(dev, dev.DeviceType, false);

                    desc += ",成功";
                    OnDeleteDeviceCompleted(dev.DeviceParameter.DeviceID, dev.DeviceParameter.DeviceName, true);
                }
                else
                {
                    desc += ",失败";
                    OnDeleteDeviceCompleted(dev.DeviceParameter.DeviceID, dev.DeviceParameter.DeviceName, false);
                }

                Logger.Info(true, desc);
            }
        }