This project is read-only.
Все доброго времени суток. Документация будет постепенно дополняться. А пока лишь некоторые уточнения.

Корректный запуск приложения

Согласно документации ВКонтакте для IFrame-приложений нужно вставлять следующую ссылку в код Вашей страницы:
<script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>

Requests Composer class

Все Вы знаете, что Вконтакте имеет ограничение на количество запросов в секунду. Если их не много, то еще как-то можно смириться, но при большом их количестве все немного плохо.
К примеру:
for (int i = 0; i < 10; i++)
  Vk.Instance.Api.Friends_Get(GetFriendsCallback);

Мы получим следующее:
9
{"response":[]}
7
{"response":[]}
5
{"response":[]}
2
{"response":[]}
10
{"response":[]}
8
{"error":{"error_code":6,"error_msg":"Too many requests per second",...
11
{"error":{"error_code":6,"error_msg":"Too many requests per second",...
4
{"error":{"error_code":6,"error_msg":"Too many requests per second",...
6
{"error":{"error_code":6,"error_msg":"Too many requests per second",...
3
{"error":{"error_code":6,"error_msg":"Too many requests per second",...
Т.е. уже при 10 запросах мы получаем 5 пустых.

В классе RequestsComposer используется делегат Func<TResult>, который может хранить ссылку на функцию, инкапсулируя её. Более подробно описано в MSDN:http://msdn.microsoft.com/ru-ru/library/bb534960.aspx.
Внутри располагается DispatcherTimer, который выполняет вызовы функций. Причем асинхронно, чтобы не блокировать другие потоки. Это стандартно для Silverligth.
Чтобы пример выше заработал нужно написать следующее:
List<Func<long>> methods_list = new List<Func<long>>();
for (int i = 0; i < 10; i++)
  methods_list.Add(new Func<long>(() => Vk.Instance.Api.Friends_Get(GetFriendsCallback)));
var ms = new RequestsComposer(500);
ms.Compose(methods_list);
ms.Perform();

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

Last edited Mar 18, 2011 at 4:00 PM by Lans, version 3

Comments

No comments yet.