using LampInspectionMachine.Cameralibs.HKCamera; using LampInspectionMachine.Interfaces; using LampInspectionMachine.Model; using MvCamCtrl.NET; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace LampInspectionMachine.Cameralibs { public class CameraService { private readonly Dictionary _CameraCollection; public CameraService() { _CameraCollection = new Dictionary(); } public bool CreateCamera(Guid id ,CameraInfo cameraInfo) { ICamera 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= 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 ) { } } } } }