예제 #1
0
        public bool RegisterParameter(string source, ushort index, byte subIndex, ParameterUpdatePriority priority)
        {
            bool result           = false;
            var  objectDictionary = _device?.ObjectDictionary;
            var  parameter        = objectDictionary?.SearchParameter(index, subIndex);

            if (parameter != null)
            {
                var registeredParameter = new RegisteredParameter {
                    Source = source, Parameter = parameter, Priority = priority
                };

                MsgLogger.WriteFlow($"{GetType().Name} - RegisterParameter", $"register parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, add to queue ...");

                lock (RegisterParametersQueueLock)
                {
                    _registerParametersQueue.Add(registeredParameter);
                    result = true;
                }

                MsgLogger.WriteFlow($"{GetType().Name} - RegisterParameter", $"register parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, added to queue");
            }
            else
            {
                MsgLogger.WriteError($"{GetType().Name} - RegisterParameter", $"parameter index = 0x{index:X4}, subindex = 0x{subIndex:X4}, not found");
            }

            return(result);
        }
예제 #2
0
        public bool Register(RegisteredParameter registeredParameter)
        {
            bool result = false;

            MsgLogger.WriteFlow($"{GetType().Name} - Register", $"Register parameter source = '{registeredParameter.Key}', index = {registeredParameter.Parameter.Index:X4}, subindex = {(registeredParameter.Parameter as XddParameter).SubIndex:X4}");

            try
            {
                lock (RegisteredParametersLock)
                {
                    if (!_registeredParameters.ContainsKey(registeredParameter.Key))
                    {
                        result = AddToRegisteredParameters(registeredParameter);
                    }
                    else
                    {
                        result = UpdateParameterRefCount(registeredParameter);
                    }
                }
            }
            catch (Exception e)
            {
                MsgLogger.Exception($"{GetType().Name} - Register", e);
            }

            MsgLogger.WriteDebug($"{GetType().Name} - Register", $"Register Parameter '{registeredParameter.Key}' - OK");

            return(result);
        }
예제 #3
0
        private bool AddToRegisteredParameters(RegisteredParameter registeredParameter)
        {
            bool result = false;

            if (_registeredParameters != null)
            {
                _registeredParameters.Add(registeredParameter.Key, registeredParameter);

                registeredParameter.RefCount++;

                MsgLogger.WriteLine($"(+)register parameter key='{registeredParameter.Key}'");

                result = true;
            }

            return(result);
        }
예제 #4
0
        public bool Unregister(RegisteredParameter registeredParameter)
        {
            bool result = false;

            MsgLogger.WriteDebug($"{GetType().Name} - Unregister", $"Unregister Parameter '{registeredParameter.Key}', index = {registeredParameter.Parameter.Index:X4}, subindex = {(registeredParameter.Parameter as XddParameter).SubIndex:X4}");

            lock (RegisteredParametersLock)
            {
                if (_registeredParameters.ContainsKey(registeredParameter.Key))
                {
                    var parameter = _registeredParameters[registeredParameter.Key];

                    if (parameter != null)
                    {
                        parameter.RefCount--;

                        if (parameter.RefCount == 0)
                        {
                            result = _registeredParameters.Remove(registeredParameter.Key);

                            MsgLogger.WriteLine($"(-)unregister parameter key='{registeredParameter.Key}', result={result}");
                        }
                        else
                        {
                            MsgLogger.WriteLine($"(-)unregister parameter key='{registeredParameter.Key}', refCount = {parameter.RefCount}");

                            result = true;
                        }
                    }
                    else
                    {
                        MsgLogger.WriteError($"{GetType().Name} - Unregister", $"(-)unregister parameter key='{registeredParameter.Key}' failed, parameter empty!");
                    }
                }
                else
                {
                    MsgLogger.WriteError($"{GetType().Name} - Unregister", $"(-)unregister parameter key='{registeredParameter.Key}' failed, parametere not found!");
                }
            }

            MsgLogger.WriteDebug($"{GetType().Name} - Unregister", $"Unregister Parameter '{registeredParameter.Key}' - OK");

            return(result);
        }
예제 #5
0
        private bool UpdateParameterRefCount(RegisteredParameter registeredParameter)
        {
            bool result    = false;
            var  parameter = _registeredParameters[registeredParameter.Key];

            if (parameter != null)
            {
                parameter.RefCount++;

                MsgLogger.WriteLine($"(+)register parameter key='{registeredParameter.Key}', refCount = {parameter.RefCount}");

                result = true;
            }
            else
            {
                MsgLogger.WriteError($"{GetType().Name} - Register", $"(+)register parameter key='{registeredParameter.Key}' failed, parameter empty!");
            }

            return(result);
        }