Esempio n. 1
0
        /// <summary>
        /// Metoda Run obsługująca łączenie klienta i pętlę działania serwera
        /// </summary>
        public void Run()
        {
            //Setup serwera
            TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 8008);

            server.Start();
            Console.WriteLine("Odpalam server\n");

            //Komunikaty i obiekt sucharów
            string negatyw    = "Ja tylko serwuje suchary\n";
            string instrukcja = "\n\n\"suchar\" wysyla suchara, \"quit\" rozlacza, \"shutdown\" zamyka serwer\n";

            byte[] instr = Encoding.ASCII.GetBytes(instrukcja);
            byte[] bytes = Encoding.ASCII.GetBytes(negatyw);
            Joke   suchy = new Joke();

            bool shutdown = false;

            //Pętla łączenia
            while (shutdown == false)
            {
                //Łączenie z klientem
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Polaczono\n");

                //Pętla serwera
                while (true)
                {
                    client.GetStream().Write(instr, 0, instr.Length);
                    //Odbieranie wiadomości
                    byte[] buffer = new byte[1024];
                    client.GetStream().Read(buffer);
                    string text = Encoding.UTF8.GetString(buffer).Replace("\n", "").Replace("\0", "");
                    Console.Write(text);

                    //Rozpoznawanie otrzymanego komunikatu i odpowiedzi
                    if (text == "shutdown")
                    {
                        Console.WriteLine("Zamykam serwer\n");
                        client.Close();
                        shutdown = true;
                        break;
                    }
                    else if (text == "quit")
                    {
                        Console.WriteLine("Rozłączam\n");
                        client.Close();
                        break;
                    }
                    else if (text == "suchar")
                    {
                        Console.WriteLine("Potwierdzam\n");
                        String sucharek = suchy.genJoke();
                        byte[] pozytyw  = Encoding.ASCII.GetBytes(sucharek);
                        client.GetStream().Write(pozytyw, 0, pozytyw.Length);
                    }
                    else
                    {
                        Console.WriteLine("Odrzucam\n");
                        client.GetStream().Write(bytes, 0, bytes.Length);
                    }
                }
            }
        }