public async Task CanSendSignalToSelf(int signal) { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Assert.Pass("Tests windows-specific behavior"); } Command.TryAttachToProcess(ProcessHelper.CurrentProcessId, out var thisCommand).ShouldEqual(true); using (var manualResetEvent = new ManualResetEventSlim(initialState: false)) { NativeMethods.ConsoleCtrlDelegate handler = receivedSignal => { if ((int)receivedSignal == signal) { manualResetEvent.Set(); return(true); // handled } return(false); }; if (!NativeMethods.SetConsoleCtrlHandler(handler, add: true)) { Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); } try { (await thisCommand.TrySignalAsync(CommandSignal.FromSystemValue(signal))).ShouldEqual(true); manualResetEvent.Wait(TimeSpan.FromSeconds(5)).ShouldEqual(true); } finally { if (!NativeMethods.SetConsoleCtrlHandler(handler, add: false)) { Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); } } } }
public override bool WriteValue(Device d, CommandSignal c) { SNMPDevice _d = Devices.Where(device => device.ID == d.ID).FirstOrDefault(); SNMPCommandSignal _commandSignal = _d.CommandSignals.Where(command => command.ID == c.ID).FirstOrDefault(); if (_d.Connected && _d.isActive) { // TODO: Devamını getir. //switch (_commandSignal.FunctionCode) //{ // case 5: // WriteSingleCoil(_d, _commandSignal); // return true; // case 6: // WriteSingleRegister(_d, _commandSignal); // return true; // case 15: // WriteMultipleCoils(_d, _commandSignal); // return true; // case 16: // WriteValueMultipleRegisters(_d, _commandSignal); // return true; // default: // Log.Instance.Error("Yanlış function code : {0} sinyaline değer yazılamadı", _commandSignal.Identification); // return false; //} return(false); } else { Log.Instance.Warn("{0}: {1} adlı komut cihaz ile haberleşme olmadığı için gönderilemedi", this.GetType().Name, _commandSignal.Identification); return(false); } }
public abstract bool WriteValue(Device d, CommandSignal c);
public static Task <bool> TrySignalAsync(int processId, CommandSignal signal) { return(PlatformCompatibilityHelper.IsWindows ? WindowsProcessSignaler.TrySignalAsync(processId, (NativeMethods.CtrlType)signal.Value) : Task.FromResult(UnixProcessSignaler.TrySignal(processId, signal.Value))); }