예제 #1
0
        /// <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);
        }
예제 #2
0
        private void buttonConnect_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                IPAddress ip = IPAddress.Parse("127.0.0.1");
                clientSocket.Connect(ip, 8888);
                serverStream = clientSocket.GetStream();
                readData     = "Łączenie z serwerem ...";
                // message() czyli "wypisanie na ekran" stringa readData - metoda później uruchamiana spełnia to samo założenie
                message();
            }
            catch (Exception)
            {
                readData = "BŁĄD w połączeniu z serwerem ...";
                message();
                return;
            }
            // tworzenie obiektu Msg (wiadomości) do wysłania przez Socketa
            Msg outMsg = new Msg()
            {
                Komenda  = Command.Login.ToString(),
                Nadawca  = tBoxNickName.Text,
                Odbiorca = tBoxPassword.Text
            };

            // zamiana obiektu do XMLa a później do tablicy byte[]
            byte[] outStream = mConv.doByte(outMsg);
            // wysłanie outStreama w kosmos (powinien złapać dane serwer)
            serverStream.Write(outStream, 0, outStream.Length);
            serverStream.Flush();

            // wystartowanie metody getMessage (zbiera odpowiedzi od serwera) w nowym wątku,
            ctThread = new Thread(getMessage);
            // wystartkowanie nowego wątku
            ctThread.Start();
        }
예제 #3
0
        public static void broadcast(Msg msg)//, string uName)//, bool flag)
        {
            bool WyslaneDoOdbiorcy = false;
            bool WyslaneDoNadawcy  = false;

            foreach (User Item in clientsList)
            {
                if (Item.nickName == msg.Odbiorca || Item.GUID == msg.GuidNadawca)
                {
                    TcpClient broadcastSocket;
                    broadcastSocket = (TcpClient)Item.clientSocket;//.Value;
                    NetworkStream broadcastStream = broadcastSocket.GetStream();
                    Byte[]        broadcastBytes  = null;

                    if (Item.zalogowany == true)
                    {
                        if (Item.nickName == msg.Odbiorca)
                        {
                            WyslaneDoOdbiorcy = true;
                        }
                        if (Item.GUID == msg.GuidNadawca)
                        {
                            WyslaneDoNadawcy = true;
                        }
                        broadcastBytes = mConv.doByte(msg);
                        broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length);
                        broadcastStream.Flush();
                    }
                } //end if (Item.nickName == msg.Odbiorca || Item.nickName == msg.Nadawca)
            }     //end foreach

            if (!WyslaneDoNadawcy)
            {
                //czynności związane z niewysłaniem wiadomości do nadawcy (czy jakiekolwiek?)
            }
            if (WyslaneDoOdbiorcy)
            {
                // wysłać wiadomość do nadawcy, że wiadomość została dostarczona do odbiorcy!
            }
            else
            {
                // wysłać wiadomość do pozostałych serwerów,
                // jeżeli na żadnym nie została doręczona wiadomość wysłać do serwera BackUpu
            }
        } //end broadcast function