Skip to content

Commit bfb35f5

Browse files
committed
Merge remote-tracking branch 'origin/serverClient' into serverClient
# Conflicts: # Server/src/main/resources/usersData.json
2 parents 2c2a136 + 27dc8ff commit bfb35f5

File tree

10 files changed

+554
-47
lines changed

10 files changed

+554
-47
lines changed

Client/src/main/java/Client/controllers/ClientSocketController.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import Client.views.ChatRoomPageController;
1212
import Client.views.GamePageController;
1313
import Client.views.MainMenuController;
14+
import Client.views.StartGameMenuController;
1415
import com.google.gson.Gson;
1516
import javafx.scene.paint.Color;
1617

@@ -91,6 +92,10 @@ public static void handleServerUpdate(Response response) {
9192
MainMenuController.loggedInUser = new Gson().fromJson(response.getParams().get("user"), User.class);
9293
ChatRoomPageController.updateChatroom = true;
9394
}
95+
case UPDATE_INVITATIONS -> {
96+
MainMenuController.loggedInUser = new Gson().fromJson(response.getParams().get("user"), User.class);
97+
StartGameMenuController.updateInvites = true;
98+
}
9499
case CHOOSE_CITY_OPTIONS -> GamePageController.setCityOptions(new Gson().fromJson(response.getParams().get("city"), City.class), new Gson().fromJson(response.getParams().get("combatUnit"), CombatUnit.class));
95100
case CHOOSE_WAR_OPTIONS -> GamePageController.setDeclareWarOptions(new Gson().fromJson(response.getParams().get("enemyName"), String.class));
96101
}

Client/src/main/java/Client/enums/QueryRequests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ public enum QueryRequests {
120120
ADD_LISTENER,
121121
//game page
122122
DECLARE_WAR,
123+
SEND_INVITATION,
124+
ACCEPT_INVITATION,
125+
DECLINE_INVITATION,
126+
LEAVE_LOBBY,
123127
//trade panel
124128
GET_ALL_CIVILIZATIONS_NAMES,
125129
ADD_TRADE,

Client/src/main/java/Client/enums/QueryResponses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public enum QueryResponses {
2222
UPDATE_ALL_HEXES,
2323
CHANGE_SCENE,
2424
UPDATE_CHAT,
25+
UPDATE_INVITATIONS,
2526
//
2627
YOU_NOT_ENOUGH_GOLD, YOU_LACK_STRATEGIC_RESOURCE, YOU_LACK_LUXURY_RESOURCE, OTHER_CIVILIZATION_NOT_ENOUGH_GOLD, OTHER_CIVILIZATION_LACK_STRATEGIC_RESOURCE, OTHER_CIVILIZATION_LACK_LUXURY_RESOURCE,
2728
CHOOSE_CITY_OPTIONS,

Client/src/main/java/Client/models/tiles/Hex.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ public void setGroupEventHandlers() {
100100
}
101101
case RESET_GIVEN_TILE_COLOR -> {
102102
HexController.getHexOfTheGivenCoordination(Integer.parseInt(response.getParams().get("x")), Integer.parseInt(response.getParams().get("y"))).setColorAdjust(null);
103+
Hex.this.colorAdjust.setInput(new Bloom());
103104
setPopup(getInfoPopup(coordination), mouseEvent.getSceneX() + 30, mouseEvent.getSceneY() + 15);
104105
}
105106
}

Client/src/main/java/Client/views/StartGameMenuController.java

Lines changed: 70 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import Client.controllers.HexController;
66
import Client.enums.QueryRequests;
77
import Client.models.User;
8+
import Client.models.network.Response;
89
import com.google.gson.Gson;
910
import com.google.gson.reflect.TypeToken;
11+
import javafx.animation.KeyFrame;
12+
import javafx.animation.Timeline;
1013
import javafx.event.EventHandler;
1114
import javafx.fxml.FXML;
1215
import javafx.scene.control.*;
@@ -17,6 +20,7 @@
1720
import javafx.scene.layout.VBox;
1821
import javafx.scene.paint.Color;
1922
import javafx.scene.text.Text;
23+
import javafx.util.Duration;
2024

2125
import java.io.IOException;
2226
import java.util.ArrayList;
@@ -47,10 +51,22 @@ public class StartGameMenuController {
4751
private Button saveGameButton;
4852
@FXML
4953
private TextField saveNameTextField;
54+
@FXML
55+
private VBox lobbyPeopleVBox;
56+
public static boolean updateInvites = false;
57+
public Timeline timeline;
5058

5159
public void initialize() {
5260
initPanes();
5361
initInvitations();
62+
timeline = new Timeline(new KeyFrame(Duration.millis(500), actionEvent -> {
63+
if (updateInvites) {
64+
updateInvites = false;
65+
initInvitations();
66+
updateLobbyPeopleVBox();
67+
}
68+
}));
69+
timeline.setCycleCount(-1);
5470
// continueButton.setVisible(WorldController.getWorld() != null);
5571
// saveGameButton.setVisible(WorldController.getWorld() != null);
5672
// saveNameTextField.setVisible(WorldController.getWorld() != null);
@@ -65,6 +81,15 @@ public void initialize() {
6581
cheatCodeText.setVisible(!cheatCodeText.isVisible());
6682
}
6783
});
84+
updateLobbyPeopleVBox();
85+
timeline.play();
86+
}
87+
88+
public void updateLobbyPeopleVBox() {
89+
lobbyPeopleVBox.getChildren().clear();
90+
for (String s : MainMenuController.loggedInUser.getPeopleInLobby()) {
91+
lobbyPeopleVBox.getChildren().add(new Text(s));
92+
}
6893
}
6994

7095
public void initPanes() {
@@ -82,38 +107,32 @@ public void initPanes() {
82107

83108
public void initInvitations() {
84109
invitationsVBox.getChildren().clear();
85-
// for (String invitation : UserController.getLoggedInUser().getInvitations()) {
86-
// invitationsVBox.getChildren().add(makeInvitationBox(invitation));
87-
// }
110+
for (String invitation : MainMenuController.loggedInUser.getInvitations()) {
111+
invitationsVBox.getChildren().add(makeInvitationBox(invitation));
112+
}
88113
}
89114

90115
public HBox makeInvitationBox(String invitation) {
91116
Button accept = new Button("✔");
92117
Button decline = new Button("❌");
93-
accept.setOnMouseClicked(new EventHandler<MouseEvent>() {
94-
@Override
95-
public void handle(MouseEvent mouseEvent) {
96-
// User host = UserController.getUserByUsername(invitation.substring(16));
97-
// assert host != null;
98-
// UserController.getLoggedInUser().resetPeopleInLobby();
99-
// for (String s : host.getPeopleInLobby()) {
100-
// UserController.getLoggedInUser().addPersonToLobby(s);
101-
// }
102-
// host.addPersonToLobby(UserController.getLoggedInUser().getUsername());
103-
// for (String s : host.getPeopleInLobby()) {
104-
// if (!s.equals(host.getUsername()) && !s.equals(UserController.getLoggedInUser().getUsername()))
105-
// Objects.requireNonNull(UserController.getUserByUsername(s)).addPersonToLobby(UserController.getLoggedInUser().getUsername());
106-
// }
107-
// UserController.getLoggedInUser().removeInvitation(invitation);
108-
// initInvitations();
109-
}
118+
accept.setOnMouseClicked(mouseEvent -> {
119+
Response response = ClientSocketController.sendRequestAndGetResponse(QueryRequests.ACCEPT_INVITATION, new HashMap<>() {{
120+
put("loggedInUser", MainMenuController.loggedInUser.getUsername());
121+
put("host", invitation.substring(16));
122+
put("invitation", invitation);
123+
}});
124+
assert response != null;
125+
MainMenuController.loggedInUser = new Gson().fromJson(response.getParams().get("user"), User.class);
126+
initInvitations();
110127
});
111-
decline.setOnMouseClicked(new EventHandler<MouseEvent>() {
112-
@Override
113-
public void handle(MouseEvent mouseEvent) {
114-
// UserController.getLoggedInUser().removeInvitation(invitation);
115-
// initInvitations();
116-
}
128+
decline.setOnMouseClicked(mouseEvent -> {
129+
Response response = ClientSocketController.sendRequestAndGetResponse(QueryRequests.DECLINE_INVITATION, new HashMap<>() {{
130+
put("loggedInUser", MainMenuController.loggedInUser.getUsername());
131+
put("invitation", invitation);
132+
}});
133+
assert response != null;
134+
MainMenuController.loggedInUser = new Gson().fromJson(response.getParams().get("user"), User.class);
135+
initInvitations();
117136
});
118137
accept.setStyle("-fx-pref-width: 50");
119138
decline.setStyle("-fx-pref-width: 50");
@@ -131,43 +150,55 @@ public void cheatCodeAreaTyped(KeyEvent keyEvent) {
131150
if (command.equals("clear")) {
132151
cheatCodeArea.clear();
133152
} else {
134-
ClientSocketController.sendRequestAndGetResponse(QueryRequests.CHEAT_COMMAND, new HashMap<>(){{
153+
ClientSocketController.sendRequestAndGetResponse(QueryRequests.CHEAT_COMMAND, new HashMap<>() {{
135154
put("command", command);
136155
}});
137156
}
138157
}
139158
}
140159

141160
public void backButtonClicked(MouseEvent mouseEvent) {
161+
timeline.stop();
162+
ClientSocketController.sendRequestAndGetResponse(QueryRequests.LEAVE_LOBBY, new HashMap<>(){{
163+
put("username", MainMenuController.loggedInUser.getUsername());
164+
}});
142165
App.changeScene("mainMenuPage");
143166
}
144167

145168
public void sendInvitations(MouseEvent mouseEvent) {
146-
// for (MenuItem item : usernamesMenuButton.getItems()) {
147-
// if (((CheckMenuItem) item).isSelected())
148-
// Objects.requireNonNull(UserController.getUserByUsername(item.getText())).addInvitations(UserController.getLoggedInUser().getUsername());
149-
// }
169+
ArrayList<String> receivers = new ArrayList<>();
170+
for (MenuItem item : usernamesMenuButton.getItems()) {
171+
if (((CheckMenuItem) item).isSelected())
172+
receivers.add(item.getText());
173+
}
174+
if (receivers.size() >= 1)
175+
ClientSocketController.sendRequestAndGetResponse(QueryRequests.SEND_INVITATION, new HashMap<>() {{
176+
put("sender", MainMenuController.loggedInUser.getUsername());
177+
put("receivers", new Gson().toJson(receivers));
178+
}});
150179
}
151180

152181
public void startGameButtonClicked(MouseEvent mouseEvent) {
153-
// if (UserController.getLoggedInUser().getPeopleInLobby().size() < 2) {
154-
// System.out.println("can't start");
155-
// return;
156-
// } else if (UserController.getLoggedInUser().getPeopleInLobby().size() > numberOfPlayersSpinner.getValue()) {
157-
// System.out.println("number of players is less the actual players");
158-
// return;
159-
// }
182+
if (MainMenuController.loggedInUser.getPeopleInLobby().size() < 2) {
183+
System.out.println("can't start");
184+
return;
185+
} else if (MainMenuController.loggedInUser.getPeopleInLobby().size() > numberOfPlayersSpinner.getValue()) {
186+
System.out.println("number of players is less the actual players");
187+
return;
188+
}
160189
System.out.println(MainMenuController.loggedInUser.getPeopleInLobby() + " * " + mapWidthSpinner.getValue() + " " + mapHeightSpinner.getValue());
161190
HexController.generateHexes(mapWidthSpinner.getValue(), mapHeightSpinner.getValue());
162-
ClientSocketController.sendRequestAndGetResponse(QueryRequests.NEW_WORLD, new HashMap<>(){{
191+
ClientSocketController.sendRequestAndGetResponse(QueryRequests.NEW_WORLD, new HashMap<>() {{
163192
put("people", new Gson().toJson(MainMenuController.loggedInUser.getPeopleInLobby()));
164193
put("width", String.valueOf(mapWidthSpinner.getValue()));
165194
put("height", String.valueOf(mapHeightSpinner.getValue()));
166195
}});
196+
timeline.stop();
167197
App.changeScene("gamePage");
168198
}
169199

170200
public void continueButtonClicked(MouseEvent mouseEvent) {
201+
timeline.stop();
171202
// App.changeScene("gamePage");
172203
}
173204

Client/src/main/resources/fxml/startGameMenuPage.fxml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,19 @@
2929
text="Continue"/>
3030
<Text fill="ORANGE" layoutX="1045.0" layoutY="231.0" text="number of players " textAlignment="CENTER"/>
3131
<Spinner fx:id="numberOfPlayersSpinner" layoutX="1054.0" layoutY="239.0"/>
32-
<Text fill="ORANGE" layoutX="1045.0" layoutY="316.0" text="map height" textAlignment="CENTER"/>
33-
<Text fill="ORANGE" layoutX="1045.0" layoutY="401.0" text="map width" textAlignment="CENTER"/>
32+
<Text fill="ORANGE" layoutX="1077.0" layoutY="317.0" text="map height" textAlignment="CENTER"/>
33+
<Text fill="ORANGE" layoutX="1081.0" layoutY="403.0" text="map width" textAlignment="CENTER"/>
3434
<Spinner fx:id="mapHeightSpinner" layoutX="1054.0" layoutY="324.0"/>
3535
<Spinner fx:id="mapWidthSpinner" layoutX="1054.0" layoutY="409.0"/>
3636
<TextArea fx:id="cheatCodeArea" layoutX="1009.0" layoutY="490.0" onKeyPressed="#cheatCodeAreaTyped"
3737
prefHeight="200.0" prefWidth="200.0"/>
3838
<Text fx:id="cheatCodeText" fill="WHITE" layoutX="1009.0" layoutY="480.0" text="Enter your cheatCode : "/>
39-
<TextField fx:id="saveNameTextField" layoutX="607.0" layoutY="528.0" promptText="Write the name of your save" style="-fx-pref-width: 165;"/>
40-
<Button fx:id="saveGameButton" layoutX="615.0" layoutY="572.0" text="Save Game" onMouseClicked="#saveGameButtonClicked"/>
39+
<TextField fx:id="saveNameTextField" layoutX="607.0" layoutY="528.0" promptText="Write the name of your save"
40+
style="-fx-pref-width: 165;"/>
41+
<Button fx:id="saveGameButton" layoutX="615.0" layoutY="572.0" onMouseClicked="#saveGameButtonClicked"
42+
text="Save Game"/>
43+
<VBox fx:id="lobbyPeopleVBox" layoutX="427.0" layoutY="132.0" prefHeight="434.0" prefWidth="150.0"/>
44+
<Text fill="#ff9d00" layoutX="426.0" layoutY="115.0" text="People in lobby : "/>
4145

4246

4347
</AnchorPane>

Server/src/main/java/Server/enums/QueryRequests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,10 @@ public enum QueryRequests {
120120
ADD_LISTENER,
121121
//game page
122122
DECLARE_WAR,
123+
SEND_INVITATION,
124+
ACCEPT_INVITATION,
125+
DECLINE_INVITATION,
126+
LEAVE_LOBBY,
123127
//trade panel
124128
GET_ALL_CIVILIZATIONS_NAMES,
125129
ADD_TRADE,

Server/src/main/java/Server/enums/QueryResponses.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public enum QueryResponses {
2222
UPDATE_ALL_HEXES,
2323
CHANGE_SCENE,
2424
UPDATE_CHAT,
25+
UPDATE_INVITATIONS,
2526
//
2627
YOU_NOT_ENOUGH_GOLD, YOU_LACK_STRATEGIC_RESOURCE, YOU_LACK_LUXURY_RESOURCE, OTHER_CIVILIZATION_NOT_ENOUGH_GOLD, OTHER_CIVILIZATION_LACK_STRATEGIC_RESOURCE, OTHER_CIVILIZATION_LACK_LUXURY_RESOURCE,
2728
CHOOSE_CITY_OPTIONS,

Server/src/main/java/Server/models/network/ServerSocketHandler.java

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,12 @@ public Response handleRequest(Request request) throws IOException {
146146
return new Response(QueryResponses.RESET_COLOR_ADJUST, new HashMap<>());
147147
} else {
148148
if (WorldController.getSelectedTile() != null) {
149+
int x = WorldController.getSelectedTile().getX();
150+
int y = WorldController.getSelectedTile().getY();
151+
WorldController.setSelectedTile(MapController.getTileByCoordinates(coordination));
149152
return new Response(QueryResponses.RESET_GIVEN_TILE_COLOR, new HashMap<>() {{
150-
put("x", String.valueOf(WorldController.getSelectedTile().getX()));
151-
put("y", String.valueOf(WorldController.getSelectedTile().getY()));
153+
put("x", String.valueOf(x));
154+
put("y", String.valueOf(y));
152155
}});
153156
}
154157
WorldController.setSelectedTile(MapController.getTileByCoordinates(coordination));
@@ -432,12 +435,70 @@ public Response handleRequest(Request request) throws IOException {
432435
for (String username : usernames) {
433436
Objects.requireNonNull(UserController.getUserByUsername(username)).addChats(new Chat(usernames, request.getParams().get("chatName")));
434437
if (UserController.getLoggedInUsers().contains(UserController.getUserByUsername(username))) {
435-
ServerUpdateController.sendUpdate(username, new Response(QueryResponses.UPDATE_CHAT, new HashMap<>(){{
438+
ServerUpdateController.sendUpdate(username, new Response(QueryResponses.UPDATE_CHAT, new HashMap<>() {{
436439
put("user", new Gson().toJson(UserController.getUserByUsername(username)));
437440
}}));
438441
}
439442
}
440443
}
444+
case SEND_INVITATION -> {
445+
ArrayList<String> receivers = new Gson().fromJson(request.getParams().get("receivers"), new TypeToken<List<String>>() {
446+
}.getType());
447+
for (String receiver : receivers) {
448+
Objects.requireNonNull(UserController.getUserByUsername(receiver)).addInvitations(request.getParams().get("sender"));
449+
if (UserController.getLoggedInUsers().contains(UserController.getUserByUsername(receiver))) {
450+
ServerUpdateController.sendUpdate(receiver, new Response(QueryResponses.UPDATE_INVITATIONS, new HashMap<>() {{
451+
put("user", new Gson().toJson(UserController.getUserByUsername(receiver)));
452+
}}));
453+
}
454+
}
455+
}
456+
case ACCEPT_INVITATION -> {
457+
User host = UserController.getUserByUsername(request.getParams().get("host"));
458+
assert host != null;
459+
User loggedInUser = UserController.getUserByUsername(request.getParams().get("loggedInUser"));
460+
assert loggedInUser != null;
461+
loggedInUser.resetPeopleInLobby();
462+
for (String s : host.getPeopleInLobby()) {
463+
loggedInUser.addPersonToLobby(s);
464+
}
465+
host.addPersonToLobby(loggedInUser.getUsername());
466+
for (String s : host.getPeopleInLobby()) {
467+
if (!s.equals(host.getUsername()) && !s.equals(loggedInUser.getUsername()))
468+
Objects.requireNonNull(UserController.getUserByUsername(s)).addPersonToLobby(loggedInUser.getUsername());
469+
}
470+
loggedInUser.removeInvitation(request.getParams().get("invitation"));
471+
for (String s : loggedInUser.getPeopleInLobby()) {
472+
ServerUpdateController.sendUpdate(s, new Response(QueryResponses.UPDATE_INVITATIONS, new HashMap<>() {{
473+
put("user", new Gson().toJson(UserController.getUserByUsername(s)));
474+
}}));
475+
}
476+
return new Response(QueryResponses.OK, new HashMap<>() {{
477+
put("user", new Gson().toJson(loggedInUser));
478+
}});
479+
}
480+
case DECLINE_INVITATION -> {
481+
User loggedInUser = UserController.getUserByUsername(request.getParams().get("loggedInUser"));
482+
assert loggedInUser != null;
483+
loggedInUser.removeInvitation(request.getParams().get("invitation"));
484+
return new Response(QueryResponses.OK, new HashMap<>() {{
485+
put("user", new Gson().toJson(loggedInUser));
486+
}});
487+
}
488+
case LEAVE_LOBBY -> {
489+
User user = UserController.getUserByUsername(request.getParams().get("username"));
490+
assert user != null;
491+
for (String s : user.getPeopleInLobby()) {
492+
if (s.equals(user.getUsername())) {
493+
user.resetPeopleInLobby();
494+
} else {
495+
Objects.requireNonNull(UserController.getUserByUsername(s)).removePersonFromLobby(user.getUsername());
496+
}
497+
ServerUpdateController.sendUpdate(s, new Response(QueryResponses.UPDATE_INVITATIONS, new HashMap<>(){{
498+
put("user", new Gson().toJson(UserController.getUserByUsername(s)));
499+
}}));
500+
}
501+
}
441502
case DECLARE_WAR -> WarController.declareWar(request.getParams().get("enemyName"));
442503
case GET_CURRENT_CIVILIZATION_NAME -> {
443504
return new Response(QueryResponses.OK, new HashMap<>(){{

0 commit comments

Comments
 (0)