示例#1
0
        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);
        }
示例#2
0
 /// <summary>
 /// subscribe sensor data change notification
 /// </summary>
 public void Subscribe(HttpTargetSite endpoint)
 {
     foreach (ISubscribe item in Children)
     {
         item.Subscribe(endpoint);
     }
 }
示例#3
0
文件: WireData.cs 项目: rphuang/riot
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
文件: WireData.cs 项目: rphuang/riot
 /// <summary>
 /// subscribe sensor data change notification
 /// </summary>
 /// <param name="endpoint">the target HttpTargetEndpoint</param>
 public virtual void Subscribe(HttpTargetSite endpoint)
 {
     _notifications.Add(endpoint);
 }