public static async Task <bool> RemoveAllAsync() { return(await Task.Run(() => { var urls = subs.ToArray(); for (int i = 0; i < urls.Length; ++i) { urls[i] = resolveFullPath(urls[i]); } string value = cfg.AppSettings.Settings[CFG_PREFIX].Value; List <string> forums = new List <string>(value.Split(CFG_SEPARATOR, StringSplitOptions.RemoveEmptyEntries)); // Remove from subs list subs = new ConcurrentBag <string>(subs.Except(urls)); WowCircleForum forumObj = null; foreach (var forumUrl in urls) { if (snapshot.ContainsKey(forumUrl)) { snapshot.Remove(forumUrl, out forumObj); } } return RefreshCfgAsync(forums); })); }
public static async Task <bool> RemoveServerAsync(string forumUrl) { forumUrl = resolveFullPath(forumUrl); if (!subs.Contains(forumUrl)) { return(false); } string value = cfg.AppSettings.Settings[CFG_PREFIX].Value; List <string> forums = new List <string>(value.Split(CFG_SEPARATOR, StringSplitOptions.RemoveEmptyEntries)); // Remove from local list if (forums.Contains(forumUrl)) { forums.Remove(forumUrl); } // Remove from subs list subs = new ConcurrentBag <string>(subs.Except(new string[] { forumUrl })); WowCircleForum forumObj = null; if (snapshot.ContainsKey(forumUrl)) { snapshot.Remove(forumUrl, out forumObj); } await RefreshCfgAsync(forums); return(true); }
private static Task <WowCircleForum> fetchForum(string forumUrl) { return(Task.Run(() => { forumUrl = resolveFullPath(forumUrl); WowCircleForum forum = new WowCircleForum() { Title = fetchForumTitle(forumUrl), Url = forumUrl, threads = fetchThreads(forumUrl) }; return forum; })); }
private static async Task updateCache() { try { if (subs.Count == 0) { Console.WriteLine("=================[Update cache declined(subs list is empty): {0}]=================", DateTime.Now); return; } Console.WriteLine("=================[Update cache starts at: {0}]=================", DateTime.Now); // Update snapshot data foreach (var forumUrl in subs) { Console.WriteLine("Fetching data for {0}...", forumUrl); WowCircleForum forumObj = null; if (!snapshot.ContainsKey(forumUrl)) { snapshot.GetOrAdd(forumUrl, forumObj); } snapshot[forumUrl] = await fetchForum(forumUrl); // Update thread status for (int i = 0; i < snapshot[forumUrl].threads.Count; ++i) { var thread = snapshot[forumUrl].threads[i]; double elapsed = DateTime.Now.Subtract(thread.CreatedAt).TotalSeconds; if (elapsed < NEW_TRHEAD_AGE && !visitedThreads.Contains(thread.ID)) { visitedThreads.Add(thread.ID); snapshot[forumUrl].threads[i].IsNew = true; Console.WriteLine("New thread found: {0}\n\n", thread.ID); } } int sleepTimeout = new Random().Next(MAX_SECONDS_BETWEEN_REQUEST) * 1000; Console.WriteLine("Delay {0} ms", sleepTimeout); Thread.Sleep(sleepTimeout); } // Sort foreach (var forumUrl in snapshot.Keys.ToArray()) { snapshot[forumUrl].threads.Sort((a, b) => a.CreatedAt.CompareTo(b.CreatedAt)); Console.WriteLine("Forum: {0}", snapshot[forumUrl].Title); for (int i = 0; i < snapshot[forumUrl].threads.Count; ++i) { double elapsed = DateTime.Now.Subtract(snapshot[forumUrl].threads[i].CreatedAt).TotalSeconds; Console.WriteLine("{0,-25} {1,-25} {2, -20}", snapshot[forumUrl].threads[i].ID, snapshot[forumUrl].threads[i].CreatedAt, elapsed); } Console.WriteLine(); } Console.WriteLine("=================[Cache timestamp: {0}]=================", DateTime.Now); } catch (Exception ex) { Console.WriteLine("updateCache failure: {0}{1}{2}", ex.Message, ex.StackTrace, Environment.NewLine); } }