private bool Subscribe(SubscriptionItem item, HttpTargetSite target) { bool ok = false; WireData data = null; BaseServiceNode serviceNode = _service.Children .Where((IIotNode node) => string.Equals(node.Id, item.Node, StringComparison.OrdinalIgnoreCase)).FirstOrDefault() as BaseServiceNode; if (serviceNode != null) { if (string.IsNullOrEmpty(item.Data)) { serviceNode.Subscribe(target); ok = true; } else { data = serviceNode.GetData <WireData>(item.Data); if (data != null) { data.Subscribe(target); ok = true; } } } return(ok); }
/// <summary> /// subscribe sensor data change notification /// </summary> public void Subscribe(HttpTargetSite endpoint) { foreach (ISubscribe item in Children) { item.Subscribe(endpoint); } }
/// <summary> /// subscribe sensor data change notification /// </summary> /// <param name="targetAddress">the target service's address (ipaddress:port)</param> /// <param name="credential">the credential for requests to target service (user:password)</param> /// <param name="token">the token to be included for every requests</param> public void Subscribe(string targetAddress, string credential, string token) { HttpTargetSite endpoint = new HttpTargetSite { Server = targetAddress, Credential = credential, Token = token }; Subscribe(endpoint); }
/// <summary> /// derived class must implement to handle Post request /// </summary> protected override HttpServiceResponse ProcessPostRequest(HttpServiceContext context) { SubscriptionData subscriptionData = null; string json = GetFromRequestStream(context.Context.Request); try { subscriptionData = JsonConvert.DeserializeObject <SubscriptionData>(json); } catch (Exception err) { return(CreateResponseForBadRequest(context, Name, $"InvalidSubscription: {json}")); } if (!ValidateSubscriptionData(subscriptionData)) { return(CreateResponseForBadRequest(context, Name)); } HttpServiceResponse response = null; HttpTargetSite target = subscriptionData.Target; string invalidList = string.Empty; int okCount = 0; foreach (SubscriptionItem item in subscriptionData.Items) { bool ok = Subscribe(item, target); if (ok) { okCount++; } else { if (!string.IsNullOrEmpty(invalidList)) { invalidList += ", "; } invalidList += $"{item.Node}.{item.Data}"; } } if (string.IsNullOrEmpty(invalidList)) { response = CreateSuccessResponse(context, Name, 200, null); } else { string invalidJson = $"{{\"subscriptionError\": \"{invalidList}\"}}"; if (okCount > 0) { response = CreateSuccessResponse(context, Name, 206, invalidJson); } else { CreateResponse(context, Name, false, 400, invalidJson); } } return(response); }
/// <summary> /// subscribe sensor data change notification /// </summary> /// <param name="endpoint">the target HttpTargetEndpoint</param> public virtual void Subscribe(HttpTargetSite endpoint) { _notifications.Add(endpoint); }