public override TipoStato CambiaStato(TipoStato stato) { switch (stato) { case TipoStato.C: stato = TipoStato.P1; break; case TipoStato.P1: break; case TipoStato.D1: stato = TipoStato.P2; break; case TipoStato.P2: break; case TipoStato.D2: break; case TipoStato.R: stato = TipoStato.P1; break; case TipoStato.Q: break; default: throw new ArgumentOutOfRangeException(); } return(stato); }
private static void IterazioneComunica(StreamReader sr, StreamWriter sw, TipoStato stato) { while (true) { // lettura richiesta dal client string str = sr.ReadLine(); Console.WriteLine(str); // Elaborazione e invio risposta try { //Divisione messaggio string strMsg = SplitString(str, ref stato); //Creazione messaggio e ingresso e definizione stato Messaggio msg = null; TipoStato statoSuccessivo = CreateMsgIng(strMsg, stato, out msg); //Risposta dal server RispostaServer(msg, stato, statoSuccessivo, sw); if (statoSuccessivo == TipoStato.Q) { Console.WriteLine("Connessione chiusa"); break; } } catch (Exception) { Console.WriteLine("Messaggio sconosciuto"); sw.WriteLine("{0} -ERR", stato.ToString()); } } }
public override TipoStato CambiaStato(TipoStato stato) { switch (stato) { case TipoStato.C: stato = TipoStato.Q; break; case TipoStato.P1: stato = TipoStato.Q; break; case TipoStato.D1: stato = TipoStato.Q; break; case TipoStato.P2: stato = TipoStato.Q; break; case TipoStato.D2: stato = TipoStato.Q; break; case TipoStato.R: stato = TipoStato.Q; break; case TipoStato.Q: break; default: throw new ArgumentOutOfRangeException(); } return stato; }
static async Task ComunicaClientAsync(object param) { TcpClient client = (TcpClient)param; NetworkStream nsRead = client.GetStream(); NetworkStream nsWrite = client.GetStream(); StreamReader sr = new StreamReader(nsRead); StreamWriter sw = new StreamWriter(nsWrite); sw.AutoFlush = true; TipoStato stato = TipoStato.C; while (stato != TipoStato.Q) { Console.Write("Digitare il messaggio: "); string risp = Console.ReadLine(); risp = stato.ToString() + ' ' + risp; sw.WriteLine(risp); string[] msgRisp = sr.ReadLine().Split(' '); stato = (TipoStato)Enum.Parse(typeof(TipoStato), msgRisp[0], true); Console.WriteLine(""); Console.WriteLine("La risposta è {0} {1}", msgRisp[0], msgRisp[1]); Console.WriteLine("-------------------------------"); Console.WriteLine(""); } }
private static TipoStato CreateMsgIng(string strMsg, TipoStato stato, out Messaggio msg) { msg = MessaggioFactory.Create(strMsg); TipoComando ingresso = (TipoComando)Enum.Parse(typeof(TipoComando), strMsg.Split(' ')[0], true); Ingresso ing = IngressoFactory.Create(ingresso); TipoStato statoSuccessivo = ing.CambiaStato(stato); return statoSuccessivo; }
private static TipoStato CreateMsgIng(string strMsg, TipoStato stato, out Messaggio msg) { msg = MessaggioFactory.Create(strMsg); TipoComando ingresso = (TipoComando)Enum.Parse(typeof(TipoComando), strMsg.Split(' ')[0], true); Ingresso ing = IngressoFactory.Create(ingresso); TipoStato statoSuccessivo = ing.CambiaStato(stato); return(statoSuccessivo); }
private static void RispostaServer(Messaggio msg, TipoStato stato, TipoStato statoSuccessivo, StreamWriter sw) { if (msg != null && statoSuccessivo != stato) { Console.WriteLine(msg.GetType().ToString()); sw.WriteLine("{0} +OK", statoSuccessivo.ToString()); } else { Console.WriteLine("Messaggio sconosciuto"); sw.WriteLine("{0} -ERR", stato.ToString()); } }
private static string SplitString(string str, ref TipoStato stato) { string[] strSplit = str.Split(' '); stato = (TipoStato)Enum.Parse(typeof(TipoStato), strSplit[0], true); string strMsg = ""; if (strSplit.Length == 3) { strMsg = strSplit[1] + ' ' + strSplit[2]; } else { strMsg = strSplit[1]; } return(strMsg); }
static void Comunica(object param) { TcpClient client = (TcpClient)param; Console.WriteLine("Sto avviando la comunicazione"); NetworkStream nsRead = client.GetStream(); NetworkStream nsWrite = client.GetStream(); StreamReader sr = new StreamReader(nsRead); StreamWriter sw = new StreamWriter(nsWrite); sw.AutoFlush = true; TipoStato stato = TipoStato.Nessuno; IterazioneComunica(sr, sw, stato); }
//public abstract TipoStato CambiaStato(TipoStato stato); public virtual TipoStato CambiaStato(TipoStato stato) { TipoStato resp = TipoStato.Nessuno; return resp; }
//public abstract TipoStato CambiaStato(TipoStato stato); public virtual TipoStato CambiaStato(TipoStato stato) { TipoStato resp = TipoStato.Nessuno; return(resp); }
private static string SplitString(string str, ref TipoStato stato) { string[] strSplit = str.Split(' '); stato = (TipoStato)Enum.Parse(typeof(TipoStato), strSplit[0], true); string strMsg = ""; if (strSplit.Length == 3) { strMsg = strSplit[1] + ' ' + strSplit[2]; } else { strMsg = strSplit[1]; } return strMsg; }