/// <summary> /// Удаление сообщения из переписки /// </summary> /// <param name="MessID">ID сообщения</param> /// <returns>Успешность удаления</returns> public bool Delete(int MessID) { MessageCover m = null; foreach (MessageCover iter in mMessages) { if (iter.mID == MessID) { m = iter; } } return(mMessages.Remove(m)); }
/// <summary> /// Инициализация без параметров /// </summary> public MessChange() { Message = new MessageCover(); }
/// <summary> /// Инициализация с конвертом сообщения /// </summary> public MessChange(MessageCover InMessage) { Message = InMessage; }
/// <summary> /// Парсинг ответа на запрос загрузки сообщений /// </summary> /// <param name="serverResponse">Поток с ответом сервера</param> /// <param name="UserID">ID пользователя</param> /// <param name="errorResponse">Объект для хранения кода ошибки</param> public static MessResponse ParseMessages(Stream serverResponse, int UserID, out ErrorResponse errorResponse) { MessResponse newMessResponse = new MessResponse(); errorResponse = null; JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(serverResponse)); try { while (newJsonTextReader.Read()) { //<...> сообщения if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "n")) { newJsonTextReader.Read(); newMessResponse.mCount = Convert.ToInt32(newJsonTextReader.Value); } if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "h")) { newJsonTextReader.Read(); newMessResponse.VersionNum = Convert.ToInt32(newJsonTextReader.Value); } if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "d")) { newJsonTextReader.Read(); //открыли массив 1-ого порядка (список сообщений) if (newJsonTextReader.TokenType == JsonToken.StartArray) { newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) //открываем очередь чтения списка сообщений { //читаем содержимое списка сообщений //открыли массив 2-ого порядка (отдельное сообщение) if (newJsonTextReader.TokenType == JsonToken.StartArray) { MessageCover newMessageCover = new MessageCover(); newMessResponse.mMessages.Add(newMessageCover); int index = 0; //номер элемента в массиве конкретного сообщения newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) //открываем очередь чтения сообщения { switch (index) { case 0: newMessageCover.mID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newMessageCover.mTime = newMessageCover.mTime.AddSeconds(Convert.ToInt32(newJsonTextReader.Value)); newMessageCover.mTime = newMessageCover.mTime.ToLocalTime(); break; case 5: if (newMessageCover.mIOType == MessageIOType.Inbox) newMessageCover.mMesIsRead = Convert.ToBoolean(newJsonTextReader.Value); break; } //Чтение текста сообщения if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 2)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mData.mText = (string)newJsonTextReader.Value; newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "<br>", "\n", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, """, @"""", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "'", "'", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "<", "<", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, ">", ">", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&", "&", RegexOptions.IgnoreCase); break; case 1: newMessageCover.mData.mDataType = (MessageDataType)Convert.ToInt32(newJsonTextReader.Value); break; case 2: newMessageCover.mData.mElementName = (string)newJsonTextReader.Value; break; case 3: //т.к. последовательность полей зависти от типов данных, //для явно определяемых типов: граффити, видеозапись, аудиозапись //выбираем необходимые поля вручную switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementURL = (string)newJsonTextReader.Value; break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementThumbImageURL = (string)newJsonTextReader.Value; break; } break; case 4: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementOwnerID = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementURL = (string)newJsonTextReader.Value; break; } break; case 5: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementID = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementOwnerID = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 6: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementSize = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementID = Convert.ToInt32(newJsonTextReader.Value); break; } break; } iindex++; newJsonTextReader.Read(); } } //Чтение информации об отправителе if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 3)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mMesSender.mUserID = Convert.ToInt32(newJsonTextReader.Value); //если отправитель сообщения - это я, то сообщение исходящее if (newMessageCover.mMesSender.mUserID == UserID) { newMessageCover.mIOType = MessageIOType.Outbox; } else { newMessageCover.mIOType = MessageIOType.Inbox; } break; case 1: newMessageCover.mMesSender.mUserName = (string)newJsonTextReader.Value; newMessageCover.mMesSender.mUserName = Regex.Replace(newMessageCover.mMesSender.mUserName, "\t", " ", RegexOptions.IgnoreCase); break; case 2: newMessageCover.mMesSender.mUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newMessageCover.mMesSender.mSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newMessageCover.mMesSender.mUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newMessageCover.mMesSender.mUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } newJsonTextReader.Read(); iindex++; } } //Чтение информации о получателе if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 4)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mMesReceiver.mUserID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newMessageCover.mMesReceiver.mUserName = (string)newJsonTextReader.Value; newMessageCover.mMesReceiver.mUserName = Regex.Replace(newMessageCover.mMesReceiver.mUserName, "\t", " ", RegexOptions.IgnoreCase); break; case 2: newMessageCover.mMesReceiver.mUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newMessageCover.mMesReceiver.mSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newMessageCover.mMesReceiver.mUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newMessageCover.mMesReceiver.mUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } iindex++; newJsonTextReader.Read(); } } newJsonTextReader.Read(); index++; } } newJsonTextReader.Read(); } } } //ошибки 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; } } return newMessResponse; } catch (Exception) { throw; } }
public void SaveSendMessageToCache(int uid, string text) { try { MessUserCorrespondence newUserCorrespondence = null; //MessCorrespondence newMessCorrespondence = Cache.Cache.LoadFromCache<MessCorrespondence>(string.Empty, "MessageCorrespondence"); MessCorrespondence newMessCorrespondence = DataModel.Data.MessageCorrespondence; if (newMessCorrespondence == null) { newMessCorrespondence = new MessCorrespondence(); // заводим пользователя newUserCorrespondence = new MessUserCorrespondence(); newMessCorrespondence.mUserCorrespondences.Add(newUserCorrespondence); } else { newMessCorrespondence.SeekCorrespondence(uid, out newUserCorrespondence); if (newUserCorrespondence == null) { // заводим пользователя newUserCorrespondence = new MessUserCorrespondence(); newMessCorrespondence.mUserCorrespondences.Add(newUserCorrespondence); } } newUserCorrespondence.mMesUser.mUserID = uid; MessageCover newMessageCover = new MessageCover(); newUserCorrespondence.mMessages.Add(newMessageCover); newMessageCover.mID = 0; newMessageCover.mTime = DateTime.Now.ToLocalTime(); newMessageCover.mIOType = MessageIOType.Outbox; newMessageCover.mData = new MessageData(); newMessageCover.mData.mText = text; // Обновляем в MessageShortCorrespondence MessShortCorrespondence shortCorr = DataModel.Data.MessageShortCorrespondence; MessShort mess = shortCorr.UserIsInList(new MessageUser {mUserID = uid}) ?? new MessShort(); mess.mID = 0; mess.mIsRead = true; mess.mLastMessageText = text; mess.mTime = newMessageCover.mTime; mess.mType = MessageIOType.Outbox; mess.mUserID = uid; if (shortCorr.UserIsInList(new MessageUser { mUserID = uid }) == null) { User u = DataModel.Data.FriendsListResponseData.GetUserByID(uid.ToString()); mess.mUserName = u.FullName; mess.mUserPhotoURL = u.Photo100px; } // сохранить все в кэш try { bool result; DataModel.Data.MessageCorrespondence = newMessCorrespondence; DataModel.Data.MessageShortCorrespondence = shortCorr; /* result = Cache.Cache.SaveToCache(newMessCorrespondence, string.Empty, "MessageCorrespondence"); if (result) { DebugHelper.WriteLogEntry("MessageCorrespondence сохранены в кэш."); } else { DebugHelper.WriteLogEntry("MessageCorrespondence не сохранены в кэш."); } */ } catch (IOException newException) { DebugHelper.WriteLogEntry("Ошибка сохранения данных MessageCorrespondence в кэш: " + newException.Message); } } catch (Exception) { // } //try // { // newMessCorrespondence = Cache.Cache.LoadFromCache<MessCorrespondence>(string.Empty, "MessageCorrespondence"); // // если в кэше нет нужных данных, переходим к загрузке с сервера // if (newMessCorrespondence == null) // { // throw new CorrException(); // } // } // catch (IOException ex) // { // DebugHelper.WriteLogEntry("BaseLogic.RefreshUserCorrespondence IO Exception message: " + ex.Message); // DebugHelper.WriteLogEntry("BaseLogic.RefreshUserCorrespondence IO Exception stack trace: " + ex.StackTrace); // // если ошибка кэша, переходим к загрузке с сервера // throw new CorrException(); // } // MessageUser mU = new MessageUser(); // mU.mUserID = toUserId; // // есть ли среди данных переписка с пользователем? // if (newMessCorrespondence.UserIsInList(toUserId)) // { // // вытаскиваем из всех цепочек одну // newMessCorrespondence.SeekCorrespondence(toUserId, out newUserCorrespondence); // if (newUserCorrespondence == null) // { // throw new CorrException(); // } }
/// <summary> /// Инициализация без параметров /// </summary> public MessChange() { Message = new MessageCover(); }
/// <summary> /// Инициализация с конвертом сообщения /// </summary> public MessChange(MessageCover InMessage) { Message = InMessage; }