/// <summary> /// Disconnects bot from a twitch channel. /// </summary> /// <param name="channel">Channel name.</param> public void Disconnect(string channel) { try { var st = Threads.First(t => t.Channel.Equals(channel, StringComparison.OrdinalIgnoreCase)); st.Abort(); Threads.Remove(st); } catch (Exception ex) { Debug.WriteLine(ex); } }
private void SetThreadPriority(object obj) { lock (_locker) { if (SelectedThread == null) { return; } var id = SelectedThread.Id; var thread = Threads.First(info => info.Id == id); thread.Priority = SelectedThreadPriority; } }
private void DeleteThread(object obj) { lock (_locker) { if (SelectedThread == null) { return; } var id = SelectedThread.Id; var thread = Threads.First(info => info.Id == id); if (thread == null) { return; } Threads.Remove(thread); thread.StopThread(); thread.Dispose(); } }
public void Update() { _updated.Reset(); Updating = true; #if DEBUG Console.WriteLine("Started update on board /{0}/", Name); #endif string board_url = EndpointProvider.GetBoardEndpoint(Name); if (board_url == "") { return; } string json = Utilities.Download(board_url); if (json == "-") { return; } JArray pages = JArray.Parse(json); List <int> current_threads = new List <int>(); foreach (JObject page in pages) { JArray threads = page.Value <JArray>("threads"); foreach (JObject rawthread in threads) { int id = rawthread.Value <int>("no"); if (!Threads.Any(t => t.ID == id)) { Thread thread = new Thread(id, this); Threads.Add(thread); if (NewThread != null) { NewThread(thread); } } else { Thread thread = Threads.First(t => t.ID == id); if (thread.OP.ModificationTime != rawthread.Value <ulong>("last_modified")) { thread.Update(); thread.OP.ModificationTime = rawthread.Value <ulong>("last_modified"); } } current_threads.Add(id); } } Func <Thread, bool> dead = (t => !current_threads.Contains(t.ID) && t.Alive); Threads.Where(dead).ToList().ForEach(RemoveThread); while (updating_threads.CurrentCount > 0) { System.Threading.Thread.Sleep(100); } if (UpdateFinished != null) { UpdateFinished(this); } Updating = false; _updated.Set(); #if DEBUG Console.WriteLine("Ended update on board /{0}/", Name); #endif }