using System.Runtime.InteropServices; using Decal.Interop.Net; namespace Decal.Adapter.NetParser; /// /// IMessage2 Implementation /// [ComVisible(true)] [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(IMessage2))] [ProgId("DecalAdapter.MessageWrapper")] [Guid("76142307-98E3-494d-8320-3C801010221D")] public class MessageWrapper : IMessage2, IMessage { private Message msg; internal Message Wrapped => msg; /// /// Return an IMessageIterator instance for this packet /// public MessageRoot Begin => new MessageRootWrapper(this); /// /// Return the number of items within this structure /// public int Count => msg.Count; /// /// Return the raw bytes of this structure /// public byte[] RawData => msg.RawData; /// /// Return the message type /// public int Type => msg.Type; /// /// Public constructor... /// public MessageWrapper() { } /// /// Internal constructor to wrap the Adapter parser /// /// Adapter Message instance internal MessageWrapper(Message msg) { this.msg = msg; if (!this.msg.mStruct.mParsed) { this.msg.mStruct.Parse(); } } /// /// Get the field name for the specified index /// /// message member index /// field name public string get_FieldName(int Index) { return msg.Name(Index); } /// /// Return the raw bytes for the specified member /// /// Member index (string or int) /// Byte array containing the member data public byte[] get_RawValue(object vElement) { return msg.RawValue(msg.mStruct.ObjectToIndex(vElement)); } /// /// Return the specified member struct /// /// Member index (string or int) /// Member data public IMessageMember get_Struct(object vElement) { int num = msg.mStruct.ObjectToIndex(vElement); if (num < 0) { throw new COMHResultException((HResults)1); } return new MessageMemberWrapper(msg.Struct(num), this); } /// /// Return the specified member data /// /// Member index (string or int) /// Member data public object get_Value(object vElement) { int num = msg.mStruct.ObjectToIndex(vElement); if (num >= 0) { return msg.Value(num); } return null; } }