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); }
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); }
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); }
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); }
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); }
public void SetManufacturer(string manufacturer, string language) { AllJoynException.CheckStatus(alljoyn_aboutdata_setmanufacturer(Handle, manufacturer, language)); }
public void IntrospectRemoteObject() { AllJoynException.CheckStatus(alljoyn_proxybusobject_introspectremoteobject(Handle)); }