public ResourcePayload GetResource(ulong index) { var ptr = OCPayloadInterop.OCDiscoveryPayloadGetResource(Handle, (UIntPtr)index); var resource = Marshal.PtrToStructure(ptr, typeof(OCResourcePayload)) as OCResourcePayload; return(new ResourcePayload(resource)); }
private static ResourcePayload GetResource(IntPtr handle, ulong index) { var ptr = OCPayloadInterop.OCDiscoveryPayloadGetResource(handle, (UIntPtr)index); if (ptr == IntPtr.Zero) { return(null); } return(new ResourcePayload(ptr)); }
internal DiscoveryPayload(IntPtr handle) : base() { ulong count = (ulong)OCPayloadInterop.OCDiscoveryPayloadGetResourceCount(handle); var resources = new List <ResourcePayload>((int)count); for (ulong i = 0; i < count; i++) { resources.Add(GetResource(handle, i)); } Resources = new ReadOnlyCollection <ResourcePayload>(resources); }
internal void AssignToOCRepPayload(IntPtr ocRepPayloadHandle) { foreach (var property in this) { bool ok = false; if (property.Value == null) { ok = OCPayloadInterop.OCRepPayloadSetNull(ocRepPayloadHandle, property.Key); } else if (property.Value is bool) { ok = OCPayloadInterop.OCRepPayloadSetPropBool(ocRepPayloadHandle, property.Key, (bool)property.Value); } else if (property.Value is double) { ok = OCPayloadInterop.OCRepPayloadSetPropDouble(ocRepPayloadHandle, property.Key, (double)property.Value); } else if (property.Value is long) { ok = OCPayloadInterop.OCRepPayloadSetPropInt(ocRepPayloadHandle, property.Key, (long)property.Value); } else if (property.Value is string) { ok = OCPayloadInterop.OCRepPayloadSetPropString(ocRepPayloadHandle, property.Key, (string)property.Value); } else if (property.Value is double[]) { var value = (double[])property.Value; ok = OCPayloadInterop.OCRepPayloadSetDoubleArray(ocRepPayloadHandle, property.Key, value, new UIntPtr[] { (UIntPtr)value.Length }); } else if (property.Value is long[]) { var value = (long[])property.Value; ok = OCPayloadInterop.OCRepPayloadSetIntArray(ocRepPayloadHandle, property.Key, value, new UIntPtr[] { (UIntPtr)value.Length }); } else if (property.Value is bool[]) { var value = (bool[])property.Value; ok = OCPayloadInterop.OCRepPayloadSetBoolArray(ocRepPayloadHandle, property.Key, value, new UIntPtr[] { (UIntPtr)value.Length }); } else { throw new NotSupportedException("Property Type for key '" + property.Key + "' of type " + property.Value.GetType().FullName + " not supported"); } if (!ok) { throw new InvalidOperationException($"Failed to assigning property '{property.Key}' to payload"); } } }
private async Task <ClientResponse <Payload> > SendAsync(string resourceTypeName, Dictionary <string, object> data, OCMethod method) { var tcs = new TaskCompletionSource <ClientResponse <Payload> >(); var callbackData = new OCCallbackData(); OCClientResponseHandler handler = (context, handle, clientResponse) => { GCHandle.FromIntPtr(context).Free(); if (clientResponse.result > OCStackResult.OC_STACK_RESOURCE_CHANGED) { var err = OCStackException.CreateException(clientResponse.result, "Resource returned error"); tcs.SetException(err); } else { tcs.SetResult(new ClientResponse <Payload>(clientResponse)); } return(OCStackApplicationResult.OC_STACK_DELETE_TRANSACTION); }; var gcHandle = GCHandle.Alloc(handler); callbackData.cb = handler; callbackData.context = GCHandle.ToIntPtr(gcHandle); IntPtr payloadHandle = IntPtr.Zero; if (resourceTypeName != null) { RepPayload payload = new RepPayload(data); payload.SetUri(_resourceUri); payload.Types.Add(resourceTypeName); payloadHandle = payload.AsOCRepPayload(); } var result = OCStack.OCDoRequest(out _handle, method, _resourceUri, _address.OCDevAddr, payloadHandle, OCConnectivityType.CT_DEFAULT, OCQualityOfService.OC_LOW_QOS, callbackData, null, 0); if (payloadHandle != IntPtr.Zero) { OCPayloadInterop.OCPayloadDestroy(payloadHandle); } OCStackException.ThrowIfError(result, "Failed to send to resource"); var response = await tcs.Task.ConfigureAwait(false); return(response); }
public IntPtr AsOCRepPayload() { IntPtr handle = OCPayloadInterop.OCRepPayloadCreate(); bool ok = false; if (!string.IsNullOrEmpty(_uri)) { ok = OCPayloadInterop.OCRepPayloadSetUri(handle, _uri); } (Values as IotivityValueDictionary).AssignToOCRepPayload(handle); foreach (var resourceType in Types) { ok = OCPayloadInterop.OCRepPayloadAddResourceType(handle, resourceType); } if (Next != null) { OCPayloadInterop.OCRepPayloadAppend(handle, Next.AsOCRepPayload()); } return(handle); }
public bool TryGetBool(string name, out bool value) { return(OCPayloadInterop.OCRepPayloadGetPropBool(Handle, name, out value)); }
public bool SetProperty(string name, bool value) { return(OCPayloadInterop.OCRepPayloadSetPropBool(Handle, name, value)); }
public bool TryGetDouble(string name, out double value) { return(OCPayloadInterop.OCRepPayloadGetPropDouble(Handle, name, out value)); }
public bool SetProperty(string name, double value) { return(OCPayloadInterop.OCRepPayloadSetPropDouble(Handle, name, value)); }
public RepPayload Clone() { return(new RepPayload(OCPayloadInterop.OCRepPayloadClone(Handle))); }
public RepPayload() : this(OCPayloadInterop.OCRepPayloadCreate()) { }
public DiscoveryPayload() : this(OCPayloadInterop.OCDiscoveryPayloadCreate()) { }