diff --git a/MobileApp/.idea/misc.xml b/MobileApp/.idea/misc.xml index 5fb06df..675626e 100644 --- a/MobileApp/.idea/misc.xml +++ b/MobileApp/.idea/misc.xml @@ -25,7 +25,7 @@ - + diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/DataTransferAsyncTask.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/DataTransferAsyncTask.java index 0ff684b..dcf4e01 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/DataTransferAsyncTask.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/DataTransferAsyncTask.java @@ -7,39 +7,38 @@ import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; public class DataTransferAsyncTask extends AsyncTask { - private static final int sendRatePerSecond = 4; - private String ipAdress; - private int portNumber; - private String telegram; + private static final double sendRatePerSecond = 4.0; private boolean connected; + private final ExtendedSocket socket; + private BlockingQueue blockingQueue; - public DataTransferAsyncTask(String ipAdress, int portNumber) { - this.ipAdress = ipAdress; - this.portNumber = portNumber; - this.telegram = ""; - this.connected = false; + public DataTransferAsyncTask(ExtendedSocket socket) { + this.socket = socket; + this.connected = true; + this.blockingQueue = new LinkedBlockingQueue<>(); } public void writeTelegram(String telegram) { - this.telegram = telegram; + // Schau mal hier bei Fehler + blockingQueue.offer(telegram); } @Override protected Void doInBackground(Void... params) { - while(!isCancelled()) { + while(!isCancelled() && connected) { try { - Socket socket = new Socket(ipAdress, portNumber); - DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); - connected = true; - while (!isCancelled() && telegram.length() > 0) { - Log.v("TAG", telegram + "\n"); - outputStream.writeBytes(telegram); - outputStream.flush(); - Thread.sleep(1000 / sendRatePerSecond); + synchronized (socket) { + String message = blockingQueue.poll((long) (1000.0/sendRatePerSecond), TimeUnit.MILLISECONDS); + if(message != null){ + Log.v("TAG", message + "\n"); + socket.sendMessage(message); + } } - socket.close(); } catch (Exception e) { e.printStackTrace(); connected = false; @@ -47,9 +46,4 @@ public class DataTransferAsyncTask extends AsyncTask { } return null; } - - - public boolean getConnectionState(){ - return connected; - } } diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ExtendedSocket.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ExtendedSocket.java index 7d45ef0..6041782 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ExtendedSocket.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ExtendedSocket.java @@ -1,2 +1,25 @@ -package com.example.lfrmobileapp;public class ExtendedSocket { +package com.example.lfrmobileapp; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; + +public class ExtendedSocket { + private final Socket socket; + + public ExtendedSocket(Socket socket) { + this.socket = socket; + } + + public void sendMessage(String message) throws IOException { + synchronized (socket){ + DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); + outputStream.writeBytes(message); + outputStream.flush(); + } + } + + public void closeSocket() throws IOException { + this.socket.close(); + } } diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/MainActivity.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/MainActivity.java index 55d2ee2..8cbf830 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/MainActivity.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/MainActivity.java @@ -3,6 +3,7 @@ package com.example.lfrmobileapp; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; +import android.widget.Toast; import com.google.android.material.bottomnavigation.BottomNavigationView; @@ -14,11 +15,17 @@ import androidx.navigation.ui.NavigationUI; import com.example.lfrmobileapp.databinding.ActivityMainBinding; - +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; + private ExtendedSocket socket; + private DataOutputStream outputStream; + private DataTransferAsyncTask dataTransferAsyncTask; + Boolean connected = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -38,5 +45,30 @@ public class MainActivity extends AppCompatActivity { NavigationUI.setupWithNavController(binding.navView, navController); } + public boolean connectToWifi(String ipAddress, int port){ + + new Thread(new Runnable(){ + public void run(){ + try { + Socket tempSocket = new Socket(ipAddress, port); + socket = new ExtendedSocket(tempSocket); + socket.sendMessage("Verbindung aufbauen"); + connected = true; + + } catch (Exception e) { + e.printStackTrace(); + connected = false; + } + } + }).start(); + + if(connected){ + dataTransferAsyncTask = new DataTransferAsyncTask(socket); + dataTransferAsyncTask.execute(); + return true; + }else{ + return false; + } + } +} -} \ No newline at end of file diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/dashboard/DashboardFragment.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/dashboard/DashboardFragment.java index 473c4c2..d3a696d 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/dashboard/DashboardFragment.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/dashboard/DashboardFragment.java @@ -29,13 +29,6 @@ import java.util.Arrays; import kotlin.collections.UArraySortingKt; public class DashboardFragment extends Fragment { - - String ipKey = "ipkey"; - String portKey = "portkey"; - - String ipAddress = "192.168.0.1"; - int port = 8000; - Communication com = new Communication(); private FragmentAutomatikBinding binding; @@ -62,12 +55,6 @@ public class DashboardFragment extends Fragment { //Get Arraylist from Shared Preferences String ArrayList autoList = stringToArraylist(sharedPref.getString(listKey, "")); - ipAddress = sharedPref.getString(ipKey, ""); - port = sharedPref.getInt(portKey, -1); - - dataTransferAsyncTask = new DataTransferAsyncTask(ipAddress, port); - dataTransferAsyncTask.execute(); - binding.startAutomatic.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/home/HomeFragment.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/home/HomeFragment.java index f746f14..9ae6d91 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/home/HomeFragment.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/home/HomeFragment.java @@ -18,6 +18,7 @@ import androidx.lifecycle.ViewModelProvider; import com.example.lfrmobileapp.Communication; import com.example.lfrmobileapp.DataTransferAsyncTask; +import com.example.lfrmobileapp.MainActivity; import com.example.lfrmobileapp.R; import com.example.lfrmobileapp.databinding.FragmentManuellBinding; import com.example.lfrmobileapp.ui.notifications.NotificationsFragment; @@ -34,11 +35,19 @@ public class HomeFragment extends Fragment { String ipAddress = "192.168.0.1"; int port = 8000; + MainActivity mainActivity; + Communication com = new Communication(); DataTransferAsyncTask dataTransferAsyncTask; private FragmentManuellBinding binding; + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) context; + } + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { HomeViewModel homeViewModel = @@ -58,8 +67,7 @@ public class HomeFragment extends Fragment { final TextView textView = binding.textHome; homeViewModel.getText().observe(getViewLifecycleOwner(), textView::setText); - dataTransferAsyncTask = new DataTransferAsyncTask(ipAddress, port); - dataTransferAsyncTask.execute(); + binding.rotateLeft.setOnTouchListener(new View.OnTouchListener(){ @SuppressLint("ClickableViewAccessibility") @@ -138,7 +146,7 @@ public class HomeFragment extends Fragment { @Override public void onDestroyView() { super.onDestroyView(); - dataTransferAsyncTask.cancel(false); + // dataTransferAsyncTask.cancel(false); binding = null; } } diff --git a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/notifications/NotificationsFragment.java b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/notifications/NotificationsFragment.java index cefde0d..1efa499 100644 --- a/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/notifications/NotificationsFragment.java +++ b/MobileApp/app/src/main/java/com/example/lfrmobileapp/ui/notifications/NotificationsFragment.java @@ -15,6 +15,7 @@ import androidx.lifecycle.ViewModelProvider; import com.example.lfrmobileapp.Communication; import com.example.lfrmobileapp.DataTransferAsyncTask; +import com.example.lfrmobileapp.MainActivity; import com.example.lfrmobileapp.databinding.FragmentEinstellungenBinding; import java.io.DataOutputStream; @@ -51,6 +52,7 @@ import java.net.Socket; public class NotificationsFragment extends Fragment { Boolean connected = false; + MainActivity mainActivity; String ipKey = "ipkey"; String portKey = "portkey"; @@ -65,6 +67,12 @@ public class NotificationsFragment extends Fragment { private FragmentEinstellungenBinding binding; + @Override + public void onAttach(Context context) { + super.onAttach(context); + mainActivity = (MainActivity) context; + } + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { NotificationsViewModel notificationsViewModel = @@ -87,9 +95,7 @@ public class NotificationsFragment extends Fragment { binding.port.setText(""); } - dataTransferAsyncTask = new DataTransferAsyncTask(ipAddress, port); - - + // dataTransferAsyncTask = new DataTransferAsyncTask(ipAddress, port); final Button button = binding.connect; button.setOnClickListener(new View.OnClickListener() { @@ -97,22 +103,7 @@ public class NotificationsFragment extends Fragment { ipAddress = String.valueOf(binding.ipAdress.getText()); port = Integer.parseInt(String.valueOf(binding.port.getText())); - new Thread(new Runnable(){ - public void run(){ - try { - Socket socket = new Socket(ipAddress, port); - DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream()); - outputStream.writeBytes("Verbindung aufbauen"); - outputStream.flush(); - socket.close(); - connected = true; - - } catch (Exception e) { - e.printStackTrace(); - connected = false; - } - } - }).start(); + connected = mainActivity.connectToWifi(ipAddress, port); if(connected){ editor.putString(ipKey, ipAddress); @@ -123,7 +114,7 @@ public class NotificationsFragment extends Fragment { }else{ Toast toast = Toast.makeText(v.getContext(), connectionFailed, duration); toast.show(); - dataTransferAsyncTask.cancel(true); + // dataTransferAsyncTask.cancel(true); } } }); @@ -134,7 +125,7 @@ public class NotificationsFragment extends Fragment { @Override public void onDestroyView() { super.onDestroyView(); - dataTransferAsyncTask.cancel(true); + // dataTransferAsyncTask.cancel(true); binding = null; } } \ No newline at end of file