Moved functionality of sending and receiving messages to and from server into separate threads.

This commit is contained in:
WickedJack99
2023-12-28 21:51:11 +01:00
parent adcb90a85a
commit 72eafc8c3c
4 changed files with 145 additions and 47 deletions

View File

@@ -7,7 +7,7 @@ import data.src.ControllerToConnectionClient.ControllerToConnectionClientData;
public interface Client {
public boolean createConnection(ControllerToConnectionClientData controllerToConnectionClientData);
public void sendData(String data);
public void receiveData();
public void startSender();
public void startReceiver();
public void closeConnection();
}

View File

@@ -0,0 +1,59 @@
/**
* @author Aaron Moser
* @date 26.12.2023
*/
package connect.src;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import queues.src.ReceivingQueue;
public class Receiver extends Thread {
private static Receiver instance = null;
private boolean receiverRunning = false;
BufferedReader reader = null;
private Receiver() {}
public static Receiver getInstance() {
if (instance == null) {
instance = new Receiver();
}
return instance;
}
@Override
public void run() {
receiverRunning = true;
while (receiverRunning) {
receiveData();
}
}
public void receiveData() {
try {
if (TLSClient.getSSLSocket().isConnected()) {
if (reader == null) {
reader = new BufferedReader(new InputStreamReader(TLSClient.getSSLSocket().getInputStream()));
}
if (reader != null) {
String response;
while ((response = reader.readLine()) != null) {
//System.out.println(response);
ReceivingQueue.getInstance().add(response);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopThread() {
this.receiverRunning = false;
}
}

View File

@@ -0,0 +1,73 @@
/**
* @author Aaron Moser
* @date 26.12.2023
*/
package connect.src;
import java.io.IOException;
import java.io.PrintWriter;
import javax.net.ssl.SSLSocket;
import queues.src.SendingQueue;
/**
* TODO change pattern from singleton to dependency injection.
*/
public class Sender extends Thread {
private static Sender instance = null;
private boolean senderRunning = false;
private PrintWriter writer = null;
private Sender() {}
public static Sender getInstance() {
if (instance == null) {
instance = new Sender();
}
return instance;
}
@Override
public void run() {
senderRunning = true;
while (senderRunning) {
try {
// Wait until controller puts requests into sending queue.
String item = SendingQueue.getInstance().take();
System.out.println("Sender sends: " + item);
sendData(item);
} catch (InterruptedException e) {
System.out.println("Sender thread was interrupted.");
Thread.currentThread().interrupt();
return;
}
}
}
private void sendData(String data) {
try {
if (TLSClient.getSSLSocket().isConnected()) {
if (writer == null) {
writer = new PrintWriter(TLSClient.getSSLSocket().getOutputStream());
}
if (writer != null && data != null) {
writer.println(data);
writer.flush();
} else {
System.out.println("Connection is not established.");
}
} else {
System.out.println("SSLSocket is null.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void stopThread() {
this.senderRunning = false;
}
}

View File

@@ -6,7 +6,6 @@ package connect.src;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.UnknownHostException;
@@ -27,9 +26,11 @@ import data.src.ControllerToConnectionClient.ControllerToConnectionClientData;
public final class TLSClient implements Client {
private SSLSocket sslSocket;
private BufferedReader reader;
private PrintWriter writer;
private static SSLSocket sslSocket;
public static synchronized SSLSocket getSSLSocket() {
return sslSocket;
}
public boolean createConnection(ControllerToConnectionClientData controllerToConnectionClientData) {
try {
@@ -76,56 +77,21 @@ public final class TLSClient implements Client {
}
}
public void sendData(String data) {
try {
writer = new PrintWriter(sslSocket.getOutputStream());
if (sslSocket != null && sslSocket.isConnected() && writer != null) {
writer.println("Hello Server!");
writer.flush();
if (null != data) {
writer.println(data);
writer.flush();
}
} else {
System.out.println("Connection is not established.");
}
} catch (IOException e) {
e.printStackTrace();
}
public void startSender() {
Sender.getInstance().start();
}
public void receiveData() {
try {
reader = new BufferedReader(new InputStreamReader(sslSocket.getInputStream()));
if (null != reader) {
String response;
while ((response = reader.readLine()) != null) {
System.out.println(response);
}
}
} catch (IOException e) {
e.printStackTrace();
}
public void startReceiver() {
Receiver.getInstance().start();
}
public void closeConnection() {
try {
if (null != reader) {
reader.close();
}
if (null != writer) {
writer.close();
if (sslSocket != null) {
sslSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (null != sslSocket) {
sslSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}