DreamineVMS 1.0.0.0
Windows PC의 RTSP·USB 카메라 영상을 HLS로 변환해 원격 CCTV Viewer에 전달하는 데스크톱 에이전트입니다.
로딩중...
검색중...
일치하는것 없음
DreamineVMS.Services.Cameras.SqliteCameraRepository 클래스 참조sealed

더 자세히 ...

DreamineVMS.Services.Cameras.SqliteCameraRepository에 대한 상속 다이어그램 :
DreamineVMS.Services.Cameras.SqliteCameraRepository에 대한 협력 다이어그램:

클래스

class  JsonCam

Public 멤버 함수

 SqliteCameraRepository (VmsDatabase db)
IReadOnlyList< CameraDeviceGetAll ()
IReadOnlyList< CameraDeviceGetByTenant (string tenantId)
async Task< CameraDeviceAddAsync (CameraDevice camera)
async Task UpdateAsync (CameraDevice camera)
async Task DeleteAsync (string id)

이벤트

EventHandler< CameraRepositoryChangedEventArgs >? Changed
DreamineVMS.Services.Cameras.IVmsCameraRepository(으)로부터 상속된 이벤트
EventHandler< CameraRepositoryChangedEventArgs >? Changed

Private 멤버 함수

List< CameraDeviceLoadAll ()
void MigrateFromJson ()

정적 Private 멤버 함수

static void BindCamera (SqliteCommand cmd, CameraDevice c)
static CameraDevice ReadCamera (SqliteDataReader r)

Private 속성

readonly VmsDatabase _db
readonly SemaphoreSlim _lock = new(1, 1)
List< CameraDevice_cache

상세한 설명

SQLite 기반 멀티테넌트 카메라 저장소입니다.

SqliteCameraRepository.cs 파일의 16 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ SqliteCameraRepository()

DreamineVMS.Services.Cameras.SqliteCameraRepository.SqliteCameraRepository ( VmsDatabase db)
inline

지정한 설정으로 SqliteCameraRepository 클래스의 새 인스턴스를 초기화합니다.

매개변수
dbdb에 사용할 VmsDatabase 값입니다.

SqliteCameraRepository.cs 파일의 72 번째 라인에서 정의되었습니다.

73 {
74 _db = db;
75 _cache = LoadAll();
76 MigrateFromJson();
77 }

다음을 참조함 : _cache, _db, LoadAll(), MigrateFromJson().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 함수 문서화

◆ AddAsync()

async Task< CameraDevice > DreamineVMS.Services.Cameras.SqliteCameraRepository.AddAsync ( CameraDevice camera)
inline

Async 항목을 추가합니다.

매개변수
cameracamera에 사용할 CameraDevice 값입니다.
반환값
Add Async 작업에서 생성한 Task<CameraDevice> 결과입니다.

DreamineVMS.Services.Cameras.IVmsCameraRepository를 구현.

SqliteCameraRepository.cs 파일의 148 번째 라인에서 정의되었습니다.

149 {
150 await _lock.WaitAsync();
151 try
152 {
153 using var conn = _db.Open();
154 using var cmd = conn.CreateCommand();
155 cmd.CommandText = """
156 INSERT INTO cameras (id, tenant_id, name, host, rtsp_url, display_order, enabled, auto_reconnect, is_public)
157 VALUES ($id, $tid, $name, $host, $rtsp, $order, $enabled, $ar, $pub)
158 """;
159 BindCamera(cmd, camera);
160 await cmd.ExecuteNonQueryAsync();
161 _cache = LoadAll();
162 }
163 finally { _lock.Release(); }
164
165 Changed?.Invoke(this, new CameraRepositoryChangedEventArgs
166 {
167 CameraId = camera.Id, Kind = CameraRepositoryChangeKind.Added, Camera = camera
168 });
169 return camera;
170 }

다음을 참조함 : _cache, _db, _lock, BindCamera(), Changed, DreamineVMS.Models.CameraDevice.Id, LoadAll().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ BindCamera()

void DreamineVMS.Services.Cameras.SqliteCameraRepository.BindCamera ( SqliteCommand cmd,
CameraDevice c )
inlinestaticprivate

Bind Camera 작업을 수행합니다.

매개변수
cmdcmd에 사용할 SqliteCommand 값입니다.
cc에 사용할 CameraDevice 값입니다.

SqliteCameraRepository.cs 파일의 319 번째 라인에서 정의되었습니다.

320 {
321 cmd.Parameters.AddWithValue("$id", c.Id);
322 cmd.Parameters.AddWithValue("$tid", c.TenantId);
323 cmd.Parameters.AddWithValue("$name", c.Name);
324 cmd.Parameters.AddWithValue("$host", c.Host);
325 cmd.Parameters.AddWithValue("$rtsp", c.RtspUrl);
326 cmd.Parameters.AddWithValue("$order", c.DisplayOrder);
327 cmd.Parameters.AddWithValue("$enabled", c.Enabled ? 1 : 0);
328 cmd.Parameters.AddWithValue("$ar", c.AutoReconnect ? 1 : 0);
329 cmd.Parameters.AddWithValue("$pub", c.IsPublic ? 1 : 0);
330 }

다음을 참조함 : DreamineVMS.Models.CameraDevice.AutoReconnect, DreamineVMS.Models.CameraDevice.DisplayOrder, DreamineVMS.Models.CameraDevice.Enabled, DreamineVMS.Models.CameraDevice.Host, DreamineVMS.Models.CameraDevice.Id, DreamineVMS.Models.CameraDevice.IsPublic, DreamineVMS.Models.CameraDevice.Name, DreamineVMS.Models.CameraDevice.RtspUrl, DreamineVMS.Models.CameraDevice.TenantId.

다음에 의해서 참조됨 : AddAsync(), UpdateAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DeleteAsync()

async Task DreamineVMS.Services.Cameras.SqliteCameraRepository.DeleteAsync ( string id)
inline

Delete Async 작업을 수행합니다.

매개변수
idid에 사용할 string 값입니다.
반환값
Delete Async 작업에서 생성한 Task 결과입니다.

DreamineVMS.Services.Cameras.IVmsCameraRepository를 구현.

SqliteCameraRepository.cs 파일의 245 번째 라인에서 정의되었습니다.

246 {
247 await _lock.WaitAsync();
248 try
249 {
250 using var conn = _db.Open();
251 using var cmd = conn.CreateCommand();
252 cmd.CommandText = "DELETE FROM cameras WHERE id = $id";
253 cmd.Parameters.AddWithValue("$id", id);
254 await cmd.ExecuteNonQueryAsync();
255 _cache = LoadAll();
256 }
257 finally { _lock.Release(); }
258
259 Changed?.Invoke(this, new CameraRepositoryChangedEventArgs
260 {
261 CameraId = id, Kind = CameraRepositoryChangeKind.Deleted
262 });
263 }

다음을 참조함 : _cache, _db, _lock, Changed, DreamineVMS.Services.Cameras.Deleted, LoadAll().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAll()

IReadOnlyList< CameraDevice > DreamineVMS.Services.Cameras.SqliteCameraRepository.GetAll ( )
inline

All 값을 가져옵니다.

반환값
Get All 작업에서 생성한 IReadOnlyList<CameraDevice> 결과입니다.

DreamineVMS.Services.Cameras.IVmsCameraRepository를 구현.

SqliteCameraRepository.cs 파일의 95 번째 라인에서 정의되었습니다.

95=> _cache.AsReadOnly();

다음을 참조함 : _cache.

◆ GetByTenant()

IReadOnlyList< CameraDevice > DreamineVMS.Services.Cameras.SqliteCameraRepository.GetByTenant ( string tenantId)
inline

By Tenant 값을 가져옵니다.

매개변수
tenantIdtenant Id에 사용할 string 값입니다.
반환값
Get By Tenant 작업에서 생성한 IReadOnlyList<CameraDevice> 결과입니다.

SqliteCameraRepository.cs 파일의 121 번째 라인에서 정의되었습니다.

121 =>
122 _cache.Where(c => c.TenantId == tenantId).ToList().AsReadOnly();

다음을 참조함 : _cache.

◆ LoadAll()

List< CameraDevice > DreamineVMS.Services.Cameras.SqliteCameraRepository.LoadAll ( )
inlineprivate

All 데이터를 불러옵니다.

반환값
Load All 작업에서 생성한 List<CameraDevice> 결과입니다.

SqliteCameraRepository.cs 파일의 283 번째 라인에서 정의되었습니다.

284 {
285 var list = new List<CameraDevice>();
286 using var conn = _db.Open();
287 using var cmd = conn.CreateCommand();
288 cmd.CommandText = "SELECT * FROM cameras ORDER BY display_order";
289 using var reader = cmd.ExecuteReader();
290 while (reader.Read())
291 list.Add(ReadCamera(reader));
292 return list;
293 }

다음을 참조함 : _db, ReadCamera().

다음에 의해서 참조됨 : AddAsync(), DeleteAsync(), MigrateFromJson(), SqliteCameraRepository(), UpdateAsync().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ MigrateFromJson()

void DreamineVMS.Services.Cameras.SqliteCameraRepository.MigrateFromJson ( )
inlineprivate

cameras.json이 있으면 SQLite로 마이그레이션합니다.

SqliteCameraRepository.cs 파일의 377 번째 라인에서 정의되었습니다.

378 {
379 var jsonPath = Path.Combine(AppContext.BaseDirectory, "cameras.json");
380 if (!File.Exists(jsonPath) || _cache.Count > 0) return;
381
382 try
383 {
384 var json = File.ReadAllText(jsonPath);
385 var stored = System.Text.Json.JsonSerializer.Deserialize<List<JsonCam>>(json) ?? [];
386 foreach (var cam in stored)
387 {
388 using var conn = _db.Open();
389 using var cmd = conn.CreateCommand();
390 cmd.CommandText = """
391 INSERT OR IGNORE INTO cameras (id, tenant_id, name, host, rtsp_url, display_order, enabled, auto_reconnect, is_public)
392 VALUES ($id, '', $name, $host, $rtsp, $order, $enabled, $ar, 0)
393 """;
394 cmd.Parameters.AddWithValue("$id", cam.Id ?? Guid.NewGuid().ToString("N"));
395 cmd.Parameters.AddWithValue("$name", cam.Name ?? "");
396 cmd.Parameters.AddWithValue("$host", cam.Host ?? "");
397 cmd.Parameters.AddWithValue("$rtsp", cam.RtspUrl ?? "");
398 cmd.Parameters.AddWithValue("$order", cam.DisplayOrder);
399 cmd.Parameters.AddWithValue("$enabled", cam.Enabled ? 1 : 0);
400 cmd.Parameters.AddWithValue("$ar", cam.AutoReconnect ? 1 : 0);
401 cmd.ExecuteNonQuery();
402 }
403 _cache = LoadAll();
404 File.Move(jsonPath, jsonPath + ".migrated");
405 }
406 catch { /* 마이그레이션 실패 시 무시 */ }
407 }

다음을 참조함 : _cache, _db, LoadAll().

다음에 의해서 참조됨 : SqliteCameraRepository().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ ReadCamera()

CameraDevice DreamineVMS.Services.Cameras.SqliteCameraRepository.ReadCamera ( SqliteDataReader r)
inlinestaticprivate

Camera 데이터를 읽습니다.

매개변수
rr에 사용할 SqliteDataReader 값입니다.
반환값
Read Camera 작업에서 생성한 CameraDevice 결과입니다.

SqliteCameraRepository.cs 파일의 356 번째 라인에서 정의되었습니다.

356 => new()
357 {
358 Id = r.GetString(r.GetOrdinal("id")),
359 TenantId = r.GetString(r.GetOrdinal("tenant_id")),
360 Name = r.GetString(r.GetOrdinal("name")),
361 Host = r.GetString(r.GetOrdinal("host")),
362 RtspUrl = r.GetString(r.GetOrdinal("rtsp_url")),
363 DisplayOrder = r.GetInt32(r.GetOrdinal("display_order")),
364 Enabled = r.GetInt32(r.GetOrdinal("enabled")) == 1,
365 AutoReconnect = r.GetInt32(r.GetOrdinal("auto_reconnect")) == 1,
366 IsPublic = r.GetInt32(r.GetOrdinal("is_public")) == 1
367 };

다음에 의해서 참조됨 : LoadAll().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateAsync()

async Task DreamineVMS.Services.Cameras.SqliteCameraRepository.UpdateAsync ( CameraDevice camera)
inline

Update Async 작업을 수행합니다.

매개변수
cameracamera에 사용할 CameraDevice 값입니다.
반환값
Update Async 작업에서 생성한 Task 결과입니다.

DreamineVMS.Services.Cameras.IVmsCameraRepository를 구현.

SqliteCameraRepository.cs 파일의 196 번째 라인에서 정의되었습니다.

197 {
198 await _lock.WaitAsync();
199 try
200 {
201 using var conn = _db.Open();
202 using var cmd = conn.CreateCommand();
203 cmd.CommandText = """
204 UPDATE cameras
205 SET tenant_id=$tid, name=$name, host=$host, rtsp_url=$rtsp,
206 display_order=$order, enabled=$enabled, auto_reconnect=$ar, is_public=$pub
207 WHERE id=$id
208 """;
209 BindCamera(cmd, camera);
210 await cmd.ExecuteNonQueryAsync();
211 _cache = LoadAll();
212 }
213 finally { _lock.Release(); }
214
215 Changed?.Invoke(this, new CameraRepositoryChangedEventArgs
216 {
217 CameraId = camera.Id, Kind = CameraRepositoryChangeKind.Updated, Camera = camera
218 });
219 }

다음을 참조함 : _cache, _db, _lock, BindCamera(), Changed, DreamineVMS.Models.CameraDevice.Id, LoadAll().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _cache

List<CameraDevice> DreamineVMS.Services.Cameras.SqliteCameraRepository._cache
private

cache 값을 보관합니다.

SqliteCameraRepository.cs 파일의 44 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddAsync(), DeleteAsync(), GetAll(), GetByTenant(), MigrateFromJson(), SqliteCameraRepository(), UpdateAsync().

◆ _db

readonly VmsDatabase DreamineVMS.Services.Cameras.SqliteCameraRepository._db
private

db 값을 보관합니다.

SqliteCameraRepository.cs 파일의 26 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddAsync(), DeleteAsync(), LoadAll(), MigrateFromJson(), SqliteCameraRepository(), UpdateAsync().

◆ _lock

readonly SemaphoreSlim DreamineVMS.Services.Cameras.SqliteCameraRepository._lock = new(1, 1)
private

lock 값을 보관합니다.

SqliteCameraRepository.cs 파일의 35 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddAsync(), DeleteAsync(), UpdateAsync().

이벤트 문서화

◆ Changed

EventHandler<CameraRepositoryChangedEventArgs>? DreamineVMS.Services.Cameras.SqliteCameraRepository.Changed

Changed 상황이 발생할 때 알립니다.

SqliteCameraRepository.cs 파일의 54 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : AddAsync(), DeleteAsync(), UpdateAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: