/// <summary>
        /// Обработчик создания сервиса
        /// </summary>
        public override void OnCreate()
        {
            //Инициализируем базу данных
            CreateDB();

            //Инициализируем класс обмена с сервером
            UserAccess.Init();
            //Подключаем обработчик ошибок
            UserAccess.OnError += UserAccess_OnError;

            //Инициализируем кэш иконок
            _iconsCache = new PhotoCache(this, 1000, 10000000, 20000);
            //Инициализируем кэш полных описаний событий
            _eventsFullCache = new EventFullCache(this, 200, 1000000, 5000);

            //Выводим информационное сообщение
            Toast.MakeText(this, "Сервис AEC запущен", ToastLength.Long).Show();
        }
Exemple #2
0
        /// <summary>
        /// Получение списка сообщений
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="count"></param>
        /// <param name="events"></param>
        /// <returns></returns>
        public bool GetEventsList(int pos, int count, out EventShort[] events)
        {
            //Задаём начальные выходные значения
            events = null;

            //Результат операции
            bool result = true;

            //Получаем события с сервера
            result &= UserAccess.Execute <EventShort[]>(() => UserAccess.Client.GetEventsList(SessionId, pos, count), out events);
            //Если ошибка
            if (!result)
            {
                //Выходим с ошибкой
                return(false);
            }

            //Выходим с успехом
            return(true);
        }
Exemple #3
0
        /// <summary>
        /// Получение списка категорий
        /// </summary>
        /// <param name="parentId"></param>
        /// <param name="rootId"></param>
        /// <param name="pos"></param>
        /// <param name="count"></param>
        /// <param name="categories"></param>
        /// <returns></returns>
        public bool GetCategoriesList(long parentId, long rootId, int pos, int count, out CategoryShort[] categories)
        {
            //Задаём начальные выходные значения
            categories = null;

            //Результат операции
            bool result = true;

            //Получаем события с сервера
            result &= UserAccess.Execute <CategoryShort[]>(() => UserAccess.Client.GetCategoriesListForCurrentAccount(SessionId, parentId, rootId, pos, count), out categories);
            //Если ошибка
            if (!result)
            {
                //Выходим с ошибкой
                return(false);
            }

            //Выходим с успехом
            return(true);
        }
Exemple #4
0
        /// <summary>
        /// Вызов методов сервера с обработкой ошибок (для методов без возвращаемого значения)
        /// </summary>
        /// <param name="method"></param>
        /// <returns></returns>
        public static bool Execute(Expression <Action> method)
        {
            //Если объект клиента ещё не создан
            if (Client == null)
            {
                //Создаём его
                Client = new UserAccess();

                //Формируем выражение для вызова метода с новым объектом
                method = Expression.Lambda <Action>((method.Body as MethodCallExpression).Update(Expression.Constant(Client), (method.Body as MethodCallExpression).Arguments));
            }

            //Цикл повторения запроса
            for (int tryNum = 0; tryNum < TRY_METHOD_CALLS_MAX_NUM; tryNum += 1)
            {
                try
                {
                    //Если объект обмена в невменяемом состоянии
                    if (Client.State == CommunicationState.Faulted)
                    {
                        //Закрываем старое подключение
                        Client.Abort();
                        //Освобождаем ресурсы
                        (Client as IDisposable).Dispose();
                        //Создаём новое подключение
                        Client = new UserAccess();

                        //Формируем выражение для вызова метода с новым объектом
                        method = Expression.Lambda <Action>((method.Body as MethodCallExpression).Update(Expression.Constant(Client), (method.Body as MethodCallExpression).Arguments));
                    }

                    //Выполняем запрос
                    method.Compile()();
                    //Выходим с успехом
                    return(true);
                }
                //Если контролируемое исключение сервера
                catch (FaultException <ESException> ex)
                {
                    //Если обработчик события ошибки определён
                    if (OnError != null)
                    {
                        //Вызываем событие обработки ошибки
                        OnError.Invoke(ex.Detail.Description);
                    }
                    //Выходим с ошибкой
                    return(false);
                }
                //Если точка доступа к серверу недоступна
                catch (EndpointNotFoundException)
                {
                    //Ничего не делаем и повторяем попытку
                }
                //Если исключение обмена по сети
                catch (CommunicationException)
                {
                    //Ничего не делаем и повторяем попытку
                }
            }

            //Если обработчик события ошибки определён
            if (OnError != null)
            {
                //Вызываем событие обработки ошибки
                OnError.Invoke("Не удалось связаться с сервером!");
            }

            //Выходим с ошибкой
            return(false);
        }
 /// <summary>
 /// Переопределяемый метод получения объекта с сервера
 /// </summary>
 /// <param name="id">Идентификатор объекта</param>
 /// <param name="obj">Возвращаемый объект</param>
 /// <returns>Признак успешного нахождени на сервере</returns>
 protected override bool GetFromServer(Int64 id, out Photo obj)
 {
     //Получаем фото с сервера
     return(UserAccess.Execute <Photo>(() => UserAccess.Client.GetPhoto(_service.SessionId, id), out obj));
 }
 /// <summary>
 /// Переопределяемый метод получения объекта с сервера
 /// </summary>
 /// <param name="id">Идентификатор объекта</param>
 /// <param name="obj">Возвращаемый объект</param>
 /// <returns>Признак успешного нахождени на сервере</returns>
 protected override bool GetFromServer(Int64 id, out EventFullGet obj)
 {
     //Получаем фото с сервера
     return(UserAccess.Execute <EventFullGet>(() => UserAccess.Client.GetEventFullDescription(_service.SessionId, id), out obj));
 }