Files
mxaccess/analysis/decompiled/aaServicesCommonDataContracts/ArchestrAServices.Contract/VariantReader.cs
T
Joseph Doherty fe2a6db786
rust / build / test / clippy / fmt (push) Has been cancelled
Initial project state: .NET reference, design, Rust port (M0+M1), evidence
Layout:
- src/                    .NET 10 x64 reference: MxNativeCodec, MxNativeClient,
                          MxAsbClient, probes, tests, harnesses. Executable spec.
- design/                 Architectural plan for the Rust port (M0–M6), error
                          model, protocol invariants, risks (R1–R16), adversarial
                          review log (review.md).
- rust/                   Rust workspace. M0 skeleton + M1 codec parity.
                          mxaccess-codec: 215 unit tests + 2 cross-implementation
                          parity tests (byte-identical against .NET reference).
                          Other crates are M0 stubs awaiting M2+.
- captures/               Frida + netsh + pcap evidence per CLAUDE.md
                          ("captures are evidence, not throwaway logs").
- analysis/               Decompiled C# (frida/proxy/decompiled-*),
                          Ghidra exports for native DLLs (`exports/` only —
                          working state at `projects/` and AVEVA's input
                          binaries at `input/` are gitignored).
- docs/                   Reverse-engineering reference docs.
- tools/                  Setup-LiveProbeEnv.ps1 (Infisical credential fetcher),
                          Compute-Crc.ps1 (.NET parity helper).
- .github/workflows/      Rust CI: fmt + build + test + clippy on Windows.
- LICENSE                 MIT (Joseph Doherty, 2026).

Verified:
- cargo test --workspace → 217 passed (215 unit + 2 .NET parity), 0 failed
- cargo clippy --workspace -- -D warnings → clean
- cargo fmt --all -- --check → clean
- cargo publish --dry-run -p mxaccess-codec → packages cleanly

Excluded from history (see .gitignore):
- **/bin, **/obj, **/target — build artifacts
- analysis/ghidra/projects/ — Ghidra working state (regenerable)
- analysis/ghidra/input/ — AVEVA proprietary DLLs (vendor IP)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 06:21:00 -04:00

4224 lines
89 KiB
C#

using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArchestrAServices.Contract;
public class VariantReader
{
public Variant Value { get; set; }
public VariantReader(Variant value)
{
Value = value;
}
public DataType GetVariantType()
{
return EnumFactory.IntToDataType(Value.Type);
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsByte()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = Value.Payload[0];
return obj;
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (byte)Convert.ChangeType(obj, typeof(byte));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt16()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = BitConverter.ToInt16(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (short)Convert.ChangeType(obj, typeof(short));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt16()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = BitConverter.ToUInt16(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (ushort)Convert.ChangeType(obj, typeof(ushort));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt32()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = BitConverter.ToInt32(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (int)Convert.ChangeType(obj, typeof(int));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt32()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = BitConverter.ToUInt32(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (uint)Convert.ChangeType(obj, typeof(uint));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt64()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = BitConverter.ToInt64(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (long)Convert.ChangeType(obj, typeof(long));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt64()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = BitConverter.ToUInt64(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (ulong)Convert.ChangeType(obj, typeof(ulong));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsFloat()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = BitConverter.ToSingle(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (float)Convert.ChangeType(obj, typeof(float));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsDouble()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = BitConverter.ToDouble(Value.Payload, 0);
return obj;
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (double)Convert.ChangeType(obj, typeof(double));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsString()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = Encoding.Unicode.GetString(Value.Payload);
return obj;
}
if (obj != null)
{
result = (string)Convert.ChangeType(obj, typeof(string));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public object GetAsBool()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = Convert.ToBoolean(Value.Payload[0]);
return obj;
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() == 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (bool)Convert.ChangeType(obj, typeof(bool));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public object GetAsSByte()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = (sbyte)Value.Payload[0];
return obj;
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (sbyte)Convert.ChangeType(obj, typeof(sbyte));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public object GetAsDateTime()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = DateTime.FromFileTimeUtc(BitConverter.ToInt64(Value.Payload, 0));
return obj;
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (DateTime)Convert.ChangeType(obj, typeof(DateTime));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public object GetAsDuration()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = TimeSpan.FromTicks(BitConverter.ToInt64(Value.Payload, 0));
return obj;
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (TimeSpan)Convert.ChangeType(obj, typeof(TimeSpan));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public object GetAsGuid()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
{
string g = (string)GetAsString();
obj = new Guid(g);
return obj;
}
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = ((!(obj.GetType() == typeof(string))) ? ((object)(Guid)Convert.ChangeType(obj, typeof(Guid))) : ((object)new Guid((string)obj)));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public byte[] GetAsByteString()
{
return Value.Payload;
}
public string GetAsLocalizedText()
{
return (string)GetAsString();
}
public object GetScalarValue(DataType targetType)
{
object obj = null;
try
{
switch (EnumFactory.IntToDataType(Value.Type))
{
case DataType.TypeBool:
obj = GetAsBool();
if (DataType.TypeBool == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeByte:
obj = GetAsByte();
if (targetType == DataType.TypeByte)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeDateTime:
obj = GetAsDateTime();
if (targetType == DataType.TypeByte)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeDouble:
obj = GetAsDouble();
if (DataType.TypeDouble == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeDuration:
obj = GetAsDuration();
if (DataType.TypeDuration == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeFloat:
obj = GetAsFloat();
if (DataType.TypeFloat == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeGuid:
obj = GetAsGuid();
if (DataType.TypeGuid == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeInt16:
obj = GetAsInt16();
if (DataType.TypeInt16 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeInt32:
obj = GetAsInt32();
if (DataType.TypeInt32 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeInt64:
obj = GetAsInt64();
if (DataType.TypeInt64 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeLocalizedText:
obj = GetAsLocalizedText();
if (DataType.TypeLocalizedText == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeSByte:
obj = GetAsSByte();
if (DataType.TypeSByte == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeString:
obj = GetAsString();
if (DataType.TypeString == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeUInt16:
obj = GetAsUInt16();
if (DataType.TypeUInt16 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeUInt32:
obj = GetAsUInt32();
if (DataType.TypeUInt32 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
case DataType.TypeUInt64:
obj = GetAsUInt64();
if (DataType.TypeUInt64 == targetType)
{
return obj;
}
return GetValueInTargetType(targetType, obj);
default:
return GetAsString();
}
}
catch (Exception)
{
return obj;
}
}
public object GetValueInTargetArrayType(DataType targetType)
{
switch (targetType)
{
case DataType.TypeBool:
{
bool[] array14 = (bool[])GetAsBoolArray();
if (array14 != null && array14.Length != 0)
{
return array14;
}
return Value;
}
case DataType.TypeByte:
{
byte[] array8 = (byte[])GetAsByteArray();
if (array8 != null && array8.Length != 0)
{
return array8;
}
return Value;
}
case DataType.TypeDateTime:
{
DateTime[] array15 = (DateTime[])GetAsDateTimeArray();
if (array15 != null && array15.Length != 0)
{
return array15;
}
return Value;
}
case DataType.TypeDouble:
{
double[] array11 = (double[])GetAsDoubleArray();
if (array11 != null && array11.Length != 0)
{
return array11;
}
return Value;
}
case DataType.TypeDuration:
{
TimeSpan[] array6 = (TimeSpan[])GetAsDurationArray();
if (array6 != null && array6.Length != 0)
{
return array6;
}
return Value;
}
case DataType.TypeFloat:
{
float[] array12 = (float[])GetAsFloatArray();
if (array12 != null && array12.Length != 0)
{
return array12;
}
return Value;
}
case DataType.TypeGuid:
{
Guid[] array10 = (Guid[])GetAsGuidArray();
if (array10 != null && array10.Length != 0)
{
return array10;
}
return Value;
}
case DataType.TypeInt16:
{
short[] array3 = (short[])GetAsInt16Array();
if (array3 != null && array3.Length != 0)
{
return array3;
}
return Value;
}
case DataType.TypeInt32:
{
int[] array4 = (int[])GetAsInt32Array();
if (array4 != null && array4.Length != 0)
{
return array4;
}
return Value;
}
case DataType.TypeInt64:
{
long[] array7 = (long[])GetAsInt64Array();
if (array7 != null && array7.Length != 0)
{
return array7;
}
return Value;
}
case DataType.TypeSByte:
{
sbyte[] array2 = (sbyte[])GetAsSByteArray();
if (array2 != null && array2.Length != 0)
{
return array2;
}
return Value;
}
case DataType.TypeUInt16:
{
ushort[] array13 = (ushort[])GetAsUInt16Array();
if (array13 != null && array13.Length != 0)
{
return array13;
}
return Value;
}
case DataType.TypeUInt32:
{
uint[] array9 = (uint[])GetAsUInt32Array();
if (array9 != null && array9.Length != 0)
{
return array9;
}
return Value;
}
case DataType.TypeUInt64:
{
ulong[] array5 = (ulong[])GetAsUInt64Array();
if (array5 != null && array5.Length != 0)
{
return array5;
}
return Value;
}
case DataType.TypeUnknown:
return Value;
default:
{
string[] array = (string[])GetAsStringArray();
if (array != null && array.Length != 0)
{
return array;
}
return Value;
}
}
}
private static object GetValueInTargetType(DataType targetType, object retValue)
{
return targetType switch
{
DataType.TypeBool => Convert.ChangeType(retValue, typeof(bool)),
DataType.TypeByte => Convert.ChangeType(retValue, typeof(byte)),
DataType.TypeDateTime => Convert.ChangeType(retValue, typeof(DateTime)),
DataType.TypeDouble => Convert.ChangeType(retValue, typeof(double)),
DataType.TypeDuration => Convert.ChangeType(retValue, typeof(long)),
DataType.TypeFloat => Convert.ChangeType(retValue, typeof(float)),
DataType.TypeGuid => Convert.ChangeType(retValue, typeof(Guid)),
DataType.TypeInt16 => Convert.ChangeType(retValue, typeof(short)),
DataType.TypeInt32 => Convert.ChangeType(retValue, typeof(int)),
DataType.TypeInt64 => Convert.ChangeType(retValue, typeof(long)),
DataType.TypeSByte => Convert.ChangeType(retValue, typeof(sbyte)),
DataType.TypeUInt16 => Convert.ChangeType(retValue, typeof(ushort)),
DataType.TypeUInt32 => Convert.ChangeType(retValue, typeof(uint)),
DataType.TypeUInt64 => Convert.ChangeType(retValue, typeof(ulong)),
_ => Convert.ChangeType(retValue, typeof(string)),
};
}
public object GetArrayValue(DataType targetType)
{
object obj = new object();
try
{
return GetValueInTargetArrayType(targetType);
}
catch (Exception)
{
return null;
}
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsEnum()
{
object obj = null;
object result = null;
try
{
switch (GetVariantType())
{
case DataType.TypeBool:
if (Value.Payload.Count() == 1)
{
obj = GetAsBool();
}
break;
case DataType.TypeByte:
if (Value.Payload.Count() == 1)
{
obj = GetAsByte();
}
break;
case DataType.TypeSByte:
if (Value.Payload.Count() >= 1)
{
obj = GetAsSByte();
}
break;
case DataType.TypeInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsInt16();
}
break;
case DataType.TypeUInt16:
if (Value.Payload.Count() == 2)
{
obj = GetAsUInt16();
}
break;
case DataType.TypeInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsInt32();
}
break;
case DataType.TypeUInt32:
if (Value.Payload.Count() == 4)
{
obj = GetAsUInt32();
}
break;
case DataType.TypeInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsInt64();
}
break;
case DataType.TypeUInt64:
if (Value.Payload.Count() == 8)
{
obj = GetAsUInt64();
}
break;
case DataType.TypeFloat:
if (Value.Payload.Count() == 4)
{
obj = GetAsFloat();
}
break;
case DataType.TypeDouble:
if (Value.Payload.Count() == 8)
{
obj = GetAsDouble();
}
break;
case DataType.TypeDateTime:
if (Value.Payload.Count() == 8)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeDuration:
if (Value.Payload.Count() == 8)
{
obj = GetAsDuration();
}
break;
case DataType.TypeGuid:
if (Value.Payload.Count() == 4)
{
obj = GetAsDateTime();
}
break;
case DataType.TypeEnum:
{
CustomEnum customEnum = default(CustomEnum);
int num = 0;
int num2 = 0;
customEnum.ordinal = BitConverter.ToInt16(Value.Payload, num);
num += 2;
num2 = BitConverter.ToInt32(Value.Payload, num) * 2;
num += 4;
customEnum.OrdinalValue = Encoding.Unicode.GetString(Value.Payload, num, num2);
obj = customEnum;
break;
}
case DataType.TypeUnknown:
obj = Value;
break;
default:
obj = GetAsString();
break;
}
if (obj != null)
{
result = (CustomEnum)Convert.ChangeType(obj, typeof(CustomEnum));
}
}
catch (InvalidCastException)
{
result = obj;
}
catch (FormatException)
{
result = obj;
}
catch (OverflowException)
{
result = obj;
}
return result;
}
public Array GetAsGenericArray()
{
Type type = CalculateVariableType();
if (type == null)
{
return new uint[0];
}
int num = 0;
uint num2 = BitConverter.ToUInt32(Value.Payload, num);
num += 4;
int[] array = new int[num2];
int[] array2 = new int[num2];
for (int i = 0; i < num2; i++)
{
array[i] = (int)BitConverter.ToUInt32(Value.Payload, num);
num += 4;
array2[i] = 0;
}
Array array3 = Array.CreateInstance(type, array);
UnpackArray(Value.Payload, ref num, array3, array2, 0);
return array3;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
private Type CalculateVariableType()
{
return GetVariantType() switch
{
DataType.TypeByteArray => typeof(byte),
DataType.TypeCharArray => typeof(char),
DataType.TypeInt16Array => typeof(short),
DataType.TypeUInt16Array => typeof(ushort),
DataType.TypeInt32Array => typeof(int),
DataType.TypeUInt32Array => typeof(uint),
DataType.TypeInt64Array => typeof(long),
DataType.TypeUInt64Array => typeof(ulong),
DataType.TypeFloatArray => typeof(float),
DataType.TypeDoubleArray => typeof(double),
DataType.TypeStringArray => typeof(string),
DataType.TypeDateTimeArray => typeof(DateTime),
DataType.TypeGuidArray => typeof(Guid),
DataType.TypeByteStringArray => typeof(byte[]),
DataType.TypeBoolArray => typeof(bool),
DataType.TypeSByteArray => typeof(sbyte),
_ => null,
};
}
private static void UnpackArray(byte[] Payload, ref int PayloadIndex, Array valueArray, int[] DimensionIndices, int Dimension)
{
if (Dimension == DimensionIndices.Count() - 1)
{
Type elementType = valueArray.GetType().GetElementType();
for (int i = 0; i < valueArray.GetLength(Dimension); i++)
{
DimensionIndices[Dimension] = i;
UnpackArrayElement(Payload, ref PayloadIndex, elementType, valueArray, DimensionIndices);
}
}
else
{
for (int j = 0; j < valueArray.GetLength(Dimension); j++)
{
DimensionIndices[Dimension] = j;
UnpackArray(Payload, ref PayloadIndex, valueArray, DimensionIndices, Dimension + 1);
}
}
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
private static void UnpackArrayElement(byte[] Payload, ref int PayloadIndex, Type valueType, Array valueArray, int[] DimensionIndices)
{
if (Payload != null && valueArray != null)
{
if (valueType == typeof(bool))
{
valueArray.SetValue(Payload[PayloadIndex] != 0, DimensionIndices);
PayloadIndex++;
}
else if (valueType == typeof(sbyte))
{
valueArray.SetValue(Payload[PayloadIndex], DimensionIndices);
PayloadIndex++;
}
else if (valueType == typeof(byte))
{
valueArray.SetValue(Payload[PayloadIndex], DimensionIndices);
PayloadIndex++;
}
else if (valueType == typeof(ushort))
{
valueArray.SetValue(BitConverter.ToUInt16(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 2;
}
else if (valueType == typeof(uint))
{
valueArray.SetValue(BitConverter.ToUInt32(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 4;
}
else if (valueType == typeof(ulong))
{
valueArray.SetValue(BitConverter.ToUInt64(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 8;
}
else if (valueType == typeof(short))
{
valueArray.SetValue(BitConverter.ToInt16(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 2;
}
else if (valueType == typeof(int))
{
valueArray.SetValue(BitConverter.ToInt32(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 4;
}
else if (valueType == typeof(long))
{
valueArray.SetValue(BitConverter.ToInt64(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 8;
}
else if (valueType == typeof(float))
{
valueArray.SetValue(BitConverter.ToSingle(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 4;
}
else if (valueType == typeof(double))
{
valueArray.SetValue(BitConverter.ToDouble(Payload, PayloadIndex), DimensionIndices);
PayloadIndex += 8;
}
else if (valueType == typeof(string))
{
uint count = BitConverter.ToUInt32(Payload, PayloadIndex);
PayloadIndex += 4;
char[] chars = new UnicodeEncoding().GetChars(Payload, PayloadIndex, (int)count);
valueArray.SetValue(new string(chars), DimensionIndices);
}
else if (valueType == typeof(DateTime))
{
long ticks = BitConverter.ToInt32(Payload, PayloadIndex);
PayloadIndex += 4;
valueArray.SetValue(new DateTime(ticks), DimensionIndices);
}
else if (valueType == typeof(Guid))
{
byte[] array = new byte[16];
Array.Copy(Payload, PayloadIndex, array, 0, 16);
PayloadIndex += 16;
Guid guid = new Guid(array);
valueArray.SetValue(guid, DimensionIndices);
}
else if (valueType == typeof(byte[]))
{
uint num = BitConverter.ToUInt32(Payload, PayloadIndex);
PayloadIndex += 4;
byte[] array2 = new byte[num];
Array.Copy(Payload, PayloadIndex, array2, 0L, num);
PayloadIndex += (int)num;
valueArray.SetValue(array2, DimensionIndices);
}
}
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt32Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
if (Value.Payload.Count() >= 4)
{
int[] array2 = new int[Value.Length / 4];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToInt32(Value.Payload, num);
num += 4;
num2++;
}
return array2;
}
return new int[0];
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
int[] array3 = new int[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (int)Convert.ChangeType(array.GetValue(i), typeof(int));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsByteArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
if (Value.Payload.Count() >= 1)
{
return Value.Payload;
}
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
byte[] array2 = new byte[array.Length];
for (int i = 0; i < array2.Length; i++)
{
try
{
array2[i] = (byte)Convert.ChangeType(array.GetValue(i), typeof(byte));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array2;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public char[] GetAsCharArray()
{
if (Value.Payload.Count() >= 2)
{
char[] array = new char[Value.Length / 2];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array[num2] = BitConverter.ToChar(Value.Payload, num);
num += 2;
num2++;
}
return array;
}
return new char[0];
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt16Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
if (Value.Payload.Count() >= 2)
{
short[] array2 = new short[Value.Length / 2];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToInt16(Value.Payload, num);
num += 2;
num2++;
}
return array2;
}
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
short[] array3 = new short[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (short)Convert.ChangeType(array.GetValue(i), typeof(short));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt16Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
if (Value.Payload.Count() >= 2)
{
ushort[] array2 = new ushort[Value.Length / 2];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToUInt16(Value.Payload, num);
num += 2;
num2++;
}
return array2;
}
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
ushort[] array3 = new ushort[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (ushort)Convert.ChangeType(array.GetValue(i), typeof(ushort));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt32Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
if (Value.Payload.Count() >= 4)
{
uint[] array2 = new uint[Value.Length / 4];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToUInt32(Value.Payload, num);
num += 4;
num2++;
}
array = array2;
}
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
uint[] array3 = new uint[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (uint)Convert.ChangeType(array.GetValue(i), typeof(uint));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsInt64Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeDuration:
case DataType.TypeInt64Array:
case DataType.TypeDurationArray:
if (Value.Payload.Count() >= 8)
{
long[] array2 = new long[Value.Length / 8];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToInt64(Value.Payload, num);
num += 8;
num2++;
}
return array2;
}
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
long[] array3 = new long[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (long)Convert.ChangeType(array.GetValue(i), typeof(long));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsUInt64Array()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
if (Value.Payload.Count() >= 8)
{
ulong[] array2 = new ulong[Value.Length / 8];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToUInt64(Value.Payload, num);
num += 8;
num2++;
}
return array2;
}
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
ulong[] array3 = new ulong[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (ulong)Convert.ChangeType(array.GetValue(i), typeof(ulong));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsFloatArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
if (Value.Payload.Count() >= 4)
{
float[] array2 = new float[Value.Length / 4];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToSingle(Value.Payload, num);
num += 4;
num2++;
}
return array2;
}
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
float[] array3 = new float[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (float)Convert.ChangeType(array.GetValue(i), typeof(float));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsDoubleArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
if (Value.Payload.Count() >= 8)
{
double[] array2 = new double[Value.Length / 8];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToDouble(Value.Payload, num);
num += 8;
num2++;
}
return array2;
}
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
double[] array3 = new double[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (double)Convert.ChangeType(array.GetValue(i), typeof(double));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsStringArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeGuid:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeGuidArray:
case DataType.TypeLocalizedTextArray:
{
if (Value.Payload.Count() <= 4)
{
break;
}
Queue<string> queue = new Queue<string>();
uint num = 0u;
int num2;
for (num2 = 0; num2 < Value.Length; num2 += (int)num)
{
num = BitConverter.ToUInt32(Value.Payload, num2);
if (num2 + num >= Value.Length)
{
break;
}
num2 += 4;
queue.Enqueue(Encoding.Unicode.GetString(Value.Payload, num2, (int)num));
}
return queue.ToArray();
}
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
}
if (array != null)
{
string[] array2 = new string[array.Length];
for (int i = 0; i < array2.Length; i++)
{
try
{
array2[i] = (string)Convert.ChangeType(array.GetValue(i), typeof(string));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array2;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsDateTimeArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
if (Value.Payload.Count() >= 8)
{
DateTime[] array2 = new DateTime[Value.Length / 8];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
long fileTime = BitConverter.ToInt64(Value.Payload, num);
array2[num2] = DateTime.FromFileTimeUtc(fileTime);
num += 8;
num2++;
}
return array2;
}
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
DateTime[] array3 = new DateTime[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (DateTime)Convert.ChangeType(array.GetValue(i), typeof(DateTime));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsDurationArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
if (Value.Payload.Count() >= 8)
{
TimeSpan[] array2 = new TimeSpan[Value.Length / 8];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
long value = BitConverter.ToInt64(Value.Payload, num);
array2[num2] = TimeSpan.FromTicks(value);
num += 8;
num2++;
}
return array2;
}
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
TimeSpan[] array3 = new TimeSpan[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (TimeSpan)Convert.ChangeType(array.GetValue(i), typeof(TimeSpan));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsGuidArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
if (Value.Payload.Count() > 4)
{
string[] array2 = (string[])GetAsStringArray();
Guid[] array3 = new Guid[array2.Length];
for (int i = 0; i < array2.Length; i++)
{
array3[i] = new Guid(array2[i]);
}
return array3;
}
break;
}
if (array != null)
{
Guid[] array4 = new Guid[array.Length];
for (int j = 0; j < array4.Length; j++)
{
try
{
if (array.GetValue(j).GetType() == typeof(string))
{
string g = (string)array.GetValue(j);
array4[j] = new Guid(g);
}
else
{
array4[j] = (Guid)Convert.ChangeType(array.GetValue(j), typeof(Guid));
}
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array4;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsBoolArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
if (Value.Payload.Count() >= 1)
{
bool[] array2 = new bool[Value.Length / 1];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = BitConverter.ToBoolean(Value.Payload, num);
num++;
num2++;
}
return array2;
}
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
bool[] array3 = new bool[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (bool)Convert.ChangeType(array.GetValue(i), typeof(bool));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return array;
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsSByteArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
if (Value.Payload.Count() >= 1)
{
sbyte[] array2 = new sbyte[Value.Length];
int num = 0;
int num2 = 0;
while (num < Value.Length)
{
array2[num2] = (sbyte)Value.Payload[num];
num++;
num2++;
}
return array2;
}
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
}
if (array != null)
{
sbyte[] array3 = new sbyte[array.Length];
for (int i = 0; i < array3.Length; i++)
{
try
{
array3[i] = (sbyte)Convert.ChangeType(array.GetValue(i), typeof(sbyte));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array3;
}
return new sbyte[0];
}
[GeneratedCode("Manually Avoid Code Metrics", "0.0.0.0")]
public object GetAsEnumArray()
{
Array array = null;
switch (GetVariantType())
{
case DataType.TypeBool:
case DataType.TypeBoolArray:
array = (bool[])GetAsBoolArray();
break;
case DataType.TypeDuration:
case DataType.TypeDurationArray:
array = (TimeSpan[])GetAsDurationArray();
break;
case DataType.TypeByte:
case DataType.TypeByteString:
case DataType.TypeByteArray:
case DataType.TypeByteStringArray:
array = (byte[])GetAsByteArray();
break;
case DataType.TypeSByte:
case DataType.TypeSByteArray:
array = (sbyte[])GetAsSByteArray();
break;
case DataType.TypeInt16:
case DataType.TypeInt16Array:
array = (short[])GetAsInt16Array();
break;
case DataType.TypeUInt16:
case DataType.TypeUInt16Array:
array = (ushort[])GetAsUInt16Array();
break;
case DataType.TypeInt32:
case DataType.TypeInt32Array:
array = (int[])GetAsInt32Array();
break;
case DataType.TypeUInt32:
case DataType.TypeUInt32Array:
array = (uint[])GetAsUInt32Array();
break;
case DataType.TypeInt64:
case DataType.TypeInt64Array:
array = (long[])GetAsInt64Array();
break;
case DataType.TypeUInt64:
case DataType.TypeUInt64Array:
array = (ulong[])GetAsUInt64Array();
break;
case DataType.TypeFloat:
case DataType.TypeFloatArray:
array = (float[])GetAsFloatArray();
break;
case DataType.TypeDouble:
case DataType.TypeDoubleArray:
array = (double[])GetAsDoubleArray();
break;
case DataType.TypeString:
case DataType.TypeLocalizedText:
case DataType.TypeStringArray:
case DataType.TypeLocalizedTextArray:
array = (string[])GetAsStringArray();
break;
case DataType.TypeDateTime:
case DataType.TypeDateTimeArray:
array = (DateTime[])GetAsDateTimeArray();
break;
case DataType.TypeGuid:
case DataType.TypeGuidArray:
array = (Guid[])GetAsGuidArray();
break;
case DataType.TypeEnum:
case DataType.TypeEnumArray:
{
int num = 0;
List<CustomEnum> list = new List<CustomEnum>();
int num2;
for (num2 = 0; num2 < Value.Length; num2 += num)
{
CustomEnum item = new CustomEnum
{
ordinal = BitConverter.ToInt16(Value.Payload, num2)
};
num2 += 2;
num = BitConverter.ToInt32(Value.Payload, num2) * 2;
if (num2 + num >= Value.Payload.Length)
{
break;
}
num2 += 4;
item.OrdinalValue = Encoding.Unicode.GetString(Value.Payload, num2, num);
list.Add(item);
}
array = list.ToArray();
break;
}
}
if (array != null)
{
CustomEnum[] array2 = new CustomEnum[array.Length];
for (int i = 0; i < array2.Length; i++)
{
try
{
array2[i] = (CustomEnum)Convert.ChangeType(array.GetValue(i), typeof(CustomEnum));
}
catch (InvalidCastException)
{
return array;
}
catch (FormatException)
{
return array;
}
catch (OverflowException)
{
return array;
}
}
return array2;
}
return array;
}
}