From c5e29e01323cec86b896e00cc28fc8e41afca966 Mon Sep 17 00:00:00 2001
From: stefagr <stefagr@stud.ntnu.no>
Date: Mon, 5 Apr 2021 17:45:44 +0200
Subject: [PATCH] some more bugfix

---
 .../game/controllers/NetworkController.java   |  8 +--
 .../game/controllers/PlayerController.java    | 25 +++++---
 .../src/com/mygdx/game/views/LobbyView.java   | 58 +++++++++----------
 .../src/com/mygdx/game/views/MenuView.java    |  2 +-
 4 files changed, 46 insertions(+), 47 deletions(-)

diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
index d8dde9c..bb21226 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
@@ -13,12 +13,12 @@ import com.mygdx.game.views.tokens.PlayerAvatar;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.LinkedList;
 
 public class NetworkController {
 
     private Client client;
     private Kryo kryo;
-    private Queue<Command> commandQueue;
 
     private boolean devMode = false;
 
@@ -34,18 +34,12 @@ public class NetworkController {
         }
         kryo = client.getKryo();
         registerClasses();
-        commandQueue = new Queue<>();
     }
 
     public void sendToServer(Command command){
-        //commandQueue.addFirst(command);
         client.sendTCP(command);
     }
 
-    public void clearCommands(){
-        commandQueue.clear();
-    }
-
     public void registerClasses(){
         kryo.register(ArrayList.class, 100);
         kryo.register(Lobby.class, 5);
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
index 3bc79d7..f2410d9 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
@@ -7,10 +7,12 @@ import com.mygdx.game.model.Lobby;
 import com.mygdx.game.model.Player;
 
 import java.util.ArrayList;
+import java.util.LinkedList;
 
 public class PlayerController {
 
     private NetworkController net;
+    private LinkedList<Command> receivedCommands;
     private Player player;               //This is the current player
     private Lobby lobby;                 //Current lobby
     private ArrayList<Lobby> lobbies;    //List of all lobbies
@@ -20,6 +22,7 @@ public class PlayerController {
         player = new Player(-1);
         lobby = new Lobby(-1);
         lobbies = new ArrayList<Lobby>();
+        receivedCommands = new LinkedList<Command>();
 
         net.getClient().addListener(new Listener() {
             public void received (Connection connection, Object object) {
@@ -27,26 +30,32 @@ public class PlayerController {
                     Command command = (Command) object;
                     System.out.println("Received: "+ command.toString());
                     command.execute(getPlayerController(), connection);
+                    receivedCommands.removeFirst();
+                    receivedCommands.addFirst(command);
                 }
             }
         });
         connectPlayer(0);
     }
 
+    private void sendCommand(Command command){
+        receivedCommands.addFirst(null);
+        net.sendToServer(command);
+    }
 
-    public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); }
+    public void lobbyGetList(){ sendCommand(new cLobbyGetList()); }
 
-    public void connectPlayer(int avatarIndex){ net.sendToServer(new cPlayerJoin(avatarIndex));}
+    public void connectPlayer(int avatarIndex){ sendCommand(new cPlayerJoin(avatarIndex));}
 
-    public void createLobby(String name, int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(name, MAX_PLAYERS)); }
+    public void createLobby(String name, int MAX_PLAYERS){ sendCommand(new cLobbyCreate(name, MAX_PLAYERS)); }
 
-    public void updateIndexAvatar(int indexAvatar){ net.sendToServer(new cSetIndexAvatar(indexAvatar)); }
+    public void updateIndexAvatar(int indexAvatar){ sendCommand(new cSetIndexAvatar(indexAvatar)); }
 
-    public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); }
+    public void deleteLobby(int id){ sendCommand(new cLobbyDelete(id)); }
 
-    public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); }
+    public void joinLobby(int id){ sendCommand(new cLobbyJoin(id)); }
 
-    public void leaveLobby(int id) { net.sendToServer(new cLobbyLeave(id)); }
+    public void leaveLobby(int id) { sendCommand(new cLobbyLeave(id)); }
 
     public Lobby getLobby(){ return lobby; }
 
@@ -64,6 +73,8 @@ public class PlayerController {
 
     public NetworkController getNetWorkController() { return net; }
 
+    public Command getLastCommand(){ return receivedCommands.getFirst(); }
+
 
 
 
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
index f754833..dce43f9 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
@@ -275,7 +275,7 @@ public class LobbyView extends View{
                 Gdx.input.setOnscreenKeyboardVisible(false);
                 stage.unfocusAll();
 
-                while(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");}
+                if(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");}
 
                 if(playerController.getLobby().getPlayers().size() == 1){
                     System.out.println("Deleting lobby " + playerController.getLobby().getName());
@@ -312,22 +312,17 @@ public class LobbyView extends View{
                             }
                             playerController.joinLobby(getLobbyByStringHashMap.get(lobbyListStrings.getSelected()));
                             System.out.println("joining lobby with lobbyID: " + lobbyListStrings.getSelectedIndex());
-                            while (playerController.getLobby() == null) {
+                            while (playerController.getLastCommand() == null) {
                                 System.out.println("Waiting for lobby");
                             }
                             Lobby lobby = playerController.getLobby();
                             System.out.println("Lobby loaded " + lobby);
+                            Gdx.input.setOnscreenKeyboardVisible(false);
+                            showLobbyWindow();
+                            lobbyRefresh();
                         }
                     };
                     thread.start();
-                    try {
-                        thread.join();
-                    } catch (InterruptedException e) {
-                        e.printStackTrace();
-                    }
-                    Gdx.input.setOnscreenKeyboardVisible(false);
-                    showLobbyWindow();
-                    lobbyRefresh();
                 }
                 else{
                     outputLabel.setText("LobbyListHash did not contain the selected key.");
@@ -383,7 +378,7 @@ public class LobbyView extends View{
                         public void run(){
                             playerController.createLobby(lobbyCreateTextField.getText(), lobbyCreateSizeSelectBox.getSelected());
                             System.out.println("Creating lobby '" + lobbyCreateTextField.getText() + "' with maxSize " + lobbyCreateSizeSelectBox.getSelected());
-                            while (playerController.getLobby() == null) {
+                            while (playerController.getLastCommand() == null) {
                                 System.out.println("Waiting for lobby object from server..");
                             }
                             while(playerController.getLobby().getID() == -1){
@@ -394,7 +389,7 @@ public class LobbyView extends View{
                             System.out.println("Lobby loaded successfully.  '" + playerController.getLobby().getName() + "', maxPlayers: " + lobby.getMaxPlayers() + ", NumOfPlayersInLobby: " + lobby.getPlayers().size());
 
                             playerController.joinLobby(playerController.getLobby().getID());
-                            while(playerController.getLobby().getPlayers().size() == 0){System.out.println("NOT JOINED LOBBY YET");}
+                            while(playerController.getLastCommand() == null){System.out.println("NOT JOINED LOBBY YET");}
                             Gdx.input.setOnscreenKeyboardVisible(false);
                             showLobbyWindow();
                             lobbyRefresh();
@@ -441,7 +436,7 @@ public class LobbyView extends View{
             public void run(){
                 playerController.setLobbies(null);
                 playerController.lobbyGetList();
-                while (playerController.getLobbyList() == null) {
+                while (playerController.getLastCommand() == null) {
                     System.out.println("Waiting for lobby" + currentLobbyList);
                 }
                 ArrayList<Lobby> lobbyList = playerController.getLobbyList();
@@ -529,26 +524,25 @@ public class LobbyView extends View{
     private ArrayList<PlayerAvatar> lobbyAvatars = new ArrayList<>();
 
     private void lobbyRefresh(){
-        Thread thread = new Thread(){
-            public void run(){
-                while(playerController.getLobby() == null) {}
-                lobbyAvatars.clear();
-                lobby = playerController.getLobby();
-                playersInLobby = lobby.getPlayers();
-                //System.out.println("My avatar Index: "+ playerController.getPlayer().getIndexAvatar());
-                //System.out.println("Number of players in lobby: "+ lobby.getPlayers().size());
-
-                for(int i = 0; i<playersInLobby.size(); i++){
-                    //System.out.println("This players ID: "+ playersInLobby.get(i).getID() + " avatarIndex: "+ playersInLobby.get(i).getIndexAvatar());
-                    PlayerAvatar pa = availableAvatars.get(playersInLobby.get(i).getIndexAvatar());
-                    pa.setScale(0.3f, 0.3f);
-                    pa.setOrigin(0, 0);
-                    pa.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]);
-                    lobbyAvatars.add(pa);
-                }
+        if(playerController.getLobby() == null) {
+            System.out.println("Error during lobby refresh: not in a lobby");
+        }
+        else{
+            lobbyAvatars.clear();
+            lobby = playerController.getLobby();
+            playersInLobby = lobby.getPlayers();
+            //System.out.println("My avatar Index: "+ playerController.getPlayer().getIndexAvatar());
+            //System.out.println("Number of players in lobby: "+ lobby.getPlayers().size());
+
+            for(int i = 0; i<playersInLobby.size(); i++){
+                //System.out.println("This players ID: "+ playersInLobby.get(i).getID() + " avatarIndex: "+ playersInLobby.get(i).getIndexAvatar());
+                PlayerAvatar pa = availableAvatars.get(playersInLobby.get(i).getIndexAvatar());
+                pa.setScale(0.3f, 0.3f);
+                pa.setOrigin(0, 0);
+                pa.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]);
+                lobbyAvatars.add(pa);
             }
-        };
-        thread.start();
+        }
     }
 
     private void showLobbyWindow(){
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
index 14cccc5..3051fb3 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
@@ -312,7 +312,7 @@ public class MenuView extends View{
             }
         }
 
-        if(playerController.getPlayer() != null){
+        if(playerController.getPlayer().getID() != -1){
             stage.addActor(connectionBarGreenCircle);
             connectionBarRedCircle.remove();
         }
-- 
GitLab