Gruppe 1
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WifiCommunication.java 6.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package com.example.ueberwachungssystem;
  2. import android.annotation.SuppressLint;
  3. import android.util.Log;
  4. import android.widget.Toast;
  5. import androidx.annotation.NonNull;
  6. import com.example.ueberwachungssystem.Detection.DetectionReport;
  7. import com.example.ueberwachungssystem.Detection.Detector;
  8. import com.example.ueberwachungssystem.Detection.DetectorService;
  9. import java.io.IOException;
  10. import java.net.DatagramPacket;
  11. import java.net.DatagramSocket;
  12. import java.net.Inet4Address;
  13. import java.net.InetAddress;
  14. import java.net.NetworkInterface;
  15. import java.net.SocketException;
  16. import java.net.UnknownHostException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.Date;
  19. import java.util.Enumeration;
  20. public class WifiCommunication {
  21. //private final MainActivity mainActivity;
  22. private final InetAddress address;
  23. private final int port;
  24. private String messageToSend;
  25. volatile private boolean send;
  26. private final DatagramSocket socket;
  27. volatile private boolean running;
  28. private boolean Gruppe =true;
  29. private boolean showMessage = true;
  30. StringBuffer rxStringBuffer = new StringBuffer();
  31. private OnConnectionListener listener;
  32. @SuppressLint("SetTextI18n")
  33. public WifiCommunication(int port) {
  34. //this.mainActivity = mainActivity;
  35. this.port = port;
  36. try {
  37. socket = new DatagramSocket(this.port);
  38. socket.setBroadcast(true);
  39. address = InetAddress.getByName("255.255.255.255"); //100.82.255.255
  40. running = true;
  41. send = false;
  42. new ReceiveThread().start();
  43. new SendThread().start();
  44. } catch (SocketException | UnknownHostException e) {
  45. throw new RuntimeException(e);
  46. }
  47. //Toast.makeText(mainActivity.getApplicationContext(),"Communication running", Toast.LENGTH_SHORT).show();
  48. //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText("Communication running"));
  49. }
  50. public interface OnConnectionListener {
  51. void onConnection(String data);
  52. }
  53. public void setOnConnectionListener(@NonNull OnConnectionListener listener) {
  54. this.listener = listener;
  55. }
  56. public void sendWifiData(String wifiMessage) {
  57. if (listener != null) {
  58. listener.onConnection(wifiMessage);
  59. }
  60. }
  61. private class ReceiveThread extends Thread {
  62. private String rxString="";
  63. private String previousRxString = "";
  64. @Override
  65. public void run() {
  66. try {
  67. do {
  68. byte[] receiveData = new byte[512];
  69. DatagramPacket rxPacket = new DatagramPacket(receiveData, receiveData.length);
  70. socket.receive(rxPacket);
  71. rxString = new String(receiveData, 0, rxPacket.getLength());
  72. String[] splitrxString = rxString.split(",");
  73. String[] splitrxStringBuffer = splitBufferIntoStrings(rxStringBuffer);
  74. for(String elem: splitrxStringBuffer){
  75. if(elem.equals(rxString)){
  76. showMessage = false;
  77. }else{
  78. showMessage = true;
  79. }
  80. }
  81. if(Gruppe){
  82. if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) {
  83. rxStringBuffer.append(rxString).append("\n");
  84. Log.d("empfangen", rxString);
  85. sendWifiData(rxString);
  86. //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer));
  87. previousRxString = rxString;
  88. }
  89. }else{
  90. if(!previousRxString.equals(rxString) && splitrxString[0].equals("1") && splitrxString.length==7 && showMessage) {
  91. rxStringBuffer.append(rxString).append("\n");
  92. Log.d("empfangen", rxString);
  93. sendWifiData(rxString);
  94. //mainActivity.runOnUiThread(() -> mainActivity.tvMessages.setText(rxStringBuffer));
  95. previousRxString = rxString;
  96. }
  97. }
  98. } while (running);
  99. }
  100. catch (IOException e) {
  101. e.printStackTrace();
  102. }
  103. }
  104. }
  105. private class SendThread extends Thread {
  106. private int tmpCnt = 0;
  107. @Override
  108. public void run() {
  109. try {
  110. do {
  111. if(send)
  112. {
  113. send = false;
  114. /*SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
  115. Date curDate = new Date(System.currentTimeMillis());
  116. String str = formatter.format(curDate);*/
  117. byte[] send_Data = new byte[512];
  118. String txString = (messageToSend); //"1," +str+ ",Gruppe2," + getLocalIpAddress() + ",An,Video,"
  119. Log.d("send", txString);
  120. send_Data = txString.getBytes();
  121. DatagramPacket txPacket = new DatagramPacket(send_Data, txString.length(), address, port);
  122. for(int i = 0; i < 500; i++) {
  123. socket.send(txPacket);
  124. }
  125. }
  126. } while (running);
  127. } catch (IOException e) {
  128. e.printStackTrace();
  129. }
  130. }
  131. }
  132. public static String getLocalIpAddress() {
  133. try {
  134. for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
  135. NetworkInterface networkInterface = (NetworkInterface) ((Enumeration<?>) en).nextElement();
  136. for (Enumeration<InetAddress> addresses = networkInterface.getInetAddresses(); addresses.hasMoreElements();) {
  137. InetAddress inetAddress = addresses.nextElement();
  138. if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
  139. return inetAddress.getHostAddress();
  140. }
  141. }
  142. }
  143. } catch (SocketException ex) {
  144. ex.printStackTrace();
  145. }
  146. return null;
  147. }
  148. public void sendTrue(String message){
  149. send = true;
  150. messageToSend = message;
  151. }
  152. public void stopCommunication() {
  153. running = false;
  154. socket.close();
  155. }
  156. public String[] splitBufferIntoStrings(StringBuffer string){
  157. String[] splitrxString2 = string.toString().split("\n");
  158. return splitrxString2;
  159. }
  160. }