Ejemplo n.º 1
0
        /// <summary>
        /// Envoie un validatePresence en attente ; renvoie un message d'erreur éventuellement (sinon OK)
        /// </summary>
        /// <returns>The send.</returns>
        /// <param name="validatePresence">Validate presence.</param>
        public async Task Send(ValidatePresence validatePresence)
        {
            // Sauf si Hors connexion
            if (Global.GetSettingsBool(TypeSettings.IsHorsConnexion))
            {
                // On sort
                throw new Exception("Attention : hors connexion.");
            }

            // Creates HTTP web request
            // Attention : Si EBIllet : on ajoute un paramètre àl'URL d'envoi
            string url = Global.GetUrlBase();

            if (validatePresence.IdPrestation.HasValue)
            {
                url += Global.WS_SET_PARTICIPANT_INSCRIPTION_PRESTATION + "?id=" + validatePresence.IdParticipant;
                if (validatePresence.IsEBillet)
                {
                    url += "&ebillet=true&idPrestation=" + validatePresence.IdPrestation.Value;
                }
            }
            else
            {
                url += Global.WS_SET_PARTICIPANT_PRESENCE_SS_PRESTA + validatePresence.IdParticipant;
            }

            HttpWebRequest request = WebRequest.Create(new Uri(url)) as HttpWebRequest;

            request.ContentType = "application/json";

            // Method
            request.Method = "POST";

            // Token
            if (!string.IsNullOrEmpty(this.Token))
            {
                request.Headers["AgoraEvent-Token"] = this.Token;
            }

            //request.ContentLength = 0; // (string.IsNullOrEmpty(this.PostString) ? 0 : this.PostString.Length);
            // On passe un param vide ??? Sinon, l'appel plante...
            // Pas très élégant, mais je ne vois pas comment faire mieux
            var stream2 = await request.GetRequestStreamAsync();

            using (var writer = new StreamWriter(stream2))
            {
                writer.Write("");
                writer.Flush();
                writer.Dispose();
            }



            // Sends the request
            await Task.Run(() =>
            {
                bool mustDelete = false;

                try
                {
                    using (WebResponse response = DependencyService.Get <INetTools>().GetResponse(request))
                    {
                        // Si on est passé sans exception : on a le droit de se logger


                        // Le stream
                        using (Stream stream = DependencyService.Get <INetTools>().GetResponseStream(response))
                        {
                            // Build the JSON doc
                            JsonValue jsonDoc = JsonObject.Load(stream);


                            // On parse le résultat
                            string temp = jsonDoc.ToString();
                            // Résultat : "[\"1692915\", \"2FAVAND\", \"Nicolas\"]"
                            mustDelete = true;
                        }
                    }
                }
                // Gestion des exceptions
                // Attention : si on est déjà inscrit, on renvoie un 403
                catch (WebException ex)
                {
                    HttpWebResponse objresponse = ex.Response as HttpWebResponse;
                    if (objresponse.StatusCode == HttpStatusCode.Unauthorized ||
                        objresponse.StatusCode == HttpStatusCode.Forbidden ||
                        objresponse.StatusCode == HttpStatusCode.NotFound)
                    {
                        mustDelete = true;

                        // 401 : Session expirée ou / Impossible d'identifier le billet
                        // 403 : le participant a déjà été enregistré aujourd'hui / auparavant
                        // 404 : Billet non valide / vérifiez que le participant fait partie de la liste d'invités
                        // On enlève de la base et
                        // rethrow
                        //sqlData.DeleteData(validatePresence);

                        if (!isSilentExceptions)
                        {
                            throw ex;
                        }
                    }
                    else
                    {
                        // Générique
                        mustDelete = false;
                        //sqlData.DeleteData(validatePresence);

                        if (!isSilentExceptions)
                        {
                            throw ex;
                        }
                    }
                }
                catch (Exception e)
                {
                    mustDelete = false;

                    throw e;
                }
                finally
                {
                    // Si la donnée a été correctement envoyée : on la supprime de la table ValidatePresence
                    // TODO
                    if (mustDelete)
                    {
                        sqlData.DeleteData(validatePresence);
                    }
                }
            });
        }