public static ConnectSuccessResponseBody Parse(byte[] rawData)
{
ConnectSuccessResponseBody responseBody = new ConnectSuccessResponseBody();
int index = 0;
responseBody.StatusCode = BitConverter.ToUInt32(rawData, index);
index += 4;
responseBody.ErrorCode = BitConverter.ToUInt32(rawData, index);
index += 4;
responseBody.PollsMax = BitConverter.ToUInt32(rawData, index);
index += 4;
responseBody.RetryCount = BitConverter.ToUInt32(rawData, index);
index += 4;
responseBody.RetryDelay = BitConverter.ToUInt32(rawData, index);
index += 4;
// The length in bytes of the unicode string to parse
int strBytesLen = 0;
// Find the string with '\0' end
for (int i = index; i < rawData.Length; i++)
{
strBytesLen++;
if (rawData[i] == 0)
{
break;
}
}
byte[] prefixBuffer = new byte[strBytesLen];
Array.Copy(rawData, index, prefixBuffer, 0, strBytesLen);
index += strBytesLen;
responseBody.DNPrefix = Encoding.ASCII.GetString(prefixBuffer);
// The length in bytes of the unicode string to parse
strBytesLen = 0;
// Find the string with '\0''\0' end
for (int i = index; i < rawData.Length; i += 2)
{
strBytesLen += 2;
if ((rawData[i] == 0) && (rawData[i + 1] == 0))
{
break;
}
}
byte[] displayNameBuffer = new byte[strBytesLen];
Array.Copy(rawData, index, displayNameBuffer, 0, strBytesLen);
index += strBytesLen;
responseBody.DisplayName = Encoding.Unicode.GetString(displayNameBuffer);
responseBody.AuxiliaryBufferSize = BitConverter.ToUInt32(rawData, index);
index += 4;
responseBody.AuxiliaryBuffer = new byte[responseBody.AuxiliaryBufferSize];
Array.Copy(rawData, index, responseBody.AuxiliaryBuffer, 0, responseBody.AuxiliaryBufferSize);
return responseBody;
}
}