예제 #1
0
        /// <summary>
        ///  添加设备
        /// </summary>
        /// <param name="serialNumber">设备号</param>
        /// <returns></returns>
        private AddDeviceResponseDto AddDeviceMethod(string serialNumber)
        {
            var deviceTypeEntity = GetDeviceTypeEntity(WellKnownVenderName.BSR, WellKnownSdkNames.LimitDevice);

            DockDeviceEntity deviceEntity = new DockDeviceEntity();

            deviceEntity.DeviceType       = deviceTypeEntity;
            deviceEntity.ChannelCount     = 0;
            deviceEntity.ControlPort      = 3721;
            deviceEntity.DataPort         = 3720;
            deviceEntity.DefaultConn      = 0;
            deviceEntity.DownloadPort     = 3720;
            deviceEntity.Password         = "******";
            deviceEntity.Protocol         = 0;
            deviceEntity.User             = "******";
            deviceEntity.HardwareType     = (short)HardwareType.Unknown;
            deviceEntity.IsFetchChannel   = true;
            deviceEntity.MulticastAddress = "";
            deviceEntity.MulticastPort    = 0;


            if (serialNumber.IndexOf(".") != -1)
            {
                deviceEntity.Ip      = serialNumber;
                deviceEntity.AddMode = 0;
                deviceEntity.Host    = "";
            }
            else
            {
                deviceEntity.Ip      = "";
                deviceEntity.AddMode = 3;
                deviceEntity.Host    = serialNumber;
            }
            deviceEntity.Host = serialNumber;
            deviceEntity.Name = serialNumber;

            deviceEntity.RegisterServerId = deviceEntity.RegisterType = 0;
            deviceEntity.RegisterAliases  = deviceEntity.RegisterSerialNumber = deviceEntity.RegisterMACAddress = "";

            AddDeviceRequestDto addDto = new AddDeviceRequestDto();

            addDto.MaxCount        = 512;
            addDto.AddDeviceEntity = deviceEntity;


            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
            DDNSConfigDto        tmp        = new DDNSConfigDto();
            var                  seviceAddr = bllHelper.GetServerModelStr();
            AddDeviceResponseDto result     = null;

            serviceFactory.GetProxy <IDevice>(new Uri(seviceAddr)).Use(
                p =>
            {
                result = p.Add(addDto, tmp);
            }
                );
            return(result);
        }
예제 #2
0
        /// <summary>
        ///  BP4Server修改设备名
        /// </summary>
        /// <param name="deleteMode"></param>
        /// <param name="ip"></param>
        /// <param name="host"></param>
        public void UpdateDeviceNameMethod(int serverDeviceId, string serverDeviceName)
        {
            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
            var seviceAddr = bllHelper.GetServerModelStr();

            serviceFactory.GetProxy <IDevice>(new Uri(seviceAddr)).Use(
                p =>
            {
                p.UpdateName(serverDeviceId, serverDeviceName);
            }
                );
        }
예제 #3
0
        /// <summary>
        /// 获取设备SN 并返回是否可以添加以及设备硬件类型 CheckDeviceBySN
        /// </summary>
        /// <param name="SerialNumber">SN码</param>
        /// <param name="isExist">1已存在 0不存在</param>
        /// <param name="online">设备是否在线</param>
        /// <param name="hardwareType">硬件类型</param>
        /// <returns></returns>
        public ResponseBaseDto CheckDeviceBySN(string serialNumber, ref int isEnable, ref int isOnline, ref int hardwareType)
        {
            ResponseBaseDto dto = new ResponseBaseDto();

            try
            {
                IList <Device> deviceFlag =
                    deviceServer.SelectDeviceSerialNumber(new Device()
                {
                    SerialNumber = serialNumber
                });
                if (deviceFlag != null && deviceFlag.Count != 0)
                {
                    isEnable     = 0;//设备已存在,不可用
                    hardwareType = deviceFlag[0].HardwareType;
                    dto.Code     = (int)CodeEnum.Success;
                    dto.Message  = "SN已验证完毕!";
                    return(dto);
                }
                else
                {
                    //向BP4Server请求SN码
                    Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
                    string          seviceAddr = bllHelper.GetServerModelStr();
                    HardwareTypeDto htDto      = new HardwareTypeDto();
                    htDto.IsOnline = 0;
                    htDto.Type     = HardwareType.Unknown;
                    serviceFactory.GetProxy <IDevice>(new Uri(seviceAddr)).Use(
                        p =>
                    {
                        htDto = p.GetHardwareTypeBySerialNumber(serialNumber);
                    }
                        );
                    if (htDto.IsOnline != 0)
                    {
                        isEnable     = 1;
                        isOnline     = htDto.IsOnline;
                        hardwareType = (int)htDto.Type;
                    }
                }
            }
            catch (Exception ex)
            {
                dto.Code    = (int)CodeEnum.ApplicationErr;
                dto.Message = "网络异常,请刷新页面后继续";
                myLog.ErrorFormat("GetDeviceBySN方法异常,设备serialNumber:{0}", ex, serialNumber);
            }
            return(dto);
        }
예제 #4
0
        /// <summary>
        /// 删除BP4Server服务器的设备
        /// </summary>
        /// <param name="deleteMode"></param>
        /// <param name="ip"></param>
        /// <param name="host"></param>
        public bool DeleteDeviceMethod(int serverDeviceId)
        {
            bool bFlag = false;

            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
            var seviceAddr = bllHelper.GetServerModelStr();

            serviceFactory.GetProxy <IDevice>(new Uri(seviceAddr)).Use(
                p =>
            {
                bFlag = p.Delete(serverDeviceId);
            }
                );
            return(bFlag);
        }
예제 #5
0
        /// <summary>
        /// 通过设备产商名和类型,向bp4server获取到DeviceTypeEntity,这个参数用在添加设备到bp4server时使用
        /// </summary>
        /// <param name="venderName"></param>
        /// <param name="deviceKey"></param>
        /// <returns></returns>
        private DeviceTypeEntity GetDeviceTypeEntity(string venderName, string deviceKey)
        {
            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
            var seviceAddr = bllHelper.GetServerModelStr();
            IList <DeviceTypeEntity> typeList = null;

            serviceFactory.GetProxy <IDeviceType>(new Uri(seviceAddr)).Use(
                c =>
            {
                DeviceTypeCondDto typeDto = new DeviceTypeCondDto(null, null, (int)DeviceTypeLevel.Vender, null);
                var venderList            = c.GetDeviceTypeListFor(typeDto, int.MaxValue, 1);
                int parentId = venderList.Where(p => p.Name == venderName).First().Id;

                typeDto  = new DeviceTypeCondDto(null, null, (int)DeviceTypeLevel.Model, parentId);
                typeList = c.GetDeviceTypeListFor(typeDto, int.MaxValue, 1);
            }
                );
            return(typeList.Where(p => p.Key == deviceKey).First());
        }
예제 #6
0
        /// <summary>
        /// 设置通道码流
        /// </summary>
        /// <param name="channelId">通道id</param>
        /// <param name="streamType">码流类型</param>
        /// <param name="customerToken">用户token</param>
        /// <returns></returns>
        public ResponseBaseDto UpdateChannelEncoderInfo(int channelId, int streamType, string customerToken)
        {
            ResponseBaseDto    dto  = new ResponseBaseDto();
            UserTokenCache     utc  = UserTokenCache.GetInstance();
            OperaterLog        oLog = new OperaterLog();
            TokenCacheProperty tcp  = new TokenCacheProperty();

            oLog.Action = "设置通道码流";
            try
            {
                if (utc.IsValid(customerToken) == false)
                {
                    dto.Code    = (int)CodeEnum.ServerNoToken;
                    dto.Message = "用户token已失效,请重新登录后继续";
                    return(dto);
                }
                dto = bllHelper.CheckCustomer(dto, customerToken, ref tcp);
                if (dto.Code != 0)
                {
                    oLog.TargetType = (int)OperaterLogEnum.Channel;
                    oLog.Remarks    = dto.Message;
                    oLog.Result     = dto.Code;
                    bllHelper.AddOperaterLog(oLog, tcp);
                    return(dto);
                }
                else
                {
                    IList <Channel> channelFlag = channelServer.SelectChannelByChannelId(new Channel()
                    {
                        ChannelId = channelId
                    });
                    oLog.TargetId = channelId;
                    if (channelFlag == null)
                    {
                        dto.Code    = (int)CodeEnum.NoHardWare;
                        dto.Message = "需要修改的通道不存在";
                    }
                    else if (streamType == 0)
                    {
                        dto.Code    = (int)CodeEnum.NoHardWare;
                        dto.Message = "未选中码流类型";
                    }
                    else
                    {
                        try
                        {
                            //获取已预制的码流配置
                            IDictionary <int, AVEncoderInfoDto> avEncoderInfoList = GetXMLChannelEncoderList();
                            AVEncoderInfoDto enCoderInfo = avEncoderInfoList[streamType];
                            //调用BP4Server 设置码流
                            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
                            var seviceAddr = bllHelper.GetServerModelStr();
                            serviceFactory.GetProxy <ICamera>(new Uri(seviceAddr)).Use(
                                p =>
                            {
                                if (streamType == 1)
                                {
                                    //主码流
                                    p.UpdateEncoderInfo(channelFlag[0].BPServerChannelId, (byte)(1), enCoderInfo);
                                }
                                else if (streamType == 2 || streamType == 3)
                                {
                                    //选择码流类型(streamType)在BP4Server中 2和3都属于子码流
                                    p.UpdateEncoderInfo(channelFlag[0].BPServerChannelId, (byte)(1 << 1), enCoderInfo);
                                }
                                else
                                {
                                    //第3码流
                                    p.UpdateEncoderInfo(channelFlag[0].BPServerChannelId, (byte)(1 << 2), enCoderInfo);
                                }
                            });
                        }
                        catch (Exception ex)
                        {
                            dto.Code    = (int)CodeEnum.ApplicationErr;
                            dto.Message = "通道所属设备已离线!离线状态无法修改通道码流";
                            myLog.ErrorFormat("UpdateChannelEncoderInfo(BP4Server设备已离线)通道Id:{0}", ex, channelId);
                            return(dto);
                        }
                    }
                }/*end if(utc.IsValid(customerToken) == false)*/
            }
            catch (Exception ex)
            {
                dto.Code    = (int)CodeEnum.ApplicationErr;
                dto.Message = "网络异常,请刷新页面后继续";
                myLog.WarnFormat("UpdateChannelEncoderInfo方法异常,用户Id:{0},通道Id:{1}", ex, tcp.CustomerId, channelId);
            }
            oLog.TargetType = (int)OperaterLogEnum.Channel;
            oLog.Remarks    = dto.Message;
            oLog.Result     = dto.Code;
            bllHelper.AddOperaterLog(oLog, tcp);
            return(dto);
        }
예제 #7
0
        /// <summary>
        ///  修改通道名
        /// </summary>
        /// <param name="channel">Channel.ChannelId</param>
        /// <param name="customerToken">token</param>
        /// <returns></returns>
        public ResponseBaseDto UpdateChannelByChannelId(Channel channel, string customerToken)
        {
            ResponseBaseDto    dto  = new ResponseBaseDto();
            UserTokenCache     utc  = UserTokenCache.GetInstance();
            OperaterLog        oLog = new OperaterLog();
            TokenCacheProperty tcp  = new TokenCacheProperty();

            oLog.Action = "修改通道名";
            try
            {
                if (utc.IsValid(customerToken) == false)
                {
                    dto.Code    = (int)CodeEnum.ServerNoToken;
                    dto.Message = "用户token已失效,请重新登录后继续";
                    return(dto);
                }
                dto = bllHelper.CheckCustomer(dto, customerToken, ref tcp);
                if (dto.Code != 0)
                {
                    oLog.TargetType = (int)OperaterLogEnum.Channel;
                    oLog.Remarks    = dto.Message;
                    oLog.Result     = dto.Code;
                    bllHelper.AddOperaterLog(oLog, tcp);
                    return(dto);
                }
                if (tcp.SignInType == (int)CustomerSignInTypeEnum.SubCustomer)
                {
                    dto.Code    = (int)CodeEnum.ServerNoToken;
                    dto.Message = "子用户状态无法修改通道名!";
                    return(dto);
                }
                else
                {
                    IList <Channel> channelFlag = channelServer.SelectChannelByChannelId(channel);
                    oLog.TargetId = channel.ChannelId;
                    if (channelFlag == null)
                    {
                        dto.Code    = (int)CodeEnum.NoHardWare;
                        dto.Message = "需要修改的通道不存在!";
                    }
                    else
                    {
                        try
                        {
                            Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
                            var seviceAddr = bllHelper.GetServerModelStr();
                            serviceFactory.GetProxy <ICamera>(new Uri(seviceAddr)).Use(
                                p =>
                            {
                                p.UpdateName(channelFlag[0].BPServerChannelId, channel.ChannelName);
                            }
                                );
                        }
                        catch (Exception ex)
                        {
                            dto.Code    = (int)CodeEnum.ApplicationErr;
                            dto.Message = "修改失败,连接服务器超时!";
                            myLog.ErrorFormat("UpdateChannelByChannelId(Adapter服务器端没有做出响应)通道Id:{0},待修改的通道名:{1}", ex, channel.ChannelId, channel.ChannelName);
                            return(dto);
                        }
                        string originalChannelName = channelFlag[0].ChannelName;
                        channelFlag[0].ChannelName = channel.ChannelName;
                        channelServer.UpdateChannel(channelFlag[0]);
                        dto.Code    = 0;
                        dto.Message = "通道名 " + originalChannelName + "修改为 " + channel.ChannelName + " 已完成!";
                    }
                }/*end if(utc.IsValid(customerToken) == false)*/
            }
            catch (Exception ex)
            {
                dto.Code    = (int)CodeEnum.ApplicationErr;
                dto.Message = "无法连接服务器,请保证您的网络通畅!";
                myLog.ErrorFormat("UpdateChannelByChannelId方法异常,通道Id:{0},待修改的通道名:{1}", ex, channel.ChannelId, channel.ChannelName);
            }
            oLog.TargetType = (int)OperaterLogEnum.Channel;
            oLog.Remarks    = dto.Message;
            oLog.Result     = dto.Code;
            bllHelper.AddOperaterLog(oLog, tcp);
            return(dto);
        }
예제 #8
0
        /// <summary>
        ///  获取设备状态
        /// </summary>
        /// <param name="deviceIdList">Device.DeviceId</param>
        /// <param name="deviceResponseFlag">ref 集合对象</param>
        /// <returns></returns>
        public ResponseBaseDto GetServerDeviceState(int[] deviceIdList, string customerToken, ref List <DeviceResponse> deviceResponseFlag)
        {
            ResponseBaseDto    dto = new ResponseBaseDto();
            UserTokenCache     utc = UserTokenCache.GetInstance();
            TokenCacheProperty tcp = new TokenCacheProperty();

            try
            {
                if (utc.IsValid(customerToken) == false)
                {
                    dto.Code    = (int)CodeEnum.ServerNoToken;
                    dto.Message = "用户token已失效";
                }
                dto = bllHelper.CheckCustomer(dto, customerToken, ref tcp);
                if (dto.Code != 0)
                {
                    return(dto);
                }
                else
                {
                    IList <DeviceTokenDto> deviceTokenDtoFlag = new List <DeviceTokenDto>();
                    for (int i = 0; i < deviceIdList.Length; i++)
                    {
                        //缓存里是否有这个设备
                        DeviceResponse deviceResponse = deviceCache.FindByDeviceKey(GetDeivceKey(deviceIdList[i]));
                        if (deviceResponse != null)
                        {
                            deviceResponseFlag.Add(deviceResponse);
                        }
                        else
                        {
                            DeviceTokenDto deviceTokenDto = new DeviceTokenDto();
                            //服务器的设备ID
                            IList <Device> dFlag =
                                deviceServer.SelectDeviceByDeviceId(new Device()
                            {
                                DeviceId = deviceIdList[i]
                            });
                            if (dFlag != null && dFlag.Count != 0)
                            {
                                deviceTokenDto.ID = dFlag[0].BPServerDeviceId;
                                deviceTokenDtoFlag.Add(deviceTokenDto);
                            }
                        }
                    }
                    try
                    {
                        Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
                        string seviceAddr = bllHelper.GetServerModelStr();
                        IDictionary <int, DeviceStateDto> deviceState = null;
                        serviceFactory.GetProxy <IDevice>(new Uri(seviceAddr)).Use(
                            p =>
                        {
                            deviceState = p.RefreshDevices(deviceTokenDtoFlag);
                        }
                            );
                        for (int i = 0; i < deviceTokenDtoFlag.Count; i++)
                        {
                            DeviceStateDto dsDto        = deviceState[(deviceTokenDtoFlag[i].ID)];
                            IList <Device> dbDeviceFlag =
                                deviceServer.SelectDeviceByBPServerDeviceId(new Device()
                            {
                                BPServerDeviceId = deviceTokenDtoFlag[i].ID
                            });
                            if (dbDeviceFlag != null && dbDeviceFlag.Count == 1)
                            {
                                Device         device         = dbDeviceFlag[i];
                                DeviceResponse deviceResponse = new DeviceResponse();
                                deviceResponse.DeviceId = device.DeviceId;
                                if (dsDto.IsOnline == true)
                                {
                                    deviceResponse.BPServerDeviceState = 1;
                                }
                                else
                                {
                                    deviceResponse.BPServerDeviceState = 0;
                                }
                                //数据放入缓存
                                DateTime dt = DateTime.Now.AddSeconds(300);//失效时间定义为5分钟
                                deviceCache.AddDeviceCache(GetDeivceKey(dbDeviceFlag[0].DeviceId), deviceResponse, dt);
                                deviceResponseFlag.Add(deviceResponse);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        dto.Code    = (int)CodeEnum.ApplicationErr;
                        dto.Message = "服务未开启";
                        myLog.WarnFormat("GetServerGetDeviceState方法异常,BP4Server服务未开启!", ex);
                    }

                    dto.Code    = (int)CodeEnum.Success;
                    dto.Message = "设备状态已获取完成";
                }/*end if(utc.IsValid(customerToken) == false)*/
            }
            catch (Exception ex)
            {
                dto.Code    = (int)CodeEnum.ApplicationErr;
                dto.Message = "网络异常,请刷新页面后继续";
                myLog.ErrorFormat("GetServerGetDeviceState方法异常,设备Id{0}", ex, deviceIdList.ToString());
            }
            return(dto);
        }
예제 #9
0
        /// <summary>
        ///  以用户Id返回所有设备
        /// </summary>
        /// <param name="customer">CustomerId</param>
        /// <param name="customerToken">token</param>
        /// <param name="deviceFlag">返回结果 设备</param>
        /// <returns></returns>
        public ResponseBaseDto GetDeviceByCustomerId(string customerToken, ref List <DeviceResponse> deviceResponseFlag)
        {
            ResponseBaseDto    dto = new ResponseBaseDto();
            UserTokenCache     utc = UserTokenCache.GetInstance();
            TokenCacheProperty tcp = new TokenCacheProperty();
            int customerId         = 0;

            try
            {
                if (utc.IsValid(customerToken) == false)
                {
                    dto.Code    = (int)CodeEnum.TokenTimeOut;
                    dto.Message = "用户token已失效,请重新登录后继续";
                    return(dto);
                }
                dto = bllHelper.CheckCustomer(dto, customerToken, ref tcp);
                if (dto.Code != 0)
                {
                    return(dto);
                }
                else if (tcp.SignInType != (int)CustomerSignInTypeEnum.PrimaryCustomer)
                {
                    dto.Code    = (int)CodeEnum.NoUser;
                    dto.Message = "没有权限";
                    return(dto);
                }
                else
                {
                    Customer customer = new Customer();
                    customerId          = tcp.CustomerId;
                    customer.CustomerId = tcp.CustomerId;
                    List <int> authorizeDeviceIdList = new  List <int>();
                    //当前主账号下的设备
                    IList <Device> deviceFlag = deviceServer.SelectDeviceCustomerId(customer);
                    //准备返回的结果集
                    deviceResponseFlag = new List <DeviceResponse>();
                    //添加授权的设备
                    IList <Permission> permissionFlag = permissionServer.SelectPermissionByCustomerId(customer);
                    for (int j = 0; j < permissionFlag.Count; j++)
                    {
                        //判定当前用户对授权设备是否是可用的
                        if (permissionFlag[j].IsEnable == 1 && permissionFlag[j].NodeType == 1)
                        {
                            IList <Device> otherDeviceFalg =
                                deviceServer.SelectDeviceByDeviceId(new Device()
                            {
                                DeviceId = permissionFlag[j].NodeId
                            });
                            if (otherDeviceFalg != null && otherDeviceFalg.Count == 1)
                            {
                                authorizeDeviceIdList.Add(otherDeviceFalg[0].DeviceId);
                                deviceFlag.Add(otherDeviceFalg[0]);
                            }
                        }
                    }
                    Bsr.ServiceProxy.Utils.ServiceFactory serviceFactory = new ServiceProxy.Utils.ServiceFactory();
                    var seviceAddr = bllHelper.GetServerModelStr();
                    for (int i = 0; i < deviceFlag.Count; i++)
                    {
                        DeviceResponse dr = new DeviceResponse();
                        Bsr.Cloud.Model.Entities.Device device = deviceFlag[i];
                        dr.DeviceId     = device.DeviceId;
                        dr.DeviceName   = device.DeviceName;
                        dr.DeviceType   = device.DeviceType;
                        dr.SerialNumber = device.SerialNumber;
                        dr.HardwareType = device.HardwareType;
                        dr.IsAuthorize  = 0;
                        if (authorizeDeviceIdList.Contains(device.DeviceId))
                        {
                            dr.IsAuthorize = 1;
                        }
                        deviceResponseFlag.Add(dr);
                    }
                    dto.Code    = (int)CodeEnum.Success;
                    dto.Message = "设备已获取完成";
                }
            }
            catch (Exception ex)
            {
                dto.Code    = (int)CodeEnum.ApplicationErr;
                dto.Message = "网络异常,请刷新页面后继续";
                myLog.ErrorFormat("GetDeviceByCustomerId方法异常, 用户Id:{0}", ex, customerId);
            }
            return(dto);
        }