public static RisultatoCalendario GeneraRichiesta(DateTime inizio, int ingresso) { lock (SyncRoot) { RisultatoCalendario risultato = CercaRisultato(inizio, ingresso); if (risultato == null) { AccodaRichiesta(inizio.Date, ingresso); return(null); } else { return(risultato); } } }
private static void AggiornaEdInserisci(RisultatoCalendario risultato) { bool found = false; foreach (RisultatoCalendario risultatoCalendario in Elenco) { if (risultatoCalendario.Ingresso == risultato.Ingresso && risultatoCalendario.DataOra == risultato.DataOra) { risultatoCalendario.MaxPostiDisponibili = risultatoCalendario.MaxPostiDisponibili; risultatoCalendario.PostiDisponibili = risultato.PostiDisponibili; risultatoCalendario.InfoGiornata = risultato.InfoGiornata; found = true; } } if (!found) { Elenco.Add(risultato); } }
private static void TaskAsincrono(object data) { RichiestaCalendario item = (RichiestaCalendario)data; try { Console.WriteLine("RICHIESTA: INIZIO: " + item.DataInizio); Console.WriteLine("RICHIESTA: FINE: " + item.DataFine); string richiesta = GetXmlRichiesta(item.ParametriXml); Console.WriteLine(richiesta); DateTime start = DateTime.Now; PreventWebServices.WebReferencePrevent.WSPreventService wsp = new PreventWebServices.WebReferencePrevent.WSPreventService(); string risposta = wsp.calendar("WinTicket", WsConfig.Username, WsConfig.Password, richiesta); DateTime end = DateTime.Now; Console.WriteLine("START: " + start.ToLongTimeString()); Console.WriteLine("END: " + end.ToLongTimeString()); Console.WriteLine("DURATA: " + (end - start).TotalMilliseconds); //Console.WriteLine(risposta); MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(risposta)); XmlSerializer xml = new XmlSerializer(typeof(prevent.calendar.Out)); prevent.calendar.Out outrisposta = (prevent.calendar.Out)xml.Deserialize(stream); lock (SyncRoot) { //for (int i = 0; i < outrisposta.SitoCalendario.Length; i++) //{ // for (int j = 0; j < outrisposta.SitoCalendario[i].Giornata.Length; j++) // { // for (int p = 0; p < outrisposta.SitoCalendario[i].Giornata[j].Periodo.Length; p++) // { // if (outrisposta.SitoCalendario[i].Giornata[j].Data.Day == 15) // Console.WriteLine("Disp: {0:d} {1}: {2}", // outrisposta.SitoCalendario[i].Giornata[j].Data, // outrisposta.SitoCalendario[i].Giornata[j].Periodo[p].Ora.Replace("00.0000+01:00", ""), // outrisposta.SitoCalendario[i].Giornata[j].Periodo[p].Max); // } // } //} foreach (prevent.calendar.OutSitoCalendario outSitoCalendario in outrisposta.SitoCalendario) { int sito = int.Parse(outSitoCalendario.IdSito); if (outSitoCalendario.Giornata == null) { continue; } foreach (prevent.calendar.OutSitoCalendarioGiornata outSitoCalendarioGiornata in outSitoCalendario.Giornata) { if (outSitoCalendarioGiornata.Periodo == null) { continue; } RisultatoCalendario infog = new RisultatoCalendario(); infog.Ingresso = sito; infog.InfoGiornata = outSitoCalendarioGiornata.Note; infog.PostiDisponibili = 0; infog.MaxPostiDisponibili = 0; infog.DataOra = outSitoCalendarioGiornata.Data; AggiornaEdInserisci(infog); foreach (prevent.calendar.OutSitoCalendarioGiornataPeriodo outSitoCalendarioGiornataPeriodo in outSitoCalendarioGiornata.Periodo) { RisultatoCalendario risultato = new RisultatoCalendario(); risultato.Ingresso = sito; risultato.InfoGiornata = outSitoCalendarioGiornata.Note; risultato.PostiDisponibili = int.Parse(outSitoCalendarioGiornataPeriodo.Disponibili); risultato.MaxPostiDisponibili = int.Parse(outSitoCalendarioGiornataPeriodo.Max); risultato.DataOra = outSitoCalendarioGiornata.Data; string ora = outSitoCalendarioGiornataPeriodo.Ora.Substring(0, 2); string minuti = outSitoCalendarioGiornataPeriodo.Ora.Substring(3, 2); risultato.DataOra = risultato.DataOra.AddMinutes(int.Parse(minuti)); risultato.DataOra = risultato.DataOra.AddHours(int.Parse(ora)); AggiornaEdInserisci(risultato); } } } ElencoRichiesteAttive.Remove(item); ElencoRichiesteEvase.Add(item); NewData = true; } } catch (Exception ex) { // eseguo di nuovo se ho avuto dei problemi... //item.NuovaRichiesta = true; Console.Write(ex.Message); lock (SyncRoot) { ErroriWeb.Add(ex); item.TimeToLive++; ElencoRichiesteAttive.Remove(item); if (item.TimeToLive < 4) { ElencoNuoveRichieste.Add(item); } else { // log errore Prevent } } } }