summaryrefslogtreecommitdiffstats
path: root/src/main/java/derms/replica/replica1/ResourceTransfer.java
diff options
context:
space:
mode:
authorSam Anthony <sam@samanthony.xyz>2024-11-23 13:51:12 -0500
committerSam Anthony <sam@samanthony.xyz>2024-11-23 13:51:12 -0500
commit3c62b863509131e78c18ed13c6b83e4fc508848f (patch)
treecf246e91da283edf704af936b9cef7eb8e09a6f8 /src/main/java/derms/replica/replica1/ResourceTransfer.java
parente3b72053e8b04f2df013da0d7d49fe33927461a9 (diff)
downloadsoen423-3c62b863509131e78c18ed13c6b83e4fc508848f.zip
import replica code from assignment
Diffstat (limited to 'src/main/java/derms/replica/replica1/ResourceTransfer.java')
-rw-r--r--src/main/java/derms/replica/replica1/ResourceTransfer.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/main/java/derms/replica/replica1/ResourceTransfer.java b/src/main/java/derms/replica/replica1/ResourceTransfer.java
new file mode 100644
index 0000000..fbc695c
--- /dev/null
+++ b/src/main/java/derms/replica/replica1/ResourceTransfer.java
@@ -0,0 +1,50 @@
+package derms.replica.replica1;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.SocketAddress;
+import java.util.ArrayList;
+import java.util.List;
+
+public class ResourceTransfer {
+ public static final int bufsize = 1024;
+
+ public static void send(Resource[] resources, SocketAddress remoteAddr) throws IOException {
+ DatagramSocket sock = new DatagramSocket();
+
+ for (Resource resource : resources) {
+ DatagramPacket pkt = ObjectPacket.create(resource, remoteAddr);
+ sock.send(pkt);
+ }
+
+ DatagramPacket pkt = ObjectPacket.create(new EndOfTransmission(), remoteAddr);
+ sock.send(pkt);
+ sock.close();
+ }
+
+ public static Resource[] receive(DatagramSocket sock) throws IOException {
+ List<Resource> resources = new ArrayList<Resource>();
+ byte[] buf = new byte[bufsize];
+ DatagramPacket response = new DatagramPacket(buf, buf.length);
+
+ for (;;) {
+ sock.receive(response);
+
+ Object obj = ObjectPacket.deserialize(response, Object.class);
+ if (obj.getClass() == EndOfTransmission.class) {
+ break;
+ }
+ try {
+ resources.add((Resource) obj);
+ } catch (Exception e) {
+ throw new IOException("expected Resource; got "+obj.getClass().toString());
+ }
+ }
+ Resource[] arr = new Resource[0];
+ return resources.toArray(arr);
+ }
+
+ private static class EndOfTransmission implements Serializable {}
+} \ No newline at end of file