Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GetLongPollHistory не возвращает значения #365

Closed
raphaelgolubev opened this issue Jan 3, 2017 · 11 comments
Closed

Comments

@raphaelgolubev
Copy link

Здравствуйте, при вызове метода почему-то возвращается только NewPts, не могу понять в чем проблема. Спасибо.
Вот код по нажатию кнопки:

            Auth(LoginTxt.Text, PassTxt.Text);

            var getLongPollServer = vk.Messages.GetLongPollServer(true, true);
            var getLongPollHistory = vk.Messages.GetLongPollHistory(new MessagesGetLongPollHistoryParams
            {
                Onlines = false,
                EventsLimit = 1000,
                Ts = getLongPollServer.Ts,
                Pts = getLongPollServer.Pts,
                MsgsLimit = 200,
                PreviewLength = 0
            });
            MessageBox.Show(getLongPollHistory.UnreadMessages.ToString());
@inyutin-maxim
Copy link
Member

@raphaelgolubev Спасибо по возможности проверим и постараемся ответить на проблему

@Soniclev
Copy link
Contributor

Soniclev commented Jan 8, 2017

Этот метод нужно использовать в связке с LongPoll. С помощью него отлавливаете событие (например: пришло новое сообщение) и вызываете GetLongPollHistory с параметрами ts и pts.Он может вернуть больше данных, чем при обычном использовании LongPoll, например: ссылку на изображения аватара, имя в различных падежах и т.д.

@raphaelgolubev
Copy link
Author

raphaelgolubev commented Jan 13, 2017

Этот метод нужно использовать в связке с LongPoll. С помощью него отлавливаете событие (например: пришло новое сообщение) и вызываете GetLongPollHistory с параметрами ts и pts.Он может вернуть больше данных, чем при обычном использовании LongPoll, например: ссылку на изображения аватара, имя в различных падежах и т.д.

Не очень понимаю как реализовать это средствами библиотеки VkNet. В ней предоставлены только getLongPollHistory и getlongPollServer, а как отлавливать события, я, увы, не знаю.

@CaCTuCaTu4ECKuu
Copy link
Member

@raphaelgolubev
Copy link
Author

raphaelgolubev commented Jan 14, 2017

https://github.com/CaCTuCaTu4ECKuu/VkNetExtend

Я использовал расширение, не знаю правильно или нет:

   var PollServer = vk.Messages.GetLongPollServer(true, true);
                    VkNetExtend.LongPoolWatcher Watcher = new LongPoolWatcher(vk);

                    Watcher.StartAsync(PollServer.Ts, PollServer.Pts);

На что получил исключение в LongPoolWatcher.cs:
default

И еще вопрос: как с помощью него отлавливать события? Чувствую, я явно что-то сделал не так, поэтому прошу Вас объяснить как с этим работать, если несложно. Спасибо.

Предполагаю, что примерно так:

Watcher.NewMessages += Watcher_NewMessages;
 private void Watcher_NewMessages(VkApi owner,System.Collections.ObjectModel.ReadOnlyCollection<VkNet.Model.Message> messages)
        {
            MessageBox.Show("Новое сообщение!");
            throw new NotImplementedException();
        }

@CaCTuCaTu4ECKuu
Copy link
Member

Там старая версия, я не знаю работает ли она корректно сейчас, но для ответа на вопрос "как пользоваться" подойдет. Сейчас нет времени заниматься. Просто посмотрите как сделано и сделайте похожим образом

@raphaelgolubev
Copy link
Author

Там старая версия, я не знаю работает ли она корректно сейчас, но для ответа на вопрос "как пользоваться" подойдет. Сейчас нет времени заниматься. Просто посмотрите как сделано и сделайте похожим образом

Хорошо, я попробую.

@raphaelgolubev
Copy link
Author

Новые сообщения мгновенно отлавливаются. Проблему для себя решил.
Просто в LongPoolWatcher.cs в строке 41
изменил строчку:

var response = _account.Messages.GetLongPollServer(false, lastPts == null);

на

 var response = _account.Messages.GetLongPollServer(true,true);

Не уверен в абсолютной правильности данного решения, так как в коде разобрался лишь поверхностно. Однако я результатом остался доволен.

@beqabeqa473
Copy link

здравствуйте.

можете пожалуйста написать простенький пример как отлавливать новые сообщения?

спасибо.

@CaCTuCaTu4ECKuu
Copy link
Member

CaCTuCaTu4ECKuu commented Jan 17, 2017

@beqabeqa473 уже отправлял ссылку, вот файл, в котором непосредственно идет отлов сообщений
https://github.com/CaCTuCaTu4ECKuu/VkNetExtend/blob/master/LongPoolWatcher.cs
(метод GetLongPoolHistory)

@raphaelgolubev
Copy link
Author

здравствуйте.
можете пожалуйста написать простенький пример как отлавливать новые сообщения?
спасибо.

После того, как Вы подключили VkNetExtend к своему проекту пишите следующий код:

var PollServer = vk.Messages.GetLongPollServer(true, true);
                    VkNetExtend.LongPoolWatcher Watcher = new LongPoolWatcher(vk);

                    Watcher.StartAsync(PollServer.Ts, PollServer.Pts);
                    Watcher.NewMessages += Watcher_NewMessages; //событие получения новых сообщений
private void Watcher_NewMessages(VkApi owner,System.Collections.ObjectModel.ReadOnlyCollection<VkNet.Model.Message> messages)
        {
            MessageBox.Show("Новое сообщение!"); //здесь описываете то, что должно происходить при получении нового сообщения; 
//все необходимые свойства находятся в messages (текст сообщения, тип вложения, от кого пришло, к кому пришло и т.д.)
        }

Лично мне для того, чтобы добиться работоспособности расширения потребовалось изменить всего одну строчку (см. выше). Можете тоже попробовать, если в LongPoolWatcher.cs вылезает исключение типа "NullReferenceException".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants