private void GetAllCamerasMethod()
{
NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log);
logEx.Info("Enter:GetAllCamerasMethod");
try
{
List<Camera> cameraListTemp = new List<Camera>();
List<CameraGroup> groupListTemp = new List<CameraGroup>();
List<NodeRelation> nodeRelationListTemp = new List<NodeRelation>();
List<eLTEGroupInfo> lsteLTEGroupInfo = new List<eLTEGroupInfo>();
List<eLTEGrpUserInfo> lsteLTEGrpUserInfo = new List<eLTEGrpUserInfo>();
List<eLTEUserInfo> dcUsersList = new List<eLTEUserInfo>();
//获得本DC管理的所有User
ELTE_RESULT iRet = (ELTE_RESULT)lteSdkClient.GetAllDcUsers(0, out dcUsersList);
if (ELTE_RESULT.RET_SUCCESS != iRet)
{
isRefreshSuccess = false;
logEx.Error("GetAllDcUsers Failed,ELTE_Result:{0}",iRet.ToString());
return;
}
//获得本DC管理的所有Group,返回值为一份克隆的数据,由调用者负责操纵并最终销毁、dcid:本调度台的用户号,如果 Dcid==0,则返回全网所有的Group
iRet = (ELTE_RESULT)lteSdkClient.GetAllGroups(0, out lsteLTEGroupInfo);
if (ELTE_RESULT.RET_SUCCESS != iRet)
{
isRefreshSuccess = false;
logEx.Error("GetAllGroups Failed,ELTE_Result:{0}",iRet.ToString());
return;
}
foreach (eLTEGroupInfo group in lsteLTEGroupInfo)
{
//保存分组信息
CameraGroup cameraGroup = new CameraGroup(group.grpid.ToString(), group.grpname);
groupListTemp.Add(cameraGroup);
List<eLTEGrpUserInfo> groupUserList = new List<eLTEGrpUserInfo>();
//获得某个组里的所有User,返回值为一份克隆的数据,由调用者负责操纵并最终销毁、grpid:组号;如果该组不存在,则返回NULL
iRet=(ELTE_RESULT)lteSdkClient.GetGroupUsers(group.grpid, out groupUserList);
if (ELTE_RESULT.RET_SUCCESS != iRet)
{
logEx.Error("GetGroupUsers Failed,GroupID:{0},ELTE_Result:{1}", group.grpid,iRet.ToString());
break;
}
foreach (eLTEGrpUserInfo user in groupUserList)
{
//动态重组中的组成员
if (user.memberType == eLTEGroup_Member_t.MEMBER_GROUP)
{
eLTEUserInfo userInfo = new eLTEUserInfo();
iRet=(ELTE_RESULT)lteSdkClient.GetUserInfo(user.userid, out userInfo);
if (ELTE_RESULT.RET_SUCCESS != iRet)
{
logEx.Error("GetUserInfo Failed,UserID:{0},ELTE_Result:{1}", user.userid,iRet.ToString());
break;
}
//保存分组信息
if (!groupListTemp.Exists(x => x.No == group.grpid.ToString()))
{
cameraGroup = new CameraGroup(userInfo.userid.ToString(), userInfo.username);
cameraGroup.ParentID = group.grpid.ToString();
groupListTemp.Add(cameraGroup);
}
}
//普通用户成员
else if (user.memberType == eLTEGroup_Member_t.MEMBER_USER)
{
eLTEUserInfo userInfo = new eLTEUserInfo();
userInfo = dcUsersList.Find(x =>
{
return x.userid == user.userid;
});
if (userInfo != null)
{
if ((userInfo.usercategory == eLTEUser_Category_t.PTTUSER && bPttUser) ||
(userInfo.usercategory == eLTEUser_Category_t.FIXEDCAMERA && bFixedCamera))
{
//保存用户信息
Camera camera = new Camera(userInfo.userid.ToString(), userInfo.username);
camera.ParentID = group.grpid.ToString();
try
{
if (this.cameraStatusOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME))
{
camera.Status = onlineUser.Exists((x) =>
{
if (x == camera.No)
{
return true;
}
else
{
return false;
}
}) == true ? CameraStatus.Online : CameraStatus.Offline;
}
cameraListTemp.Add(camera);
}
finally
{
this.cameraStatusOperateLock.ExitReadLock();
}
}
}
else
{
logEx.Error("UserInfo is null,UserID:{0}", user.userid);
}
}
}
}
logEx.Trace("GetElteCameras cameraListTemp:{0}", cameraListTemp.Count);
logEx.Trace("GetElteCameras groupListTemp:{0}", groupListTemp.Count);
//获取摄像头和组之间的关联
GetCameraAndGroupRelation(cameraListTemp, groupListTemp, nodeRelationListTemp);
////增加组外的设备信息
//List<eLTEUserInfo> dcUsersList = new List<eLTEUserInfo>();
////获得本DC管理的所有User
//lteSdkClient.GetAllDcUsers(0, out dcUsersList);
foreach (eLTEUserInfo userInfo in dcUsersList)
{
if ((userInfo.usercategory == eLTEUser_Category_t.PTTUSER && bPttUser) ||
(userInfo.usercategory == eLTEUser_Category_t.FIXEDCAMERA && bFixedCamera))
{
if (cameraListTemp.Exists(x => x.No == userInfo.userid.ToString()))
{
continue;
}
else
{
Camera camera = new Camera(userInfo.userid.ToString(), userInfo.username);
try
{
if (this.cameraStatusOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME))
{
camera.Status = onlineUser.Exists((x) =>
{
if (x == camera.No)
{
return true;
}
else
{
return false;
}
}) == true ? CameraStatus.Online : CameraStatus.Offline;
}
cameraListTemp.Add(camera);
}
finally
{
this.cameraStatusOperateLock.ExitReadLock();
}
List<string> pathList = new List<string>();
NodeRelation nodeRelation = new NodeRelation(camera.No, pathList, NodeType.CAMERA);
nodeRelationListTemp.Add(nodeRelation);
}
}
}
DateTime dtStart = DateTime.Now;
DateTime dtNow = new DateTime();
while (!isGetDevicesFinish)
{
dtNow = DateTime.Now;
if ((dtNow - dtStart).TotalSeconds > refreshDeviceListOverTime)
{
isRefreshSuccess = false;
return;
}
Thread.Sleep(1);
continue;
}
//将实时获取的值放到缓存
if (this.cameraOperateLock.TryEnterWriteLock(CgwConst.ENTER_LOCK_WAIT_TIME))
{
try
{
this.cameraList = cameraListTemp;
this.groupList = groupListTemp;
this.nodeRelationList = nodeRelationListTemp;
isRefreshSuccess = true;
}
catch (Exception ex)
{
isRefreshSuccess = false;
logEx.Error("Set the list to the buffer failed. ", ex.Message);
}
finally
{
this.cameraOperateLock.ExitWriteLock();
}
}
}
catch (System.Exception ex)
{
isRefreshSuccess = false;
logEx.Error("GetAllCamerasMethod failed.Exception message:{0}", ex.Message);
}
logEx.Debug("GetAllCameras eLTE cameraList:{0}", cameraList.Count);
logEx.Debug("GetAllCameras eLTE groupList:{0}", groupList.Count);
logEx.Debug("GetAllCameras eLTE nodeRelationList:{0}", nodeRelationList.Count);
}
/// <summary>