/// <summary> /// Funkcja uruchamiana w momencie naciśnięcia przycisku odpowiedzialnego za wysyłanie wiadomości o losowej długości /// </summary> /// <param name="sender">Obiekt, który odpowiedzialny jest za wysłanie eventu</param> /// <param name="e">Otrzymany event po naciśnięciu przycisku</param> private void buttonDifferentMessages_Click(object sender, EventArgs e) { if (comboBoxClients.SelectedItem != null) { //Pobranie celu do którego wysłana zostanie wiadomość string destination = comboBoxClients.SelectedItem.ToString(); //Zmiana ustawienia przycisku kończącego wysyłanie buttonStopSendingClicked = false; if (buttonSendRandomClicked == false) { t = Task.Run(async() => { while (buttonStopSendingClicked != true) { short frameID = (short)(new Random()).Next(0, short.MaxValue); string message = null; //Wygnenerowanie losowej wiadomości o maksymalnej długości message = RandomMessageGenerator.generateRandomMessage(37); //Pobranie wiadomości short messageLength = (short)message.Length; byte[] bytemessage; List <byte[]> packageList = new List <byte[]>(); if (messageLength > Package.usableInfoMaxLength) { double numberOfPackages = (Math.Ceiling((double)messageLength / Package.usableInfoMaxLength)); short tmpLength = Convert.ToInt16(messageLength - (short)((short)(numberOfPackages - 1) * Package.usableInfoMaxLength)); for (int i = 0; i < numberOfPackages; i++) { if (i < numberOfPackages - 1) { bytemessage = null; EONpackage = new Package(message.Substring(i * Package.usableInfoMaxLength, Package.usableInfoMaxLength), 1, destination, _ClientApplication.ClientIP, Convert.ToInt16(Package.usableInfoMaxLength), Convert.ToInt16(i + 1), (short)-1, (short)(-1), (short)(-1), (short)(-1), frameID, Convert.ToInt16(numberOfPackages)); bytemessage = EONpackage.toBytes(); } else { bytemessage = null; EONpackage = new Package(message.Substring(i * Package.usableInfoMaxLength, messageLength - i * Package.usableInfoMaxLength), 1, destination, _ClientApplication.ClientIP, tmpLength, Convert.ToInt16(i + 1), (short)-1, (short)(-1), (short)(-1), (short)(-1), frameID, Convert.ToInt16(numberOfPackages)); bytemessage = EONpackage.toBytes(); } packageList.Add(bytemessage); } if (send.Connected) { for (int i = 0; i < packageList.Count(); i++) { string timestamp2 = Timestamp.generateTimestamp(); //Wysłanie wiadomości (tablicy bajtów) za pośrednictwem gniazda sS.SendingPackageBytes(send, packageList[i]); // _ClientApplication.updateLogTextBox("[" + timestamp2 + "] == SENDING PACKAGE number: " + (i + 1) + " == "); var wait = await Task.Run(async() => { Stopwatch sw = Stopwatch.StartNew(); await Task.Delay(10); sw.Stop(); return(sw.ElapsedMilliseconds); }); } } //Stworzenie znacznika czasowego string timestamp = Timestamp.generateTimestamp(); _ClientApplication.updateLogTextBox("[" + timestamp + "] == SENDING MESSAGE in " + numberOfPackages + " packages == " + " D_ClientIP " + destination); } else { //Stworzenie wysyłanej paczki bytemessage = null; EONpackage = new Package(message, 1, destination, _ClientApplication.ClientIP, messageLength, Convert.ToInt16(1), (short)(-1), (short)(-1), (short)(-1), (short)(-1), frameID, 1); bytemessage = EONpackage.toBytes(); //Stworzenie znacznika czasowego string timestamp = Timestamp.generateTimestamp(); //Zamiana paczki na tablicę bajtów if (send.Connected) { //Wysłanie wiadomości (tablicy bajtów) za pośrednictwem gniazda sS.SendingPackageBytes(send, bytemessage); //Zaktualizowanie LogEventTextBoxa _ClientApplication.updateLogTextBox("[" + timestamp + "] == SENDING MESSAGE == D_ClientIP " + destination); } } //Task, który służy wprowadzeniu opóźnienia między kolejnymi wysłanymi pakietami var delay = await Task.Run(async() => { Stopwatch sw = Stopwatch.StartNew(); await Task.Delay(3000); sw.Stop(); return(sw.ElapsedMilliseconds); }); } }); } //Zablokowanie podwójnego naciśnięcia przycisku wysyłania buttonSendRandomClicked = true; } }
/// <summary> /// Funkcja uruchamiana w momencie naciśnięcia przycisku odpowiedzialnego za wysyłanie wiadomości o losowej długości /// </summary> /// <param name="sender">Obiekt, który odpowiedzialny jest za wysłanie eventu</param> /// <param name="e">Otrzymany event po naciśnięciu przycisku</param> private void buttonDifferentMessages_Click(object sender, EventArgs e) { if (comboBoxClients.SelectedItem != null) { //Pobranie celu do którego wysłana zostanie wiadomość //string destination = comboBoxClients.SelectedItem.ToString(); string DestinationID = comboBoxClients.SelectedItem.ToString(); //Zmiana ustawienia przycisku kończącego wysyłanie buttonStopSendingClicked = false; t = Task.Run(async() => { //Wygenerowanie losowego ID short frameID = (short)(new Random()).Next(0, short.MaxValue); string message = null; //Liczba wysyłanych wiadomości int nbOfMessages = Int32.Parse(textBoxHowManyMessages.Text); //Wiadomość w postaci bytes byte[] bytemessage; //Pętla odpowiedzialna za wysłanie odpowiedniej ilości wiadomości. for (int i = 0; i < nbOfMessages; i++) { //Generowanie losowej wiadomości o maksymalnej długości 37 bitów message = RandomMessageGenerator.generateRandomMessage(37); //Pobranie długości wygenerowanej wiadomości short messageLength = (short)message.Length; bytemessage = null; //Stworzenie wysyłanej paczki int portA = 0; if (ClientIP == "127.0.0.2") { portA = 2; } else { portA = 1; } int index = _CPCC.establishedConnections.FindIndex(x => x.Equals(DestinationID)) + 1; EONpackage = new Package(message, (short)portA, _CPCC.establishedConnections[index], _ClientApplication.ClientIP, messageLength, Convert.ToInt16(1), (short)(-1), (short)(-1), (short)(-1), (short)(-1), frameID, 1); bytemessage = EONpackage.toBytes(); //Stworzenie znacznika czasowego string timestamp = Timestamp.generateTimestamp(); //Zamiana paczki na tablicę bajtów if (send.Connected) { //Wysłanie wiadomości (tablicy bajtów) za pośrednictwem gniazda sS.SendingPackageBytes(send, bytemessage); //Zaktualizowanie LogEventTextBoxa _ClientApplication.updateLogTextBox("[" + timestamp + "] == SENDING MESSAGE number " + (i + 1) + "== D_ClientID: " + DestinationID + " with frameID: " + frameID); } var wait = await Task.Run(async() => { Stopwatch sw = Stopwatch.StartNew(); await Task.Delay(10); sw.Stop(); return(sw.ElapsedMilliseconds); }); } }); } else { MessageBox.Show("You need to select a client!", "Important Message.", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); } }