Example #1
0
        } //Chcę moje ID!

        private void GuessNumber_Click(object sender, EventArgs e) //Zgaduj liczbę!
        {
            if (Number.Text == "")
            {
                GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Ale podaj tą liczbę, co?"));
                return;
            }

            else if (SessionID.Text == "")
            {
                GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Nie masz ID sesji!"));
                return;
            }

            else
            {
                SetMessage("GN", "", SessionID.Text, "", Number.Text);
                SendMessageToServer(1);
            }
        }
Example #2
0
        } //Metoda ustawiająca pole MessageToSend

        public void SendMessageToServer(int variant) //Metoda wysyłająca wiadomość do servera i ustawiająca flage answer na false
        {
            //Zmienna variant określa przypadki wysyłania wiadomości
            //0 - SendMessage wysyła tab z id sesji
            //1 - SendMessage wysyła tab ze zgadywaniem lub wątek reciever
            //2 - SendMessage ma pozostawić flagę ReadyToSend na true

            //Klika wyjątków do obsłużenia...
            if (variant == 0) //Zakładka Id sesji
            {
                if (MessageToSend == "")
                {
                    LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("CORE> User tried to send an empty message!\r\n")));
                    MessageToSend = "";
                    buffer        = null;
                    return;
                }
            }

            else if (variant == 1) //Zakładka Zgaduj Liczbę i wątek reciever
            {
                if (MessageToSend == "")
                {
                    LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("CORE> User tried to send an empty message!\r\n")));
                    MessageToSend = "";
                    buffer        = null;
                    return;
                }

                if (ReadyToSend.Checked == false)
                {
                    LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("CORE> Server has not acknoledged previous message!\r\n")));
                    GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Nie możesz teraz zgadywać!"));
                    MessageToSend = "";
                    buffer        = null;
                    return;
                }
            }
            //Kilka wyjątków do obsłużenia...

            //Jeżeli wszystko jest OK...
            //Adres servera i jego port
            IPAddress server_addr = IPAddress.Parse(ServerIP.Text);
            int       server_port;

            Int32.TryParse(ServerPort.Text, out server_port);

            //Tworzenie endpointu i wypełnienie bufora
            IPEndPoint server = new IPEndPoint(server_addr, server_port);

            buffer = Encoding.ASCII.GetBytes(this.MessageToSend);

            //Wysyłanie wiadomości i ustawienie checkboxa ReadyToSend na False
            try
            {
                client_socket.Send(buffer, buffer.Length, server);
            }
            catch (Exception e)
            {
                LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("CORE> WinSock error ocurred while sending a message " + e.ToString() + "\r\n")));
                SetReadyToSend(false);
                MessageToSend = "";
                buffer        = null;
                return;
            }
            LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("CORE> User sent message : " + MessageToSend + "\r\n")));

            //Czyszczenie wiadomości i bufora, oraz odznaczenie czekboksa
            if (variant != 2)
            {
                SetReadyToSend(false);
            }
            MessageToSend = "";
            buffer        = null;
        }
Example #3
0
        public void ExecAndAck()
        {
            FromByte(this.buffer);
            //Wybór co robimy na podstawie operacji:

            if (this.op == "HelloThere")        //Przydział ID
            {
                if (this.od == "GeneralKenobi") //Serwer przysłał nam nowe ID!
                {
                    SessionID.Invoke(new Action(() => SessionID.Text         = this.id));
                    SessionIDInfo.Invoke(new Action(() => SessionIDInfo.Text = "Otrzymano nowe ID od serwera!"));
                    SetReadyToSend(true);

                    //Potwierdzenie komunikatu

                    SetMessage(op, "RogerRoger", id, tm, lb);
                    SendMessageToServer(1);

                    //Sprzątanie

                    SetMessage("");
                    this.buffer = null;
                    return;
                }

                if (this.od == "NOK") //Serwer nie przysłał nam nowego ID!
                {
                    SessionID.Invoke(new Action(() => SessionIDInfo.Text = "Serwer odmówił przydziału ID!"));
                    SetReadyToSend(true);

                    //Potwierdzenie komunikatu

                    SetMessage(op, "RogerRoger", "", tm, lb);
                    SendMessageToServer(1);

                    //Sprzątanie

                    SetMessage("");
                    this.buffer = null;
                    return;
                }
            }

            if (this.op == "TR") //Pozostały czas
            {
                SetReadyToSend(true);
                GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Czas ucieka!"));
                TimeLeft.Invoke(new Action(() => TimeLeft.Text = tm));

                //Potwierdzenie komunikatu

                SetMessage(op, "RogerRoger", id, tm, lb);
                SendMessageToServer(2);

                //Sprzątanie

                SetMessage("");
                this.buffer = null;
                return;
            }

            if (this.op == "GN")     //Zgadywanie liczby
            {
                if (this.od == "WN") //Nie zgadłeś
                {
                    GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Zła liczba!"));
                    SetReadyToSend(true);

                    //Potwierdzenie komunikatu

                    SetMessage(op, "RogerRoger", id, tm, lb);
                    SendMessageToServer(2);

                    //Sprzątanie

                    SetMessage("");
                    this.buffer = null;
                    return;
                }

                if (this.od == "WIN")
                {
                    GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "Brawo! O tą liczbę mi chodziło!"));
                    Number.Invoke(new Action(() => Number.BackColor = Color.PaleGreen));
                    SetReadyToSend(true);

                    //Potwierdzenie komunikatu

                    SetMessage(op, "RogerRoger", id, tm, lb);
                    SendMessageToServer(1);

                    //Sprzątanie po wygranej!!!
                    LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("RECIEVER> User has won the game! Terminating connection...\r\n")));
                    TimeLeft.Invoke(new Action(() => TimeLeft.Text   = ""));
                    SessionID.Invoke(new Action(() => SessionID.Text = ""));
                    SetReadyToSend(false);

                    SetMessage("");
                    this.buffer = null;
                    return;
                }
            }

            if (this.op == "ItIsOverAnakin") //Koniec gry
            {
                LogTextBox.Invoke(new Action(() => LogTextBox.AppendText("RECIEVER> It is over! Server has terminated the communication.\r\n")));
                TimeLeft.Invoke(new Action(() => TimeLeft.Text               = ""));
                SessionID.Invoke(new Action(() => SessionID.Text             = ""));
                GuessNumberInfo.Invoke(new Action(() => GuessNumberInfo.Text = "To koniec Anakinie, mam wysoką ziemię!"));
                SetReadyToSend(false);

                //?potfierdzenie?

                return;
            }

            //W przypadku, gdy nie trafiliśmy w żadnego ifa
            WrongMessage();
            return;
        }