Gurux.DLMS.GXDLMS.HandleActionResponseNormal C# (CSharp) Méthode

HandleActionResponseNormal() private static méthode

private static HandleActionResponseNormal ( GXDLMSSettings settings, GXReplyData data ) : void
settings GXDLMSSettings
data GXReplyData
Résultat void
        private static void HandleActionResponseNormal(GXDLMSSettings settings, GXReplyData data)
        {
            //Get Action-Result
            byte ret = data.Data.GetUInt8();
            if (data.Xml != null)
            {
                if (data.Xml
                        .OutputType == TranslatorOutputType.StandardXml)
                {
                    data.Xml
                    .AppendStartTag(TranslatorTags.SingleResponse);
                }
                data.Xml.AppendLine(TranslatorTags.Result, null,
                                    GXDLMSTranslator.ErrorCodeToString(
                                        data.Xml.OutputType,
                                        (ErrorCode)data.Error));
            }
            if (ret != 0)
            {
                data.Error = ret;
            }
            // Response normal. Get data if exists. Some meters do not return here anything.
            if (data.Data.Position < data.Data.Size)
            {
                //Get-Data-Result
                ret = data.Data.GetUInt8();
                //If data.
                if (ret == 0)
                {
                    GetDataFromBlock(data.Data, 0);
                }
                else if (ret == 1) //Data-Access-Result
                {
                    //Get Data-Access-Result
                    ret = data.Data.GetUInt8();
                    if (ret != 0)
                    {
                        data.Error = data.Data.GetUInt8();
                        //Handle Texas Instrument missing byte here.
                        if (ret == 9 && data.Error == 16)
                        {
                            data.Data.Position -= 2;
                            GetDataFromBlock(data.Data, 0);
                            data.Error = 0;
                            ret = 0;
                        }
                    }
                    else
                    {
                        GetDataFromBlock(data.Data, 0);
                    }
                }
                else
                {
                    throw new GXDLMSException("parseApplicationAssociationResponse failed. Invalid tag.");
                }
                if (data.Xml != null)
                {

                    data.Xml.AppendStartTag(TranslatorTags.ReturnParameters);
                    if (ret != 0)
                    {
                        data.Xml.AppendLine(
                            TranslatorTags.DataAccessError, null,
                            GXDLMSTranslator.ErrorCodeToString(
                                data.Xml.OutputType, (ErrorCode)
                                data.Error));

                    }
                    else
                    {
                        if (data.Error != 0)
                        {
                            data.Xml.AppendLine(TranslatorTags.Result,
                                                null,
                                                GXDLMSTranslator.ErrorCodeToString(
                                                    data.Xml.OutputType,
                                                    (ErrorCode)data.Error));
                        }
                        else
                        {
                            data.Xml.AppendStartTag(Command.ReadResponse,
                                                    SingleReadResponse.Data);
                            GXDataInfo di = new GXDataInfo();
                            di.xml = data.Xml;
                            GXCommon.GetData(settings, data.Data, di);
                            data.Xml.AppendEndTag(Command.ReadResponse,
                                                  SingleReadResponse.Data);
                        }
                    }
                    data.Xml.AppendEndTag(TranslatorTags.ReturnParameters);

                    if (data.Xml.OutputType == TranslatorOutputType.StandardXml)
                    {
                        data.Xml.AppendEndTag(TranslatorTags.SingleResponse);
                    }
                }
            }
        }