/// <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(); } }
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; } }
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; } }
/// <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; }
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(); } }
public ActivityResponse LoadActivityDataListData(string uid, string sid, string from, string to, out ErrorResponse errorResponse) { ActivityResponse activityResponse = new ActivityResponse(); errorResponse = null; //формируем запрос Uri newUri = new Uri { Address = SystemConfiguration.ServerConnectionToApiCalls, Method = "/data?act=updates_activity&" }; newUri.Parameters.Add("sid=" + sid); newUri.Parameters.Add("from=" + from); newUri.Parameters.Add("to=" + to); HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(newUri.GetUri()); //WebResponse newHttpWebResponse = null; Stream newStream = null; try { using (WebResponse newHttpWebResponse = newHttpWebRequest.GetResponse()) { bool logging = (LogRequestEvent != null); if (logging) { newStream = new MemoryStream(2048); HttpUtility.CopyStream(HttpUtility.PrepareResponseStream(newHttpWebResponse), newStream); newStream.Flush(); newStream.Position = 0; OnLogRequest(new LogRequestEventArgs(string.Format("LoadActivityDataListData requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null)); } else { newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse); } using (JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(newStream))) { try { #region парсинг while (newJsonTextReader.Read()) { //<...> обновления if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "d")) { newJsonTextReader.Read(); //открыли массив 1-ого порядка (список обновлений) if (newJsonTextReader.TokenType == JsonToken.StartArray) { while (newJsonTextReader.Read()) //открываем очередь чтения списка обновлений { //читаем содержимое списка обновлений //открыли массив 2-ого порядка (отдельное обновление) if (newJsonTextReader.TokenType == JsonToken.StartArray) { ActivityData activityData = new ActivityData(); activityResponse.arActivityDatas.Add(activityData); PostSender activityDataSender = new PostSender(); activityData.adDataSender = activityDataSender; int index = 0; while (newJsonTextReader.Read()) //открываем очередь чтения обновления { //читаем содержимое обновления if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String) { switch (index) { case 0: string fullID = (string)newJsonTextReader.Value; int iindex = fullID.IndexOf("_"); fullID = fullID.Substring(iindex + 1, fullID.Length - iindex - 1); try { activityData.adStatusID = Convert.ToInt32(fullID); } catch { activityData.adStatusID = 0; } break; case 1: activityData.adDataSender.psUserID = Convert.ToInt32(newJsonTextReader.Value); break; case 2: break; case 3: activityData.adDataSender.psUserName = (string)newJsonTextReader.Value; break; case 4: int timestamp = Convert.ToInt32(newJsonTextReader.Value); activityData.adTime = activityData.adTime.AddSeconds(timestamp); activityData.adTime = activityData.adTime.ToLocalTime(); break; case 5: string rawText = (string)newJsonTextReader.Value; rawText = Regex.Replace(rawText, """, @"""", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "'", "'", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "<", "<", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, ">", ">", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "&", "&", RegexOptions.IgnoreCase); activityData.adText = rawText; break; } } //если до конца массива, то прерываем очередь чтения обновления else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } index++; } } //если до конца массива, то прерываем очередь чтения (список обновлений) else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } } } } //ошибки if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "ok")) { errorResponse = new ErrorResponse(); newJsonTextReader.Read(); int error_code = Convert.ToInt32(newJsonTextReader.Value); switch (error_code) { case -1: //истекшая сессия errorResponse.error_code = "1"; break; case -2: //флуд-контроль errorResponse.error_code = "2"; break; } return null; } } #endregion return activityResponse; } finally { if (logging) { newStream.Position = 0; OnLogResponse(new LogResponseEventArgs("LoadActivityDataListData", newStream)); newStream.Flush(); } } } } } catch (ObjectDisposedException ex) { DebugHelper.WriteLogEntry(ex, "LoadActivityDataListData ObjectDisposedException"); errorResponse = null; return null; } finally { newHttpWebRequest.Abort(); if (newStream != null) newStream.Close(); //if (newHttpWebResponse != null) // newHttpWebResponse.Close(); } }
public PhotosCommentsResponse LoadPhotosCommentsData(string uid, string sid, string from, string to, string parent, out ErrorResponse newErrorResponse) { PhotosCommentsResponse newPhotosCommentsRespounse = new PhotosCommentsResponse(); newErrorResponse = null; // формируем запрос Uri newUri = new Uri { Address = SystemConfiguration.ServerConnectionToApiCalls, Method = "/data?act=photos_comments&" }; newUri.Parameters.Add("id=" + uid); newUri.Parameters.Add("sid=" + sid); newUri.Parameters.Add("from=" + from); newUri.Parameters.Add("to=" + to); newUri.Parameters.Add("parent=" + parent); HttpWebRequest newHttpWebRequest = HttpUtility.PrepareHttpWebRequest(newUri.GetUri()); //WebResponse newHttpWebResponse = null; Stream newStream = null; try { using (WebResponse newHttpWebResponse = newHttpWebRequest.GetResponse()) { bool logging = (LogRequestEvent != null); if (logging) { newStream = new MemoryStream(2048); HttpUtility.CopyStream(HttpUtility.PrepareResponseStream(newHttpWebResponse), newStream); newStream.Flush(); newStream.Position = 0; OnLogRequest(new LogRequestEventArgs(string.Format("LoadPhotosCommentsData requested: Address: {0} Header: {1}", newHttpWebRequest.Address, newHttpWebRequest.Headers), null)); } else { newStream = HttpUtility.PrepareResponseStream(newHttpWebResponse); } using (JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(newStream))) { try { #region парсинг while (newJsonTextReader.Read()) { // кол-во комментариев if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "n")) { newJsonTextReader.Read(); newPhotosCommentsRespounse.pcrCount = Convert.ToInt32(newJsonTextReader.Value); } // timestamp if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "h")) { newJsonTextReader.Read(); newPhotosCommentsRespounse.pcrTimeStamp = Convert.ToInt32(newJsonTextReader.Value); } // автор if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "author")) { newJsonTextReader.Read(); if (newJsonTextReader.TokenType == JsonToken.StartArray) { User newUser = new User(); newPhotosCommentsRespounse.pcrAuthor = newUser; int index = 0; while (newJsonTextReader.Read()) { if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String) { switch (index) { case 0: newUser.Uid = Convert.ToString(newJsonTextReader.Value); break; case 1: newUser.FullName = Convert.ToString(newJsonTextReader.Value); break; } index++; } } } } // <...> комментарии if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "d")) { newJsonTextReader.Read(); // открыли массив 1-ого порядка (список комментариев) if (newJsonTextReader.TokenType == JsonToken.StartArray) { while (newJsonTextReader.Read()) // открываем очередь чтения списка комментариев { // читаем содержимое списка комментариев // открыли массив 2-ого порядка (отдельный комментарий) if (newJsonTextReader.TokenType == JsonToken.StartArray) { CommentPost newCommentPost = new CommentPost(); newPhotosCommentsRespounse.pcrComments.Add(newCommentPost); WallData newWallData = new WallData(); newCommentPost.cpWallData = newWallData; PostSender newPostSender = new PostSender(); newCommentPost.cpPostSender = newPostSender; PostReceiver newPostReceiver = new PostReceiver(); newCommentPost.cpPostReceiver = newPostReceiver; PhotoData newPhotoData = new PhotoData(); newCommentPost.cpPhotoData = newPhotoData; int index = 0; while (newJsonTextReader.Read()) // открываем очередь чтения сообщения { // читаем содержимое сообщения if (newJsonTextReader.TokenType == JsonToken.Integer) { switch (index) { case 0: newCommentPost.cpID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newCommentPost.cpTime = newCommentPost.cpTime.AddSeconds(Convert.ToInt32(newJsonTextReader.Value)); newCommentPost.cpTime = newCommentPost.cpTime.ToLocalTime(); break; } } // открыли массив 3-его порядка (содержание комментария, отправитель, получатель) else if (newJsonTextReader.TokenType == JsonToken.StartArray) { int iindex = 0; while (newJsonTextReader.Read()) // открываем очередь чтения содержания сообщения { // чтение содержания сообщения if (newJsonTextReader.TokenType == JsonToken.Integer || newJsonTextReader.TokenType == JsonToken.String) { switch (index) { case 2: string rawText = (string)newJsonTextReader.Value; if (parent.Equals("-1")) { rawText = Regex.Replace(rawText, "<br>", " ", RegexOptions.IgnoreCase); } else { rawText = Regex.Replace(rawText, "<br>", "\n", RegexOptions.IgnoreCase); } //rawText = Regex.Replace(rawText, "<[^>]*?>", string.Empty, RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, """, @"""", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "'", "'", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "<", "<", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, ">", ">", RegexOptions.IgnoreCase); rawText = Regex.Replace(rawText, "&", "&", RegexOptions.IgnoreCase); newWallData.wdText = rawText; break; case 3: switch (iindex) { case 0: newPostSender.psUserID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: rawText = (string)newJsonTextReader.Value; rawText = Regex.Replace(rawText, "\t", " ", RegexOptions.IgnoreCase); newPostSender.psUserName = rawText; break; case 2: newPostSender.psUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newPostSender.psSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newPostSender.psUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newPostSender.psUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 4: switch (iindex) { case 0: newPostReceiver.prUserID = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 7: switch (iindex) { case 0: newPhotoData.pdPhotoID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newPhotoData.pdPhotoURL130px = (string)newJsonTextReader.Value; break; } break; } } // если до конца массива, то прерываем очередь чтения (списка сообщений) else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } iindex++; } } // если до конца массива, то прерываем очередь чтения (сообщения) else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } index++; } } // если до конца массива, то прерываем очередь чтения (списка сообщений) else if (newJsonTextReader.TokenType == JsonToken.EndArray) { break; } } } } //ошибки if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "ok")) { newErrorResponse = new ErrorResponse(); newJsonTextReader.Read(); int error_code = Convert.ToInt32(newJsonTextReader.Value); switch (error_code) { case -1: //истекшая сессия newErrorResponse.error_code = "1"; break; case -2: //флуд-контроль newErrorResponse.error_code = "2"; break; } return null; } } #endregion return newPhotosCommentsRespounse; } finally { if (logging) { newStream.Position = 0; OnLogResponse(new LogResponseEventArgs("LoadPhotosCommentsData", newStream)); newStream.Flush(); } } } } } catch (ObjectDisposedException ex) { DebugHelper.WriteLogEntry(ex, "LoadPhotosCommentsData ObjectDisposedException"); newErrorResponse = null; return null; } finally { newHttpWebRequest.Abort(); if (newStream != null) newStream.Close(); //if (newHttpWebResponse != null) // newHttpWebResponse.Close(); } }
/// <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(); } }
/// <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; } }
/// <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; }
/// <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(); } } }
// список фотографий пользователя 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(); } }
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(); } }
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(); } }
/// <summary> /// Парсинг ответа на запрос загрузки сообщений /// </summary> /// <param name="serverResponse">Поток с ответом сервера</param> /// <param name="UserID">ID пользователя</param> /// <param name="errorResponse">Объект для хранения кода ошибки</param> public static MessResponse ParseMessages(Stream serverResponse, int UserID, out ErrorResponse errorResponse) { MessResponse newMessResponse = new MessResponse(); errorResponse = null; JsonTextReader newJsonTextReader = new JsonTextReader(new StreamReader(serverResponse)); try { while (newJsonTextReader.Read()) { //<...> сообщения if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "n")) { newJsonTextReader.Read(); newMessResponse.mCount = Convert.ToInt32(newJsonTextReader.Value); } if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "h")) { newJsonTextReader.Read(); newMessResponse.VersionNum = Convert.ToInt32(newJsonTextReader.Value); } if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "d")) { newJsonTextReader.Read(); //открыли массив 1-ого порядка (список сообщений) if (newJsonTextReader.TokenType == JsonToken.StartArray) { newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) //открываем очередь чтения списка сообщений { //читаем содержимое списка сообщений //открыли массив 2-ого порядка (отдельное сообщение) if (newJsonTextReader.TokenType == JsonToken.StartArray) { MessageCover newMessageCover = new MessageCover(); newMessResponse.mMessages.Add(newMessageCover); int index = 0; //номер элемента в массиве конкретного сообщения newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) //открываем очередь чтения сообщения { switch (index) { case 0: newMessageCover.mID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newMessageCover.mTime = newMessageCover.mTime.AddSeconds(Convert.ToInt32(newJsonTextReader.Value)); newMessageCover.mTime = newMessageCover.mTime.ToLocalTime(); break; case 5: if (newMessageCover.mIOType == MessageIOType.Inbox) newMessageCover.mMesIsRead = Convert.ToBoolean(newJsonTextReader.Value); break; } //Чтение текста сообщения if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 2)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mData.mText = (string)newJsonTextReader.Value; newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "<br>", "\n", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, """, @"""", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "'", "'", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "<", "<", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, ">", ">", RegexOptions.IgnoreCase); newMessageCover.mData.mText = Regex.Replace(newMessageCover.mData.mText, "&", "&", RegexOptions.IgnoreCase); break; case 1: newMessageCover.mData.mDataType = (MessageDataType)Convert.ToInt32(newJsonTextReader.Value); break; case 2: newMessageCover.mData.mElementName = (string)newJsonTextReader.Value; break; case 3: //т.к. последовательность полей зависти от типов данных, //для явно определяемых типов: граффити, видеозапись, аудиозапись //выбираем необходимые поля вручную switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementURL = (string)newJsonTextReader.Value; break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementThumbImageURL = (string)newJsonTextReader.Value; break; } break; case 4: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementOwnerID = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementURL = (string)newJsonTextReader.Value; break; } break; case 5: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementID = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementOwnerID = Convert.ToInt32(newJsonTextReader.Value); break; } break; case 6: switch (newMessageCover.mData.mDataType) { case MessageDataType.Audio: newMessageCover.mData.mElementSize = Convert.ToInt32(newJsonTextReader.Value); break; case MessageDataType.Photo: case MessageDataType.Graffiti: case MessageDataType.Video: newMessageCover.mData.mElementID = Convert.ToInt32(newJsonTextReader.Value); break; } break; } iindex++; newJsonTextReader.Read(); } } //Чтение информации об отправителе if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 3)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mMesSender.mUserID = Convert.ToInt32(newJsonTextReader.Value); //если отправитель сообщения - это я, то сообщение исходящее if (newMessageCover.mMesSender.mUserID == UserID) { newMessageCover.mIOType = MessageIOType.Outbox; } else { newMessageCover.mIOType = MessageIOType.Inbox; } break; case 1: newMessageCover.mMesSender.mUserName = (string)newJsonTextReader.Value; newMessageCover.mMesSender.mUserName = Regex.Replace(newMessageCover.mMesSender.mUserName, "\t", " ", RegexOptions.IgnoreCase); break; case 2: newMessageCover.mMesSender.mUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newMessageCover.mMesSender.mSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newMessageCover.mMesSender.mUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newMessageCover.mMesSender.mUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } newJsonTextReader.Read(); iindex++; } } //Чтение информации о получателе if ((newJsonTextReader.TokenType == JsonToken.StartArray) && (index == 4)) { int iindex = 0; newJsonTextReader.Read(); while (newJsonTextReader.TokenType != JsonToken.EndArray) { switch (iindex) { case 0: newMessageCover.mMesReceiver.mUserID = Convert.ToInt32(newJsonTextReader.Value); break; case 1: newMessageCover.mMesReceiver.mUserName = (string)newJsonTextReader.Value; newMessageCover.mMesReceiver.mUserName = Regex.Replace(newMessageCover.mMesReceiver.mUserName, "\t", " ", RegexOptions.IgnoreCase); break; case 2: newMessageCover.mMesReceiver.mUserPhotoURL = (string)newJsonTextReader.Value; break; case 3: newMessageCover.mMesReceiver.mSmallUserPhotoName = (string)newJsonTextReader.Value; break; case 4: newMessageCover.mMesReceiver.mUserSex = Convert.ToInt32(newJsonTextReader.Value); break; case 5: newMessageCover.mMesReceiver.mUserIsOnline = Convert.ToInt32(newJsonTextReader.Value); break; } iindex++; newJsonTextReader.Read(); } } newJsonTextReader.Read(); index++; } } newJsonTextReader.Read(); } } } //ошибки if (newJsonTextReader.TokenType == JsonToken.PropertyName && string.Equals(newJsonTextReader.Value, "ok")) { errorResponse = new ErrorResponse(); newJsonTextReader.Read(); int error_code = Convert.ToInt32(newJsonTextReader.Value); switch (error_code) { case -1: //истекшая сессия errorResponse.error_code = "1"; break; case -2: //флуд-контроль errorResponse.error_code = "2"; break; } return null; } } return newMessResponse; } catch (Exception) { throw; } }
/// <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; } }
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; } }
/// <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(); } }