/// <summary> /// Funkcja uruchamiana w momencie naciśnięcia przycisku wysyłania /// </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 buttonSend_Click(object sender, EventArgs e) { //Cel wysyłania naszej wiadomości, pobrany z comboBoxa string destination = comboBoxClients.SelectedItem.ToString(); //Ustawienie wartości true pozwala na zatrzymanie wysyłania buttonStopSendingClicked = false; if (buttonSendClicked == false) { t = Task.Run(async() => { //Pętla odpowiedzialna za ciągłe wysyłanie wiadomości do wyznaczonego klienta while (buttonStopSendingClicked != true) { short frameID = (short)(new Random()).Next(0, short.MaxValue); //Pobranie wiadomości string message = textBoxMessage.Text; 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 buttonSendClicked = true; }
/// <summary> /// Funkcja uruchamiana w momencie naciśnięcia przycisku połączenie z chmura /// </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 buttonConnectToCloud_Click(object sender, EventArgs e) { if (buttonConnectToCloudClicked == false) { buttonConnectToCloud.Enabled = false; buttonConnectToCloudClicked = true; string sourceIp; //Pobranie indeksu na którym w liście znajduje się IP naszej klienckiej aplikacji int cloudipindex = clientsiplist.IndexOf(_ClientApplication.ClientIP); //Pobranie IP chmury z listy string cloudIP = cloudsiplist[cloudipindex]; try { //Wiadomość która będzie otrzymywana string message2 = null; //Inicjalizacja ilości paczek int numberOfPackages = 0; //Inicjalizacja ID paczki short frameID; //Próba połączenia się z IP chmury, z którego bedziemy nasłuchiwali wiadomości send = sS.ConnectToEndPoint(cloudIP); if (send.Connected) { //Uruchomienie nasłuchiwania w aplikacji klienckiej socket = sl.ListenAsync(_ClientApplication.ClientIP); Task.Run(() => { while (true) { //Odebrana wiadomość w postaci bytes byte[] messagebytes; //Zamienienie odebranej wiadomości na tablicę bajtów messagebytes = sl.ProcessRecivedBytes(socket); //Stworzenie timestampa string timestamp2 = Timestamp.generateTimestamp(); //Zwiększenie liczby paczek - po odebraniu paczki numberOfPackages++; //Wydobycie ID paczki z otrzymanej wiadomości frameID = Package.extractID(messagebytes); //Odpakowanie adresy nadawcy z otrzymanej wiadomości sourceIp = Package.exctractSourceIP(messagebytes).ToString(); //Stworzenie wiadomości, która zostanie wyświetlona na ekranie - odpakowanie treści wiadomości z paczki string DestinationID = null; int index = _CPCC.establishedConnections.FindIndex(x => x.Equals(sourceIp)) - 1; DestinationID = _CPCC.establishedConnections[index]; message2 = DestinationID + ": " + Package.extractUsableMessage(messagebytes, Package.extractUsableInfoLength(messagebytes)); //Pojawienie się informacji o otrzymaniu wiadomości _ClientApplication.updateLogTextBox("[" + timestamp2 + "] == RECEIVED MESSAGE number " + numberOfPackages + " == S_ClientID: " + DestinationID + " with FrameID=" + frameID); //Zauktualizowanie wiadomości w polu ReceivedMessage _ClientApplication.updateReceivedMessageTextBox(message2); _ClientApplication.updateReceivedMessageTextBox("\r\n"); message2 = null; messagebytes = null; frameID = 0; } }); } else { throw new NullReferenceException(); } } catch (Exception err) { MessageBox.Show("Unable to connect to the Network Host!", "Attention!"); buttonConnectToCloud.Enabled = true; buttonConnectToCloudClicked = false; } } }