Ejemplo n.º 1
0
        public void GetAllLTENodeREQ()
        {
            QueryItemType Param_Item = new QueryItemType();

            Param_Item.itemID     = new Guid();
            Param_Item.objectType = QueryableTypes.LTENodeType;

            QueryRequestType Params = new QueryRequestType();

            Params.QueryItems = new QueryItemType[] { Param_Item };
            Params.itemID     = new Guid();

            EDSClient client = new EDSClient("EDSWCFNetTCPEndPoint");

            client.Open();
            var Respone = client.Query(Params);

            if (Respone.Status.code == StatusTypeCode.OK)
            {
                JLog.Instance.AppDebug("查询成功");
                #region 输出成功

                foreach (var s in Respone.Status.Status)
                {
                    #region 访问所有的状态
                    if (s.code == StatusTypeCode.OK)
                    {
                        // use LINQ to match successful status result with matching dataset
                        DataType d = Respone.Data.Where(q => q.itemIDRef == s.@ref).FirstOrDefault();//获取编号相同

                        if (d != null)
                        {
                            JLog.Instance.AppDebug(string.Format("共获取到{0}个LTENODE", d.AppData.Count()));
                            //XmlSerializer sr = new XmlSerializer(typeof(DataType));
                            //XmlWriterSettings settings = new XmlWriterSettings()
                            //{
                            //    Indent = true,
                            //    NewLineHandling = NewLineHandling.Entitize
                            //};

                            //// Simply dump dataset to xml file on disk...
                            //using (XmlWriter wr = XmlWriter.Create("wjj" + "-" + d.itemIDRef.ToString() + ".xml", settings))
                            //{
                            //    sr.Serialize(wr, d);
                            //}
                        }
                    }
                    else
                    {
                        JLog.Instance.AppInfo(string.Format("code: {0}, comment: {1}", s.code, s.comment));
                    }
                    #endregion
                }
                #endregion
            }
            else
            {
                JLog.Instance.AppDebug("查询失败");
            }
        }
Ejemplo n.º 2
0
        public void HandleQuery(string sEDSQuery, QueryableTypes type, EDS client, int PageSize, Action <int, int, int> Progress)
        {
            try
            {
                int  recordsRemaining = 0;
                int  offset           = 0;
                bool bFirstTime       = true;
                int  iTotalRecords    = 0;
                do
                {
                    QueryRequestType req = null;
                    if (bFirstTime)
                    {
                        req = new QueryRequestType()
                        {
                            QueryItems = new QueryItemType[]
                            {
                                ConstructQueryItem(sEDSQuery, type, PageSize, offset)
                            },
                            itemID          = Guid.NewGuid(),
                            TimeoutOverride = m_edsRequestTimeout
                        };
                    }
                    else
                    {
                        List <QueryItemType> qItems = new List <QueryItemType>();
                        req = new QueryRequestType()
                        {
                            itemID          = Guid.NewGuid(),
                            TimeoutOverride = m_edsRequestTimeout
                        };

                        for (int i = 0; i < m_iBatchSize; i++)
                        {
                            qItems.Add(ConstructQueryItem(sEDSQuery, type, PageSize, offset + (PageSize * i)));
                        }

                        req.QueryItems = qItems.ToArray();
                    }


                    DateTime start       = DateTime.Now;
                    var      EDSResponse = client.Query(req);
                    TimeSpan timespan    = DateTime.Now.Subtract(start);
                    string   sError      = "";

                    bool bError = ValidateResponse(EDSResponse, sEDSQuery, type, req.QueryItems, out sError);

                    if (!bError && EDSResponse != null && EDSResponse.Data != null)
                    {
                        if (bFirstTime)
                        {
                            DataType d = EDSResponse.Data.First();
                            iTotalRecords = d.remaining + d.nextOffset;
                            bFirstTime    = false;
                        }

                        HandleData(EDSResponse);

                        var data = EDSResponse.Data.AsQueryable();
                        recordsRemaining = data.Min(d => d.remaining);
                        offset           = data.Max(d => d.nextOffset);

                        if (Progress != null)
                        {
                            int iTotal = recordsRemaining + offset;

                            if (iTotal == 0)
                            {
                                Progress(100, iTotalRecords, iTotalRecords);
                            }
                            else
                            {
                                float percentage = ((float)offset / (float)iTotal) * 100;
                                Progress((int)percentage, offset, iTotal);
                            }
                        }
                    }
                    else
                    {
                        if (bError && Progress != null)
                        {
                            throw new Exception(sError);
                        }

                        break;
                    }
                } while (recordsRemaining > 0);
            }
            catch (Exception _ex)
            {
                Log.Exception(_ex, LogSource);
                throw;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Builds an EDS query and dumps the result to disk if successful...
        /// </summary>
        /// <param name="notificationData"></param>
        internal void RequestData(NotificationData notificationData)
        {
            // EDS Query's require an outer request structure with a unique (guid) id and one request item per task
            QueryRequestType qry = new QueryRequestType()
            {
                itemID     = Guid.NewGuid(), // Outer request id
                QueryItems = new QueryItemType[]
                {
                    new QueryItemType()
                    {
                        itemID = Guid.NewGuid(),    // Inner request id for an item
                        // data type to query against
                        objectType = (QueryableTypes)Enum.Parse(typeof(QueryableTypes), notificationData.ObjectTypeString),
                        // build a freeform text query
                        Select = new QrySelectType()
                        {
                            Item = new QrySimpleTextType()
                            {
                                // Place our query expression here...
                                Query = string.Format("iid = \"{0}\" and bvid = \"{1}\"", notificationData.ObjectID, notificationData.Project)
                            }
                        }
                    }
                }
            };

            // sends query
            QueryResponseType data = _client.Query(qry);

            // if outer result a success...
            if (data.Status.code == StatusTypeCode.OK)
            {
                // visit each individual response using the status ref as a lookup
                foreach (var s in data.Status.Status)
                {
                    if (s.code == StatusTypeCode.OK)
                    {
                        // use LINQ to match successful status result with matching dataset
                        DataType d = data.Data.Where(q => q.itemIDRef == s.@ref).FirstOrDefault();
                        if (d != null)
                        {
                            XmlSerializer     sr       = new XmlSerializer(typeof(DataType));
                            XmlWriterSettings settings = new XmlWriterSettings()
                            {
                                Indent          = true,
                                NewLineHandling = NewLineHandling.Entitize
                            };

                            // Simply dump dataset to xml file on disk...
                            using (XmlWriter wr = XmlWriter.Create(notificationData.ObjectTypeString + "-" + d.itemIDRef.ToString() + ".xml", settings))
                            {
                                sr.Serialize(wr, d);
                            }
                        }
                    }
                    else
                    {
                        // Primitive error handling...
                        System.Diagnostics.Debug.WriteLine(string.Format("code: {0}, comment: {1}", s.code, s.comment));
                    }
                }
            }
            else
            {
                // Simply dump errors to diagnostic console.
                foreach (var stat in data.Status.Status)
                {
                    System.Diagnostics.Debug.WriteLine(string.Format("code: {0}, comment: {1}", stat.code, stat.comment));
                }
            }
        }
Ejemplo n.º 4
0
        private void ProcessDeviceStateQueryRequest(QueryRequestType requestType, QueryRequest alexaRequest, QueryResponse response)
        {
            IPremiseObject applianceToQuery;

            InformLastContact("QueryRequest:" + alexaRequest.payload.appliance.additionalApplianceDetails.path).GetAwaiter().GetResult();

            try
            {
                // Find the object
                Guid premiseId = new Guid(alexaRequest.payload.appliance.applianceId);
                applianceToQuery = PremiseServer.RootObject.GetObject(premiseId.ToString("B")).GetAwaiter().GetResult();
                if (applianceToQuery == null)
                {
                    throw new Exception();
                }

                switch (requestType)
                {
                /*
                 * case QueryRequestType.PowerState:
                 *  string state = applianceToQuery.GetValue("PowerState").GetAwaiter().GetResult();
                 *  break;
                 *
                 * case QueryRequestType.DimmerLevel:
                 *  string state = applianceToQuery.GetValue("Brightness").GetAwaiter().GetResult();
                 *  break;
                 *
                 * case QueryRequestType.ColorTemperature:
                 *  string state = applianceToQuery.GetValue("ColorTemperature").GetAwaiter().GetResult();
                 *  break;
                 *
                 * case QueryRequestType.Color:
                 *  string state = applianceToQuery.GetValue("Hue").GetAwaiter().GetResult();
                 *  break;
                 */
                case QueryRequestType.RetrieveCameraStreamUri:
                {
                    response.payload.uri = new ApplianceValue();
                    string host = applianceToQuery.GetValue <string>("Host").GetAwaiter().GetResult();
                    string port = applianceToQuery.GetValue <string>("Port").GetAwaiter().GetResult();
                    string path = applianceToQuery.GetValue <string>("Path").GetAwaiter().GetResult();
                    response.payload.uri.value = string.Format(@"rtsp://{0}:{1}{2}", host, port, path);
                }
                break;

                case QueryRequestType.GetTargetTemperature:
                    Temperature coolingSetPoint = new Temperature(applianceToQuery.GetValue <double>("CoolingSetPoint").GetAwaiter().GetResult());
                    Temperature heatingSetPoint = new Temperature(applianceToQuery.GetValue <double>("HeatingSetPoint").GetAwaiter().GetResult());
                    int         temperatureMode = applianceToQuery.GetValue <int>("TemperatureMode").GetAwaiter().GetResult();
                    response.payload.temperatureMode = new ApplianceTemperatureMode
                    {
                        value = TemperatureMode.ModeToString(temperatureMode)
                    };
                    response.payload.heatingTargetTemperature = new ApplianceTemperatureReading
                    {
                        value = double.Parse(string.Format("{0:N2}", heatingSetPoint.Celcius)),
                        scale = "CELSIUS"
                    };
                    response.payload.coolingTargetTemperature = new ApplianceTemperatureReading
                    {
                        value = double.Parse(string.Format("{0:N2}", coolingSetPoint.Celcius)),
                        scale = "CELSIUS"
                    };
                    //response.payload.applianceResponseTimestamp = DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.ffZ");// XmlConvert.ToString(DateTime.UtcNow.ToUniversalTime(), XmlDateTimeSerializationMode.Utc);
                    break;

                case QueryRequestType.GetTemperatureReading:
                    Temperature temperature = new Temperature(applianceToQuery.GetValue <double>("Temperature").GetAwaiter().GetResult());
                    response.payload.temperatureReading = new ApplianceTemperatureReading
                    {
                        value = double.Parse(string.Format("{0:N2}", temperature.Celcius)),
                        scale = "CELSIUS"
                    };
                    //response.payload.applianceResponseTimestamp = DateTime.UtcNow.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.ffZ"); //XmlConvert.ToString(DateTime.UtcNow.ToUniversalTime(), XmlDateTimeSerializationMode.Utc);
                    break;

                default:
                    response.header.@namespace = Faults.QueryNamespace;
                    response.header.name       = Faults.UnsupportedOperationError;
                    response.payload.exception = new ExceptionResponsePayload
                    {
                        errorInfo = new ErrorInfo
                        {
                            description = "Unsupported Query Request Type"
                        }
                    };
                    break;
                }
            }
            catch
            {
                response.header.@namespace = Faults.QueryNamespace;
                response.header.name       = Faults.NoSuchTargetError;
                response.payload.exception = new ExceptionResponsePayload();
            }
        }