Пример #1
0
        private void MonitorPITags()
        {
            DataPipeHandler archiveDataPipeHandler  = null;
            DataPipeHandler snapshotDataPipeHandler = null;

            try
            {
                if (string.IsNullOrEmpty(PIServerName))
                {
                    throw new PIServerNotFoundException();
                }

                else
                {
                    PIServer piserver;
                    var      piConnectionManager = PiConnectionMgr.ConnectAndGetServer(PIServerName, out piserver);

                    // get the tag we want to monitor
                    var pointList = PIPoint.FindPIPoints(piserver, TagList).ToList();

                    // event pipe for archive modifications
                    var archive = AFDataPipeType.Archive;

                    archiveDataPipeHandler = new DataPipeHandler(new PIConsoleDataObserver(archive), archive);
                    archiveDataPipeHandler.AddSignupsWithInitEvents(pointList);

                    // event pipe for snpshot modifications
                    var snapshot = AFDataPipeType.Snapshot;

                    snapshotDataPipeHandler = new DataPipeHandler(new PIConsoleDataObserver(snapshot), snapshot);
                    snapshotDataPipeHandler.AddSignupsWithInitEvents(pointList);


                    // archive data pipe is for demonstrative use
                    // you may only need the snapshot in your application, this depends on your use case
                    archiveDataPipeHandler.StartListening(TimeSpan.FromSeconds(Interval));

                    snapshotDataPipeHandler.StartListening(TimeSpan.FromSeconds(Interval));

                    Logger.InfoFormat("Listening for data changes started. Checking every {0}s", Interval);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
            }


            finally
            {
                // here the method will wait until _terminateRequest.Set() before terminating
                _terminateRequest.WaitOne();

                // in case you don't know this is called null propagation
                // its equivalent to if x!=null x.Dispose()
                archiveDataPipeHandler?.Dispose();
                snapshotDataPipeHandler?.Dispose();
            }
        }
Пример #2
0
        private void MonitorAFAttributes()
        {
            DataPipeHandler afDataPipeHandler = null;

            try
            {
                //connect to AF Server
                if (string.IsNullOrEmpty(AFServerName))
                {
                    throw new AFServerNotFoundException();
                }

                else
                {
                    AFDatabase database;
                    var        _afConnectionManager = AfConnectionHelper.ConnectAndGetDatabase(AFServerName, AFDatabaseName,
                                                                                               out database);

                    // get the attributes that will be monitored
                    IDictionary <string, string> findAttributesErrors;
                    var attributes = AFAttribute.FindAttributesByPath(AttributesList, database, out findAttributesErrors);

                    // in case there was errors in the search we display them
                    if (findAttributesErrors != null && findAttributesErrors.Count > 0)
                    {
                        findAttributesErrors.ToList().ForEach(e => Logger.ErrorFormat("{0},{1}", e.Key, e.Value));
                    }


                    afDataPipeHandler = new DataPipeHandler(new AFConsoleDataObserver());
                    afDataPipeHandler.AddSignupsWithInitEvents(attributes);

                    afDataPipeHandler.StartListening(TimeSpan.FromSeconds(Interval));

                    Logger.InfoFormat("Listening for data changes started. Checking every {0}s", Interval);
                }
            }


            catch (Exception ex)
            {
                Logger.Error(ex);
            }

            finally
            {
                _terminateRequest.WaitOne();

                // null propagation operator, this is same as x!=null x.Dispose()
                afDataPipeHandler?.Dispose();
            }
        }