Пример #1
0
        /// <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));
        }
Пример #2
0
 /// <summary>
 /// Инициализация без параметров
 /// </summary>
 public MessChange()
 {
     Message = new MessageCover();
 }
Пример #3
0
 /// <summary>
 /// Инициализация с конвертом сообщения
 /// </summary>
 public MessChange(MessageCover InMessage)
 {
     Message = InMessage;
 }
Пример #4
0
        /// <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, "&quot;", @"""", RegexOptions.IgnoreCase);
                                                        newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&#39;", "'", RegexOptions.IgnoreCase);
                                                        newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&lt;", "<", RegexOptions.IgnoreCase);
                                                        newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&gt;", ">", RegexOptions.IgnoreCase);
                                                        newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&amp;", "&", 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;

            }
        }
Пример #5
0
        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();
            //        }
        }
Пример #6
0
 /// <summary>
 /// Инициализация без параметров
 /// </summary>
 public MessChange()
 {
     Message = new MessageCover();
 }
Пример #7
0
 /// <summary>
 /// Инициализация с конвертом сообщения
 /// </summary>
 public MessChange(MessageCover InMessage)
 {
     Message = InMessage;
 }