Moved functionality of sending and receiving messages to and from server into separate threads.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
59
src/main/java/connect/src/Receiver.java
Normal file
59
src/main/java/connect/src/Receiver.java
Normal 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;
|
||||
}
|
||||
}
|
||||
73
src/main/java/connect/src/Sender.java
Normal file
73
src/main/java/connect/src/Sender.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user