Пример #1
0
            public static NMessageHandle.UdbusMessageHandle StructureToHandle(NMessageStruct.UdbusMessageHandle msgStruct)
            {
                UdbusMessageBuilder builder = new UdbusMessageBuilder();
                builder.UdbusMessage(msgStruct.serial);

                string path = msgStruct.path;
                string destination = msgStruct.destination;
                string interface_ = msgStruct.interface_;
                string error_name = msgStruct.error_name;
                string method = msgStruct.method;
                string sender = msgStruct.sender;

                msgStruct.path = msgStruct.destination = msgStruct.interface_ = msgStruct.error_name = msgStruct.method = msgStruct.sender = null;

                Marshal.StructureToPtr(msgStruct, builder.Message.handle, false);

                builder
                    .SetPath(path)
                    .SetDestination(destination)
                    .SetInterface(interface_)
                    .SetErrorName(error_name)
                    .SetMethod(method)
                    .SetSender(sender)
                    ;

                return builder.Message;
            }
Пример #2
0
 /// <summary>
 /// Marshal a handle of this type into a structure.
 /// The IntPtr is supposed to be hidden from sight so this seems to be the only way forward.
 /// Not sure that referencing this.handle anywhere but "ReleaseHandle()" is permitted,
 /// but seriously how else is this supposed to get accomplished ?
 /// </summary>
 /// <param name="message"></param>
 public void HandleToStructure(out NMessageStruct.UdbusMessageHandle message)
 {
     message = this.HandleToStructure();
 }
Пример #3
0
        /// <summary>
        /// Receive a message structure.
        /// </summary>
        /// <param name="recv">Structure being received.</param>
        /// <returns>Zero if successful, otherwise non-zero.</returns>
        public int ReceiveStruct(out NMessageStruct.UdbusMessageHandle recv)
        {
            int result;

            using (NMessageHandle.UdbusMessageHandle recvHandle = this.ReceiveHandle(out result))
            {
                if (result == 0 && !recvHandle.IsInvalid) // If successfully got handle
                {
                    recv = recvHandle.HandleToStructure();

                } // Ends if successfully got handle
                else // Else failed to get handle
                {
                    if (result == 0) // If appeared to get handle
                    {
                        result = -1;

                    } // Ends if appeared to get handle

                    recv = NMessageStruct.UdbusMessageHandle.Initialiser;

                } // Ends else failed to get handle
            } // Ends using handle

            return result;
        }