Added Peer notification sendable and requestable.

This commit is contained in:
WickedJack99
2024-04-22 16:01:21 +02:00
parent 9b61971e78
commit 32f972b739
3 changed files with 99 additions and 2 deletions

View File

@@ -0,0 +1,43 @@
package vslab1.src.Request.Data;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import vslab1.src.FileReaderWriter.FileReaderWriter;
import vslab1.src.Peers.EOnlineState;
import vslab1.src.Peers.Peer;
import vslab1.src.Sending.SendingQueue;
import vslab1.src.Sending.Data.EDataType;
/**
* Received peer message from peers in network to this newly joined peer. This peer will update its
* peer list with received file list and set online state of the peer to online.
*/
public record ReceivedPeerNotification(Peer sender, Peer receiver, JSONArray sender_files) implements Requestable {
@Override
public EDataType getType() {
return EDataType.PeerNotification;
}
@Override
public Peer getSender() {
return sender;
}
@Override
public Peer getReceiver() {
return receiver;
}
@Override
public void execute(SendingQueue sendingQueue) {
Map<String, String> filesMap = new HashMap<String, String>();
sender_files.forEach((file) -> {
filesMap.put(file.toString(), "");
});
FileReaderWriter.updatePeer(new Peer(sender.ipAddress(), sender.port(), filesMap, EOnlineState.Online));
}
}

View File

@@ -16,7 +16,7 @@ import vslab1.src.Request.Data.ReceivedLeaveNotification;
import vslab1.src.Request.Data.ReceivedOnlineStateNotification;
import vslab1.src.Request.Data.OnlineStateRequestRequest;
import vslab1.src.Request.Data.ReceivedPeerJoinedNotification;
import vslab1.src.Request.Data.ReceivedPeerResponse;
import vslab1.src.Request.Data.ReceivedPeerNotification;
import vslab1.src.Request.Data.PublishFileNameNotificationRequest;
import vslab1.src.Request.Data.PullFileListRequestRequest;
import vslab1.src.Request.Data.PullFileRequestRequest;
@@ -92,7 +92,7 @@ public class RequestExecuterThread extends Thread implements Terminatable {
}
if (receivedData.has("peer")) {
JSONArray files = receivedData.getJSONArray("files");
return new ReceivedPeerResponse(parseIPPortField(receivedData), FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate), files);
return new ReceivedPeerNotification(parseIPPortField(receivedData), FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate), files);
}
if (receivedData.has("leave")) {
return new ReceivedLeaveNotification(parseIPPortField(receivedData), FileReaderWriter.getThisPeer(EUpdateFlag.DoNotUpdate));

View File

@@ -0,0 +1,54 @@
package vslab1.src.Sending.Data;
import java.util.Map;
import vslab1.src.FileReaderWriter.FileReaderWriter;
import vslab1.src.FileReaderWriter.FileReaderWriter.EUpdateFlag;
import vslab1.src.Peers.Peer;
/**
* Sent to peer that sent a join request to a friend in the network.
* The friend who received the join request, sends peerJoined to the
* other peers and they respond with this message, informing about their
* presence and file list.
*/
public record PeerNotification(Peer sender, Peer receiver) implements Sendable {
@Override
public EDataType getType() {
return EDataType.PeerNotification;
}
@Override
public Peer getSender() {
return sender;
}
@Override
public Peer getReceiver() {
return receiver;
}
@Override
public byte[] getMessage() {
String fileList = "";
Map<String, String> files = FileReaderWriter.getThisPeer(EUpdateFlag.Update).filesMap();
for (Map.Entry<String, String> file : files.entrySet()) {
fileList += file.getKey() + ",";
}
// Remove last comma
fileList = fileList.substring(0, fileList.length() - 2);
String response =
"{\"peer\":\"\"" +
"," +
"\"ipPort\":\"" + sender.ipAddress() + ":" + sender.port() + "\"" +
"," +
"\"files\":[" +
fileList +
"]}";
return response.getBytes();
}
}