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());
                    }
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
 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)));
 }