Opc.Ua.Com.Server.ComDaProxy.MapWriteStatusToErrorCode C# (CSharp) Method

MapWriteStatusToErrorCode() static private method

Converts a StatusCode returned during a Write to an HRESULT.
static private MapWriteStatusToErrorCode ( DataValue value, StatusCode statusCode ) : int
value DataValue
statusCode StatusCode
return int
        internal static int MapWriteStatusToErrorCode(DataValue value, StatusCode statusCode)
        {
            // map bad status codes.
            if (StatusCode.IsBad(statusCode))
            {
                switch (statusCode.Code)
                {
                    case StatusCodes.BadTypeMismatch: 
                    {
                        // server may reject a null value without checking the status code.
                        if (StatusCode.IsBad(value.StatusCode) && value.Value == null)
                        {
                            return ResultIds.E_NOTSUPPORTED;
                        }

                        return ResultIds.E_BADTYPE;
                    }

                    case StatusCodes.BadOutOfMemory: { return ResultIds.E_OUTOFMEMORY; }
                    case StatusCodes.BadNodeIdInvalid: { return ResultIds.E_INVALIDITEMID; }
                    case StatusCodes.BadNodeIdUnknown: { return ResultIds.E_UNKNOWNITEMID; }
                    case StatusCodes.BadNotWritable: { return ResultIds.E_BADRIGHTS; }
                    case StatusCodes.BadUserAccessDenied: { return ResultIds.E_ACCESSDENIED; }
                    case StatusCodes.BadAttributeIdInvalid: { return ResultIds.E_UNKNOWNITEMID; }
                    case StatusCodes.BadWriteNotSupported: { return ResultIds.E_NOTSUPPORTED; }
                    case StatusCodes.BadOutOfRange: { return ResultIds.E_RANGE; }
                }

                return ResultIds.E_FAIL;
            }

            // ignore uncertain and success codes.
            return ResultIds.S_OK;
        }
        #endregion

Usage Example

Ejemplo n.º 1
0
        /// <summary>
        /// Reads the attribute values from the server.
        /// </summary>
        /// <param name="valuesToWrite">The values to write.</param>
        /// <returns>The results.</returns>
        public int[] Write(WriteValueCollection valuesToWrite)
        {
            TraceState("Write", valuesToWrite.Count);

            // check for valid session.
            Session session = m_session;

            if (session == null)
            {
                throw ComUtils.CreateComException(ResultIds.E_FAIL);
            }

            int masterError = ResultIds.E_FAIL;

            int[] errors = new int[valuesToWrite.Count];

            if (session != null)
            {
                try
                {
                    // write the values.
                    StatusCodeCollection     results         = null;
                    DiagnosticInfoCollection diagnosticInfos = null;

                    session.Write(
                        null,
                        valuesToWrite,
                        out results,
                        out diagnosticInfos);

                    ClientBase.ValidateResponse(results, valuesToWrite);
                    ClientBase.ValidateDiagnosticInfos(diagnosticInfos, valuesToWrite);

                    // convert the response.
                    for (int ii = 0; ii < results.Count; ii++)
                    {
                        errors[ii] = ComDaProxy.MapWriteStatusToErrorCode(valuesToWrite[ii].Value, results[ii]);
                    }

                    // return the results.
                    return(errors);
                }
                catch (Exception e)
                {
                    masterError = ComUtils.GetErrorCode(e, ResultIds.E_FAIL);
                }
            }

            // report any unexpected errors.
            for (int ii = 0; ii < errors.Length; ii++)
            {
                errors[ii] = masterError;
            }

            return(errors);
        }