Пример #1
0
        /// <summary>
        /// Функция для записи нового статуса в кэш статусов пользователя
        /// </summary>
        /// <param name="newStatus">Статус, который необходимо записать</param>
        /// <param name="emptyStatus">Значение, которое необходимо присвоить пустому статусу</param>
        /// <param name="MessageI">Значение, которое надо присвоить временно владельцу статуса</param>
        public void UpdateCacheOfUserActivities(string newStatus, string emptyStatus, string MessageI)
        {
            ActivityResponse newActivityResponse = null;

            try
            {
                //newActivityResponse = Cache.Cache.LoadFromCache<ActivityResponse>(string.Empty, "UserActivityResponse");
                newActivityResponse = DataModel.Data.UserActivityResponseData;

                if (newActivityResponse == null)
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                newActivityResponse = new ActivityResponse();
            }

            bool isNeed = true;

            if (newStatus == string.Empty)
            {
                foreach (ActivityData ad in newActivityResponse.arActivityDatas)
                {
                    if (ad.adText == emptyStatus)
                    {
                        isNeed = false;
                        break;
                    }
                }

                if (isNeed) newStatus = emptyStatus;
            }
            else
            {
                foreach (ActivityData ad in newActivityResponse.arActivityDatas)
                {
                    if (ad.adText == emptyStatus)
                    {
                        newActivityResponse.arActivityDatas.Remove(ad);
                        break;
                    }
                }
            }

            if (isNeed)
            {

                var newPostSender = new PostSender
                                        {
                                            psUserID = Convert.ToInt32(_iDataLogic.GetUid()),
                                            psUserName = MessageI
                                        };

                var newActivityData = new ActivityData
                                          {
                                              adDataSender = newPostSender,
                                              adStatusID = 0,
                                              adTime = DateTime.Now,
                                              adText = newStatus
                                          };
                newActivityResponse.arActivityDatas.Add(newActivityData);

                //try
                //{
                //    bool result = Cache.Cache.SaveToCache(newActivityResponse, string.Empty, "UserActivityResponse");
                //    DebugHelper.WriteLogEntry(result
                //                                  ? "Новый статус пользователя сохранен в кэш."
                //                                  : "Новый статус пользователя не сохранены в кэш.");
                //}
                //catch (IOException newException)
                //{
                //    DebugHelper.WriteLogEntry("Ошибка сохранения статуса пользователя в кэш: " +
                //                              newException.Message);
                //}

                if (newActivityResponse != null)
                {
                    DataModel.Data.UserActivityResponseData = newActivityResponse;
                }
            }
        }
Пример #2
0
        public ActivityResponse LoadActivityDataListData(string uid, string sid, string from, string to, out ErrorResponse errorResponse)
        {
            ActivityResponse activityResponse = new ActivityResponse();

            errorResponse = null;

            //формируем запрос
            Uri newUri = new Uri
            {
                Address = SystemConfiguration.ServerConnectionToApiCalls,
                Method = "/data?act=updates_activity&"
            };

            newUri.Parameters.Add("sid=" + sid);
            newUri.Parameters.Add("from=" + from);
            newUri.Parameters.Add("to=" + to);

            HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(newUri.GetUri());
            //WebResponse newHttpWebResponse = null;
            Stream newStream = null;
            try
            {
                using (WebResponse newHttpWebResponse = newHttpWebRequest.GetResponse())
                {
                    bool logging = (LogRequestEvent != null);

                    if (logging)
                    {
                        newStream = new MemoryStream(2048);

                        HttpUtility.CopyStream(HttpUtility.PrepareResponseStream(newHttpWebResponse), newStream);

                        newStream.Flush();
                        newStream.Position = 0;

                        OnLogRequest(new LogRequestEventArgs(string.Format("LoadActivityDataListData requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null));
                    }
                    else
                    {
                        newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
                    }

                    using (JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(newStream)))
                    {
                        try
                        {
                            #region парсинг

                            while (newJsonTextReader.Read())
                            {
                                //<...> обновления
                                if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "d"))
                                {
                                    newJsonTextReader.Read();

                                    //открыли массив 1-ого порядка (список обновлений)
                                    if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                    {
                                        while (newJsonTextReader.Read()) //открываем очередь чтения списка обновлений
                                        {
                                            //читаем содержимое списка обновлений

                                            //открыли массив 2-ого порядка (отдельное обновление)
                                            if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                            {
                                                ActivityData activityData = new ActivityData();
                                                activityResponse.arActivityDatas.Add(activityData);

                                                PostSender activityDataSender = new PostSender();
                                                activityData.adDataSender = activityDataSender;

                                                int index = 0;

                                                while (newJsonTextReader.Read()) //открываем очередь чтения обновления
                                                {
                                                    //читаем содержимое обновления
                                                    if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String)
                                                    {
                                                        switch (index)
                                                        {
                                                            case 0:
                                                                string fullID = (string)newJsonTextReader.Value;

                                                                int iindex = fullID.IndexOf("_");

                                                                fullID = fullID.Substring(iindex + 1, fullID.Length - iindex - 1);

                                                                try
                                                                {
                                                                    activityData.adStatusID = Convert.ToInt32(fullID);
                                                                }
                                                                catch
                                                                {
                                                                    activityData.adStatusID = 0;
                                                                }

                                                                break;

                                                            case 1:
                                                                activityData.adDataSender.psUserID = Convert.ToInt32(newJsonTextReader.Value);
                                                                break;

                                                            case 2:
                                                                break;

                                                            case 3:
                                                                activityData.adDataSender.psUserName = (string)newJsonTextReader.Value;
                                                                break;

                                                            case 4:
                                                                int timestamp = Convert.ToInt32(newJsonTextReader.Value);

                                                                activityData.adTime = activityData.adTime.AddSeconds(timestamp);

                                                                activityData.adTime = activityData.adTime.ToLocalTime();
                                                                break;

                                                            case 5:
                                                                string rawText = (string)newJsonTextReader.Value;

                                                                rawText = Regex.Replace(rawText, "&quot;", @"""", RegexOptions.IgnoreCase);
                                                                rawText = Regex.Replace(rawText, "&#39;", "'", RegexOptions.IgnoreCase);
                                                                rawText = Regex.Replace(rawText, "&lt;", "<", RegexOptions.IgnoreCase);
                                                                rawText = Regex.Replace(rawText, "&gt;", ">", RegexOptions.IgnoreCase);
                                                                rawText = Regex.Replace(rawText, "&amp;", "&", RegexOptions.IgnoreCase);

                                                                activityData.adText = rawText;
                                                                break;
                                                        }
                                                    }
                                                    //если до конца массива, то прерываем очередь чтения обновления
                                                    else if (newJsonTextReader.TokenType == JsonToken.EndArray)
                                                    {
                                                        break;
                                                    }

                                                    index++;
                                                }
                                            }
                                            //если до конца массива, то прерываем очередь чтения (список обновлений)
                                            else if (newJsonTextReader.TokenType == JsonToken.EndArray)
                                            {
                                                break;
                                            }
                                        }
                                    }
                                }

                                //ошибки
                                if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "ok"))
                                {
                                    errorResponse = new ErrorResponse();

                                    newJsonTextReader.Read();

                                    int error_code = Convert.ToInt32(newJsonTextReader.Value);

                                    switch (error_code)
                                    {
                                        case -1:
                                            //истекшая сессия
                                            errorResponse.error_code = "1";
                                            break;

                                        case -2:
                                            //флуд-контроль
                                            errorResponse.error_code = "2";
                                            break;
                                    }

                                    return null;
                                }
                            }

                            #endregion

                            return activityResponse;
                        }
                        finally
                        {
                            if (logging)
                            {
                                newStream.Position = 0;
                                OnLogResponse(new LogResponseEventArgs("LoadActivityDataListData", newStream));
                                newStream.Flush();
                            }
                        }
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadActivityDataListData ObjectDisposedException");
                errorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }