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

MapReadStatusToErrorCode() static private method

Converts a StatusCode returned during a Read to an HRESULT.
static private MapReadStatusToErrorCode ( StatusCode statusCode ) : int
statusCode StatusCode
return int
        internal static int MapReadStatusToErrorCode(StatusCode statusCode)
        {
            // map bad well known status codes.
            if (StatusCode.IsBad(statusCode))
            {
                switch (statusCode.Code)
                {
                    case StatusCodes.BadOutOfMemory: { return ResultIds.E_OUTOFMEMORY; }
                    case StatusCodes.BadNodeIdInvalid: { return ResultIds.E_INVALIDITEMID; }
                    case StatusCodes.BadNodeIdUnknown: { return ResultIds.E_UNKNOWNITEMID; }
                    case StatusCodes.BadNotReadable: { return ResultIds.E_BADRIGHTS; }
                    case StatusCodes.BadUserAccessDenied: { return ResultIds.E_ACCESSDENIED; }
                    case StatusCodes.BadAttributeIdInvalid: { return ResultIds.E_INVALIDITEMID; }
                    case StatusCodes.BadUnexpectedError: { return ResultIds.E_FAIL; }
                    case StatusCodes.BadInternalError: { return ResultIds.E_FAIL; }
                    case StatusCodes.BadSessionClosed: { return ResultIds.E_FAIL; }
                    case StatusCodes.BadTypeMismatch: { return ResultIds.E_BADTYPE; }
                }
            }

            // all other values are mapped to quality codes.
            return ResultIds.S_OK;
        }

Usage Example

        /// <summary>
        /// Gets the local data value.
        /// </summary>
        /// <param name="remoteValue">The remote value.</param>
        /// <returns>The local data value.</returns>
        public DaValue GetLocalDataValue(DataValue remoteValue)
        {
            DaValue localValue = new DaValue();

            localValue.Error = ComDaProxy.MapReadStatusToErrorCode(remoteValue.StatusCode);

            if (localValue.Error >= 0)
            {
                localValue.HdaQuality = ComUtils.GetHdaQualityCode(remoteValue.StatusCode);
                localValue.Timestamp  = remoteValue.SourceTimestamp;
                localValue.Error      = ResultIds.S_OK;

                if (localValue.Timestamp == DateTime.MinValue)
                {
                    localValue.Timestamp = remoteValue.ServerTimestamp;
                }

                try
                {
                    localValue.Value = GetLocalValue(remoteValue.WrappedValue);
                }
                catch
                {
                    localValue.Error = ResultIds.E_BADTYPE;
                }
            }

            return(localValue);
        }