public override bool Sync() { IsChanged = FAutoValidate ? FEnumIn.PinIsChanged : FEnumIn.Validate(); if (IsChanged) { Length = FEnumIn.SliceCount; using (var writer = GetWriter()) { for (int i = 0; i < Length; i++) { string entry; FEnumIn.GetString(i, out entry); try { writer.Write((T)Enum.Parse(typeof(T), entry)); } catch (Exception) { writer.Write(default(T)); } } } } return(base.Sync()); }
/// <summary> /// The Mainloop /// </summary> public void Evaluate(int SpreadMax) { // Get Node Settings string DirectoryPath = ""; double IncludeSubdirectories = 0; List <string> Mask = new List <string>(); string MaskRule = ""; string CountOrder = ""; bool Update = false; SetMessage("Please Update"); double CountIn = 0; //Check if any pin is changed and setup a new search; if (FDirectory.PinIsChanged || FSubdirectories.PinIsChanged || FMask.PinIsChanged || FMaskRule.PinIsChanged || FCountIn.PinIsChanged || FShortFilenameIn.PinIsChanged || FCountOrder.PinIsChanged || FUpdate.PinIsChanged) { //Get the DirectoryPath String an check if it null, empty or exist. if not the function is returned FDirectory.GetString(0, out DirectoryPath); if (String.IsNullOrEmpty(DirectoryPath) || !Directory.Exists(DirectoryPath)) { FFiles.SliceCount = 0; FShortFilenameOut.SliceCount = 0; FCountOut.SetValue(0, 0); SetMessage("Please Enter a correct directory Path.."); return; } FSubdirectories.GetValue(0, out IncludeSubdirectories); FMaskRule.GetString(0, out MaskRule);; FCountIn.GetValue(0, out CountIn); FCountOrder.GetString(0, out CountOrder); //Get all Serach Masks for (int i = 0; i < FMask.SliceCount; i++) { string MaskSlice; FMask.GetString(i, out MaskSlice); if (!String.IsNullOrEmpty(MaskSlice)) { Mask.Add(MaskSlice); } } //if there is no Mask create one, otherwise the Function getFiles crashes if (Mask.Count == 0) { Mask.Add("*.*"); } //Create a new Search with the given setup. If there exist a Search Object we are still Searching. if (FSearch == null) { //Set if the Subdirectories are included or not and Create a new Search Process Object which handle all Files Searching and Sorting in a new Thread if (IncludeSubdirectories <= 0) { FSearch = new SearchProcess(DirectoryPath, Mask.ToArray(), SearchOption.TopDirectoryOnly, MaskRule, CountIn, CountOrder); } else { FSearch = new SearchProcess(DirectoryPath, Mask.ToArray(), SearchOption.AllDirectories, MaskRule, CountIn, CountOrder); } if (FSearch != null) { //Start the Searching.. SetMessage(FSearch.Search()); } } else { SetMessage("Still Searching... Please Wait..."); } } //Read the Resulte of the SearchProcess if (FSearch != null) { string Message = FSearch.GetStatus(); SetMessage(Message); string[] FullFilesNames = FSearch.GetFullFileNames(); if (FullFilesNames != null) { double IncludeShortFilename = 0; FShortFilenameIn.GetValue(0, out IncludeShortFilename); FFiles.SliceCount = FullFilesNames.Length; FCountOut.SetValue(0, FullFilesNames.Length); for (int i = 0; i < FullFilesNames.Length; i++) { string FilePath = FullFilesNames[i]; FFiles.SetString(i, FilePath); if (IncludeShortFilename >= 0.5) { string[] ShortFilename = FSearch.GetShortFileNames(); FShortFilenameOut.SliceCount = ShortFilename.Length; FShortFilenameOut.SetString(i, ShortFilename[i]); } else { FShortFilenameOut.SliceCount = 0; } } FSearch = null; } } }
/// <summary> /// The Mainloop /// </summary> public void Evaluate(int SpreadMax) { try { FDataOut.SliceCount = SpreadMax; FOnDataOut.SliceCount = SpreadMax; FConnectedOut.SliceCount = SpreadMax; for (int i = 0; i < _AvailablePorts.Length; i++) { FPortsOut.SetValue(i, Convert.ToDouble(_AvailablePorts[i].Substring(3))); } string currentSliceData; double currentSliceDoSend; double currentSliceEnabled; double currentSliceKeepLastData; double currentSlicePortNumber; double currentSliceBaudrate; string currentSliceParity; string currentSliceDatabits = ""; string currentSliceStopbits; string currentSliceHandShake; double currentReadBufferSize; //loop for all slices for (int i = 0; i < SpreadMax; i++) { FDoSendIn.GetValue(i, out currentSliceDoSend); FEnableIn.GetValue(i, out currentSliceEnabled); FKeepLastDataIn.GetValue(i, out currentSliceKeepLastData); FPortNumberIn.GetValue(i, out currentSlicePortNumber); FBaudrateIn.GetValue(i, out currentSliceBaudrate); FParityIn.GetString(i, out currentSliceParity); FDatabitsIn.GetString(i, out currentSliceDatabits); FStopbitsIn.GetString(i, out currentSliceStopbits); FHandShakeIn.GetString(i, out currentSliceHandShake); FReadBufferIn.GetValue(i, out currentReadBufferSize); Port tPort; if (Convert.ToBoolean(currentSliceEnabled)) { tPort = this.GetPort((int)currentSlicePortNumber); if (tPort == null) { if ((new List <string>(SerialPort.GetPortNames())).Contains(String.Format("COM{0}", currentSlicePortNumber))) { tPort = new Port((int)currentSlicePortNumber, (int)currentSliceBaudrate, currentSliceParity, Convert.ToInt32(currentSliceDatabits.Replace("Bits", "")), currentSliceStopbits.Replace("Bits", ""), (int)currentReadBufferSize); _Ports.Add(tPort); currentReadBufferSize = (double)tPort.BufferSize; FReadBufferOut.SetValue(i, currentReadBufferSize); } } else { //read data from inputs FDataIn.GetString(i, out currentSliceData); FOnDataOut.SetValue(i, Convert.ToDouble(tPort.OnData)); FConnectedOut.SetValue(i, Convert.ToDouble(tPort.Connected)); // write data to comport if (currentSliceDoSend == 1.0 && !String.IsNullOrEmpty(currentSliceData)) { tPort.Write(currentSliceData); } //read data from comport if (tPort.OnData) { FDataOut.SetString(i, tPort.Read()); } else { if (Convert.ToBoolean(currentSliceKeepLastData)) { FDataOut.SetString(i, tPort.Data); } else { FDataOut.SetString(i, ""); } } if (FBaudrateIn.PinIsChanged) { tPort.Baudrate = (int)currentSliceBaudrate; } if (FParityIn.PinIsChanged) { tPort.Parity = currentSliceParity; } if (FDatabitsIn.PinIsChanged) { tPort.DataBits = Convert.ToInt32(currentSliceDatabits); } if (FStopbitsIn.PinIsChanged) { tPort.StopBits = currentSliceStopbits; } if (FHandShakeIn.PinIsChanged) { tPort.HandShake = currentSliceHandShake; } if (FReadBufferIn.PinIsChanged) { tPort.Dispose(); _Ports.Remove(tPort); } } } else { tPort = this.GetPort((int)currentSlicePortNumber); if (tPort != null) { tPort.Dispose(); _Ports.Remove(tPort); } FOnDataOut.SetValue(i, Convert.ToDouble(0)); FConnectedOut.SetValue(i, Convert.ToDouble(0)); FDataOut.SetString(i, ""); } } } catch (Exception ex) { FHost.Log(TLogType.Error, ex.Message); } }