Beispiel #1
0
 /// <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);
     }
 }
Beispiel #2
0
        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;
            }
        }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
        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
        }