Пример #1
0
        /// <summary>
        /// Функция добавления комментариев к фотографиям
        /// </summary>
        /// <param name="uid">Идентификатор пользователя</param>
        /// <param name="ts">Текущее состояние photos_comments</param>
        /// <param name="message">Текст сообщения</param>
        /// <param name="parent">{id владльца фотографии}_{id фотографии}</param>
        /// <param name="sid">Идентификатор сессии</param>
        /// <param name="errorResponse"></param>
        /// <returns></returns>
        public HttpWebResponse AddPhotosComments(string uid, string message, string parent, string sid, out ErrorResponse errorResponse)
        {
            //// коррекция parent
            //string[] parentData = parent.Split('_');

            //if (parentData[0].Equals("0"))
            //{
            //    parent = uid + "_" + parentData[1];
            //}

            errorResponse = null;

            var uri = new Uri
                          {
                              Address = SystemConfiguration.ServerConnectionToApiCalls,
                              Method = "/data?act=add_photos_comments&"
                          };

            uri.Parameters.Add("id=" + uid);
            uri.Parameters.Add("message=" + message);
            uri.Parameters.Add("parent=" + parent);
            uri.Parameters.Add("sid=" + sid);

            HttpWebRequest request = HttpUtility.PrepareHttpWebRequest(uri.GetUri());
            //WebResponse response = null;
            try
            {
                using (WebResponse newHttpWebResponse = request.GetResponse())
                {
                    string responseStr = new StreamReader(HttpUtility.PrepareResponseStream(newHttpWebResponse)).ReadToEnd();

                    if (responseStr.IndexOf("\"ok\":0") != -1)
                        errorResponse = new ErrorResponse { error_code = "0" };
                    else if (responseStr.IndexOf("\"ok\":-1") != -1)
                        errorResponse = new ErrorResponse { error_code = "-1" };
                    else if (responseStr.IndexOf("\"ok\":-2") != -1)
                        errorResponse = new ErrorResponse { error_code = "-2" };
                    else if (responseStr.IndexOf("\"ok\":-3") != -1)
                        errorResponse = new ErrorResponse { error_code = "-3" };

                    if (errorResponse != null)
                        return null;
                    return (HttpWebResponse)newHttpWebResponse;
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "AddPhotosComments ObjectDisposedException");
                return null;
            }
            finally
            {
                request.Abort();
                //response.Close();
            }
        }
Пример #2
0
        public static RawEventsGetResponse EventsMFCParse(Stream serverResponse, out ErrorResponse errorResponse)
        {
            RawEventsGetResponse response = new RawEventsGetResponse();

            errorResponse = null;

            serverResponse.Position = 0;

            JsonTextReader jsonTextReader = new JsonTextReader(new StreamReader(serverResponse));

            try
            {
                while (jsonTextReader.Read())
                {
                    // MessagesCount
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "nm"))
                    {
                        jsonTextReader.Read();

                        response.MessagesCount = Convert.ToInt32(jsonTextReader.Value);

                        continue;
                    }

                    // FriendsCount
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "nf"))
                    {
                        jsonTextReader.Read();

                        response.FriendsCount = Convert.ToInt32(jsonTextReader.Value);

                        continue;
                    }

                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader, "ok"))
                    {
                        errorResponse = new ErrorResponse();

                        jsonTextReader.Read();

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

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

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

                        return null;
                    }
                }

                return response;
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #3
0
        public static int SpecialEventsParse(Stream serverResponse, out ErrorResponse errorResponse)
        {
            errorResponse = new ErrorResponse();
            int c = 0;

            serverResponse.Position = 0;
            JsonTextReader jsonTextReader = new JsonTextReader(new StreamReader(serverResponse));
            try
            {
                while (jsonTextReader.Read())
                {
                    // FriendsPhotosCount
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "n"))
                    {
                        jsonTextReader.Read();
                        c = Convert.ToInt32(jsonTextReader.Value);
                        break;
                    }

                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader, "ok"))
                    {
                        jsonTextReader.Read();

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

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

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

                        return -1;
                    }
                }
                return c;
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #4
0
        /// <summary>
        /// Парсинг ответа на запрос отправки сообщения
        /// </summary>
        /// <param name="serverResponse">Поток с ответом сервера</param>
        /// <param name="errorResponse">Объект для хранения кода ошибки</param>
        public static bool SendMessageResponse(Stream serverResponse, out ErrorResponse errorResponse)
        {
            errorResponse = null;

            bool result = false;

            JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(serverResponse));

            try
            {
                while (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:
                                result = true;
                                break;

                            //операция прошла не успешно
                            case 0:
                                result = false;
                                break;

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

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

                            //операция запрещена настройками приватности
                            case -3:
                                errorResponse.error_code = "3";
                                break;
                        }
                    }
                }
            }
            finally
            {
                //
            }

            return result;
        }
Пример #5
0
        public FriendsListResponse LoadFriendsOnlineListData(string uid, string sid, out ErrorResponse newErrorResponse)
        {
            var newFriendsListResponse = new FriendsListResponse();

            newErrorResponse = null;

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

            newUri.Parameters.Add("id=" + uid);
            newUri.Parameters.Add("sid=" + sid);

            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("LoadFriendsOnlineListData requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null));
                    }
                    else
                    {
                        newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
                    }

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

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

                                        //открыли массив 1-ого порядка (профиль друг)
                                        if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                        {
                                            User newUser = new User();
                                            newFriendsListResponse.Users.Add(newUser);

                                            int index = 0;

                                            while (newJsonTextReader.Read()) //открываем очередь чтения профиля друга
                                            {
                                                //читаем содержимое профиля друга
                                                if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String)
                                                {
                                                    switch (index)
                                                    {
                                                        case 0:
                                                            newUser.Uid = newJsonTextReader.Value.ToString();
                                                            break;

                                                        case 1:
                                                            //fullName = newJsonTextReader.Value.ToString().Split(' ');
                                                            //newUser.FirstName = fullName[0];
                                                            //newUser.LastName = fullName[1];

                                                            newUser.FullName = newJsonTextReader.Value.ToString();
                                                            break;

                                                        case 2:
                                                            newUser.Photo100px = (string)newJsonTextReader.Value;
                                                            break;

                                                        case 3:
                                                            newUser.IsOnline = newJsonTextReader.Value.ToString();
                                                            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"))
                                {
                                    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 newFriendsListResponse;
                        }
                        finally
                        {
                            if (logging)
                            {
                                newStream.Position = 0;
                                OnLogResponse(new LogResponseEventArgs("LoadFriendsListData", newStream));
                                newStream.Flush();
                            }
                        }
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadFriendsOnlineListData ObjectDisposedException");
                newErrorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }
Пример #6
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();
            }
        }
Пример #7
0
        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, "&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);

                                                                        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();
            }
        }
Пример #8
0
        /// <summary>
        /// Информация о пользователе
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="sessionKey"></param>
        /// <param name="errorResponse"></param>
        /// <returns></returns>
        public User UserGetInfo(string uid, string sessionKey, out ErrorResponse errorResponse)
        {
            errorResponse = null;
            User userGetInfoResponse = null;

            //Формирование запроса
            var uri = new Uri
                          {
                              Address = SystemConfiguration.ServerConnectionToApiCalls,
                              Method = "/data?act=profile&"
                          };

            uri.Parameters.Add("id=" + uid);
            uri.Parameters.Add("sid=" + sessionKey);

            //HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(newUri.GetUri());

            //WebResponse newHttpWebResponse = newHttpWebRequest.GetResponse();

            //Stream newStream;

            //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("LoadFriendsListData requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null));
            //}
            //else
            //{
            //    newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
            //}

            //newHttpWebRequest.Abort();

            var request = HttpUtility.PrepareHttpWebRequest(uri.GetUri());
            //WebResponse newHttpWebResponse = null;
            Stream newStream = null;
            try
            {
                using (WebResponse newHttpWebResponse = request.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("UserGetInfo requested: Address: {0} Header: {1}", request.Address, request.Headers), null));
                    }
                    else
                    {
                        newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
                    }

                    userGetInfoResponse = ParsingHelper.ProfileJSONParse(newStream, out errorResponse);

                    if (userGetInfoResponse != null)
                    {
                        userGetInfoResponse.Uid = uid;
                    }

                    return userGetInfoResponse;
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "UserGetInfo ObjectDisposedException");

                return null;
            }
            finally
            {
                request.Abort();

                if (newStream != null)
                {
                    newStream.Close();
                }

                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }
Пример #9
0
        /// <summary>
        /// Смена аватара
        /// </summary>
        /// <param name="uid">Идентификатор пользователя</param>
        /// <param name="sid">Идентификатор сессии</param>
        /// <param name="address">Адрес для загрузки аватара</param>
        /// <param name="hash">Хэш для загрузки аватара</param>
        /// <param name="rhash">Обратный хэш для загрузки аватара</param>
        /// <param name="file">Файл с аватаром</param>
        /// <param name="errorResponse">Ошибки</param>
        /// <returns>Удачное или неудачное завершение операции</returns>
        public bool ChangeAvatar(string uid, string sid, string address, string hash, string rhash, byte[] file, out ErrorResponse errorResponse)
        {
            errorResponse = null;

            var uri = new Uri()
            {
                Address = address,
                Method = "/upload.php?act=lprofile"
            };
            try
            {
                HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(uri.GetUri(), "POST");

                string boundary = "----------" + DateTime.Now.Ticks.ToString("x");

                newHttpWebRequest.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);

                string header = string.Format("--{0}", boundary);
                string footer = "\r\n" + header + "--";

                var contents = new StringBuilder();

                contents.Append(header + "\r\n");
                contents.Append("Content-Disposition: form-data; name=\"id\"\r\n\r\n");
                contents.Append(uid + "\r\n");
                contents.Append(header + "\r\n");
                contents.Append("Content-Disposition: form-data; name=\"sid\"\r\n\r\n");
                contents.Append(sid + "\r\n");
                contents.Append(header + "\r\n");
                contents.Append("Content-Disposition: form-data; name=\"back\"\r\n\r\n");
                contents.Append(@"http://durov.ru/" + "\r\n");
                contents.Append(header + "\r\n");
                contents.Append("Content-Disposition: form-data; name=\"hash\"\r\n\r\n");
                contents.Append(hash + "\r\n");
                contents.Append(header + "\r\n");
                contents.Append("Content-Disposition: form-data; name=\"rhash\"\r\n\r\n");
                contents.Append(rhash + "\r\n");
                contents.Append(header + "\r\n");
                contents.Append(string.Format("Content-Disposition: form-data; name=\"photo\"; filename=\"{0}\"\r\n", DateTime.Now.Ticks.ToString("x") + ".jpeg"));
                contents.Append("Content-Type: image/jpeg" + "\r\n");

                byte[] head = Encoding.UTF8.GetBytes(contents + "\r\n");

                using (var Str = new MemoryStream())
                {
                    Str.Write(head, 0, head.Length);

                    var buffer = new byte[2048];

                    using (var img = new MemoryStream(file))
                    {
                        img.Position = 0;

                        for (int i = 0; i < img.Length; )
                        {
                            int k = img.Read(buffer, 0, buffer.Length);

                            if (k > 0)
                            {
                                Str.Write(buffer, 0, k);
                            }

                            i += k;
                        }

                        img.Close();
                    }

                    byte[] newb = Encoding.UTF8.GetBytes(footer);

                    Str.Write(newb, 0, newb.Length);

                    newHttpWebRequest.ContentLength = Str.Length;

                    bool logging = (LogRequestEvent != null);

                    if (logging)
                    {
                        OnLogRequest(new LogRequestEventArgs(String.Format("UploadPhotos requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null));
                    }

                    Str.Position = 0;

                    using (Stream dataStream = newHttpWebRequest.GetRequestStream())
                    {
                        for (int i = 0; i < Str.Length; )
                        {
                            int k = Str.Read(buffer, 0, buffer.Length);

                            if (k > 0)
                            {
                                dataStream.Write(buffer, 0, k);
                            }

                            i += k;
                        }

                        dataStream.Flush();
                        dataStream.Close();
                    }

                    Str.Flush();
                    Str.Close();
                }

                var response = (HttpWebResponse)newHttpWebRequest.GetResponse();

                WebHeaderCollection whc = response.Headers;

                newHttpWebRequest.Abort();

                string str = whc["Location"];

                //Do not use HttpWebRequest twice! It can be reason of strange behavior!
                var newHttpWebRequest2 = HttpUtility.PrepareHttpWebRequest(str);
                newHttpWebRequest2.GetResponse();

                newHttpWebRequest2.Abort();

                return true;
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "ChangeAvatar ObjectDisposedException");
                return false;
            }
        }
Пример #10
0
        /// <summary>
        /// Отправляет сообщение
        /// </summary>
        /// <param name="uid">ID отправителя</param>
        /// <param name="sid">ID сессии</param>
        /// <param name="userid">ID получателя</param>
        /// <param name="messText">Текст сообщения</param>
        /// <returns>Успешность выполнения операции</returns>
        public bool SendMessage(string uid, string sid, int userid, string messText, out ErrorResponse newErrorResponse)
        {
            //newErrorResponse = null;
            // формируем запрос
            Uri newUri = new Uri
            {
                Address = SystemConfiguration.ServerConnectionToApiCalls,
                Method = "/data?act=add_message&"
            };

            newUri.Parameters.Add("id=" + Convert.ToString(userid));
            newUri.Parameters.Add("sid=" + sid);
            newUri.Parameters.Add("message=" + messText);

            HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(newUri.GetUri());
            //WebResponse newHttpWebResponse = null;
            Stream newStream = null;
            bool result = false;
            newErrorResponse = 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("SendMessage requested: Address: {0} Header: {1}", newHttpWebRequest.Address,
                                              newHttpWebRequest.Headers), null));
                    }
                    else
                    {
                        newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
                    }

                    result = ParsingHelper.SendMessageResponse(newStream, out newErrorResponse);

                    if (logging)
                    {
                        newStream.Position = 0;
                        OnLogResponse(new LogResponseEventArgs("SendMessage", newStream));
                        newStream.Flush();
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "SendMessage ObjectDisposedException");
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
            return result;
        }
Пример #11
0
        /// <summary>
        /// Редактирование текущего статуса
        /// </summary>
        /// <param name="uid">Идентификатор пользователя</param>
        /// <param name="sid">Идентификатор сессии</param>
        /// <param name="newStatus">Тест нового статуса</param>
        /// <param name="action">Действие со статусом (ST_REFRESH - обновить, ST_CLEAR - очистить, ST_DELETE - удалить)</param>
        /// <returns>Статус операции (прошла: 1 - успешно, 0 - неуспешно)</returns>
        public bool SetStatus(string uid, string sid, string newStatus, StatusActionType actionType, out ErrorResponse errorResponse)
        {
            errorResponse = null;

            // подготовка строки запроса для редактирования
            Uri uri = new Uri();
            uri.Address = SystemConfiguration.ServerConnectionToApiCalls;

            switch (actionType)
            {
                case StatusActionType.Refresh:
                    uri.Method = "/data?act=set_activity&";
                    uri.Parameters.Add("text=" + newStatus);
                    break;

                case StatusActionType.Clear:
                    uri.Method = "/data?act=clear_activity&";
                    break;

                case StatusActionType.Delete:
                    uri.Method = "/data?act=del_activity&";
                    break;

                default:
                    return false;
            }

            uri.Parameters.Add("id=" + uid);
            uri.Parameters.Add("sid=" + sid);

            var request = HttpUtility.PrepareHttpWebRequest(uri.GetUri());
            Stream webResponseStream = null;

            try
            {
                bool logging = (LogRequestEvent != null);

                if (logging)
                {
                    OnLogRequest(new LogRequestEventArgs(String.Format("SetStatus requested: Address: {0} Header: {1}", request.Address, request.Headers), null));
                }

                // получение и разбор ответа
                using (WebResponse webResponse = request.GetResponse())
                {
                    webResponseStream = HttpUtility.PrepareResponseStream(webResponse);

                    var response = new StreamReader(webResponseStream).ReadToEnd();

                    if (response.IndexOf("\"ok\":0") != -1)
                    {
                        errorResponse = new ErrorResponse();

                        errorResponse.error_code = "3";

                        return false;
                    }
                    if (response.IndexOf("\"ok\":-1") != -1)
                    {
                        errorResponse = new ErrorResponse();

                        errorResponse.error_code = "1";

                        return false;
                    }
                    if (response.IndexOf("\"ok\":-2") != -1)
                    {
                        errorResponse = new ErrorResponse();

                        errorResponse.error_code = "2";

                        return false;
                    }

                    if (logging)
                    {
                        OnLogResponse(new LogResponseEventArgs(String.Format("SetStatus responsed: {0}", response), null));
                    }

                    return true;
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "SetStatus ObjectDisposedException");

                return false;
            }
            finally
            {
                request.Abort();

                if (webResponseStream != null)
                {
                    webResponseStream.Close();
                }
            }
        }
Пример #12
0
        // список фотографий пользователя
        public UpdatesPhotosResponse LoadUserPhotosData(string uid, string sid, string from, string to, out ErrorResponse newErrorResponse)
        {
            UpdatesPhotosResponse newUpdatesPhotosResponse = new UpdatesPhotosResponse();

            newErrorResponse = null;

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

            newUri.Parameters.Add("id=" + uid);
            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("LoadUserPhotosData 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())
                            {
                                // открыли массив 1-ого порядка (список)
                                if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                {
                                    while (newJsonTextReader.Read()) // открываем очередь чтения списка
                                    {
                                        // читаем содержимое списка

                                        // открыли массив 2-ого порядка
                                        if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                        {
                                            PhotoData newPhotoData = new PhotoData();
                                            newUpdatesPhotosResponse.uprPhotoDatas.Add(newPhotoData);

                                            int index = 0;

                                            while (newJsonTextReader.Read()) //открываем очередь чтения
                                            {
                                                //читаем содержимое
                                                if (newJsonTextReader.TokenType == JsonToken.String)
                                                {
                                                    switch (index)
                                                    {
                                                        case 0:
                                                            string[] value = ((string)newJsonTextReader.Value).Split('_');

                                                            newPhotoData.pdUserID = Convert.ToInt32(value[0]);
                                                            newPhotoData.pdPhotoID = Convert.ToInt32(value[1]);
                                                            break;

                                                        case 1:
                                                            newPhotoData.pdPhotoURL130px = (string)newJsonTextReader.Value;
                                                            break;

                                                        case 2:
                                                            newPhotoData.pdPhotoURL604px = (string)newJsonTextReader.Value;
                                                            break;
                                                    }
                                                }
                                                //если до конца массива, то прерываем очередь чтения
                                                else if (newJsonTextReader.TokenType == JsonToken.EndArray)
                                                {
                                                    break;
                                                }

                                                index++;
                                            }
                                        }
                                    }
                                }

                                // ошибки
                                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;
                                }
                            }

                            return newUpdatesPhotosResponse;

                            #endregion
                        }
                        finally
                        {
                            if (logging)
                            {
                                newStream.Position = 0;
                                OnLogResponse(new LogResponseEventArgs("LoadUserPhotosData", newStream));
                                newStream.Flush();
                            }

                        }
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadUserPhotosData ObjectDisposedException");
                newErrorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }
Пример #13
0
        public ShortWallResponse LoadShortWallResponseData(string uid, string sid, string from, string to, out ErrorResponse newErrorResponse)
        {
            ShortWallResponse newShortWallResponse = new ShortWallResponse();

            newErrorResponse = null;

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

            newUri.Parameters.Add("id=" + uid);
            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
            {
                newHttpWebRequest.AllowAutoRedirect = false;
                newHttpWebRequest.Timeout = SystemConfiguration.ServerConnectionTimeOutShort;

                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("LoadShortWallResponseData 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))
                                            {
                                                int depth = 0; //это чтобы корректно выходить из циклов
                                                bool valueIsRead = false; //это чтобы не читать 2 раза

                                                while (newJsonTextReader.Read()) //открываем очередь чтения сообщения
                                                {
                                                    //читаем содержимое сообщения
                                                    if (newJsonTextReader.TokenType == JsonToken.Integer)
                                                    {
                                                        if (!valueIsRead)
                                                        {
                                                            newShortWallResponse.swrMessageID.Add(Convert.ToInt32(newJsonTextReader.Value));

                                                            valueIsRead = true;
                                                        }
                                                    }
                                                    else if (newJsonTextReader.TokenType == JsonToken.StartArray)
                                                    {
                                                        depth++;
                                                    }
                                                    else if (newJsonTextReader.TokenType == JsonToken.EndArray)
                                                    {
                                                        if (depth > 0)
                                                        {
                                                            depth--;
                                                        }
                                                        else
                                                        {
                                                            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 newShortWallResponse;
                        }
                        finally
                        {
                            if (logging)
                            {
                                newStream.Position = 0;
                                OnLogResponse(new LogResponseEventArgs("LoadShortWallResponseData", newStream));
                                newStream.Flush();
                            }
                        }
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadShortWallResponseData ObjectDisposedException");
                newErrorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }
Пример #14
0
        public ShortUpdatesPhotosResponse LoadShortUpdatesPhotosResponse(string sid, string from, string to, out ErrorResponse newErrorResponse)
        {
            ShortUpdatesPhotosResponse newShortUpdatesPhotosResponse = new ShortUpdatesPhotosResponse();

            newErrorResponse = null;

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

            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
            {
                newHttpWebRequest.AllowAutoRedirect = false;
                newHttpWebRequest.Timeout = SystemConfiguration.ServerConnectionTimeOutShort;

                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("LoadShortUpdatesPhotosResponse 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)
                                            {
                                                while (newJsonTextReader.Read()) //открываем очередь чтения обновления
                                                {
                                                    //читаем содержимое обновления
                                                    if (newJsonTextReader.TokenType == JsonToken.String)
                                                    {
                                                        string value = (string)newJsonTextReader.Value;

                                                        int position = value.IndexOf('_');

                                                        string strID = value.Remove(0, position + 1);

                                                        newShortUpdatesPhotosResponse.suprPhotoID.Add(Convert.ToInt32(strID));

                                                        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;
                                }
                            }

                            return newShortUpdatesPhotosResponse;

                            #endregion
                        }
                        finally
                        {
                            if (logging)
                            {
                                newStream.Position = 0;
                                OnLogResponse(new LogResponseEventArgs("LoadShortUpdatesPhotosResponse", newStream));
                                newStream.Flush();
                            }

                        }
                    }
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadShortUpdatesPhotosResponse ObjectDisposedException");
                newErrorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }
Пример #15
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;

            }
        }
Пример #16
0
        /// <summary>
        /// Уничтожение текущей сессии
        /// </summary>
        /// <param name="sid">Идентификатор сессии</param>
        /// <param name="errorResponse">Ошибки</param>
        /// <returns>удачное или неудачное завершение операции</returns>
        public bool ExpireSession(string sid, out ErrorResponse errorResponse)
        {
            errorResponse = new ErrorResponse();

            var uri = new Uri();
            uri.Address = SystemConfiguration.ServerConnectionToLogin;
            uri.Method = "/auth?login=logout&site=2";
            uri.Parameters.Add("sid=" + sid);

            try
            {
                HttpWebRequest request = HttpUtility.PrepareHttpWebRequest(uri.GetUri());
                request.AllowAutoRedirect = false;
                request.Timeout = SystemConfiguration.ServerConnectionTimeOutShort;

                WebHeaderCollection whc = request.GetResponse().Headers;
                request.Abort();

                string response = whc["Set-Cookie"];

                if (response.IndexOf("remixpassword=deleted") == -1)
                {
                    errorResponse.error_code = "2";
                    return false;
                }
                return true;
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "ExpireSession ObjectDisposedException");
                return false;
            }
        }
Пример #17
0
        public static User ProfileJSONParse(Stream serverResponse, out ErrorResponse errorResponse)
        {
            errorResponse = null;

            User usr = new User();
            string day, month, year;
            day = month = year = string.Empty;

            JsonTextReader jsonTextReader = new JsonTextReader(new StreamReader(serverResponse));

            try
            {
                while (jsonTextReader.Read())
                {
                    // FirstName
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "fn"))
                    {
                        jsonTextReader.Read();
                        usr.FirstName = jsonTextReader.Value.ToString();
                        continue;
                    }

                    // LastName
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "ln"))
                    {
                        jsonTextReader.Read();
                        usr.LastName = jsonTextReader.Value.ToString();
                        continue;
                    }

                    // BirthDate
                    if ((jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "bd")) ||
                        (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "bm")) ||
                        (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "by")))
                    {
                        switch (jsonTextReader.Value.ToString())
                        {
                            case "bd":
                                jsonTextReader.Read();
                                day = jsonTextReader.Value.ToString();
                                break;
                            case "bm":
                                jsonTextReader.Read();
                                month = jsonTextReader.Value.ToString();
                                break;
                            case "by":
                                jsonTextReader.Read();
                                year = jsonTextReader.Value.ToString();
                                break;
                        }

                        if (day != "0" && day != string.Empty && month != "0" && month != string.Empty && year != "0" && year != string.Empty)
                        {
                            try
                            {
                                usr.Birthday = new DateTime(Convert.ToInt32(year), Convert.ToInt32(month), Convert.ToInt32(day));
                            }
                            catch
                            {
                                usr.Birthday = new DateTime(0);
                            }

                            //usr.Birthday = (Convert.ToDateTime(month + "/" + day + "/" + year)).ToString("D",new CultureInfo("ru-RU"));
                        }

                        continue;
                    }

                    // Photo
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "bp"))
                    {
                        jsonTextReader.Read();

                        if (jsonTextReader.Value.ToString() != "0")
                            usr.Photo200px = jsonTextReader.Value.ToString();

                        continue;
                    }

                    // Status
                    if (jsonTextReader.TokenType == JsonToken.PropertyName &&
                        string.Equals(jsonTextReader.Value, "actv"))
                    {
                        while (jsonTextReader.Read())
                        {
                            if (jsonTextReader.TokenType == JsonToken.PropertyName &&
                                string.Equals(jsonTextReader.Value, "5"))
                            {
                                jsonTextReader.Read();
                                if (jsonTextReader.Value.ToString() != "")
                                    usr.Status = jsonTextReader.Value.ToString();
                                break;
                            }
                        }
                        continue;
                    }

                    // Sex
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "sx"))
                    {
                        jsonTextReader.Read();
                        switch (jsonTextReader.Value.ToString())
                        {
                            case "1":
                                usr.Sex = "женский";
                                break;
                            case "2":
                                usr.Sex = "мужской";
                                break;
                            default:
                                usr.Sex = "";
                                break;
                        }
                        continue;
                    }

                    // Town
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "cin"))
                    {
                        jsonTextReader.Read();
                        if (jsonTextReader.Value != null)
                            usr.Town = jsonTextReader.Value.ToString();
                        continue;
                    }

                    //if (string.Equals(jsonTextReader.Value, "fr") || string.Equals(jsonTextReader.Value, "fro") || string.Equals(jsonTextReader.Value, "frm") || string.Equals(jsonTextReader.Value, "ph") || string.Equals(jsonTextReader.Value, "phw") || string.Equals(jsonTextReader.Value, "pr") || string.Equals(jsonTextReader.Value, "wa"))
                    //{
                    //    int i = 5;

                    //    if (i < 10)
                    //    {
                    //        i++;
                    //    }
                    //}

                    // MobilePhone
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "mo"))
                    {
                        jsonTextReader.Read();
                        usr.MobilePhone = jsonTextReader.Value.ToString();
                        continue;
                    }

                    // Upload Info For Album
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "ph"))
                    {
                        int depth = 0;

                        while (jsonTextReader.Read())
                        {
                            if (Configuration.SystemConfiguration.Aid == null   || Configuration.SystemConfiguration.photoHash == null  || Configuration.SystemConfiguration.photoRHash == null || Configuration.SystemConfiguration.photoUploadAddress == null)
                            {
                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "url"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.photoUploadAddress = jsonTextReader.Value.ToString();
                                    continue;
                                }

                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "hash"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.photoHash = jsonTextReader.Value.ToString();
                                    continue;
                                }

                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "rhash"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.photoRHash = jsonTextReader.Value.ToString();
                                    continue;
                                }

                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "aid"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.Aid = jsonTextReader.Value.ToString();
                                    continue;
                                }

                                //if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "n"))
                                //{
                                //    break; // если это не наш профиль, то структура массива несколько другая и приводит к зависаниям
                                //}

                                if (jsonTextReader.TokenType == JsonToken.StartArray || jsonTextReader.TokenType == JsonToken.StartObject)
                                {
                                    depth++;
                                }
                                if (jsonTextReader.TokenType == JsonToken.EndArray || jsonTextReader.TokenType == JsonToken.EndObject)
                                {
                                    depth--;

                                    if (depth == 0)
                                    {
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        continue;
                    }

                    // Upload Info For Avatar
                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "pr"))
                    {
                        int depth = 0;

                        while(jsonTextReader.Read())
                        {
                            if (Configuration.SystemConfiguration.avatarUploadAddress == null || Configuration.SystemConfiguration.avatarHash == null || Configuration.SystemConfiguration.avatarRHash == null)
                            {
                                //if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "pa"))
                                //{
                                //    break; // если это не наш профиль, то структура массива несколько другая и приводит к зависаниям
                                //}

                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "url"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.avatarUploadAddress = jsonTextReader.Value.ToString();
                                    continue;
                                }
                                if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "hash"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.avatarHash = jsonTextReader.Value.ToString();
                                    continue;
                                }
                                if (jsonTextReader.TokenType == JsonToken.PropertyName &&
                                    string.Equals(jsonTextReader.Value, "rhash"))
                                {
                                    jsonTextReader.Read();
                                    Configuration.SystemConfiguration.avatarRHash = jsonTextReader.Value.ToString();
                                    continue;
                                }

                                if (jsonTextReader.TokenType == JsonToken.StartArray || jsonTextReader.TokenType == JsonToken.StartObject)
                                {
                                    depth++;
                                }
                                if (jsonTextReader.TokenType == JsonToken.EndArray || jsonTextReader.TokenType == JsonToken.EndObject)
                                {
                                    depth--;

                                    if (depth == 0)
                                    {
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        continue;
                    }

                    if (jsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(jsonTextReader.Value, "ok"))
                    {
                        errorResponse = new ErrorResponse();

                        jsonTextReader.Read();

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

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

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

                        return null;
                    }
                }
                return usr;
            }
            catch (Exception)
            {
                return null;
                //throw;
            }
        }
Пример #18
0
        /// <summary>
        /// Загружает изменения в личных сообщениях 
        /// </summary>
        /// <param name="mtype">Тип запроса: inbox (все входящие), oubox (все исходящие), message (переписка с пользователем)</param>
        /// <param name="uid">ID пользователя</param>
        /// <param name="sid">ID сессии</param>
        /// <param name="ts">Номер версии</param>
        /// <param name="userid">ID пользователя, переписка с которым запрашивается</param>
        /// <returns>Изменения в сообщениях в классе MessChangesResponse</returns>
        public MessChangesResponse LoadMessChanges(string mtype, string uid, string sid, int userid, int ts, out ErrorResponse newErrorResponse)
        {
            //формируем запрос
            Uri newUri = new Uri
            {
                Address = SystemConfiguration.ServerConnectionToApiCalls,
                Method = "/data?act=" + mtype + "&"
            };

            newUri.Parameters.Add("sid=" + sid);
            newUri.Parameters.Add("ts=" + Convert.ToString(ts));

            if (mtype == "message")
            {
                newUri.Parameters.Add("id=" + Convert.ToString(userid));
            }

            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("LoadMessChanges requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null));
                    }
                    else
                    {
                        newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse);
                    }

                    MessChangesResponse MessChanges = ParsingHelper.ParseMessageChanges(newStream, Convert.ToInt32(uid), out newErrorResponse);

                    if (logging)
                    {
                        newStream.Position = 0;
                        OnLogResponse(new LogResponseEventArgs("LoadMessChanges", newStream));
                        newStream.Flush();
                    }

                    return MessChanges;
                }
            }
            catch (ObjectDisposedException ex)
            {
                DebugHelper.WriteLogEntry(ex, "LoadMessChanges ObjectDisposedException");
                newErrorResponse = null;
                return null;
            }
            finally
            {
                newHttpWebRequest.Abort();
                if (newStream != null)
                    newStream.Close();
                //if (newHttpWebResponse != null)
                //    newHttpWebResponse.Close();
            }
        }