In Client: added 3 new methods
GuiParameters: added 3 new Params Lounge: added Maps, changed names and implemented methods
This commit is contained in:
parent
6e00128997
commit
9007870d19
@ -358,6 +358,9 @@ public class Client {
|
|||||||
updateListOfClients(data);
|
updateListOfClients(data);
|
||||||
//TODO
|
//TODO
|
||||||
break;
|
break;
|
||||||
|
case GuiParameters.getMembersInLobby:
|
||||||
|
updateLobbyMembers(data);
|
||||||
|
break;
|
||||||
//case GuiParameters.viewChangeToGame: (commented out due to compiling error)
|
//case GuiParameters.viewChangeToGame: (commented out due to compiling error)
|
||||||
//TODO
|
//TODO
|
||||||
//break; (commented out due to compiling error)
|
//break; (commented out due to compiling error)
|
||||||
@ -367,6 +370,12 @@ public class Client {
|
|||||||
//case GuiParameters.viewChangeToLobby: (commented out due to compiling error)
|
//case GuiParameters.viewChangeToLobby: (commented out due to compiling error)
|
||||||
//TODO
|
//TODO
|
||||||
//break; (commented out due to compiling error)
|
//break; (commented out due to compiling error)
|
||||||
|
case GuiParameters.addNewMemberToLobby:
|
||||||
|
addPlayerToLobby(data);
|
||||||
|
break;
|
||||||
|
case GuiParameters.newLobbyCreated:
|
||||||
|
makeNewLobby(data);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
notificationTextDisplay(data);
|
notificationTextDisplay(data);
|
||||||
//TODO(Sebi,Seraina): should the gameController be in the Application just like the ChatController?
|
//TODO(Sebi,Seraina): should the gameController be in the Application just like the ChatController?
|
||||||
@ -378,14 +387,30 @@ public class Client {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void makeNewLobby(String data) {
|
||||||
|
String[] params = data.split(":");
|
||||||
|
loungeSceneViewController.newLobby(params[0], params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addPlayerToLobby(String data) {
|
||||||
|
String[] params = data.split(":");
|
||||||
|
loungeSceneViewController.addPlayerToLobby(params[0], params[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateLobbyMembers(String data) {
|
||||||
|
String[] dataArr = data.split(":");
|
||||||
|
String lobbyID = dataArr[0];
|
||||||
|
String adminName = dataArr[1];
|
||||||
|
}
|
||||||
|
|
||||||
private void updateListOfLobbies(String data) {
|
private void updateListOfLobbies(String data) {
|
||||||
String[] arr = data.split(":");
|
String[] arr = data.split(":");
|
||||||
ObservableList<SimpleStringProperty> list = new SimpleListProperty<>();
|
ObservableList<SimpleStringProperty> list = new SimpleListProperty<>();
|
||||||
int n = arr.length;
|
int n = arr.length;
|
||||||
for (int i = 0; i < n; i = i + 2) {
|
for (int i = 0; i < n; i = i + 2) {
|
||||||
list.add(new SimpleStringProperty(arr[i]));
|
list.add(new SimpleStringProperty(arr[i]));
|
||||||
loungeSceneViewController.addLobbyToList(new SimpleStringProperty(arr[i]));
|
|
||||||
}
|
}
|
||||||
|
//TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateListOfClients(String data) {
|
private void updateListOfClients(String data) {
|
||||||
|
|||||||
@ -1,25 +1,73 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge;
|
package ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.lounge;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import javafx.beans.InvalidationListener;
|
||||||
|
import javafx.beans.Observable;
|
||||||
|
import javafx.beans.property.SimpleBooleanProperty;
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
|
import javafx.collections.ObservableList;
|
||||||
import javafx.collections.ObservableSet;
|
import javafx.collections.ObservableSet;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.ToggleButton;
|
import javafx.scene.control.ToggleButton;
|
||||||
|
|
||||||
public class LobbyListItem extends ListCell {
|
public class LobbyListItem implements Observable {
|
||||||
|
|
||||||
private final String lobbyID;
|
private final SimpleStringProperty lobbyID;
|
||||||
private final String adminName;
|
private final SimpleStringProperty adminName;
|
||||||
private ObservableSet<SimpleStringProperty> clientsInLobby;
|
private ObservableList<SimpleStringProperty> clientsInLobby;
|
||||||
private final ToggleButton button;
|
private final Button button;
|
||||||
|
private SimpleBooleanProperty ownedByClient;
|
||||||
|
private SimpleBooleanProperty isOpen;
|
||||||
|
|
||||||
public LobbyListItem(String lobbyID, String adminName,
|
public LobbyListItem(SimpleStringProperty lobbyID, SimpleStringProperty adminName,
|
||||||
ObservableSet<SimpleStringProperty> clientsInLobby, ToggleButton button) {
|
ObservableList<SimpleStringProperty> clientsInLobby, Button button,
|
||||||
|
SimpleBooleanProperty ownedByClient) {
|
||||||
this.lobbyID = lobbyID;
|
this.lobbyID = lobbyID;
|
||||||
this.adminName = adminName;
|
this.adminName = adminName;
|
||||||
this.clientsInLobby = clientsInLobby;
|
this.clientsInLobby = clientsInLobby;
|
||||||
this.button = button;
|
this.button = button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an {@link InvalidationListener} which will be notified whenever the {@code Observable}
|
||||||
|
* becomes invalid. If the same listener is added more than once, then it will be notified more
|
||||||
|
* than once. That is, no check is made to ensure uniqueness.
|
||||||
|
* <p>
|
||||||
|
* Note that the same actual {@code InvalidationListener} instance may be safely registered for
|
||||||
|
* different {@code Observables}.
|
||||||
|
* <p>
|
||||||
|
* The {@code Observable} stores a strong reference to the listener which will prevent the
|
||||||
|
* listener from being garbage collected and may result in a memory leak. It is recommended to
|
||||||
|
* either unregister a listener by calling {@link #removeListener(InvalidationListener)
|
||||||
|
* removeListener} after use or to use an instance of {@link WeakInvalidationListener} avoid this
|
||||||
|
* situation.
|
||||||
|
*
|
||||||
|
* @param listener The listener to register
|
||||||
|
* @throws NullPointerException if the listener is null
|
||||||
|
* @see #removeListener(InvalidationListener)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void addListener(InvalidationListener listener) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the given listener from the list of listeners, that are notified whenever the value of
|
||||||
|
* the {@code Observable} becomes invalid.
|
||||||
|
* <p>
|
||||||
|
* If the given listener has not been previously registered (i.e. it was never added) then this
|
||||||
|
* method call is a no-op. If it had been previously added then it will be removed. If it had been
|
||||||
|
* added more than once, then only the first occurrence will be removed.
|
||||||
|
*
|
||||||
|
* @param listener The listener to remove
|
||||||
|
* @throws NullPointerException if the listener is null
|
||||||
|
* @see #addListener(InvalidationListener)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void removeListener(InvalidationListener listener) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,16 +5,25 @@ import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.ChangeNameButtonPr
|
|||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.LeaveServerButtonPressedEventHandler;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.client.gui.events.LeaveServerButtonPressedEventHandler;
|
||||||
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol;
|
import ch.unibas.dmi.dbis.cs108.multiplayer.helpers.Protocol;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
import java.util.ResourceBundle;
|
import java.util.ResourceBundle;
|
||||||
|
import javafx.beans.binding.StringBinding;
|
||||||
import javafx.beans.property.SimpleListProperty;
|
import javafx.beans.property.SimpleListProperty;
|
||||||
|
import javafx.beans.property.SimpleMapProperty;
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
import javafx.beans.property.StringProperty;
|
import javafx.beans.property.StringProperty;
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ListChangeListener;
|
||||||
import javafx.collections.ObservableList;
|
import javafx.collections.ObservableList;
|
||||||
|
import javafx.collections.ObservableMap;
|
||||||
import javafx.event.ActionEvent;
|
import javafx.event.ActionEvent;
|
||||||
import javafx.event.EventHandler;
|
import javafx.event.EventHandler;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.fxml.Initializable;
|
import javafx.fxml.Initializable;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ListCell;
|
import javafx.scene.control.ListCell;
|
||||||
import javafx.scene.control.ListView;
|
import javafx.scene.control.ListView;
|
||||||
import javafx.scene.control.TextField;
|
import javafx.scene.control.TextField;
|
||||||
@ -31,9 +40,9 @@ public class LoungeSceneViewController implements Initializable {
|
|||||||
|
|
||||||
public Button newGameButton;
|
public Button newGameButton;
|
||||||
@FXML
|
@FXML
|
||||||
private ListView LobbyListView;
|
private ListView<HBox> LobbyListView;
|
||||||
@FXML
|
@FXML
|
||||||
private ListView ClientListView;
|
private ListView<SimpleStringProperty> ClientListView;
|
||||||
@FXML
|
@FXML
|
||||||
private Button ChangeNameButton;
|
private Button ChangeNameButton;
|
||||||
@FXML
|
@FXML
|
||||||
@ -49,9 +58,12 @@ public class LoungeSceneViewController implements Initializable {
|
|||||||
|
|
||||||
public static ClientModel client;
|
public static ClientModel client;
|
||||||
|
|
||||||
|
private ObservableMap<String, ObservableList<String>> lobbyToMemberssMap;
|
||||||
|
private HashMap<String, String> clientToLobbyMap;
|
||||||
|
|
||||||
public LoungeSceneViewController() {
|
public LoungeSceneViewController() {
|
||||||
super();
|
super();
|
||||||
|
lobbyToMemberssMap = FXCollections.observableHashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -71,38 +83,86 @@ public class LoungeSceneViewController implements Initializable {
|
|||||||
|
|
||||||
ClientListView.setItems(client.getAllClients());
|
ClientListView.setItems(client.getAllClients());
|
||||||
LobbyListView.setPlaceholder(new Text("No open lobbies!"));
|
LobbyListView.setPlaceholder(new Text("No open lobbies!"));
|
||||||
}
|
client.getAllClients().addListener(new ListChangeListener<SimpleStringProperty>() {
|
||||||
|
@Override
|
||||||
|
public void onChanged(Change<? extends SimpleStringProperty> c) {
|
||||||
|
List<SimpleStringProperty> removed = (List<SimpleStringProperty>) c.getRemoved();
|
||||||
|
for(SimpleStringProperty player: removed) {
|
||||||
|
|
||||||
public void updateLobbyListView() {
|
}
|
||||||
//TODO
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateClientListView(ObservableList<SimpleStringProperty> names) {
|
public void updateClientListView(ObservableList<SimpleStringProperty> names) {
|
||||||
|
ObservableList<SimpleStringProperty> clientsLeft = ClientListView.getItems();
|
||||||
|
clientsLeft.removeAll(names);
|
||||||
this.ClientListView.setItems(names);
|
this.ClientListView.setItems(names);
|
||||||
|
for (SimpleStringProperty gone : clientsLeft) {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a lobby to the view
|
* Adds players to a lobby
|
||||||
|
* "NMEMB" {@link ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters}
|
||||||
* @param lobbyID
|
* @param lobbyID
|
||||||
* @param admin
|
* @param player
|
||||||
* @param players
|
|
||||||
*/
|
*/
|
||||||
public void addLobby(String lobbyID, String admin, String players) {
|
public void addPlayerToLobby(String lobbyID, String player) {
|
||||||
TitledPane lobbyObject = new TitledPane();
|
ObservableList<String> members = lobbyToMemberssMap.get(lobbyID);
|
||||||
lobbyObject.setId(lobbyID+admin);
|
members.add(player);
|
||||||
lobbyObject.textProperty().setValue("Lobby Nr: " + lobbyID + " Admin: " + admin);
|
|
||||||
|
|
||||||
ObservableList<SimpleStringProperty> listOfPlayersInLobby = new SimpleListProperty<>();
|
|
||||||
|
|
||||||
String[] playersArr = players.split(":");
|
|
||||||
int noOfPlayers = playersArr.length;
|
|
||||||
for(int i = 0; i < noOfPlayers; i++){
|
|
||||||
listOfPlayersInLobby.add(new SimpleStringProperty(playersArr[i]));
|
|
||||||
}
|
}
|
||||||
ListView view = new ListView(listOfPlayersInLobby);
|
|
||||||
lobbyObject.contentProperty().set(view);
|
/**
|
||||||
LobbyListView.getItems().add(lobbyObject);
|
* Used when a new lobby shall be added to the view.
|
||||||
|
* "NLOBBY" {@link ch.unibas.dmi.dbis.cs108.multiplayer.helpers.GuiParameters}
|
||||||
|
* @param lobbyID
|
||||||
|
* @param adminName
|
||||||
|
*/
|
||||||
|
public void newLobby(String lobbyID, String adminName) {
|
||||||
|
SimpleStringProperty id = new SimpleStringProperty(lobbyID);
|
||||||
|
SimpleStringProperty admin = new SimpleStringProperty((adminName));
|
||||||
|
boolean ownedByClient = false;
|
||||||
|
Button startOrJoin;
|
||||||
|
if (adminName.equals(client.getUsername())) {
|
||||||
|
ownedByClient = true;
|
||||||
|
startOrJoin = new Button("Start");
|
||||||
|
startOrJoin.setOnAction(event -> startGame());
|
||||||
|
} else {
|
||||||
|
startOrJoin = new Button("Join");
|
||||||
|
startOrJoin.setOnAction(event -> joinGame(lobbyID));
|
||||||
}
|
}
|
||||||
|
HBox lobby = new HBox();
|
||||||
|
Label idLabel = new Label();
|
||||||
|
Label adminLabel = new Label();
|
||||||
|
idLabel.textProperty().bind(id);
|
||||||
|
adminLabel.textProperty().bind(admin);
|
||||||
|
lobby.getChildren().add(idLabel);
|
||||||
|
lobby.getChildren().add(adminLabel);
|
||||||
|
lobby.getChildren().add(startOrJoin);
|
||||||
|
ListView<String> members = new ListView<>();
|
||||||
|
members.setId("membersOfLobby");
|
||||||
|
if (ownedByClient) {
|
||||||
|
members.getItems().add("(you are admin) " + adminName);
|
||||||
|
} else {
|
||||||
|
members.getItems().add("(admin)" + adminName);
|
||||||
|
members.getItems().add(client.getUsername());
|
||||||
|
}
|
||||||
|
lobby.setId(lobbyID);
|
||||||
|
lobbyToMemberssMap.put(lobbyID, members.getItems());
|
||||||
|
LobbyListView.getItems().add(lobby);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void joinGame(String lobbyID) {
|
||||||
|
client.getClient().sendMsgToServer(Protocol.joinLobby + "$" + lobbyID);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startGame() {
|
||||||
|
client.getClient().sendMsgToServer(Protocol.startANewGame);
|
||||||
|
}
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
public void addClientToList(String s) {
|
public void addClientToList(String s) {
|
||||||
ClientListView.getItems().add(new SimpleStringProperty(s));
|
ClientListView.getItems().add(new SimpleStringProperty(s));
|
||||||
@ -112,6 +172,7 @@ public class LoungeSceneViewController implements Initializable {
|
|||||||
client.getClient().sendMsgToServer(Protocol.createNewLobby);
|
client.getClient().sendMsgToServer(Protocol.createNewLobby);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void changeName() {
|
public void changeName() {
|
||||||
TextField name = new TextField("Enter new name!");
|
TextField name = new TextField("Enter new name!");
|
||||||
this.NTtBToolBar.getItems().add(name);
|
this.NTtBToolBar.getItems().add(name);
|
||||||
@ -124,6 +185,17 @@ public class LoungeSceneViewController implements Initializable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void removePlayer(String id) {
|
||||||
|
Iterator<SimpleStringProperty> it = client.getAllClients().iterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
String uid = it.next().getValue();
|
||||||
|
if (uid.equals(id)) {
|
||||||
|
it.remove();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utility to set the client model for this class
|
* Utility to set the client model for this class
|
||||||
*
|
*
|
||||||
|
|||||||
@ -43,8 +43,20 @@ public class GuiParameters {
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tells, Gui, who the members of a specified Lobby are.
|
* Tells Gui, who the members of a specified Lobby are.
|
||||||
* Form: {@code LMEMBS$<lobbyID>$<member names>$..}
|
* Form: {@code LMEMBS$<lobbyID>:<ADMIN NAME>:<member names>:<..>}
|
||||||
*/
|
*/
|
||||||
public static String changeToLobby = "LMEMBS";
|
public static final String getMembersInLobby = "LMEMBS";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells Gui, that a new Lobby has been created.
|
||||||
|
* Form: {@code NLOBBY$<lobbyID>:<Admin Name>}
|
||||||
|
*/
|
||||||
|
public static final String newLobbyCreated = "NLOBBY";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tells Gui, to add a player to a lobby.
|
||||||
|
* Form: {@code NMEMB$<LobbyIS>:<PlayerNamse>}
|
||||||
|
*/
|
||||||
|
public static final String addNewMemberToLobby = "NMEMB";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user