Ejemplo n.º 1
0
        public void AddCallbackParameter(string key, string value)
        {
            if (!CheckParameter(key, "key", "Callback"))
            {
                return;
            }
            if (!CheckParameter(value, "value", "Callback"))
            {
                return;
            }

            if (CallbackParameters == null)
            {
                CallbackParameters = new Dictionary <string, string>();
            }

            string previousValue;

            if (CallbackParameters.TryGetValue(key, out previousValue))
            {
                Logger.Warn("key {0} was overwritten", key);
                CallbackParameters.Remove(key);
            }
            CallbackParameters.Add(key, value);
        }
Ejemplo n.º 2
0
        /// <summary cref="ICallable.Call" />
        public virtual ServiceResult Call(
            OperationContext context,
            NodeId methodId,
            object methodHandle,
            NodeId objectId,
            IList <object> inputArguments,
            IList <ServiceResult> argumentErrors,
            IList <object> outputArguments)
        {
            // find the method to call for the object.
            CallbackParameters callbackParameters = null;

            lock (DataLock)
            {
                if (!m_executable || !m_userExecutable)
                {
                    return(StatusCodes.BadUserAccessDenied);
                }

                if (!m_callbacks.TryGetValue(objectId, out callbackParameters))
                {
                    return(ServiceResult.Create(StatusCodes.BadInternalError, "No handler specified for the method."));
                }
            }

            try
            {
                // dereference extension objects.
                List <object> convertedArguments = new List <object>();

                foreach (object inputArgument in inputArguments)
                {
                    ExtensionObject extension = inputArgument as ExtensionObject;

                    if (extension != null)
                    {
                        IEncodeable encodeable = extension.Body as IEncodeable;

                        if (encodeable != null)
                        {
                            convertedArguments.Add(encodeable);
                            continue;
                        }
                    }

                    convertedArguments.Add(inputArgument);
                }

                // invoke the method.
                Call(
                    context,
                    callbackParameters.Target,
                    callbackParameters.Callback,
                    convertedArguments,
                    argumentErrors,
                    outputArguments);

                // check for argument errors.
                foreach (ServiceResult argumentError in argumentErrors)
                {
                    if (ServiceResult.IsBad(argumentError))
                    {
                        return(StatusCodes.BadInvalidArgument);
                    }
                }

                // everthing ok.
                return(ServiceResult.Good);
            }
            catch (Exception e)
            {
                return(new ServiceResult(e));
            }
        }
 void ILotMother.Log(CallbackParameters callbackParameteres)
 {
     Log(callbackParameteres);
 }