private void DoDispatch <T>( Dictionary <string, string> parametersDict, Action <VKBackendResult <T> > callback, Func <string, T> customDeserializationFunc = null) { parametersDict["v"] = VKSDK.API_VERSION; var accessToken = VKSDK.GetAccessToken(); if (accessToken != null) { parametersDict["access_token"] = accessToken.AccessToken; } var dispatchUri = string.Format(REQUEST_BASE_URI_FRM, _parameters.MethodName); VKHttpRequestHelper.DispatchHTTPRequest( dispatchUri, parametersDict, (httpResult) => { if (httpResult.IsSucceeded) { var backendResult = GetBackendResultFromString <T>(httpResult.Data, customDeserializationFunc); if (backendResult.ResultCode == VKResultCode.CaptchaRequired) { var captchaRequest = new VKCaptchaUserRequest { CaptchaSid = backendResult.Error.captcha_sid, Url = backendResult.Error.captcha_img }; VKSDK.InvokeCaptchaRequest(captchaRequest, (captchaResponse) => { if (!captchaResponse.IsCancelled) { var parametersWithCaptcha = new Dictionary <string, string>(parametersDict); parametersWithCaptcha["captcha_sid"] = captchaResponse.Request.CaptchaSid; parametersWithCaptcha["captcha_key"] = captchaResponse.EnteredString; DoDispatch(parametersWithCaptcha, callback, customDeserializationFunc); } else { InvokeSafely(() => callback(new VKBackendResult <T>() { ResultCode = VKResultCode.CaptchaControlCancelled })); } }); } else if (backendResult.ResultCode == VKResultCode.ValidationRequired) { var validationRequest = new VKValidationRequest { ValidationUri = backendResult.Error.redirect_uri }; VKSDK.InvokeValidationRequest(validationRequest, (vr) => { if (vr.IsSucceeded) { DoDispatch(parametersDict, callback, customDeserializationFunc); } else { InvokeSafely(() => callback(new VKBackendResult <T> { ResultCode = VKResultCode.ValidationCanceslledOrFailed })); } }); } else { InvokeSafely(() => callback(backendResult)); } } else { var backendResult = new VKBackendResult <T> { ResultCode = VKResultCode.CommunicationFailed }; InvokeSafely(() => callback(backendResult)); } }); }
private void UploadPhoto(Stream photoStream, string getServerMethodName, Dictionary <string, string> parameters, string saveMethodName, bool saveReturnsList, Action <VKBackendResult <VKPhoto> > callback, Action <double> progressCallback) { var vkParams = new VKRequestParameters(getServerMethodName, parameters); var getServerRequest = new VKRequest(vkParams); getServerRequest.Dispatch <VKUploadServerAddress>( (res) => { if (res.ResultCode == VKResultCode.Succeeded) { var uploadUrl = res.Data.upload_url; VKHttpRequestHelper.Upload( uploadUrl, photoStream, "file1", "image", (uploadRes) => { if (uploadRes.IsSucceeded) { var serverPhotoHashJson = uploadRes.Data; var uploadData = JsonConvert.DeserializeObject <VKUploadResponseData>(serverPhotoHashJson); if (!string.IsNullOrWhiteSpace(uploadData.server)) { parameters["server"] = uploadData.server; } if (!string.IsNullOrWhiteSpace(uploadData.photos_list)) { parameters["photos_list"] = uploadData.photos_list; } if (!string.IsNullOrWhiteSpace(uploadData.hash)) { parameters["hash"] = uploadData.hash; } if (!string.IsNullOrWhiteSpace(uploadData.photo)) { parameters["photo"] = uploadData.photo; } var saveWallPhotoVKParams = new VKRequestParameters(saveMethodName, parameters); var saveWallPhotoRequest = new VKRequest(saveWallPhotoVKParams); saveWallPhotoRequest.Dispatch( callback, (jsonStr) => { if (saveReturnsList) { var resp = JsonConvert.DeserializeObject <GenericRoot <List <VKPhoto> > >(jsonStr); return(resp.response.First()); } else { var resp = JsonConvert.DeserializeObject <GenericRoot <VKPhoto> >(jsonStr); return(resp.response); } }); } else { callback(new VKBackendResult <VKPhoto> { ResultCode = VKResultCode.UnknownError }); } }, progressCallback, "Image.jpg"); } else { callback(new VKBackendResult <VKPhoto> { ResultCode = res.ResultCode, Error = res.Error }); } }); }