Exemplo n.º 1
0
        public override void Activate()
        {
            //InDriveInfo Z:(\\IP\Folder)格式,WmiDiskHelper.ExtractDiskID取 "Z:"
            //但當選取的InDriveInfo是 D:格式,WmiDiskHelper.ExtractDiskID取"D:"
            //可是當送給DirectoryWatcher時 因D:本質是Disk Volume而不是Folder
            //而Z:是以建立共享資料夾的虛擬網路硬碟 (可以想成Z:是一個代號),本質上他還是個Folder,所以可以監控
            //因此,為了避免選成Disk,故加一個@"\"
            target = WmiDiskHelper.ExtractDiskID(PrinterSFSetting.InDriveInfo) + @"\"; //Disk mapping
            var des = WmiDiskHelper.ExtractProviderName(PrinterSFSetting.InDriveInfo); //ui顯示用

            WatchedFolder = PrinterManager.getInstance().AddWatcher(target, LaneID, des);
        }
Exemplo n.º 2
0
        protected object Match(InspectedPanel currentPanel, IParser parser, SharedFolderWatcher watcher)
        {
            //bool IsDone = false;
            object _ParsedData = null;

            if (PrinterCommonSetting.MatchingBasis == UI.CommonSetting.eMatchingBasis.Sequence)
            {
                #region SN

                //while (!IsDone)
                //{
                if (watcher.WatchedFiles.Count > 0)
                {
                    //正常情況,都是取第一個(抽板狀況除外)
                    var file = watcher.WatchedFiles.Dequeue();
                    Log4.PrinterLogger.InfoFormat(" -(1).Pick a file({0})", file);
                    _ParsedData = parser.Parse(watcher.Target + file);
                    if (_ParsedData != null) //parse ok
                    {
                        Log4.PrinterLogger.InfoFormat(" -(2).Parse a file OK({0})", file);
                        //UI狀態打V
                        ViewModelLocator.Atom.FlowHostVM.MarkWatchedFileCheckBox(LaneID, file);

                        ViewModelLocator.Atom.FlowHostVM.MarkSPIDataCheckBox();
                        Log4.PrinterLogger.InfoFormat(" -(3).Done {0}", file);
                        //IsDone = true;
                    }
                    else
                    {
                        //IsDone = true;
                        Log4.PrinterLogger.InfoFormat(" -(2).Parse a file NG({0}) - break", file);
                        throw new MatchException("[s] Parse a file NG - break");
                    }
                }
                else
                {
                    //IsDone = true;
                    //正常流程應該要先有檔案,才會有檢測資料
                    Log4.PrinterLogger.InfoFormat(" -(1).No files - break");
                    throw new MatchException("[s] No Files - break");
                }

                //}

                #endregion SN
            }
            else
            {
                #region Barcode

                bool IsFoundBarcode = false;
                //while (!IsDone)
                //{
                if (watcher.WatchedFiles.Count > 0)
                {
                    for (int i = 0; i < watcher.WatchedFiles.Count; i++)
                    {
                        _ParsedData = parser.Parse(watcher.Target + watcher.WatchedFiles[i]);
                        if (_ParsedData != null)
                        {
                            if (parser.IsBarcodeMatched(_ParsedData, currentPanel.Panel.PanelBarcode))
                            {
                                Log4.PrinterLogger.InfoFormat(" -(3).Find Barcode = {0} break {1}", currentPanel.Panel.PanelBarcode, watcher.WatchedFiles[i]);

                                ViewModelLocator.Atom.FlowHostVM.MarkWatchedFileCheckBox(LaneID, watcher.WatchedFiles[i]);
                                ViewModelLocator.Atom.FlowHostVM.MarkSPIDataCheckBox();

                                Log4.PrinterLogger.InfoFormat(" -(4).Done {0}", watcher.WatchedFiles[i]);
                                //執行dequeue
                                watcher.WatchedFiles.Dequeue();
                                IsFoundBarcode = true;
                                //IsDone = true;
                                break;
                            }
                            else
                            {
                                Log4.PrinterLogger.InfoFormat(" -(3).Find Barcode = {0} NG {0}", currentPanel.Panel.PanelBarcode, watcher.WatchedFiles[i]);
                                continue;
                            }
                        }
                        else
                        {
                            //IsDone = true;
                            Log4.PrinterLogger.InfoFormat(" -(2).Parse file NG {0}", watcher.WatchedFiles[i]);
                        }
                    }
                    if (!IsFoundBarcode)
                    {
                        Log4.PrinterLogger.InfoFormat(" -(3). Reach to the end, Still can't find file coresponding to Barcode = {0}", currentPanel.Panel.PanelBarcode);
                        //IsDone = true;
                        throw new MatchException("[b] Reach to the end, Still can't find file coresponding to Barcode");
                    }
                }
                else
                {
                    //IsDone = true;
                    //正常流程應該要先有檔案,才會有檢測資料
                    Log4.PrinterLogger.InfoFormat(" -(1).No files - break");
                    throw new MatchException("[b] No files - break");
                }
                //}

                #endregion Barcode
            }

            return(_ParsedData);
        }