private async Task StrokesWriterThread(CancellationToken cancellationToken) { while (true) { if (cancellationToken.IsCancellationRequested) { Logger.Info("The strokes writer thread was cancelled."); return; } Thread.Sleep(IsOffline ? Constants.OfflineRefreshRate : Constants.OnlineRefreshRate); if (StrokesToUpdate.Count == 0) { continue; } StrokeModelsMap strokesSnapshot; lock (StrokesLock) { strokesSnapshot = new StrokeModelsMap(StrokesToUpdate); StrokesToUpdate.Clear(); } if (IsOffline) { Cache.Write(DatabasePaths.Strokes, DrawingId, StrokesMap); } else { await DatabaseService.Ref(DatabasePaths.Strokes).Child(DrawingId).Update(strokesSnapshot); } } }
private void SyncRemoteStrokesToLocal(StrokeModelsMap strokes) { StrokesMap = strokes; PurgeOverrideMap(); StrokesUpdated?.Invoke(); }