/// <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; } } }
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, """, @"""", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "'", "'", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "<", "<", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, ">", ">", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "&", "&", 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(); } }