public SmcErr GetAllCameras(out List<Camera> cameraList, out List<CameraGroup> groupList, out List<NodeRelation> nodeRelationList)
{
monitorManageServiceGetCameraList.Stop();
isGetDevicesFinish = false;
NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log);
logEx.Trace("Enter: IvsVideoMonitor.GetAllCameras().");
SmcErr err = new CgwError();
cameraList = new List<Camera>();
groupList = new List<CameraGroup>();
nodeRelationList = new List<NodeRelation>();
if (this.cameraOperateLock.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME))
{
try
{
#region 深度克隆数据
foreach (Camera ivsCamera in this.cameraList)
{
//从缓存获取
Camera camera = new Camera(ivsCamera.No, ivsCamera.Name);
camera.Status = ivsCamera.Status;
cameraList.Add(camera);
}
foreach (CameraGroup cameraGroup in this.groupList)
{
CameraGroup cameraGroupTemp = new CameraGroup(cameraGroup.No, cameraGroup.Name);
groupList.Add(cameraGroupTemp);
}
foreach (NodeRelation nodeRelation in this.nodeRelationList)
{
NodeRelation nodeRelationTemp = new NodeRelation(nodeRelation.No, nodeRelation.Path, nodeRelation.Type);
nodeRelationList.Add(nodeRelationTemp);
}
#endregion
}
catch (Exception e)
{
err.SetErrorNo(CgwError.GET_ALL_CAMERAS_FAILED);
logEx.Error("Get all cameras failed.Execption message:{0}", e.Message);
return err;
}
finally
{
this.cameraOperateLock.ExitReadLock();
}
}
monitorManageServiceGetCameraList.Start();
logEx.Info("Get all cameras success.");
return err;
}