protected override void OnViewStateChanged(string key) { #region SendMessage if (key == "SendMessage") { try { using (new WaitWrapper(false)) { Globals.BaseLogic.AddComments((string) ViewData["Message"], (string) ViewData["UserID"] + "_" + (string) ViewData["PhotoID"], false); } view.UpdateView("SendCommentSuccess"); using (new WaitWrapper(false)) { PhotosCommentsResponseHistory pchResponse = null; PhotosCommentsResponse pcResponse = null; try { //pchResponse = Cache.LoadFromCache<PhotosCommentsResponseHistory>(string.Empty, "PhotosCommentsResponseHistory"); pchResponse = DataModel.Data.PhotosCommentsResponseHistoryData; if (pchResponse == null) { throw new Exception(); } } catch (Exception) { pchResponse = new PhotosCommentsResponseHistory(); } pcResponse = pchResponse.GetItem(Convert.ToInt32((string) ViewData["PhotoID"])); if (pcResponse == null) { pcResponse = new PhotosCommentsResponse(); pchResponse.AddItem(pcResponse); } var newPhotoData = new PhotoData { pdPhotoID = Convert.ToInt32((string) ViewData["PhotoID"]), pdUserID = Convert.ToInt32((string) ViewData["UserID"]), pdPhotoURL604px = (string) ViewData["LargePhotoUrl"] }; var newPostReceiver = new PostReceiver { prUserID = Convert.ToInt32((string) ViewData["UserID"]) }; var newPostSender = new PostSender { psUserID = Convert.ToInt32(Globals.BaseLogic.IDataLogic.GetUid()), psUserName = Resources.MessageI }; var newWallData = new WallData { wdWallDataType = WallDataType.PlainText, wdText = (string) ViewData["Message"] }; pcResponse.pcrPhotoID = Convert.ToInt32((string) ViewData["PhotoID"]); pcResponse.pcrComments.Insert(0, new CommentPost { cpID = 0, cpTime = DateTime.Now, cpPhotoData = newPhotoData, cpPostReceiver = newPostReceiver, cpPostSender = newPostSender, cpWallData = newWallData } ); //try //{ // bool result = Cache.SaveToCache(pchResponse, string.Empty, // "PhotosCommentsResponseHistory"); // DebugHelper.WriteLogEntry(result // ? "Новый комментарий сохранен в кэш." // : "Новый комментарий не сохранены в кэш."); //} //catch (IOException newException) //{ // DebugHelper.WriteLogEntry("Ошибка сохранения комментария к фото в кэш: " + // newException.Message); //} DataModel.Data.PhotosCommentsResponseHistoryData = pchResponse; if ((string)ViewData["UserID"] == Globals.BaseLogic.IDataLogic.GetUid()) { try { //pcResponse = Cache.LoadFromCache<PhotosCommentsResponse>(string.Empty, // "PhotosCommentsResponse"); pcResponse = DataModel.Data.PhotosCommentsResponseData; if (pcResponse == null) throw new Exception(); } catch (Exception) { pcResponse = new PhotosCommentsResponse(); } pcResponse.pcrPhotoID = Convert.ToInt32((string)ViewData["PhotoID"]); pcResponse.pcrComments.Insert(0, new CommentPost { cpID = 0, cpTime = DateTime.Now, cpPhotoData = newPhotoData, cpPostReceiver = newPostReceiver, cpPostSender = newPostSender, cpWallData = newWallData } ); //try //{ // bool result = Cache.SaveToCache(pcResponse, string.Empty, "PhotosCommentsResponse"); // DebugHelper.WriteLogEntry(result // ? "Новый комментарий сохранен в кэш комментариев к своим фото." // : "Новый комментарий не сохранен в кэш комментариев к своим фото."); //} //catch (IOException newException) //{ // DebugHelper.WriteLogEntry("Ошибка сохранения комментария к своему фото в кэш: " + // newException.Message); //} DataModel.Data.PhotosCommentsResponseData = pcResponse; } NavigationService.GoBack(); } } catch (VKException ex) { //timerKeepAwake.Enabled = false; string err = ExceptionTranslation.TranslateException(ex); if (!string.IsNullOrEmpty(err)) { ViewData["SendCommentError"] = err; view.UpdateView("SendCommentFail"); if (ex.LocalizedMessage == ExceptionMessage.IncorrectLoginOrPassword) { Globals.BaseLogic.IDataLogic.SetToken(string.Empty); view.UpdateView("GoToLogin"); } } } catch (OutOfMemoryException) { ViewData["SendCommentError"] = Resources.OutOfMemory; view.UpdateView("SendCommentFail"); } } #endregion #region GoBack if (key == "GoBack") { using (new WaitWrapper(false)) { NavigationService.GoBack(); } } #endregion if (key == "GoGoToLogin") { MasterForm.Navigate<LoginController>(); } }
public PhotosCommentsResponse LoadPhotosCommentsData(string uid, string sid, string from, string to, string parent, out ErrorResponse newErrorResponse) { PhotosCommentsResponse newPhotosCommentsRespounse = new PhotosCommentsResponse(); newErrorResponse = null; // формируем запрос Uri newUri = new Uri { Address = SystemConfiguration.ServerConnectionToApiCalls, Method = "/data?act=photos_comments&" }; newUri.Parameters.Add("id=" + uid); newUri.Parameters.Add("sid=" + sid); newUri.Parameters.Add("from=" + from); newUri.Parameters.Add("to=" + to); newUri.Parameters.Add("parent=" + parent); 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("LoadPhotosCommentsData 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, "n")) { newJsonTextReader.Read(); newPhotosCommentsRespounse.pcrCount = Convert.ToInt32(newJsonTextReader.Value); } // timestamp if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "h")) { newJsonTextReader.Read(); newPhotosCommentsRespounse.pcrTimeStamp = Convert.ToInt32(newJsonTextReader.Value); } // автор if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "author")) { newJsonTextReader.Read(); if (newJsonTextReader.TokenType == JsonToken.StartArray) { User newUser = new User(); newPhotosCommentsRespounse.pcrAuthor = newUser; int index = 0; while (newJsonTextReader.Read()) { if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String) { switch (index) { case 0: newUser.Uid = Convert.ToString(newJsonTextReader.Value); break; case 1: newUser.FullName = Convert.ToString(newJsonTextReader.Value); break; } index++; } } } } // <...> комментарии 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) { CommentPost newCommentPost = new CommentPost(); newPhotosCommentsRespounse.pcrComments.Add(newCommentPost); WallData newWallData = new WallData(); newCommentPost.cpWallData = newWallData; PostSender newPostSender = new PostSender(); newCommentPost.cpPostSender = newPostSender; PostReceiver newPostReceiver = new PostReceiver(); newCommentPost.cpPostReceiver = newPostReceiver; PhotoData newPhotoData = new PhotoData(); newCommentPost.cpPhotoData = newPhotoData; int index = 0; while (newJsonTextReader.Read()) // открываем очередь чтения сообщения { // читаем содержимое сообщения if (newJsonTextReader.TokenType == JsonToken.Integer) { switch (index) { case 0: newCommentPost.cpID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newCommentPost.cpTime = newCommentPost.cpTime.AddSeconds(Convert.ToInt32(newJsonTextReader.Value)); newCommentPost.cpTime = newCommentPost.cpTime.ToLocalTime(); break; } } // открыли массив 3-его порядка (содержание комментария, отправитель, получатель) else if (newJsonTextReader.TokenType == JsonToken.StartArray) { int iindex = 0; while (newJsonTextReader.Read()) // открываем очередь чтения содержания сообщения { // чтение содержания сообщения if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String) { switch (index) { case 2: string rawText = (string)newJsonTextReader.Value; if (parent.Equals("-1")) { rawText = Regex.Replace(rawText, "<br>", " ", RegexOptions.IgnoreCase); } else { rawText = Regex.Replace(rawText, "<br>", "\n", RegexOptions.IgnoreCase); } //rawText = Regex.Replace(rawText, "<[^>]*?>", string.Empty, 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); rawText = Regex.Replace(rawText, "&", "&", RegexOptions.IgnoreCase); newWallData.wdText = rawText; break; case 3: switch (iindex) { case 0: newPostSender.psUserID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: rawText = (string)newJsonTextReader.Value; rawText = Regex.Replace(rawText, "\t", " ", RegexOptions.IgnoreCase); newPostSender.psUserName = rawText; break; case 2: newPostSender.psUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newPostSender.psSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newPostSender.psUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newPostSender.psUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 4: switch (iindex) { case 0: newPostReceiver.prUserID = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 7: switch (iindex) { case 0: newPhotoData.pdPhotoID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newPhotoData.pdPhotoURL130px = (string)newJsonTextReader.Value; break; } break; } } // если до конца массива, то прерываем очередь чтения (списка сообщений) else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } iindex++; } } // если до конца массива, то прерываем очередь чтения (сообщения) 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")) { newErrorResponse = new ErrorResponse(); newJsonTextReader.Read(); int error_code = Convert.ToInt32(newJsonTextReader.Value); switch (error_code) { case -1: //истекшая сессия newErrorResponse.error_code = "1"; break; case -2: //флуд-контроль newErrorResponse.error_code = "2"; break; } return null; } } #endregion return newPhotosCommentsRespounse; } finally { if (logging) { newStream.Position = 0; OnLogResponse(new LogResponseEventArgs("LoadPhotosCommentsData", newStream)); newStream.Flush(); } } } } } catch (ObjectDisposedException ex) { DebugHelper.WriteLogEntry(ex, "LoadPhotosCommentsData ObjectDisposedException"); newErrorResponse = null; return null; } finally { newHttpWebRequest.Abort(); if (newStream != null) newStream.Close(); //if (newHttpWebResponse != null) // newHttpWebResponse.Close(); } }