Skip to content

Commit

Permalink
slight refactor to GameClientController
Browse files Browse the repository at this point in the history
  • Loading branch information
bazola committed Sep 18, 2014
1 parent a3843ca commit f40b4f1
Showing 1 changed file with 40 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,14 @@
import com.cardshifter.server.outgoing.ZoneMessage;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
Expand All @@ -38,7 +33,6 @@
import javafx.scene.Group;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
Expand All @@ -60,10 +54,6 @@ public class GameClientController {

private final ObjectMapper mapper = new ObjectMapper();
private final BlockingQueue<Message> messages = new LinkedBlockingQueue<>();
private final List<UseableActionMessage> actions = Collections.synchronizedList(new ArrayList<>());
private final List<CardInfoMessage> cards = Collections.synchronizedList(new ArrayList<>());
private final List<Message> genericMessages = Collections.synchronizedList(new ArrayList<>());
private final List<UseableActionMessage> actionsForServer = Collections.synchronizedList(new ArrayList<>());

private Socket socket;
private InputStream in;
Expand All @@ -79,11 +69,10 @@ public class GameClientController {
private int opponentBattlefieldId;
private int playerHandId;
private int playerBattlefieldId;
private Map<Integer, Pane> idMap = new HashMap<>();
private final Map<Integer, Pane> idMap = new HashMap<>();

private int opponentHandSize;

/////////INITIALIZATION///////////////
public void acceptIPAndPort(String ipAddress, int port) {
// this is passed into the object after it is automatically created by the FXML document
this.ipAddress = ipAddress;
Expand All @@ -101,14 +90,14 @@ public void connectToGame() {
} catch (Exception e) {
e.printStackTrace();
}

try {
new Thread(this::play).start();
} catch (Exception e) {
e.printStackTrace();
}
}
public void play() {
private void play() {
// this method only runs once at the start
String name = "Player" + new Random().nextInt(100);
this.send(new LoginMessage(name));
Expand All @@ -118,7 +107,7 @@ public void play() {
if (!response.isOK()) {
return;
}

//display the welcome message on the screen
Platform.runLater(() -> serverMessage.setText(response.getMessage()));

Expand All @@ -143,9 +132,7 @@ public void play() {
e.printStackTrace();
}
}

////////COMMUNICATE WITH SERVER///////////
//this runs continuously once it starts, gets messages from the server

private void listen() {
while (true) {
try {
Expand All @@ -161,27 +148,15 @@ private void listen() {
}
}

/*
private void playLoop() throws JsonParseException, JsonMappingException, IOException {
while (true) {
if (actionsForServer.isEmpty()) {
return;
} else {
try {
UseableActionMessage action = actionsForServer.get(0);
if (action.isTargetRequired()) {
this.send(new RequestTargetsMessage(gameId, action.getId(), action.getAction()));
}
else {
this.send(new UseAbilityMessage(gameId, action.getId(), action.getAction(), action.getTargetId()));
}
} catch (NumberFormatException | IndexOutOfBoundsException ex) {
System.out.println("Not a valid action");
}
}
private void send(Message message) {
try {
System.out.println("Sending: " + this.mapper.writeValueAsString(message));
this.mapper.writeValue(out, message);
} catch (IOException e) {
System.out.println("Error sending message: " + message);
throw new RuntimeException(e);
}
}
*/

public void createAndSendMessage(Message message) {
try {
Expand All @@ -199,48 +174,26 @@ public void createAndSendMessage(Message message) {
this.actionBox.getChildren().clear();
}

private void send(Message message) {
try {
System.out.println("Sending: " + this.mapper.writeValueAsString(message));
this.mapper.writeValue(out, message);
} catch (IOException e) {
System.out.println("Error sending message: " + message);
throw new RuntimeException(e);
}
}

//////////RENDER INFORMATION////////////
private void processMessageFromServer(Message message) {

serverMessages.getItems().add(message.toString());
//do a check a prune server messages if it is too large - not in this method?

//this is for diagnostics so I can copy paste the messages to know their format
System.out.println(message.toString());

if (message instanceof PlayerMessage) {
if (message instanceof NewGameMessage) {
this.processNewGameMessage((NewGameMessage) message);
} else if (message instanceof PlayerMessage) {
this.processPlayerMessage((PlayerMessage)message);
} else if (message instanceof UpdateMessage) {
this.processUpdateMessage((UpdateMessage)message);
} else if (message instanceof ZoneMessage) {
this.processZoneMessage((ZoneMessage)message);
} else if (message instanceof CardInfoMessage) {
this.processCardInfoMessage((CardInfoMessage)message);
} else if (message instanceof NewGameMessage) {
this.processNewGameMessage((NewGameMessage)message);
} else if (message instanceof UseableActionMessage) {
this.processUseableActionMessage((UseableActionMessage)message);
}
}

private void processUseableActionMessage(UseableActionMessage message) {
double paneHeight = actionBox.getHeight();
double paneWidth = actionBox.getWidth();

int maxActions = 5;
double actionWidth = paneWidth / maxActions;

ActionButton actionButton = new ActionButton(message, this, actionWidth, paneHeight);
actionBox.getChildren().add(actionButton);
} else if (message instanceof UpdateMessage) {
this.processUpdateMessage((UpdateMessage)message);
}
}

private void processNewGameMessage(NewGameMessage message) {
Expand Down Expand Up @@ -269,17 +222,6 @@ private void processPlayerMessageForPlayer(PlayerMessage message, Pane statBox)
}
}

private void processUpdateMessage(UpdateMessage message) {
if (message.getId() == this.playerId) {
this.processUpdateMessageForPlayer(playerStatBox, message);
} else if (message.getId() == this.opponentId) {
this.processUpdateMessageForPlayer(opponentStatBox, message);
}
}
private void processUpdateMessageForPlayer(Pane statBox, UpdateMessage message) {
}

//////////ZONE MESSAGES//////////////
private void processZoneMessage(ZoneMessage message) {
if (!this.allZonesAssigned()) {
this.assignZoneIdForZoneMessage(message);
Expand Down Expand Up @@ -320,7 +262,6 @@ private void assignZoneIdForZoneMessage(ZoneMessage message) {
}
private void processZoneMessageForPane(Pane pane, ZoneMessage message) {
}


private void processCardInfoMessage(CardInfoMessage message) {
if (idMap.containsKey(message.getZone())) {
Expand All @@ -338,18 +279,37 @@ private void processCardInfoMessage(CardInfoMessage message) {
}
}
private void addCardToOpponentBattlefieldPane(CardInfoMessage message) {

}
private void addCardToOpponentHandPane(CardInfoMessage message) {
}
private void addCardToPlayerBattlefieldPane(CardInfoMessage message) {

}
private void addCardToPlayerHandPane(CardInfoMessage message) {
CardHandDocumentController card = new CardHandDocumentController(message, this);
playerHandPane.getChildren().add(card.getRootPane());
}

private void processUseableActionMessage(UseableActionMessage message) {
double paneHeight = actionBox.getHeight();
double paneWidth = actionBox.getWidth();

int maxActions = 5;
double actionWidth = paneWidth / maxActions;

ActionButton actionButton = new ActionButton(message, this, actionWidth, paneHeight);
actionBox.getChildren().add(actionButton);
}

private void processUpdateMessage(UpdateMessage message) {
if (message.getId() == this.playerId) {
this.processUpdateMessageForPlayer(playerStatBox, message);
} else if (message.getId() == this.opponentId) {
this.processUpdateMessageForPlayer(opponentStatBox, message);
}
}
private void processUpdateMessageForPlayer(Pane statBox, UpdateMessage message) {
}

private void renderOpponentHand() {
//Opponent cards are rendered differently because the faces are not visible
double paneHeight = opponentHandPane.getHeight();
Expand Down

0 comments on commit f40b4f1

Please sign in to comment.