Classes part of sending logic.
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record OnlineStateNotification(Peer sender, Peer receiver) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.OnlineStateNotification;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String request =
|
||||
"{\"onlineState\":\"online\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return request.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
31
src/main/java/java/src/Sending/Data/OnlineStateRequest.java
Normal file
31
src/main/java/java/src/Sending/Data/OnlineStateRequest.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record OnlineStateRequest(Peer sender, Peer receiver) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.OnlineStateRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String request =
|
||||
"{\"onlineState\":\"\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return request.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
31
src/main/java/java/src/Sending/Data/OnlineStateResponse.java
Normal file
31
src/main/java/java/src/Sending/Data/OnlineStateResponse.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record OnlineStateResponse(Peer sender, Peer receiver) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.OnlineStateResponse;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String response =
|
||||
"{\"onlineState\":\"online\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return response.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record PublishFileNameNotification(Peer sender, Peer receiver, String fileName) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.PublishFileNameNotification;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String response =
|
||||
"{\"publishFileName\":\"" + fileName +"\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return response.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
34
src/main/java/java/src/Sending/Data/PullFileListRequest.java
Normal file
34
src/main/java/java/src/Sending/Data/PullFileListRequest.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
/**
|
||||
* Is never getting sent because szenario is, that all peers come online and stay online forever.
|
||||
*/
|
||||
public record PullFileListRequest(Peer sender, Peer receiver) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.PullFileListRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String response =
|
||||
"{\"pullFileList\":\"\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return response.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
31
src/main/java/java/src/Sending/Data/PullFileRequest.java
Normal file
31
src/main/java/java/src/Sending/Data/PullFileRequest.java
Normal file
@@ -0,0 +1,31 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record PullFileRequest(Peer sender, Peer receiver, String fileName) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.PullFileRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String response =
|
||||
"{\"pullFile\":\"" + fileName + "\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return response.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
33
src/main/java/java/src/Sending/Data/SendFileReply.java
Normal file
33
src/main/java/java/src/Sending/Data/SendFileReply.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
public record SendFileReply(Peer sender, Peer receiver, String fileContent, String fileName) implements Sendable {
|
||||
|
||||
@Override
|
||||
public EDataType getType() {
|
||||
return EDataType.PullFileRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getSender() {
|
||||
return this.sender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Peer getReceiver() {
|
||||
return this.receiver;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getMessage() {
|
||||
String response =
|
||||
"{\"sendFile\":\"" + fileContent + "\"" +
|
||||
"," +
|
||||
"\"fileName\":\"" + fileName + "\"" +
|
||||
"," +
|
||||
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"}";
|
||||
return response.getBytes();
|
||||
}
|
||||
|
||||
}
|
||||
18
src/main/java/java/src/Sending/Data/Sendable.java
Normal file
18
src/main/java/java/src/Sending/Data/Sendable.java
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
|
||||
package java.src.Sending.Data;
|
||||
|
||||
import java.src.Peers.Peer;
|
||||
|
||||
/**
|
||||
* An instance of this class represents data to send to another peer, by also providing information
|
||||
* about this peer and the receiving peer.
|
||||
*/
|
||||
public interface Sendable {
|
||||
public EDataType getType();
|
||||
public Peer getSender();
|
||||
public Peer getReceiver();
|
||||
public byte[] getMessage();
|
||||
}
|
||||
59
src/main/java/java/src/Sending/SenderThread.java
Normal file
59
src/main/java/java/src/Sending/SenderThread.java
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
|
||||
package java.src.Sending;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.src.Terminatable;
|
||||
import java.src.Sending.Data.Sendable;
|
||||
|
||||
public class SenderThread extends Thread implements Terminatable {
|
||||
|
||||
private DatagramSocket ds = null;
|
||||
private SendingQueue sendingQueue = null;
|
||||
|
||||
public SenderThread(DatagramSocket ds, SendingQueue sendingQueue) {
|
||||
this.ds = ds;
|
||||
this.sendingQueue = sendingQueue;
|
||||
}
|
||||
|
||||
private boolean senderThreadRunning = true;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while (senderThreadRunning) {
|
||||
try {
|
||||
Sendable dataToSent = sendingQueue.take();
|
||||
|
||||
byte[] fileData = dataToSent.getMessage();
|
||||
|
||||
if (fileData != null) {
|
||||
String receiverIpAddress = dataToSent.getReceiver().ipAddress();
|
||||
int receiverPort = dataToSent.getReceiver().port();
|
||||
int fileDataLength = fileData.length;
|
||||
|
||||
DatagramPacket dp =
|
||||
new DatagramPacket(fileData, fileDataLength, InetAddress.getByName(receiverIpAddress), receiverPort);
|
||||
ds.send(dp);
|
||||
}
|
||||
} catch (UnknownHostException e) {
|
||||
System.out.println("Error, host is unknown or unreachable.");
|
||||
} catch (IOException e) {
|
||||
System.out.println("Error, wasn't able to send data, because of problem with socket.");
|
||||
} catch (InterruptedException e) {
|
||||
System.out.println("Error, sending queue was interrupted. Terminating (this) sending thread..");
|
||||
this.terminate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void terminate() {
|
||||
senderThreadRunning = false;
|
||||
}
|
||||
}
|
||||
|
||||
10
src/main/java/java/src/Sending/SendingQueue.java
Normal file
10
src/main/java/java/src/Sending/SendingQueue.java
Normal file
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* @author Aaron Moser
|
||||
*/
|
||||
|
||||
package java.src.Sending;
|
||||
|
||||
import java.src.Sending.Data.Sendable;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
|
||||
public class SendingQueue extends LinkedBlockingQueue<Sendable> {}
|
||||
Reference in New Issue
Block a user