public async Task <Message> MethodCallAsync(BusAttachment bus, string ifaceName, string methodName, MsgArg args, uint numArgs,
                                                    TimeSpan timeout, MessageFlag flags = 0)
        {
            if (timeout.Ticks < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(timeout));
            }

            var replyMsg = Message.alljoyn_message_create(bus.Handle);

            TaskCompletionSource <Message>           tcs       = new TaskCompletionSource <Message>();
            alljoyn_messagereceiver_replyhandler_ptr replyFunc = (a, b) =>
            {
                tcs.SetResult(new Message(a));
            };
            var handle = GCHandle.Alloc(replyFunc);

            AllJoynException.CheckStatus(
                alljoyn_proxybusobject_methodcallasync(Handle, ifaceName, methodName, replyFunc, args.Handle,
                                                       (UIntPtr)numArgs, replyMsg, (uint)timeout.TotalMilliseconds, (byte)flags)
                );
            Message message;

            try
            {
                message = await tcs.Task;
            }
            finally
            {
                handle.Free();
            }
            return(message);
        }
        public void Connect(string connectSpec = null)
        {
            var status = alljoyn_busattachment_connect(Handle, connectSpec);

            AllJoynException.CheckStatus(status);
            Debug.WriteLine($"BusAttachment connect succeeded. Bus name = {_busName}");
        }
        private static double GetDoubleArg(MsgArg argument, string signature)
        {
            double value  = default(double);
            var    status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(ref value));

            AllJoynException.CheckStatus(status);
            return(value);
        }
        private static bool GetBoolArg(MsgArg argument, string signature)
        {
            bool value  = default(bool);
            var  status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(ref value));

            AllJoynException.CheckStatus(status);
            return(value);
        }
        private static T GetVariantArg <T>(MsgArg argument, string signature)
        {
            T   value  = default(T);
            var status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(ref value));

            AllJoynException.CheckStatus(status);
            return(value);
        }
        private static Int32 GetInt32Arg(MsgArg argument, string signature)
        {
            Int32 value;
            var   status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(out value));

            AllJoynException.CheckStatus(status);
            return(value);
        }
        public UInt32 JoinSession(string sessionHost, UInt16 sessionPort, SessionListener sessionListener, Session options)
        {
            //TODO: Missing parameters
            UInt32 sessionId;
            var    status = alljoyn_busattachment_joinsession(Handle, sessionHost, sessionPort, sessionListener?.Handle ?? IntPtr.Zero, out sessionId, options.Handle);

            AllJoynException.CheckStatus(status);
            return(sessionId);
        }
        private static string GetVariantArg_String(MsgArg argument, string signature)
        {
            IntPtr strOut;
            var    status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(out strOut));

            AllJoynException.CheckStatus(status);
            var value = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(strOut);

            return(value);
        }
Beispiel #9
0
        public MsgArg GetField(string fieldName, string language = null)
        {
            IntPtr outvalue;
            var    status = alljoyn_aboutdata_getfield(Handle, fieldName, out outvalue, language);

            AllJoynException.CheckStatus(status);
            var tmp = new MsgArg(outvalue);

            return(tmp);
        }
        /*private static byte[] GetByteArrayMessageArg(MsgArg argument, string signature)
         * {
         *  UIntPtr las;
         *  IntPtr as_arg;
         *  var status = MsgArg.alljoyn_msgarg_get(argument.Handle, AllJoynTypeIds.ByteArray, __arglist(out las, out as_arg));
         *  AllJoynException.CheckStatus(status);
         *  byte[] result = new byte[(int)las];
         *  IntPtr val;
         *  for (int i = 0; i < (int)las; i++)
         *  {
         *      var a = MsgArg.alljoyn_msgarg_array_element(as_arg, (UIntPtr)i);
         *      status = MsgArg.alljoyn_msgarg_get(a, AllJoynTypeIds.Byte.ToString(), __arglist(out val));
         *      AllJoynException.CheckStatus(status);
         *      result[i] = Marshal.ReadByte(val);
         *  }
         *  MsgArg.alljoyn_msgarg_destroy(as_arg);
         *  // MsgArg.alljoyn_msgarg_stabilize(argument.Handle);
         *  return result;
         * }*/

        private static T[] GetPrimitiveArrayMessageArg <T>(MsgArg argument, string signature, Action <IntPtr, T[], int, int> copyAction)
        {
            UIntPtr size = UIntPtr.Zero;
            IntPtr  valuePtr;
            var     status = MsgArg.alljoyn_msgarg_get(argument.Handle, signature, __arglist(out size, out valuePtr));

            AllJoynException.CheckStatus(status);
            T[] elements = new T[(int)size];
            copyAction(valuePtr, elements, 0, (int)size);
            //Marshal.FreeCoTaskMem(valuePtr);
            return(elements);
        }
        public Message MethodCall(BusAttachment bus, string ifaceName, string methodName, MsgArg args,
                                  uint numArgs, TimeSpan timeout, MessageFlag flags = 0)
        {
            if (timeout.Ticks < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(timeout));
            }
            var replyMsg = new Message(bus);

            AllJoynException.CheckStatus(
                alljoyn_proxybusobject_methodcall(Handle, ifaceName, methodName, args.Handle,
                                                  (UIntPtr)numArgs, replyMsg.Handle, (uint)timeout.TotalMilliseconds, (byte)flags)
                );
            return(replyMsg);
        }
        private static string[] GetStringArrayMessageArg(MsgArg argument, string signature)
        {
            UIntPtr las;
            IntPtr  as_arg;
            var     status = MsgArg.alljoyn_msgarg_get(argument.Handle, AllJoynTypeIds.StringArray, __arglist(out las, out as_arg));

            AllJoynException.CheckStatus(status);
            string[] result = new string[(int)las];
            IntPtr   val;

            for (int i = 0; i < (int)las; i++)
            {
                status = MsgArg.alljoyn_msgarg_get(
                    MsgArg.alljoyn_msgarg_array_element(
                        as_arg, (UIntPtr)i), AllJoynTypeIds.String.ToString(), __arglist(out val));
                AllJoynException.CheckStatus(status);
                result[i] = Marshal.PtrToStringAnsi(val);
            }
            MsgArg.alljoyn_msgarg_destroy(as_arg);
            // MsgArg.alljoyn_msgarg_stabilize(argument.Handle);
            return(result);
        }
Beispiel #13
0
        public void AddMethodHandler(InterfaceDescription.InterfaceDescriptionMember member, MessageReceiverDelegate handler)
        {
            alljoyn_messagereceiver_methodhandler_ptr h = (bus, member2, message) =>
            {
                handler(
                    IsDisposed ? new BusObject(bus) : this,
                    new InterfaceDescription.InterfaceDescriptionMember((alljoyn_interfacedescription_member)Marshal.PtrToStructure(member2, typeof(alljoyn_interfacedescription_member))),
                    new Message(message));
            };

            pinnedMethodHandlers.Add(h);

            GCHandle    membGch = GCHandle.Alloc(member.Handle, GCHandleType.Pinned);
            MethodEntry entry;

            entry.member         = membGch.AddrOfPinnedObject();
            entry.method_handler = Marshal.GetFunctionPointerForDelegate(h);
            GCHandle gch = GCHandle.Alloc(entry, GCHandleType.Pinned);

            AllJoynException.CheckStatus(alljoyn_busobject_addmethodhandlers(Handle, gch.AddrOfPinnedObject(), (UIntPtr)1));

            gch.Free();
            membGch.Free();
        }
        public void BindSessionPort(ushort sessionPort, Session sessionOpts, SessionPortListener sessionPortListener)
        {
            var status = alljoyn_busattachment_bindsessionport(Handle, ref sessionPort, sessionOpts.Handle, sessionPortListener?.Handle ?? IntPtr.Zero);

            AllJoynException.CheckStatus(status);
        }
Beispiel #15
0
 public void SetDescription(string description, string language)
 {
     AllJoynException.CheckStatus(alljoyn_aboutdata_setdescription(Handle, description, language));
 }
        public void Join()
        {
            var status = alljoyn_busattachment_join(Handle);

            AllJoynException.CheckStatus(status);
        }
Beispiel #17
0
        internal AboutData(MsgArg arg, string defaultLanguage) : base(AboutData.alljoyn_aboutdata_create(defaultLanguage))
        {
            var status = AboutData.alljoyn_aboutdata_createfrommsgarg(Handle, arg.Handle, null);

            AllJoynException.CheckStatus(status);
        }
Beispiel #18
0
 public void SetManufacturer(string manufacturer, string language)
 {
     AllJoynException.CheckStatus(alljoyn_aboutdata_setmanufacturer(Handle, manufacturer, language));
 }
 public void IntrospectRemoteObject()
 {
     AllJoynException.CheckStatus(alljoyn_proxybusobject_introspectremoteobject(Handle));
 }