From d2a6ebc1dcfd4c8756e1a23bc0ebc09d3c86290f Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Thu, 1 Jun 2023 13:23:33 +0200 Subject: [PATCH 01/13] AddSubscriber mesh functionaliteit toe --- .../modules/infrastructure/networkmodule/Peer.java | 4 ++-- .../infrastructure/networkmodule/PeerUnitTest.java | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index 77443288..a21d52be 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -371,9 +371,9 @@ public class Peer implements IPeer, INetwork { * @param subscriber {@link IPeer} is the new subscriber that will be added to the subscription list of the coordinator. */ @Override - public void addNewSubscriber(IPeer subscriber, LotDTO lotDTO) { + public void addNewSubscriber(IPeer newSubscriber, LotDTO lotDTO) { // print subscriber request and send it to everyone in the network. Used for testing. - String message = "Received request to subscribe from " + subscriber.getId(); + String message = "Received request to subscribe from " + newSubscriber.getId(); System.out.println(message); // add the new subscriber to subscriber hashmap diff --git a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java index ef3a0cf1..14329d83 100644 --- a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java +++ b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java @@ -32,6 +32,11 @@ public class PeerUnitTest { public IRpcServer mockRpcServer; public Peer sut; + public Peer subscriber1; + public Peer subscriber2; + public Peer subscriber3; + + public Peer newSubscriber; @BeforeEach public void setup() { @@ -125,7 +130,7 @@ public class PeerUnitTest { public void testAddNewSubscriberWhereSubscribersNotNull() { // Arrange Peer spyPeer = spy(sut); - IPeer subscriber = mock(IPeer.class); + IPeer subscriber = newSubscriber; LotDTO lotDTO = mock(LotDTO.class); HashMap<String, HashMap<String, List<IPeer>>> subscriptions = mock(HashMap.class); List<IPeer> subscribers = mock(ArrayList.class); @@ -134,7 +139,7 @@ public class PeerUnitTest { when(lotDTO.getAuctionid()).thenReturn("auctionId"); when(lotDTO.getLotid()).thenReturn("lotId"); - when(subscribers.contains(subscriber)).thenReturn(false); + //when(subscribers.contains(subscriber)).thenReturn(false); when(subscriptions.get(anyString())).thenReturn(mock()); when(subscriptions.get(anyString()).get(anyString())).thenReturn(subscribers); -- GitLab From 4c1b45279f01019383933fab776a4d2f92564e31 Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Thu, 1 Jun 2023 13:23:42 +0200 Subject: [PATCH 02/13] Changes by aron --- .../infrastructure/networkmodule/Peer.java | 16 ++++++++++++---- .../networkmodule/PeerUnitTest.java | 11 ++++++++--- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index a21d52be..d2f5f9fa 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -368,7 +368,7 @@ public class Peer implements IPeer, INetwork { /** * Function that will subscribe a peer to an auction. * - * @param subscriber {@link IPeer} is the new subscriber that will be added to the subscription list of the coordinator. + * @param newSubscriber {@link IPeer} is the new subscriber that will be added to the subscription list of the coordinator. */ @Override public void addNewSubscriber(IPeer newSubscriber, LotDTO lotDTO) { @@ -382,10 +382,18 @@ public class Peer implements IPeer, INetwork { subscribers = new ArrayList<>(); subscriptions.get(lotDTO.getAuctionid()).put(lotDTO.getLotid(), subscribers); } - if (!subscribers.contains(subscriber)) { - subscribers.add(subscriber); - System.out.println(subscriber.getId() + " is now subscribed to lot " + lotDTO.getLotid() + " from auction " + lotDTO.getAuctionid()); + + if (!subscribers.contains(newSubscriber)) { + subscribers.add(newSubscriber); + System.out.println(newSubscriber.getId() + " is now subscribed to lot " + lotDTO.getLotid() + " from auction " + lotDTO.getAuctionid()); System.out.println(getSubscribersForLot(lotDTO)); + + //for subscribed in subscribers add new subscriber and send subscribed to newSubscriber + for(IPeer subscribed : subscribers){ + subscribed.addNewSubscriber(newSubscriber, lotDTO); + + newSubscriber.addNewSubscriber(subscribed, lotDTO); + } } } diff --git a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java index 14329d83..728ef12e 100644 --- a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java +++ b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java @@ -41,6 +41,10 @@ public class PeerUnitTest { @BeforeEach public void setup() { sut = new Peer(mockRpcServer, mockHeartBeatManager); + subscriber1 = new Peer(mockRpcServer, mockHeartBeatManager); + subscriber2 = new Peer(mockRpcServer, mockHeartBeatManager); + subscriber3 = new Peer(mockRpcServer, mockHeartBeatManager); + newSubscriber = new Peer(mockRpcServer, mockHeartBeatManager); } @Test @@ -132,8 +136,9 @@ public class PeerUnitTest { Peer spyPeer = spy(sut); IPeer subscriber = newSubscriber; LotDTO lotDTO = mock(LotDTO.class); - HashMap<String, HashMap<String, List<IPeer>>> subscriptions = mock(HashMap.class); - List<IPeer> subscribers = mock(ArrayList.class); + HashMap<String, HashMap<String, List<IPeer>>> subscriptions = new HashMap<>(); + + List<IPeer> subscribers = new ArrayList<IPeer>(); spyPeer.setSubscriptions(subscriptions); @@ -151,7 +156,7 @@ public class PeerUnitTest { // Assert verify(subscriptions).get("auctionId"); verify(subscribers).add(subscriber); - verify(subscriber, times(2)).getId(); +// verify(subscriber, times(2)).getId(); } @Test -- GitLab From 67fe774824624ecdb6cab6a41ae845c01d618831 Mon Sep 17 00:00:00 2001 From: Tom Janssen <t.janssen16@student.han.nl> Date: Thu, 1 Jun 2023 13:45:14 +0200 Subject: [PATCH 03/13] Solved auctions in network bug --- .../infrastructure/networkmodule/IPeer.java | 3 ++ .../infrastructure/networkmodule/Peer.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java index 1f3eb184..23791d57 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java @@ -5,7 +5,9 @@ import nl.han.aim.asd.veilveilig.core.application.dtos.LotDTO; import nl.han.aim.asd.veilveilig.core.application.dtos.OfferDTO; import nl.han.aim.asd.veilveilig.rpc.annotations.RpcCache; import nl.han.aim.asd.veilveilig.rpc.annotations.RpcObject; +import nl.han.aim.asd.veilveilig.rpc.models.IpAddress; +import java.util.HashMap; import java.util.List; @RpcObject @@ -33,4 +35,5 @@ public interface IPeer { void receiveDataFromParent(); List<AuctionDTO> getAuctionDataFromParent(); List<LotDTO> getLotDataFromParent(); + HashMap<String, IpAddress> getCurrentAuctionsInNetwork(); } diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index 77443288..23e9ac67 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -14,6 +14,7 @@ import nl.han.aim.asd.veilveilig.core.application.usecases.OfferService; import nl.han.aim.asd.veilveilig.rpc.IRpcServer; import nl.han.aim.asd.veilveilig.rpc.helpers.IpAddressHelper; import nl.han.aim.asd.veilveilig.rpc.helpers.ProxyHelper; +import nl.han.aim.asd.veilveilig.rpc.models.IpAddress; import java.util.ArrayList; import java.util.HashMap; @@ -121,6 +122,7 @@ public class Peer implements IPeer, INetwork { grandParent = parent.getParent(); addPeerToHeartbeat(parent); receiveDataFromParent(); + getAllActiveCoordinators(); if (grandParent != null) addPeerToHeartbeat(grandParent); } else { current = result; @@ -128,6 +130,16 @@ public class Peer implements IPeer, INetwork { } } + private void getAllActiveCoordinators(){ + if(parent!=null){ + HashMap<String, IpAddress> result = parent.getCurrentAuctionsInNetwork(); + + result.forEach((s, ip) -> { + auctionsInNetwork.put(s, server.createRpcProxy(IPeer.class, ip.Address, ip.port)); + }); + } + } + /** * Adds a new peer in the Tree structured network. It will add the new peer as a direct {@link #leftChild} or {@link #rightChild}, @@ -488,6 +500,11 @@ public class Peer implements IPeer, INetwork { */ @Override public void receiveAuctionPing(AuctionDTO auction, LotDTO lot, IPeer auctioneer, IPeer sender) { + if(auctionsInNetwork.containsKey(auction.getAuctionid())){ + auctionsInNetwork.replace(auction.getAuctionid(), auctioneer); + return; + } + auctionsInNetwork.put(auction.getAuctionid(), auctioneer); //ugly fix for demo @@ -731,4 +748,15 @@ public class Peer implements IPeer, INetwork { public void setId(String id) { this.peerId = id; } + + @Override + public HashMap<String, IpAddress> getCurrentAuctionsInNetwork() { + HashMap<String, IpAddress> result = new HashMap<>(); + + auctionsInNetwork.forEach((s, p) -> { + result.put(s, ProxyHelper.getIpAddressFromProxy(p)); + }); + + return result; + } } -- GitLab From 59fbaf7cd8f0868f37581b3c251515aea4f1e3eb Mon Sep 17 00:00:00 2001 From: Tom Janssen <t.janssen16@student.han.nl> Date: Thu, 1 Jun 2023 13:52:15 +0200 Subject: [PATCH 04/13] Solved test --- .../modules/infrastructure/networkmodule/Peer.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index c0379ad5..ddc70d6d 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -510,11 +510,10 @@ public class Peer implements IPeer, INetwork { public void receiveAuctionPing(AuctionDTO auction, LotDTO lot, IPeer auctioneer, IPeer sender) { if(auctionsInNetwork.containsKey(auction.getAuctionid())){ auctionsInNetwork.replace(auction.getAuctionid(), auctioneer); - return; + } else { + auctionsInNetwork.put(auction.getAuctionid(), auctioneer); } - auctionsInNetwork.put(auction.getAuctionid(), auctioneer); - //ugly fix for demo List<LotDTO> lots = new ArrayList<>(); lots.add(lot); -- GitLab From 9b54bd6f333ea15c2fbf1c0e4deddcd037282e95 Mon Sep 17 00:00:00 2001 From: oshalabi <O.Halabi@student.han.nl> Date: Thu, 1 Jun 2023 13:53:53 +0200 Subject: [PATCH 05/13] fixed testAddNewSubscriberWhereSubscribersNotNull --- .../networkmodule/PeerUnitTest.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java index 728ef12e..90a7802b 100644 --- a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java +++ b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java @@ -134,19 +134,19 @@ public class PeerUnitTest { public void testAddNewSubscriberWhereSubscribersNotNull() { // Arrange Peer spyPeer = spy(sut); - IPeer subscriber = newSubscriber; + IPeer subscriber = mock(IPeer.class); LotDTO lotDTO = mock(LotDTO.class); HashMap<String, HashMap<String, List<IPeer>>> subscriptions = new HashMap<>(); - - List<IPeer> subscribers = new ArrayList<IPeer>(); + HashMap<String, List<IPeer>> lotIdToSubscribersMap = new HashMap<>(); + List<IPeer> subscribers = new ArrayList<>(); spyPeer.setSubscriptions(subscriptions); + subscriptions.put("auctionId", lotIdToSubscribersMap); + lotIdToSubscribersMap.put("lotId", subscribers); + when(lotDTO.getAuctionid()).thenReturn("auctionId"); when(lotDTO.getLotid()).thenReturn("lotId"); - //when(subscribers.contains(subscriber)).thenReturn(false); - when(subscriptions.get(anyString())).thenReturn(mock()); - when(subscriptions.get(anyString()).get(anyString())).thenReturn(subscribers); doReturn("").when(spyPeer).getSubscribersForLot(lotDTO); @@ -154,11 +154,12 @@ public class PeerUnitTest { spyPeer.addNewSubscriber(subscriber, lotDTO); // Assert - verify(subscriptions).get("auctionId"); - verify(subscribers).add(subscriber); -// verify(subscriber, times(2)).getId(); + assertTrue(subscribers.contains(subscriber)); + verify(spyPeer).getSubscribersForLot(lotDTO); + verify(subscriber, times(2)).getId(); } + @Test public void testAddNewSubscriberWhereSubscribersNull() { // Arrange -- GitLab From c2c6c0008fcb665fcc834dc08f1f72094efce50a Mon Sep 17 00:00:00 2001 From: Tom Janssen <t.janssen16@student.han.nl> Date: Thu, 1 Jun 2023 14:25:10 +0200 Subject: [PATCH 06/13] Solved small bug --- .../modules/infrastructure/networkmodule/Peer.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index ddc70d6d..16e80e99 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -134,9 +134,11 @@ public class Peer implements IPeer, INetwork { if(parent!=null){ HashMap<String, IpAddress> result = parent.getCurrentAuctionsInNetwork(); - result.forEach((s, ip) -> { - auctionsInNetwork.put(s, server.createRpcProxy(IPeer.class, ip.Address, ip.port)); - }); + if(result != null) { + result.forEach((s, ip) -> { + auctionsInNetwork.put(s, server.createRpcProxy(IPeer.class, ip.Address, ip.port)); + }); + } } } -- GitLab From a8e544afc00b0cb5b258f272833bde682f0e3636 Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Thu, 1 Jun 2023 14:25:40 +0200 Subject: [PATCH 07/13] AddSubscriber mesh functionaliteit toe --- .../application/adapters/NetworkAdapter.java | 5 +++++ .../core/application/dependencies/INetwork.java | 1 + .../core/application/ports/INetworkPort.java | 1 + .../infrastructure/networkmodule/Peer.java | 16 +++++++++++----- src/test/java/network/manual/Main.java | 5 ++++- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java index e264a990..50511b85 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java @@ -49,6 +49,11 @@ public class NetworkAdapter implements INetworkPort { network.sendOffer(offer, auctionId); } + @Override + public void showSubs() { + network.showSubs(); + } + @Override public void sendAuctionToNetwork(AuctionDTO auctionDTO, List<LotDTO> lotDTOList) { network.sendAuctionToNetwork(auctionDTO,lotDTOList); diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java index 414d0c21..d467d21f 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java @@ -20,4 +20,5 @@ public interface INetwork { void sendOffer(OfferDTO offer, String auctionId); void setId(String id); + void showSubs(); } diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java index 45730b05..484e8444 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java @@ -12,6 +12,7 @@ public interface INetworkPort { void subscribeToLot(LotDTO lotDTO); void createAuction(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); void sendOffer(OfferDTO offer, String auctionId); + void showSubs(); void sendAuctionToNetwork(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); } diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index c0379ad5..d93e8cc1 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -16,10 +16,7 @@ import nl.han.aim.asd.veilveilig.rpc.helpers.IpAddressHelper; import nl.han.aim.asd.veilveilig.rpc.helpers.ProxyHelper; import nl.han.aim.asd.veilveilig.rpc.models.IpAddress; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; /** @@ -403,8 +400,8 @@ public class Peer implements IPeer, INetwork { //for subscribed in subscribers add new subscriber and send subscribed to newSubscriber for(IPeer subscribed : subscribers){ subscribed.addNewSubscriber(newSubscriber, lotDTO); - newSubscriber.addNewSubscriber(subscribed, lotDTO); + System.out.println("I have subscriber: "+subscribed.getId()); } } } @@ -478,6 +475,15 @@ public class Peer implements IPeer, INetwork { thread.start(); } + @Override + public void showSubs(){ + +for(Map.Entry<String, HashMap<String, List<IPeer>>> set : subscriptions.entrySet()){ + for (IPeer subscriber : subscriptions.get(String.class).get(String.class)) { + System.out.println(subscriber.getId()); + }} + } + /** * sends offer to auctioning peer based on the auctionId in the offer * diff --git a/src/test/java/network/manual/Main.java b/src/test/java/network/manual/Main.java index e3832b22..a35f0dfe 100644 --- a/src/test/java/network/manual/Main.java +++ b/src/test/java/network/manual/Main.java @@ -81,7 +81,10 @@ public class Main { makeOffer(br); } else if (line.equals("create auction")) { createAuction(br); - }else { + }else if (line.equals("view subscribers")){ + peer.showSubs(); + } + else { peer.broadcastMessage(line); } } -- GitLab From bfd2415bb0020463ae9d05609208effdee99312e Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Thu, 1 Jun 2023 14:58:22 +0200 Subject: [PATCH 08/13] rpc 21 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c14e3172..315ebac5 100644 --- a/pom.xml +++ b/pom.xml @@ -144,7 +144,7 @@ <dependency> <groupId>nl.han.asd</groupId> <artifactId>rpc</artifactId> - <version>1.1.20-SNAPSHOT</version> + <version>1.1.21</version> </dependency> <dependency> -- GitLab From 836c463ea1ac4a4503aa8e2b9c030b4185eef8c0 Mon Sep 17 00:00:00 2001 From: Tom Janssen <t.janssen16@student.han.nl> Date: Thu, 1 Jun 2023 15:22:17 +0200 Subject: [PATCH 09/13] Solved some more bugs --- .../modules/infrastructure/networkmodule/Peer.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index 16e80e99..e8af0cf9 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -367,7 +367,11 @@ public class Peer implements IPeer, INetwork { @Override public void createAuction(AuctionDTO auctionDTO, List<LotDTO> lots) { // add the new auction to the auctionsInNetwork list - auctionsInNetwork.put(auctionDTO.getAuctionid(), this); + if(auctionsInNetwork.containsKey(auctionDTO.getAuctionid())){ + auctionsInNetwork.replace(auctionDTO.getAuctionid(), this); + } else { + auctionsInNetwork.put(auctionDTO.getAuctionid(), this); + } // create subscription list for the new auction for (LotDTO lot : lots) { @@ -376,7 +380,7 @@ public class Peer implements IPeer, INetwork { } // ping the whole network about the newly created auction - sendAuctionToNetwork(auctionDTO, lots, this, this); + sendAuctionToNetwork(auctionDTO, lots); } /** -- GitLab From b996d6e99994b62c395b18f5cfef5b369aa05000 Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Thu, 1 Jun 2023 16:23:04 +0200 Subject: [PATCH 10/13] number of invocations aangepast naar 3 vanwege verandering structuur netwerk --- .../infrastructure/networkmodule/PeerUnitTest.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java index 90a7802b..32a69ae4 100644 --- a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java +++ b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java @@ -32,19 +32,12 @@ public class PeerUnitTest { public IRpcServer mockRpcServer; public Peer sut; - public Peer subscriber1; - public Peer subscriber2; - public Peer subscriber3; - public Peer newSubscriber; @BeforeEach public void setup() { sut = new Peer(mockRpcServer, mockHeartBeatManager); - subscriber1 = new Peer(mockRpcServer, mockHeartBeatManager); - subscriber2 = new Peer(mockRpcServer, mockHeartBeatManager); - subscriber3 = new Peer(mockRpcServer, mockHeartBeatManager); - newSubscriber = new Peer(mockRpcServer, mockHeartBeatManager); + } @Test @@ -156,7 +149,7 @@ public class PeerUnitTest { // Assert assertTrue(subscribers.contains(subscriber)); verify(spyPeer).getSubscribersForLot(lotDTO); - verify(subscriber, times(2)).getId(); + verify(subscriber, times(3)).getId(); } -- GitLab From 0662db0a6c180a54796243d7eb4adc3f130ad0f9 Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Fri, 2 Jun 2023 09:57:55 +0200 Subject: [PATCH 11/13] unsubscribeFromLot functionaliteit toegevoegd, geen tests omdat dit nog een "could" is --- .../application/adapters/NetworkAdapter.java | 16 +++++--- .../application/dependencies/INetwork.java | 2 +- .../core/application/ports/INetworkPort.java | 3 +- .../infrastructure/networkmodule/IPeer.java | 2 + .../infrastructure/networkmodule/Peer.java | 40 +++++++++++++------ src/test/java/network/manual/Main.java | 5 +-- 6 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java index 50511b85..95ebd9ad 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java @@ -24,7 +24,7 @@ public class NetworkAdapter implements INetworkPort { INetwork network; /** - * Calls the INetwork interface to subscribe the Peer to lot {@param lotId} of auction {@param auctionId}. + * Calls the INetwork interface to subscribe the Peer to lot {@param lotId}. * */ @Override @@ -32,6 +32,15 @@ public class NetworkAdapter implements INetworkPort { network.subscribeToLot(lotDTO); } + /** + * Calls the INetwork interface to unsubscribe the Peer from lot {@param lotId}. + * + */ + @Override + public void unsubscribeFromLot(LotDTO lotDTO) { + network.unsubscribeFromLot(lotDTO); + } + @Override public void createAuction(AuctionDTO auctionDTO, List<LotDTO> lots) { @@ -49,10 +58,7 @@ public class NetworkAdapter implements INetworkPort { network.sendOffer(offer, auctionId); } - @Override - public void showSubs() { - network.showSubs(); - } + @Override public void sendAuctionToNetwork(AuctionDTO auctionDTO, List<LotDTO> lotDTOList) { diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java index d467d21f..af664925 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java @@ -14,11 +14,11 @@ public interface INetwork { String getNetworkInfo(); void kill(); void subscribeToLot(LotDTO lotDTO); + void unsubscribeFromLot(LotDTO lotDTO); void createAuction(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); void sendAuctionToNetwork(AuctionDTO auction, List<LotDTO> lots); void sendOffer(OfferDTO offer, String auctionId); void setId(String id); - void showSubs(); } diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java index 484e8444..2f45a4da 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java @@ -10,9 +10,8 @@ import java.util.List; public interface INetworkPort { void subscribeToLot(LotDTO lotDTO); + void unsubscribeFromLot(LotDTO lotDTO); void createAuction(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); void sendOffer(OfferDTO offer, String auctionId); - void showSubs(); - void sendAuctionToNetwork(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); } diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java index 23791d57..c85fd0c7 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/IPeer.java @@ -28,6 +28,8 @@ public interface IPeer { IPeer getMaster(); String getAllPeerParentInfoConcurrently(); Integer getHeartbeatManagerPort(); + void unsubscribeFromLot(IPeer subscriber, LotDTO lotDTO); + void addNewSubscriber(IPeer subscriber, LotDTO lotDTO); void receiveAuctionPing(AuctionDTO auctionDTO, LotDTO lot, IPeer auctioneer, IPeer sender); void sendAuctionToNetwork(AuctionDTO auction, List<LotDTO> lots, IPeer auctioneer, IPeer sender); diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index acaa2279..4ac748aa 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -356,6 +356,31 @@ public class Peer implements IPeer, INetwork { coordinator.addNewSubscriber(this, lotDTO); } + /** + * This function is responsible for subscribing the peer to an existing auction. + */ + @Override + public void unsubscribeFromLot(IPeer subscriber,LotDTO lotDTO) { + // print unsubscribe request and send it to everyone in the network. Used for testing. + String message = subscriber.getId()+" has unsubscribed from this auction"; + System.out.println(message); + + // get the list of subscribers from this list. + List<IPeer> subscribers = subscriptions.get(lotDTO.getAuctionid()).get(lotDTO.getLotid()); + + //removes subscriber from this peers subscribers + if (subscribers.contains(subscriber)) { + subscribers.remove(subscriber.getId()); + System.out.println(subscriber.getId() + " is now unsubscribed from lot " + lotDTO.getLotid() + " from auction " + lotDTO.getAuctionid()); + + //sends call to remove the subscriber from this peers its subscribers, and then unsubscribes the current sub from the given sub + for(IPeer subscribed : subscribers){ + subscribed.unsubscribeFromLot(subscriber, lotDTO); + subscriber.unsubscribeFromLot(subscribed, lotDTO); + } + } + } + /** * Creates an auction, and pings its existence to the whole network. * @@ -383,7 +408,8 @@ public class Peer implements IPeer, INetwork { /** * Function that will subscribe a peer to an auction. * - * @param newSubscriber {@link IPeer} is the new subscriber that will be added to the subscription list of the coordinator. + * @param newSubscriber {@link IPeer} is the new subscriber that will be added to the subscription list of all other subscribers of the auction. + * @param lotDTO {@link LotDTO} The lot the peer will subscribe to. */ @Override public void addNewSubscriber(IPeer newSubscriber, LotDTO lotDTO) { @@ -391,13 +417,13 @@ public class Peer implements IPeer, INetwork { String message = "Received request to subscribe from " + newSubscriber.getId(); System.out.println(message); - // add the new subscriber to subscriber hashmap List<IPeer> subscribers = subscriptions.get(lotDTO.getAuctionid()).get(lotDTO.getLotid()); if (subscribers == null) { subscribers = new ArrayList<>(); subscriptions.get(lotDTO.getAuctionid()).put(lotDTO.getLotid(), subscribers); } + //if list of subscriber does not contain new subscriber, add it to the list if (!subscribers.contains(newSubscriber)) { subscribers.add(newSubscriber); System.out.println(newSubscriber.getId() + " is now subscribed to lot " + lotDTO.getLotid() + " from auction " + lotDTO.getAuctionid()); @@ -407,7 +433,6 @@ public class Peer implements IPeer, INetwork { for(IPeer subscribed : subscribers){ subscribed.addNewSubscriber(newSubscriber, lotDTO); newSubscriber.addNewSubscriber(subscribed, lotDTO); - System.out.println("I have subscriber: "+subscribed.getId()); } } } @@ -481,15 +506,6 @@ public class Peer implements IPeer, INetwork { thread.start(); } - @Override - public void showSubs(){ - -for(Map.Entry<String, HashMap<String, List<IPeer>>> set : subscriptions.entrySet()){ - for (IPeer subscriber : subscriptions.get(String.class).get(String.class)) { - System.out.println(subscriber.getId()); - }} - } - /** * sends offer to auctioning peer based on the auctionId in the offer * diff --git a/src/test/java/network/manual/Main.java b/src/test/java/network/manual/Main.java index a35f0dfe..672ce0dc 100644 --- a/src/test/java/network/manual/Main.java +++ b/src/test/java/network/manual/Main.java @@ -81,10 +81,7 @@ public class Main { makeOffer(br); } else if (line.equals("create auction")) { createAuction(br); - }else if (line.equals("view subscribers")){ - peer.showSubs(); - } - else { + } else { peer.broadcastMessage(line); } } -- GitLab From 0ebd1bed67e44ccdbe9db645704671038089a0f8 Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Fri, 2 Jun 2023 10:49:04 +0200 Subject: [PATCH 12/13] kleine refactors+javadoc --- .../core/application/adapters/NetworkAdapter.java | 8 -------- .../core/application/dependencies/INetwork.java | 1 - .../veilveilig/core/application/ports/INetworkPort.java | 2 +- .../modules/infrastructure/networkmodule/Peer.java | 5 ++--- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java index 95ebd9ad..53c0c6c9 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/adapters/NetworkAdapter.java @@ -32,14 +32,6 @@ public class NetworkAdapter implements INetworkPort { network.subscribeToLot(lotDTO); } - /** - * Calls the INetwork interface to unsubscribe the Peer from lot {@param lotId}. - * - */ - @Override - public void unsubscribeFromLot(LotDTO lotDTO) { - network.unsubscribeFromLot(lotDTO); - } @Override diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java index af664925..414d0c21 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/dependencies/INetwork.java @@ -14,7 +14,6 @@ public interface INetwork { String getNetworkInfo(); void kill(); void subscribeToLot(LotDTO lotDTO); - void unsubscribeFromLot(LotDTO lotDTO); void createAuction(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); void sendAuctionToNetwork(AuctionDTO auction, List<LotDTO> lots); diff --git a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java index 2f45a4da..e2a412eb 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/core/application/ports/INetworkPort.java @@ -3,6 +3,7 @@ package nl.han.aim.asd.veilveilig.core.application.ports; import nl.han.aim.asd.veilveilig.core.application.dtos.OfferDTO; import nl.han.aim.asd.veilveilig.core.application.dtos.AuctionDTO; import nl.han.aim.asd.veilveilig.core.application.dtos.LotDTO; +import nl.han.aim.asd.veilveilig.modules.infrastructure.networkmodule.IPeer; import java.util.List; @@ -10,7 +11,6 @@ import java.util.List; public interface INetworkPort { void subscribeToLot(LotDTO lotDTO); - void unsubscribeFromLot(LotDTO lotDTO); void createAuction(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); void sendOffer(OfferDTO offer, String auctionId); void sendAuctionToNetwork(AuctionDTO auctionDTO, List<LotDTO> lotDTOList); diff --git a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java index 4ac748aa..d734ae17 100644 --- a/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java +++ b/src/main/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/Peer.java @@ -357,15 +357,14 @@ public class Peer implements IPeer, INetwork { } /** - * This function is responsible for subscribing the peer to an existing auction. + * This function is responsible for unsubscribing the peer from an existing auction. */ @Override - public void unsubscribeFromLot(IPeer subscriber,LotDTO lotDTO) { + public void unsubscribeFromLot(IPeer subscriber, LotDTO lotDTO) { // print unsubscribe request and send it to everyone in the network. Used for testing. String message = subscriber.getId()+" has unsubscribed from this auction"; System.out.println(message); - // get the list of subscribers from this list. List<IPeer> subscribers = subscriptions.get(lotDTO.getAuctionid()).get(lotDTO.getLotid()); //removes subscriber from this peers subscribers -- GitLab From 3d3a1ffa015532b6638707aea30a7af38b8b5c2e Mon Sep 17 00:00:00 2001 From: cuneytozturk <c.ozturk1@student.han.nl> Date: Mon, 5 Jun 2023 09:24:16 +0200 Subject: [PATCH 13/13] tests gefixt.. invocaties waren verkeerd ! --- .../modules/infrastructure/networkmodule/PeerUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java index 32a69ae4..dc277efe 100644 --- a/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java +++ b/src/test/java/nl/han/aim/asd/veilveilig/modules/infrastructure/networkmodule/PeerUnitTest.java @@ -149,7 +149,7 @@ public class PeerUnitTest { // Assert assertTrue(subscribers.contains(subscriber)); verify(spyPeer).getSubscribersForLot(lotDTO); - verify(subscriber, times(3)).getId(); + verify(subscriber, times(2)).getId(); } -- GitLab