klasa reprezentująca Statusy przekazane jako argumenty wywołania zdarzenia
Inheritance: System.EventArgs
コード例 #1
0
ファイル: StatusesPresenter.cs プロジェクト: bszafko/blipface
        /// <summary>
        /// Callback do zdarzenia gdy statusy zostają zaktualizowane
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BlpComStatusesUpdated(object sender, StatusesLoadingEventArgs e)
        {
            IList<StatusViewModel> sts = ViewModelHelper.MapToViewStatus(e.Statuses, blipfaceUser.UserName);

            lock (lockLastStatus)
            {
                //pierwszy status jest najnowszy
                if(sts.Count>0)
                    newestStatus = sts[0];
            }

            //RetriveBlipHyperlinks(sts);
            //blokujemy kolejką gdy dodajemy do niej nowe statusy,
            lock (lockQueue)
            {
                //dodajemy statusy od końca
                for (int i = sts.Count - 1; i >= 0; i--)
                {
                    statusQueue.Enqueue(sts[i]);
                }

                //foreach (var st in sts)
                //{
                //    statusQueue.Enqueue(st);
                //}
            }

            //pobierz z kolejki dodane wyżej statusu i przetworz je
            AddStatusesWithHyperlinks(true);

            //foreach (var st in sts)
            //{
            //    RetriveStatusHyperlinks(st);
            //}
            //view.UpdateStatuses(sts);

            //view.Statuses = statuses.Concat(view.Statuses).ToList();

            view.ConnectivityStatus = SetConnectivityStatus(ConnectivityStatus.Online);
            // view.Statuses.Insert(0, statuses[0]);

            updateStatusTimer.Start();
        }
コード例 #2
0
ファイル: StatusesPresenter.cs プロジェクト: ksopyla/blipface
        /// <summary>
        /// Callback do zdarzenia gdy statusy zostają zaktualizowane
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BlpComStatusesUpdated(object sender, StatusesLoadingEventArgs e)
        {
            if (e.Statuses.Count < 1)
                return;
            try
            {
                lock (lockLastStatus)
                {
                    //jeżeli pobrało jakieś statusu i pierwszy(najnowszy) ma id większe
                    //od dotychczaoswego to przypisz
                    if (newestStatusId == 0 || (e.Statuses[0].Id > newestStatusId))
                    {
                        newestStatusId = e.Statuses[0].Id;
                    }
                    else
                    {
                        //jeżeli nie ma statusów lub najnowszy pobrany status ma id mniejsze
                        //to można przerwać przetwarzanie gdyż one już są
                        return;
                    }
                }

                IList<StatusViewModel> sts = ViewModelHelper.MapToViewStatus(e.Statuses, blipfaceUser.UserName);

                //blokujemy kolejką gdy dodajemy do niej nowe statusy,
                EnqueueStatuses(sts);

                //pobierz z kolejki dodane wyżej statusu i przetworz je
                //AddStatusesWithHyperlinks(true);

                view.ConnectivityStatus = SetConnectivityStatus(ConnectivityStatus.Online);
                //view.Error =
                // view.Statuses.Insert(0, statuses[0]);

                //updateStatusTimer.Start();
            }
            catch (Exception exp)
            {
                view.Error = exp;
            }
        }
コード例 #3
0
ファイル: StatusesPresenter.cs プロジェクト: bszafko/blipface
        /// <summary>
        /// calback do zdarzenia gdy statusy zostają załadowane od nowa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void BlpComStatusesLoaded(object sender, StatusesLoadingEventArgs e)
        {
            //view.Statuses =

            IList<StatusViewModel> sts = ViewModelHelper.MapToViewStatus(e.Statuses, blipfaceUser.UserName);
            lock (lockLastStatus)
            {
                //pierwszy status jest najnowszy
                if (sts.Count > 0)
                {
                    newestStatus = sts[0];

                    //informacja że załadowano statusy
                    statusesLoaded = true;
                }
            }

            lock (lockQueue)
            {
                //tu nie musimy odwracać bo i tak dodajemy na koniec statusy
                //dodajemy do kolejki od razu, lecz od drugiego statusu dopiero, pierwszy o indeksie 0
                //w celu złudzenia przyspieszenia dodajemy od razu

                for (int i = 1; i < sts.Count; i++)
                {
                    statusQueue.Enqueue(sts[i]);
                }

                //foreach (var st in sts)
                //{
                //    statusQueue.Enqueue(st);
                //}
            }
            //jak najszybciej ustawiamy pierwszy status na liście, aby użytkownik nie czekał
            //aż zostaną przetworzone wszystkie statusy
            var oneStatusList = new ObservableCollection<StatusViewModel>();
            StatusViewModel initStatus = sts[0];
            RetriveStatusHyperlinks(initStatus);
            oneStatusList.Add(initStatus);

            //inicjujemy listę statusów tylko jednym statusem, pozostałe będą dodawanie
            //kolejno
            view.Statuses = oneStatusList;

            //chyba to już nie potrzebne będzie
            //sts.RemoveAt(0);

            //parametr false - dodajemy na koniec statusy
            AddStatusesWithHyperlinks(false);

            //view.Statuses = new List<StatusViewModel>(sts);
            view.ConnectivityStatus = SetConnectivityStatus(ConnectivityStatus.Online);

            //uruchamiamy z normalnym czasem timer
            StartListeningForUpdates(UpdateTime);
        }
コード例 #4
0
ファイル: StatusesPresenter.cs プロジェクト: ksopyla/blipface
        /// <summary>
        /// calback do zdarzenia gdy statusy zostają załadowane od nowa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BlpComStatusesLoaded(object sender, StatusesLoadingEventArgs e)
        {
            try
            {
                lock (lockUpdateQueue)
                {
                    statusUpdateQueue.Clear();
                }

                if (e.Statuses.Count > 0)
                {
                    lock (lockLastStatus)
                    {
                        //ładujemy statusy od nowa więc, nie ma co sprawdzać
                        //od razu przypisujemy najnowszy status
                        newestStatusId = e.Statuses[0].Id;
                    }
                    //informacja że załadowano statusy
                    statusesLoaded = true;

                    if (consumeStatusesThread != null)
                    {
                        //consumeStatusesThread.IsAlive;

                        //przerywamy wątek
                        consumeStatusesThread.Abort();
                    }

                    IList<StatusViewModel> sts = ViewModelHelper.MapToViewStatus(e.Statuses, blipfaceUser.UserName);

                    //EnqueueStatuses(sts, QueueKind.LoadsQueue);

                    consumeStatusesThread = new Thread(new ParameterizedThreadStart(ConsumeLoads));
                    consumeStatusesThread.Name = "BlipFace consume Loaded Statuses";
                    consumeStatusesThread.IsBackground = true;
                    consumeStatusesThread.Start(sts);

                    //ThreadPool.QueueUserWorkItem(c => ConsumeLoads());

                    /*
                    //ostatni ststus
                    StatusViewModel initStatus = sts[0];
                    sts.RemoveAt(0);

                    //jak najszybciej ustawiamy status na liście, aby użytkownik nie czekał
                    //aż zostaną przetworzone wszystkie statusy
                    var oneStatusList = new ObservableCollection<StatusViewModel>();

                    RetriveStatusHyperlinks(initStatus);
                    oneStatusList.Add(initStatus);

                    //inicjujemy listę statusów tylko jednym statusem, pozostałe będą dodawanie
                    if (view.Statuses != null)
                        view.Statuses = null;
                    view.Statuses = oneStatusList;

                    for (int i = 0; i < sts.Count; i++)
                    {
                        if (view.Statuses != null)
                        {
                            RetriveStatusHyperlinks(sts[i]);

                            view.AddStatus(sts[i], false);
                        }
                        else
                        {
                            //wyjdź z metody

                            statusesLoaded = false;
                            return;
                        }
                    }

                    */

                    //view.Statuses = new List<StatusViewModel>(sts);
                    view.ConnectivityStatus = SetConnectivityStatus(ConnectivityStatus.Online);
                }
            }
            catch (Exception exeption)
            {
                view.Error = exeption;
            }

            if (mode != UpdateMode.Archive)
            {
                ThreadPool.QueueUserWorkItem(c => ConsumeStatuses());

                //co by się nie działo to trzeba to uruchomić uruchamiamy wątek z przetważaniem statusów
                //consumeStatusesThread =new Thread(ConsumeStatuses);
                //consumeStatusesThread.Name = "BlipFace consume Statuses";
                //consumeStatusesThread.IsBackground = true;
                //consumeStatusesThread.Start();

                //uruchamiamy z normalnym czasem timer
                StartListeningForUpdates(refreshTimeSec);
            }
        }