public ResourceClient(DeviceAddress address, string resourceUri) { _observeCallbackData = new OCCallbackData(); _observeCallbackData.cb = _observeCallbackHandler = OnObserveCallback; _resourceUri = resourceUri; _address = address; //var result = OCStack.OCDoResource(out _handle, OCMethod.OC_REST_OBSERVE, resourceUri, address.OCDevAddr, IntPtr.Zero, OCConnectivityType.CT_DEFAULT, OCQualityOfService.OC_LOW_QOS, _observeCallbackData, null, 0); //OCStackException.ThrowIfError(result, "Failed to observe resource"); }
public DiscoverResource(string requestUri = Interop.Defines.OC_RSRVD_WELL_KNOWN_URI) { onDiscoverHandler = OnDiscover; gchandle2 = GCHandle.Alloc(onDiscoverHandler); cbData = new OCCallbackData() { cb = onDiscoverHandler }; this.requestUri = requestUri; gchandle = GCHandle.Alloc(cbData); }
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); }