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));
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
 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);
        }
Example #6
0
        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);
        }
Example #7
0
 public bool TryGetBool(string name, out bool value)
 {
     return(OCPayloadInterop.OCRepPayloadGetPropBool(Handle, name, out value));
 }
Example #8
0
 public bool SetProperty(string name, bool value)
 {
     return(OCPayloadInterop.OCRepPayloadSetPropBool(Handle, name, value));
 }
Example #9
0
 public bool TryGetDouble(string name, out double value)
 {
     return(OCPayloadInterop.OCRepPayloadGetPropDouble(Handle, name, out value));
 }
Example #10
0
 public bool SetProperty(string name, double value)
 {
     return(OCPayloadInterop.OCRepPayloadSetPropDouble(Handle, name, value));
 }
Example #11
0
 public RepPayload Clone()
 {
     return(new RepPayload(OCPayloadInterop.OCRepPayloadClone(Handle)));
 }
Example #12
0
 public RepPayload() : this(OCPayloadInterop.OCRepPayloadCreate())
 {
 }
Example #13
0
 public DiscoveryPayload() : this(OCPayloadInterop.OCDiscoveryPayloadCreate())
 {
 }