private void MainWorkerFunc(object sender, DoWorkEventArgs e)
{
//Ротация в цикле
while (true) {
//Если источник не загружен
if (!IsSourceLoaded) {
Profile currentProfile = ProfileManager.CurrentProfile;
//Добавляем задачу загрузки
TaskManager.AquireLock(LoadingTask);
//Показываем анимацию загрузки
IsLoadingAnim(true, true);
IsStatic = false;
IsErrorOccured = false;
//Получаем информацию, необходимую для ротации
GuildName = currentProfile.Rotation.Guild;
TamerName = currentProfile.Rotation.Tamer;
IConfiguration config = ConfigurationManager.GetConfiguration(currentProfile.GameModel);
IWebProvider webProvider = config.CreateWebProvider();
IServersProvider serversProvider = config.ServersProvider;
//Проверяем, доступен ли веб-профиль и необходимая информация
IsStatic = webProvider == null || string.IsNullOrEmpty(GuildName);
if (!IsStatic) {
Server = serversProvider.GetServerById(currentProfile.Rotation.ServerId);
//Регистрируем ивенты загрузки
webProvider.StatusChanged += EventProxy.OnStatusChanged;
webProvider.DownloadCompleted += EventProxy.OnDownloadCompleted;
//Получаем информацию о списках гильдии
webProvider.GetActualGuild(Server, GuildName, false, currentProfile.Rotation.UpdateInterval + 1);
//Убираем обработку ивентов
webProvider.DownloadCompleted -= EventProxy.OnDownloadCompleted;
webProvider.StatusChanged -= EventProxy.OnStatusChanged;
}
//Проверяем не произошла ли ошибка
if (!IsErrorOccured) {
//Закрываем анимацию, устанавливаем флаг загрузки
IsLoadingAnim(false);
}
TaskManager.ReleaseLock(LoadingTask);
IsSourceLoaded = true;
}
if (!IsErrorOccured && IsSourceLoaded) {
UpdateModel();
System.Threading.Thread.Sleep(ROTATION_INTERVAL);
}
}
}