Exemplo n.º 1
0
        /// <summary>
        /// 上传控制指令
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="facilitySerialnum"></param>
        /// <returns></returns>
        public dynamic UploadControlResult(AwEntity entity, IApiTransport transport, ControlResult controlResult)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            //if (controlResult.FacilityCode.IsNullOrWhiteSpace()) throw new ArgumentNullException("facilitySerialnum");
            Guard(entity);

            entity.Description = "上传控制指令";
            entity.DataBlockObject.DataContentRequest.ControlDataBlock = new ControlDataBlock()
            {
                ControlResults = new[]
                {
                    new ControlResult()
                    {
                        Serialnum = controlResult.Serialnum,
                        Result    = controlResult.Result,
                        Time      = controlResult.Time
                    }
                }.ToList()
            };

            var response = transport.Process(entity);

            //if (response.Success == ErrorType.NoError)
            //{
            //    if (response.Data != null && response.Data != null)
            //        return response.Data;
            //}
            //return null;

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 2
0
 public static XResponseMessage Process(AwEntity entity)
 {
     if (entity == null)
     {
         throw new ArgumentNullException(nameof(entity));
     }
     return(null);
 }
Exemplo n.º 3
0
        /// <summary>
        /// 删除设备
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <returns></returns>
        public bool DeleteDevice(AwEntity entity, IApiTransport transport)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            Guard(entity);

            throw new NotImplementedException("DeleteDevice");
        }
Exemplo n.º 4
0
        /// <summary>
        /// 解析对象
        /// </summary>
        /// <param name="awEntity"></param>
        /// <returns></returns>
        private async Task <XResponseMessage> ProcessEntity(AwEntity awEntity)
        {
#if DEBUG
            Stopwatch sw = new Stopwatch();
            sw.Start();
#endif
            //var result = await AwEntityProcessor.Process(awEntity);
#if DEBUG
            sw.Stop();
            LogHelper.Debug("ProcessEntity:{0} \t{1} ms", awEntity.Description, sw.ElapsedMilliseconds);
#endif
            //return result;
            return(null);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 解析对象
        /// </summary>
        /// <param name="awEntity"></param>
        /// <returns></returns>
        private static async Task <XResponseMessage> ProcessEntity(AwEntity awEntity)
        {
#if DEBUG
            Stopwatch sw = new Stopwatch();
            sw.Start();
#endif
            var result = await AwEntityProcessor.Process(awEntity);

#if DEBUG
            sw.Stop();
            ServiceLogger.Current.WriteDebugLog("ProcessEntity:{0} \t{1} ms", awEntity.Description, sw.ElapsedMilliseconds);
#endif
            return(result);
        }
Exemplo n.º 6
0
 protected void Guard(AwEntity entity)
 {
     if (entity == null)
     {
         throw new ArgumentNullException(nameof(entity));
     }
     if (entity.DataBlockObject == null)
     {
         throw new NullReferenceException("entity.DO");
     }
     if (entity.DataBlockObject.DataContentRequest == null)
     {
         throw new NullReferenceException("entity.DO.DataContent");
     }
 }
Exemplo n.º 7
0
        public bool UploadFarmStatus(AwEntity entity, IApiTransport transport, FarmStatus fs)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            Guard(entity);

            entity.Description = "上传基地运行记录";
            entity.DataBlockObject.DataContentRequest.RuntimeDataBlock = new RuntimeDataBlock()
            {
                UploadFarmStatus = fs
            };

            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 获取控制指令
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="facilitySerialnum"></param>
        /// <returns></returns>
        public IEnumerable <ControlCmd> GetControlCommand(AwEntity entity, IApiTransport transport,
                                                          string facilitySerialnum)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (facilitySerialnum.IsNullOrWhiteSpace())
            {
                throw new ArgumentNullException(nameof(facilitySerialnum));
            }
            Guard(entity);

            entity.Description = "获取控制设备指令";
            entity.DataBlockObject.DataContentRequest.ControlDataBlock = new ControlDataBlock()
            {
                ControlQueries = new[]
                {
                    new ControlQuery()
                    {
                        FacilityCode = facilitySerialnum,
                        Time         = DateTime.Now
                    }
                }.ToList()
            };
            ; //使用ControlData基础数据块

            var response = transport.Process(entity);

            if (response.Success == ErrorType.NoError && response.Data != null)
            {
                string str = response.Data.ToString();
                var    cmd =
                    ObjectContainer.Current.Resolve <FormatterBase>(DataProtocalType.Json.ToString())
                    .Deserialize <IEnumerable <ControlCmd> >(str);
                return(cmd);
            }
            else
            {
                return(Enumerable.Empty <ControlCmd>());
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 获取基地下所有设施
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <returns></returns>
        public IEnumerable <FacilityModel> GetFacilities(AwEntity entity, IApiTransport transport)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            Guard(entity);

            //entity.Description = "获取所有设施类型";
            entity.Description = "获取所有设施";
            entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock()
            {
                FarmCode = new QueryFacilitys()
                {
                    Farm = entity.DataBlockObject.Source.FarmCode
                }
            };

            var response = transport.Process(entity);

            if (response.Success != ErrorType.NoError)
            {
                return(new List <FacilityModel>());
            }
            if (response.Data == null || response.Data.QueryFacilitys == null)
            {
                return(new List <FacilityModel>());
            }
            try
            {
                string str = response.Data.QueryFacilitys.ToString();
                var    ie  =
                    ObjectContainer.Current.Resolve <FormatterBase>(DataProtocalType.Json.ToString())
                    .Deserialize <IEnumerable <FacilityModel> >(str);
                return(ie);
            }
            catch (Exception ex)
            {
                XTrace.WriteException(ex);
            }
            return(new List <FacilityModel>());
        }
Exemplo n.º 10
0
        /// <summary>
        /// 添加设施信息
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="addData"></param>
        /// <returns></returns>
        public bool AddFacility(AwEntity entity, IApiTransport transport, FacilityModel addData)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (addData == null)
            {
                throw new ArgumentNullException(nameof(addData));
            }
            Guard(entity);
            entity.Description = "添加设施信息";
            entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock()
            {
                FacilityAdd = addData
            };

            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 11
0
        /// <summary>
        ///     检验实体
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        private bool ProcessEntity()
        {
            if (RequestWrapper.Data.IsNullOrWhiteSpace())
            {
                ResponseWrapper = ResultHelper.CreateMessage("请提供有效的数据", ErrorType.NotSupportedProtocalType);
                Response();
                return(false);
            }

            BeginProcessEntity?.Invoke(this, RequestWrapper.Data);

            //检测协议格式
            var entity = AwEntityHelper.GetAwEntity(RequestWrapper.Data);

            if (entity == null)
            {
                LogHelper.Error("[数据格式] {0}", RequestWrapper.Data);
                ResponseWrapper = ResultHelper.CreateMessage("数据格式错误", ErrorType.CanNotProcessRequestData);
                Response();
                return(false);
            }
            //数据包描述信息
            LogHelper.Trace(entity.Description);
            //检测版本号
            if (!AwEntityHelper.CheckVersion(entity.Version))
            {
                LogHelper.Error("[协议版本] {0}错误", entity.Version);
                ResponseWrapper = ResultHelper.CreateMessage("协议版本错误", ErrorType.VersionError);
            }

            EndProcessEntity?.Invoke(this, RequestWrapper.Data);
            if (ResponseWrapper != null)
            {
                Response();
                return(false);
            }

            _awEntity = entity;
            return(true);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 查询设备(采集、控制)信息
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="deviceCode"></param>
        /// <returns></returns>
        public XResponseMessage QueryDevice(AwEntity entity, IApiTransport transport, string deviceCode)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (deviceCode == null)
            {
                throw new ArgumentNullException(nameof(deviceCode));
            }
            Guard(entity);

            entity.Description = "查询设备信息";
            entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock()
            {
                DeviceCode = deviceCode
            };

            var response = transport.Process(entity);

            return(response);
        }
Exemplo n.º 13
0
        /// <summary>
        /// 添加设备(多媒体设备)信息
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="addDevice"></param>
        /// <returns></returns>
        public bool AddMedia(AwEntity entity, IApiTransport transport, MediaData addDevice)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (addDevice == null)
            {
                throw new ArgumentNullException(nameof(addDevice));
            }
            Guard(entity);

            entity.Description = "添加多媒体设备信息";
            entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock()
            {
                MediaAdd = addDevice
            };

            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 14
0
        //public bool UploadDeviceData(AwEntity entity, IApiTransport transport, List<DeviceModel> devices)
        //{
        //    if (transport == null) throw new ArgumentNullException("transport");
        //    Guard(entity);
        //    if (devices == null || !devices.Any()) return false;

        //    entity.Description = "上传设备数据";
        //    var sds = devices.Select(dev => new SensorData
        //    {
        //        //FacilityCode = dev.FacilitySerialnum,
        //        DeviceCode = dev.Serialnum,
        //        //DeviceType = dev.DeviceTypeSerialnum,
        //        Value = dev.ProcessedValue,
        //        ShowValue = dev.ShowValue,
        //        //Unit = dev.Unit,
        //        Time = dev.UpdateTime
        //    });
        //    entity.DataBlockObject.DataContentRequest.CollectDataBlock = new CollectDataBlock
        //    {
        //        SensorDatas = sds.ToList()
        //    };

        //    var response = transport.Process(entity);
        //    return response.Success == ErrorType.NoError;
        //}

        /// <summary>
        /// 上传采集、控制、摄像机设备数据
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="collectData"></param>
        /// <returns></returns>
        public bool UploadDeviceData(AwEntity entity, IApiTransport transport, CollectDataBlock collectData)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (collectData == null)
            {
                throw new ArgumentNullException(nameof(collectData));
            }
            Guard(entity);

            entity.Description = "上传设备数据";
            entity.DataBlockObject.DataContentRequest.CollectDataBlock = new CollectDataBlock()
            {
                SensorDatas = collectData.SensorDatas,
                MediaDatas  = collectData.MediaDatas
            };
            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 更新设备(采集、控制)信息
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="updateDevice"></param>
        /// <returns></returns>
        public bool UpdateDevice(AwEntity entity, IApiTransport transport, DeviceModel updateDevice)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (updateDevice == null)
            {
                throw new ArgumentNullException(nameof(updateDevice));
            }
            Guard(entity);

            entity.Description = "更新设备信息";
            entity.DataBlockObject.DataContentRequest.ManageDataBlock = new ManageDataBlock()
            {
                DeviceUpdate = updateDevice
            };

            var response = transport.Process(entity);

            return(response.Success == ErrorType.NoError);
        }
Exemplo n.º 16
0
        /// <summary>
        /// 获取所有设施类型
        /// </summary>
        /// <param name="entity"></param>
        ///
        /// <param name="transport"></param>
        /// <returns></returns>
        /// <summary>
        /// 获取设施下所有设备
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="transport"></param>
        /// <param name="facilitySerialnum"></param>
        /// <returns></returns>
        public dynamic GetFacilityDevices(AwEntity entity, IApiTransport transport, string facilitySerialnum)
        {
            if (transport == null)
            {
                throw new ArgumentNullException(nameof(transport));
            }
            if (facilitySerialnum.IsNullOrWhiteSpace())
            {
                throw new ArgumentNullException(nameof(facilitySerialnum));
            }
            Guard(entity);

            entity.Description = "获取设施下所有设备";
            entity.DataBlockObject.DataContentRequest.QueryDataBlock = new QueryDataBlock()
            {
                Facility = new QueryFacilityDevices()
                {
                    Facility = facilitySerialnum
                }
            };
            var sw = new Stopwatch();

            sw.Start();
            var response = transport.Process(entity);

            sw.Stop();
            var time = sw.ElapsedMilliseconds;

            if (response.Success != ErrorType.NoError)
            {
                return(null);
            }
            if (response.Data != null && response.Data.QueryFacilityDevices != null)
            {
                return(response.Data.QueryFacilityDevices);
            }
            return(null);
        }
Exemplo n.º 17
0
        /// <summary>
        /// 构建AwEntity
        /// </summary>
        /// <returns></returns>
        public static AwEntity GetEntity(string farmcode, string description = null)
        {
            var entity = new AwEntity
            {
                Description     = description,
                DataBlockObject = new DataBlockObject
                {
                    Source = new Source
                    {
                        FarmCode  = farmcode,
                        FarmName  = "",
                        FarmKey   = Farm.FindByCode1(farmcode).Remark,
                        Lontitude = 106.72M,
                        Latitude  = 26.57M
                    },
                    CreateTime         = DateTime.Now,
                    DataContentRequest = new DataContentRequest()
                    {
                        //CommonData = new CommonData(),
                        //CollectData = new Api.Protocal.Meta.CollectData(),
                        //ControlData = new ControlData()
                    }
                },
                ValidationBlock = new ValidationBlock()
                {
                    Encrypt = new Encrypt()
                    {
                        Way = EncryptWay._3DES, Content = ""
                    },
                    Verify = new Verify()
                    {
                        Key = "CRC16", Content = ""
                    }
                }
            };

            return(entity);
        }
Exemplo n.º 18
0
        /// <summary>
        /// 农业物联网信息服务平台数据交换协议 处理
        /// </summary>
        /// <param name="str"></param>
        public async Task <XResponseMessage> Process(string str)
        {
            // if (str.IsNullOrWhiteSpace()) throw new ArgumentNullException("str");
            Check.NotNull(str, "str");

            AwEntity obj = AwEntityHelper.GetAwEntity(str);

            if (obj == null)
            {
                LogHelper.Error("[数据格式][错误] " + str);
                return(ResultHelper.CreateMessage("数据格式错误", ErrorType.CanNotProcessRequestData));
                // return ResultHelper.CreateExceptionMessage(ex, "数据格式错误", ErrorType.NotSupportedProtocalType);
            }

            #region 协议解析
            try
            {
                var awEntity = obj;
                //ServiceLogger.Current.WriteDebugLog("{0}", awEntity.Description);
                var result = await ProcessEntity(awEntity);

                //ServiceLogger.Current.WriteLine(result.ToString());
                return(result ?? new XResponseMessage()
                {
                    Success = ErrorType.NoError
                });
                //return null;
            }
            catch (Exception ex)
            {
                //ServiceLogger.Current.WriteException(ex);
                LogHelper.Fatal(ex.ToString());
                return(ResultHelper.CreateMessage("协议解析错误", ErrorType.CanNotProcessRequestData, null, ex));
            }
            #endregion
        }
Exemplo n.º 19
0
        public static async Task <XResponseMessage> Process(AwEntity awEntity)
        {
            if (awEntity.Version == 2013)
            {
                //数据校验
                var authorize = ProcessValidation(awEntity.ValidationBlock);
                if (authorize)
                {
                    if (awEntity.DataBlockObject == null)
                    {
                        return(ResultHelper.CreateMessage("数据块对象错误", ErrorType.NotSupportedProtocalType));
                    }
                    else
                    {
                        var dataContent = awEntity.DataBlockObject.DataContentRequest;
                        if (dataContent == null)
                        {
                            return(ResultHelper.CreateMessage("数据内容错误", ErrorType.NotSupportedProtocalType));
                        }
                        else
                        {
                            #region 处理一般数据

                            var commonData = dataContent.CommonDataBlock;
                            if (commonData != null)
                            {
                                try
                                {
                                    var result = DataObjectProcessor.ProcessCommonData(commonData);
                                    //if (result != null && result.Success != ErrorType.NoError)
                                    //    return result;
                                    return(result);
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion

                            #region 处理采集数据

                            var collectData = dataContent.CollectDataBlock;
                            if (collectData != null)
                            {
                                try
                                {
                                    var result = DataObjectProcessor.ProcessCollectData(collectData);
                                    if (result != null && result.Success != ErrorType.NoError)
                                    {
                                        return(result);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion

                            #region 处理控制数据

                            var controlData = dataContent.ControlDataBlock;
                            if (controlData != null)
                            {
                                try
                                {
                                    var result = DataObjectProcessor.ProcessControlData(controlData);
                                    if (result != null && result.Success == ErrorType.NoError)
                                    {
                                        return(result);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion

                            #region 处理查询数据

                            var queryData = dataContent.QueryDataBlock;
                            if (queryData != null)
                            {
                                try
                                {
                                    var result = await DataObjectProcessor.ProcessQueryData(queryData);

                                    //if (result != null && result.Success != ErrorType.NoError)
                                    //    return result;
                                    return(result);
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion

                            #region 处理管理数据

                            var manageData = dataContent.ManageDataBlock;
                            if (manageData != null)
                            {
                                try
                                {
                                    var result = await DataObjectProcessor.ProcessManageData(manageData);

                                    //if (result != null && result.Success != ErrorType.NoError)
                                    //    return result;
                                    return(result);
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion

                            #region 处理运行数据

                            var runtimeData = dataContent.RuntimeDataBlock;
                            if (runtimeData != null)
                            {
                                try
                                {
                                    var result = DataObjectProcessor.ProcessRuntimeData(runtimeData);
                                    //if (result != null && result.Success != ErrorType.NoError)
                                    //    return result;
                                    return(result);
                                }
                                catch (Exception ex)
                                {
                                    ServiceLogger.Current.WriteException(ex);
                                    return(ResultHelper.CreateExceptionMessage(ex));
                                }
                            }

                            #endregion
                        }
                    }
                    return(ResultHelper.CreateMessage("无需要处理数据", ErrorType.NoError));
                }
                else
                {
                    return(ResultHelper.CreateMessage("权限验证失败", ErrorType.AuthorizeFailed));
                }
            }
            else
            {
                //协议版本错误
                return(ResultHelper.CreateMessage("协议版本错误", ErrorType.VersionError));
            }
        }