} //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); } }
} //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; }
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; }