diff --git a/matchBrowser/src/main/java/model/ClientAdress.java b/matchBrowser/src/main/java/model/ClientAdress.java index 94fef9c3..04930b49 100644 --- a/matchBrowser/src/main/java/model/ClientAdress.java +++ b/matchBrowser/src/main/java/model/ClientAdress.java @@ -37,7 +37,7 @@ public class ClientAdress { @Override public String toString() { - return "[ip='" + ip + '\'' + - ", port=" + port+"]"; + return "{ip='" + ip + '\'' + + ", port=" + port+"}"; } } diff --git a/matchBrowser/src/main/java/model/MatchTable.java b/matchBrowser/src/main/java/model/MatchTable.java index f181c8b5..9b47f97b 100644 --- a/matchBrowser/src/main/java/model/MatchTable.java +++ b/matchBrowser/src/main/java/model/MatchTable.java @@ -29,8 +29,8 @@ public class MatchTable { entryItems.add(newEntry.getRequiredNumPlayers()); entryItems.add(newEntry.getCurrentNumPlayers()); - this.matchTable.put(entryKey, entryItems); + } public HashMap getMatchTable() { @@ -39,7 +39,6 @@ public class MatchTable { @Override public String toString() { - return "[MatchTable=" + matchTable + - ']'; + return "MatchTable=" + matchTable; } } diff --git a/matchBrowser/src/main/java/model/TableKey.java b/matchBrowser/src/main/java/model/TableKey.java index 4e909c08..3a8a85e9 100644 --- a/matchBrowser/src/main/java/model/TableKey.java +++ b/matchBrowser/src/main/java/model/TableKey.java @@ -18,7 +18,7 @@ public class TableKey { if (this == o) return true; if (!(o instanceof TableKey)) return false; TableKey key = (TableKey) o; - return ip == key.ip && port == key.port; + return ip.equals(key.ip) && port == key.port; } @Override diff --git a/matchBrowser/src/main/java/networkInterface/NetworkInterface.java b/matchBrowser/src/main/java/networkInterface/NetworkInterface.java index bb5ad260..a1a58057 100644 --- a/matchBrowser/src/main/java/networkInterface/NetworkInterface.java +++ b/matchBrowser/src/main/java/networkInterface/NetworkInterface.java @@ -73,7 +73,7 @@ public class NetworkInterface { //this is just an alert message with no content clientsAddresses.add(new ClientAdress(receivePacket.getAddress().getHostAddress(), receivePacket.getPort())); } - System.out.println(clientsAddresses); + System.out.println("Clients: " + clientsAddresses); }catch (InvalidMessageException e){ System.out.println(e); System.err.println("Message received that is not a hostedGamesRequest packet"); diff --git a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java index 66d51f59..bd469643 100644 --- a/racevisionGame/src/main/java/visualiser/Controllers/HostController.java +++ b/racevisionGame/src/main/java/visualiser/Controllers/HostController.java @@ -59,7 +59,7 @@ public class HostController extends Controller { public void alertMatchBrowser(){ MatchBrowserInterface matchBrowserInterface = new MatchBrowserInterface(); try{ - matchBrowserInterface.sendOutGameInfo(this.game.getHostedGameData(), udpSocket); + matchBrowserInterface.startSendingHostData(this.game.getHostedGameData(), udpSocket); }catch (IOException e){ System.err.println("failed to send out hosted game info"); } diff --git a/racevisionGame/src/main/java/visualiser/network/MatchBrowserHostRunnable.java b/racevisionGame/src/main/java/visualiser/network/MatchBrowserHostRunnable.java new file mode 100644 index 00000000..9c502473 --- /dev/null +++ b/racevisionGame/src/main/java/visualiser/network/MatchBrowserHostRunnable.java @@ -0,0 +1,41 @@ +package visualiser.network; + +import network.Exceptions.InvalidMessageException; +import network.Messages.AC35Data; +import network.Messages.HostGame; +import shared.model.RunnableWithFramePeriod; + +import java.io.IOException; +import java.net.DatagramSocket; + + +public class MatchBrowserHostRunnable implements RunnableWithFramePeriod { + + private MatchBrowserInterface matchBrowserInterface; + private DatagramSocket socket; + private AC35Data gameInfo; + + public MatchBrowserHostRunnable(MatchBrowserInterface matchBrowserInterface, DatagramSocket socket, AC35Data gameInfo) { + this.matchBrowserInterface = matchBrowserInterface; + this.socket = socket; + this.gameInfo = gameInfo; + } + + @Override + public void run(){ + long previousFrameTime = System.currentTimeMillis(); + + while (!Thread.interrupted()) { + + long currentFrameTime = System.currentTimeMillis(); + waitForFramePeriod(previousFrameTime, currentFrameTime, 10000); + previousFrameTime = currentFrameTime; + + try{ + matchBrowserInterface.sendOutGameInfo(gameInfo, socket); + }catch (IOException e){ + System.err.println("HostGameMessage could not be sent"); + } + } + } +} diff --git a/racevisionGame/src/main/java/visualiser/network/MatchBrowserInterface.java b/racevisionGame/src/main/java/visualiser/network/MatchBrowserInterface.java index 20425765..56964f4d 100644 --- a/racevisionGame/src/main/java/visualiser/network/MatchBrowserInterface.java +++ b/racevisionGame/src/main/java/visualiser/network/MatchBrowserInterface.java @@ -7,11 +7,14 @@ import network.MessageEncoders.HostedGamesRequestEncoder; import network.Messages.AC35Data; import network.Messages.Enums.MessageType; import network.Messages.HostGamesRequest; +import shared.model.RunnableWithFramePeriod; import java.io.IOException; import java.net.*; import java.util.ArrayList; import java.util.Enumeration; +import java.util.logging.Level; +import java.util.logging.Logger; /** * UDP interface for the matchBrowser to send out hosted game info and get in other hosts info @@ -39,7 +42,7 @@ public class MatchBrowserInterface { * @param gameInfo the hostGame info for message * @param socket the udp socket assigned on startup */ - public void sendOutGameInfo(AC35Data gameInfo, DatagramSocket socket) throws IOException{ + protected void sendOutGameInfo(AC35Data gameInfo, DatagramSocket socket) throws IOException{ byte[] fullMessageToSend; try{ HostGameMessageEncoder encoder = new HostGameMessageEncoder(); @@ -50,12 +53,20 @@ public class MatchBrowserInterface { DatagramPacket sendPacket = new DatagramPacket(fullMessageToSend, fullMessageToSend.length, IPAddress, port); socket.send(sendPacket); - }catch (InvalidMessageException e){ System.err.println("HostGameMessage could not be encoded"); } } + /** + * start to send these messages on repeat until game stopped + */ + public void startSendingHostData(AC35Data gameInfo, DatagramSocket socket){ + MatchBrowserHostRunnable hostRunnable = new MatchBrowserHostRunnable(this, socket, gameInfo); + Thread hostRunnableThread = new Thread(hostRunnable, "Socket: " + socket.toString()); + hostRunnableThread.start(); + } + /** * Used by a client to setup a connection with the match browser server * @return the socket created for this connection