Added Peer notification sendable and requestable.
This commit is contained in:
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
|
||||
54
src/main/java/vslab1/src/Sending/Data/PeerNotification.java
Normal file
54
src/main/java/vslab1/src/Sending/Data/PeerNotification.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user