/// <summary> /// Klasa testująca poprawność biblioteki klas XMLmsg /// </summary> /// <param name="args"></param> static void Main(string[] args) { // stworzenie list pomocnicznych trzymających wartości własności obiektów klasy Msg w postaci stringa List <string> nwLista = new List <string>(); List <string> nnwLista = new List <string>(); // stworzenie przykładowego obiektu Msg Msg nw = new Msg() { Komenda = Command.Login.ToString(), Nadawca = "J", Odbiorca = "T", Wiadomosc = "PIWO" }; // wypisanie pierwszego obiektu Console.WriteLine("Jaka komenda: {0}, kto wysyła: {1}, kto odbiera: {2}, jaka tresc: {3}", nw.Komenda, nw.Nadawca, nw.Odbiorca, nw.Wiadomosc); MsgConverter mConv = new MsgConverter(); // konwersja pierwszego obiektu do bytów byte[] bajty = mConv.doByte(nw); // odkodowanie pierwszego obiektu i stworzenie identycznego drugiego Msg nnw = mConv.doMsg(bajty); //wypisanie drugiego obiektu Console.WriteLine("Jaka komenda: {0}, kto wysyła: {1}, kto odbiera: {2}, jaka tresc: {3}", nnw.Komenda, nnw.Nadawca, nnw.Odbiorca, nnw.Wiadomosc); var s = nw; // w foreachu wpisanie jako stringi wartości wszystkich własności obiektu pierwszego string temp; foreach (var p in s.GetType().GetProperties().Where(p => p.GetGetMethod().GetParameters().Count() == 0)) { temp = p.GetValue(s, null) != null?p.GetValue(s, null).ToString() : "null"; nwLista.Add(temp); //Console.WriteLine(p.GetValue(s, null)); } // w foreachu wpisanie jako stringi wartości wszystkich własności obiektu drugiego s = nnw; foreach (var p in s.GetType().GetProperties().Where(p => p.GetGetMethod().GetParameters().Count() == 0)) { temp = p.GetValue(s, null) != null?p.GetValue(s, null).ToString() : "null"; nnwLista.Add(temp); } // porownanie obydwu list, jeżeli wszystkie wartości są identyczne oba obiekty są identyczne string str = czyIdentyczne(nwLista, nnwLista) ? "TEST POPRAWNY - OBIE KLASY CHYBA SĄ IDENTYCZNE!" : "TEST BŁĘDNY!"; Console.WriteLine("{0}", str); Console.ReadKey(true); }
private void doChat() { int requestCount = 0; byte[] bytesFrom = new byte[10025]; string rCount = null; requestCount = 0; Msg msg; while ((true)) { try { requestCount = requestCount + 1; // wyzerowanie tablicy byte[] bytesFrom = new byte[10025]; NetworkStream networkStream; try { networkStream = clientSocket.GetStream(); networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); } catch (Exception) { break; } msg = mConv.doMsg(bytesFrom); // przypisanie do wiadomości ID serwera który ją odebrał od clienta msg.IdSerwera = Program.serverID; // przypisanie do wiadomości czasu z serwera msg.Czas = DateTime.Now.ToString(); msg.GuidNadawca = clGuid; Console.WriteLine("From client - " + clNo + " to client - " + msg.Odbiorca + " msg: " + msg.Wiadomosc); rCount = Convert.ToString(requestCount); Program.processingNewMessage(msg); //Program.broadcast(msg);//, clNo); } catch (Exception ex) { //Console.WriteLine(ex.ToString()); break; } }//end while clientSocket.Close(); clientsList.Remove(clientsList.Find(r => r.nickName == clNo)); Console.WriteLine("Rozłączono klienta"); } //end doChat
/// <summary> /// metoda działająca w nowym wątku - żeby nie blokowała reszty aplikacji /// za zadanie ma odbierać wiadomości od serwera (dlatego działa w pętli while(true) /// </summary> private void getMessage() { Msg msg; while (true) { serverStream = clientSocket.GetStream(); int buffSize = 0; byte[] inStream = new byte[10025]; buffSize = clientSocket.ReceiveBufferSize; serverStream.Read(inStream, 0, buffSize); msg = mConv.doMsg(inStream); // przekazanie wiadomości od serwera do nowej metody - żeby nie zaśmiecać kodem metody getMessage processingNewMessage(msg); } }
/// <summary> /// Main ;) /// </summary> /// <param name="args"></param> static void Main(string[] args) { IPAddress ip; // adres na którym serwer będzie nasłuchiwał (zawsze 127.0.0.1), tzn będzie zbierał cały ruch ip = IPAddress.Parse("127.0.0.1"); // uruchomienie serwera nasłuchu TCP // Pakiet TCP wchodzi do baru: // -Poproszę piwo. // -Piwo ? // -Tak, piwo. TcpListener serverSocket = new TcpListener(ip, 8888); TcpClient clientSocket = default(TcpClient); User nowyUser; int counter = 0; // start serwera serverSocket.Start(); Console.WriteLine("Chat Server Started ...."); counter = 0; // pętla przyjmująca nowych klientów while ((true)) { counter += 1; // do TcpListener'a zgłasza się nowy TcpClient clientSocket = serverSocket.AcceptTcpClient(); // tablica bajtów z wiadomoscią byte[] bytesFrom = new byte[10025]; // stworzenie streamu od klienta NetworkStream networkStream = clientSocket.GetStream(); // odczytanie wiadomości (czytanie do bytesFrom, streamu o długości (int)clientSocket.ReceiveBufferSize ) networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize); // konwersja bajtów do obiektu z wiadomością Msg msg = mConv.doMsg(bytesFrom); // stworzenie obiektu Usera trzymającego nickName oraz Socketa nowyUser = new User() { nickName = msg.Nadawca, clientSocket = clientSocket }; // przypisanie GUID nowegoUsera do wiadomosci msg.GuidNadawca = nowyUser.GUID; // dodanie Usera do Listy userów aktywnych na tym serwerze clientsList.Add(nowyUser); Console.WriteLine(msg.Nadawca + " Try to login to server "); processingNewMessage(msg); // utworzenie obiektu trzymającego komunikację Usera z serwerem handleClinet client = new handleClinet(); // uruchomienie clienta (wysłanie Socketa, danych, (adresu) Listy pozostałych klientów client.startClient(clientSocket, msg.Nadawca, msg.GuidNadawca, clientsList); if (wylaczServer == true) { break; } } clientSocket.Close(); serverSocket.Stop(); Console.WriteLine("exit"); Console.ReadLine(); } // end Main metod