using MvCamCtrl.NET; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TeamAAS_VP.Core.Cameras; using TeamAAS_VP.Interfaces; using TeamAAS_VP.Models; namespace TeamAAS_VP.Core { public class CameraService { private readonly Dictionary _CameraCollection; public CameraService() { _CameraCollection = new Dictionary(); } public bool CreateCamera(Guid id, CameraInfo cameraInfo) { ICamera camera; if (cameraInfo.CameraBrand== Enums.CameraBrand.Basler_Pylon) { camera = new BaslerCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.HikRobot_MVS) { camera = new MvCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.IRayple) { camera = new AHuaCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.Cognex) { camera = new CognexCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.Galaxy) { camera = new GalaxyCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else { camera = new MvCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } if (_CameraCollection.ContainsKey(id)) { var currenCamera = _CameraCollection[id]; currenCamera.CloseDevice(); } else { _CameraCollection.Add(id, camera); } return true; } public Task CreateCameraAsync(Guid id, CameraInfo cameraInfo) { ICamera camera; if (cameraInfo.CameraBrand == Enums.CameraBrand.Basler_Pylon) { camera = new BaslerCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.HikRobot_MVS) { camera = new MvCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.IRayple) { camera = new AHuaCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.Cognex) { camera = new CognexCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else if (cameraInfo.CameraBrand == Enums.CameraBrand.Galaxy) { camera = new GalaxyCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } else { camera = new MvCamera(id, cameraInfo.CameraName, cameraInfo.SerialNumber); } if (_CameraCollection.ContainsKey(id)) { var currenCamera = _CameraCollection[id]; currenCamera.CloseDevice(); } else { _CameraCollection.Add(id, camera); } return Task.FromResult(true); } public ICamera GetCamera(Guid id) { return _CameraCollection[id]; } public Task GetCameraAsync(Guid id) { return Task.FromResult(_CameraCollection[id]); } public void UnRegisterCamera(Guid id) { if (_CameraCollection.ContainsKey(id)) { var camera = _CameraCollection[id]; camera.CloseDevice(); } } public Task UnRegisterCameraAsync(Guid id) { if (_CameraCollection.ContainsKey(id)) { var camera = _CameraCollection[id]; camera.CloseDevice(); } return Task.CompletedTask; } public void Dispose() { foreach (var camera in _CameraCollection) { try { camera.Value.CloseDevice(); } catch (Exception) { } } } } }