public void start() { string username; string password; int choix = 0; Boolean logged = false; Console.WriteLine("Connection established"); while (true) { TcpClient comm = new TcpClient(hostname, port); do { do { Console.WriteLine("1- Login\n2-Register "); choix = int.Parse(Console.ReadLine()); } while (choix != 1 && choix != 2); switch (choix) { case 1: Console.WriteLine("\n\n-----------LOGIN---------"); Console.WriteLine("Username pls : "); username = Console.ReadLine(); Console.WriteLine("Password pls : "); password = Console.ReadLine(); Net.sendMsg(comm.GetStream(), new LoginRequest(username, password)); LoginResponse loginResponse = (LoginResponse)Net.rcvMsg(comm.GetStream()); logged = loginResponse.IsLogged; id = loginResponse.Id; if (!logged) { Console.WriteLine("Wrong credentials !!"); } else { Console.WriteLine("you've been logged"); status = Status.Logged; this.currentUser = loginResponse.User; } break; case 2: Console.WriteLine("\n\n-----------Register---------"); Console.WriteLine("Username pls : "); username = Console.ReadLine(); bool isSame = false; do { Console.WriteLine("Password pls : "); password = Console.ReadLine(); Console.WriteLine("Repeat Password pls : "); string repatPassword = Console.ReadLine(); if (password != repatPassword) { Console.WriteLine("Please enter the same password !!!"); } else { isSame = true; } } while (!isSame); Net.sendMsg(comm.GetStream(), new RegisterRequest(username, password)); RegisterResponse response = (RegisterResponse)Net.rcvMsg(comm.GetStream()); if (response.HasError) { Console.WriteLine(response.Error); } else { Console.WriteLine("you have been registered as " + response.Username); } break; } } while (status == Status.Disconnected); do { Console.WriteLine("1- List topics \n2- create topic\n3- join a topic\n4- send private message\n"); Console.Write("--> "); try { choix = int.Parse(Console.ReadLine()); } catch { choix = 0; } switch (choix) { case 1: Net.sendMsg(comm.GetStream(), new ListTopicRequest()); ListTopicResponse response = (ListTopicResponse)Net.rcvMsg(comm.GetStream()); response.display(); Console.WriteLine("\n"); break; case 2: Console.WriteLine("Please write down the topic title : "); Console.Write("--> "); string title = Console.ReadLine(); Console.WriteLine("Please write down a description for the topic : "); string content = Console.ReadLine(); Net.sendMsg(comm.GetStream(), new CreateRequest(id, title, content, DateTime.Now)); CreateResponse createResponse = (CreateResponse)Net.rcvMsg(comm.GetStream()); if (createResponse.HasError) { Console.WriteLine(createResponse.Error); } else { Console.WriteLine("Your topic have been created, you can check it out by listing the topics"); } break; case 3: Console.WriteLine("Please choose the number of the topic from the list : "); Console.Write("--> "); int topicNumber; try { topicNumber = int.Parse(Console.ReadLine()); } catch { topicNumber = 0; } Net.sendMsg(comm.GetStream(), new JoinTopicRequest(topicNumber)); JoinTopicResponse joinResponse = (JoinTopicResponse)Net.rcvMsg(comm.GetStream()); if (joinResponse.HasError) { Console.WriteLine(joinResponse.Error); } else { joinResponse.display(); bool continuer = true; do { Console.WriteLine("send a message ? (y/n)"); ConsoleKeyInfo input = Console.ReadKey(true); if (input.Key == ConsoleKey.N) { continuer = false; } else { Console.WriteLine("Please, write your message : "); Console.Write("--> "); string message = Console.ReadLine(); TopicMessage topicMsg = new TopicMessage(DateTime.Now, currentUser.Username, message, topicNumber); Net.sendMsg(comm.GetStream(), new SendTopicMsgRequest(topicMsg)); SendTopicMsgResponse msgResponse = (SendTopicMsgResponse)Net.rcvMsg(comm.GetStream()); if (!msgResponse.HasError) { joinResponse.Topic.addMessage(topicMsg); joinResponse.Topic.displayMessages(); } else { Console.WriteLine("Error : " + msgResponse.Error); } } } while (continuer); } break; case 4: Console.WriteLine("Who do you want to send the message to :"); Console.Write("--> "); String receiver = Console.ReadLine(); if (receiver == currentUser.Username) { Console.WriteLine("\n\nYOU CAN'T SEND A MESSAGE TO YOURSELF !!\n\n"); } else { Net.sendMsg(comm.GetStream(), new FindUserRequest(currentUser.Id, receiver)); FindUserResponse findResponse = (FindUserResponse)Net.rcvMsg(comm.GetStream()); if (!findResponse.HasError) { findResponse.displayChat(); bool continuer = true; do { Console.WriteLine("send a message ? (y/n)"); ConsoleKeyInfo input = Console.ReadKey(true); if (input.Key == ConsoleKey.N) { continuer = false; } else { Console.WriteLine("Please, write your message : "); Console.Write("--> "); string message = Console.ReadLine(); PrivateMessage privateMsg = new PrivateMessage(DateTime.Now, currentUser.Id, findResponse.Receiver.Id, message); Net.sendMsg(comm.GetStream(), new SendPrivateRequest(privateMsg)); SendPrivateResponse msgResponse = (SendPrivateResponse)Net.rcvMsg(comm.GetStream()); if (!msgResponse.HasError) { findResponse.Messages.Add(privateMsg); findResponse.displayChat(); } else { Console.WriteLine("Error : " + msgResponse.Error); } } } while (continuer); } else { Console.WriteLine("Error : " + findResponse.Error); } } break; default: Console.WriteLine("make a wise choice mate"); break; } } while (status == Status.Logged); //Net.sendMsg(comm.GetStream(), new Expr(op1, op2, op)); //Console.WriteLine("Result = " + (Result)Net.rcvMsg(comm.GetStream())); } }