Fixed: Some exception not managed fixed
This commit is contained in:
@@ -8,26 +8,26 @@ import java.util.Objects;
|
|||||||
public interface IClient {
|
public interface IClient {
|
||||||
public boolean connect(String username,int preferredInt);
|
public boolean connect(String username,int preferredInt);
|
||||||
|
|
||||||
public void drawUpperTribeCard(String playerUsername, int pos) throws RemoteException;
|
public void drawUpperTribeCard(String playerUsername, int pos) ;
|
||||||
|
|
||||||
public void drawLowerTribeCard(String playerUsername,int pos) throws RemoteException;
|
public void drawLowerTribeCard(String playerUsername,int pos) ;
|
||||||
|
|
||||||
public void drawUpperBuildingCard(String playerUsername,int pos) throws RemoteException;
|
public void drawUpperBuildingCard(String playerUsername,int pos) ;
|
||||||
|
|
||||||
|
|
||||||
public void drawLowerBuildingCard(String playerUsername,int pos) throws RemoteException;
|
public void drawLowerBuildingCard(String playerUsername,int pos) ;
|
||||||
|
|
||||||
public void skipTurn(String playerUsername) throws RemoteException;
|
public void skipTurn(String playerUsername) throws RemoteException;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void pickOptionalTribeCard(String playerUsername,int pos) throws RemoteException;
|
public void pickOptionalTribeCard(String playerUsername,int pos) ;
|
||||||
|
|
||||||
public void pickOptionalBuildingCard(String playerUsername,int pos) throws RemoteException;
|
public void pickOptionalBuildingCard(String playerUsername,int pos) ;
|
||||||
|
|
||||||
|
|
||||||
public void noOptionalCard(String playerUsername) throws RemoteException;
|
public void noOptionalCard(String playerUsername) ;
|
||||||
|
|
||||||
public void slotChoice(String playerUsername,int pos) throws RemoteException;
|
public void slotChoice(String playerUsername,int pos) ;
|
||||||
public void totemChoice(String playerUsername,String totem) throws RemoteException;
|
public void totemChoice(String playerUsername,String totem) ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,8 +134,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void drawUpperTribeCard(String playerUsername, int pos) throws RemoteException {
|
public void drawUpperTribeCard(String playerUsername, int pos) {
|
||||||
stub.drawUpperTribeCard(playerUsername,pos);
|
try{
|
||||||
|
stub.drawUpperTribeCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote draw upper tribe card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -145,8 +150,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void drawLowerTribeCard(String playerUsername,int pos) throws RemoteException {
|
public void drawLowerTribeCard(String playerUsername,int pos) {
|
||||||
stub.drawLowerTribeCard(playerUsername,pos);
|
try{
|
||||||
|
stub.drawLowerTribeCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote draw lower tribe card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -156,8 +166,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void drawUpperBuildingCard(String playerUsername,int pos) throws RemoteException {
|
public void drawUpperBuildingCard(String playerUsername,int pos) {
|
||||||
stub.drawUpperBuildingCard(playerUsername,pos);
|
try{
|
||||||
|
stub.drawUpperBuildingCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote draw upper building card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -167,8 +182,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void drawLowerBuildingCard(String playerUsername,int pos) throws RemoteException {
|
public void drawLowerBuildingCard(String playerUsername,int pos) {
|
||||||
stub.drawLowerBuildingCard(playerUsername,pos);
|
try{
|
||||||
|
stub.drawLowerBuildingCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote draw lower building card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -177,8 +197,13 @@ public class RMIClient implements IClient {
|
|||||||
* This action is available only when the player cannot draw any tribe card, but still can buy some buildings.
|
* This action is available only when the player cannot draw any tribe card, but still can buy some buildings.
|
||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
*/
|
*/
|
||||||
public void skipTurn(String playerUsername) throws RemoteException {
|
public void skipTurn(String playerUsername) {
|
||||||
stub.skipTurn(playerUsername);
|
try{
|
||||||
|
stub.skipTurn(playerUsername);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote skip turn");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -190,8 +215,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void pickOptionalTribeCard(String playerUsername,int pos) throws RemoteException {
|
public void pickOptionalTribeCard(String playerUsername,int pos) {
|
||||||
stub.pickOptionalTribeCard(playerUsername,pos);
|
try{
|
||||||
|
stub.pickOptionalTribeCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote pick optional tribe card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -201,8 +231,13 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the card to draw
|
* @param pos the index of the card to draw
|
||||||
*/
|
*/
|
||||||
public void pickOptionalBuildingCard(String playerUsername,int pos) throws RemoteException {
|
public void pickOptionalBuildingCard(String playerUsername,int pos) {
|
||||||
stub.pickOptionalBuildingCard(playerUsername,pos);
|
try{
|
||||||
|
stub.pickOptionalBuildingCard(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote pick optional building card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -211,8 +246,13 @@ public class RMIClient implements IClient {
|
|||||||
* Available only if the player owns the building 12.
|
* Available only if the player owns the building 12.
|
||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
*/
|
*/
|
||||||
public void noOptionalCard(String playerUsername) throws RemoteException {
|
public void noOptionalCard(String playerUsername) {
|
||||||
stub.noOptionalCard(playerUsername);
|
try{
|
||||||
|
stub.noOptionalCard(playerUsername);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote no pick optional card");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -221,12 +261,22 @@ public class RMIClient implements IClient {
|
|||||||
* @param playerUsername the name of the player performing the action
|
* @param playerUsername the name of the player performing the action
|
||||||
* @param pos the index of the selected slot
|
* @param pos the index of the selected slot
|
||||||
*/
|
*/
|
||||||
public void slotChoice(String playerUsername,int pos) throws RemoteException {
|
public void slotChoice(String playerUsername,int pos) {
|
||||||
stub.slotChoice(playerUsername,pos);
|
try{
|
||||||
|
stub.slotChoice(playerUsername,pos);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote slot choice");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//TODO
|
//TODO
|
||||||
public void totemChoice(String playerUsername,String totem) throws RemoteException {
|
public void totemChoice(String playerUsername,String totem) {
|
||||||
stub.totemChoice(playerUsername,totem);
|
try{
|
||||||
|
stub.totemChoice(playerUsername,totem);
|
||||||
|
}
|
||||||
|
catch (RemoteException e){
|
||||||
|
System.out.println("Error during remote totem choice");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -153,11 +153,17 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer {
|
|||||||
* Also updates every watchdog with the latest model so disconnect logic
|
* Also updates every watchdog with the latest model so disconnect logic
|
||||||
* knows whose turn it is.
|
* knows whose turn it is.
|
||||||
*/
|
*/
|
||||||
public void notifyAll(NetworkEvent action) throws RemoteException {
|
public void notifyAll(NetworkEvent action){
|
||||||
for (Map.Entry<String, IClientCallback> entry : clients.entrySet()) {
|
for (Map.Entry<String, IClientCallback> entry : clients.entrySet()) {
|
||||||
if (!action.getIsError() ||
|
if (!action.getIsError() ||
|
||||||
(action.getIsError() && action.getUsername().equals(entry.getKey()))) {
|
(action.getIsError() && action.getUsername().equals(entry.getKey()))) {
|
||||||
entry.getValue().onAction(action);
|
try{
|
||||||
|
entry.getValue().onAction(action);
|
||||||
|
}
|
||||||
|
catch (RemoteException e)
|
||||||
|
{
|
||||||
|
System.out.println("Remote exception: Exception during action sending attempt " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -167,13 +173,19 @@ public class RMIServer extends UnicastRemoteObject implements IGameServer {
|
|||||||
* Mirrors {@code TCPServer.notifyAll(Game)} + the {@code ClientHandler.notifyModel}
|
* Mirrors {@code TCPServer.notifyAll(Game)} + the {@code ClientHandler.notifyModel}
|
||||||
* call that stores the model for disconnect-turn checking.
|
* call that stores the model for disconnect-turn checking.
|
||||||
*/
|
*/
|
||||||
public void notifyAll(MiniModel model) throws RemoteException {
|
public void notifyAll(MiniModel model) {
|
||||||
// Keep every watchdog's game reference up to date
|
// Keep every watchdog's game reference up to date
|
||||||
synchronized (controller){
|
synchronized (controller){
|
||||||
watchdogs.values().forEach(wd -> wd.setGame(controller.getModel()));
|
watchdogs.values().forEach(wd -> wd.setGame(controller.getModel()));
|
||||||
}
|
}
|
||||||
for (IClientCallback cb : clients.values()) {
|
for (IClientCallback cb : clients.values()) {
|
||||||
cb.onGameInit(model);
|
try{
|
||||||
|
cb.onGameInit(model);
|
||||||
|
}
|
||||||
|
catch (RemoteException e)
|
||||||
|
{
|
||||||
|
System.out.println("Remote exception: Exception during model sending attempt " + e.getMessage());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -69,12 +69,10 @@ public class TCPClient implements IClient {
|
|||||||
*/
|
*/
|
||||||
public boolean connect(String user, int proposedNPlayers) {
|
public boolean connect(String user, int proposedNPlayers) {
|
||||||
try {
|
try {
|
||||||
// Socket principale
|
|
||||||
communicationSocket = new Socket(hostname, mainPort);
|
communicationSocket = new Socket(hostname, mainPort);
|
||||||
socketSend = new ObjectOutputStream(communicationSocket.getOutputStream());
|
socketSend = new ObjectOutputStream(communicationSocket.getOutputStream());
|
||||||
socketReceive = new ObjectInputStream(communicationSocket.getInputStream());
|
socketReceive = new ObjectInputStream(communicationSocket.getInputStream());
|
||||||
NetworkEvent event= new AddPlayer(user, proposedNPlayers);
|
NetworkEvent event= new AddPlayer(user, proposedNPlayers);
|
||||||
System.out.println("Sending event: " + event);
|
|
||||||
socketSend.writeObject(event);
|
socketSend.writeObject(event);
|
||||||
int read= communicationSocket.getInputStream().read();
|
int read= communicationSocket.getInputStream().read();
|
||||||
if ( read== -1) {
|
if ( read== -1) {
|
||||||
@@ -94,8 +92,6 @@ public class TCPClient implements IClient {
|
|||||||
new Thread(this::heartbeatLoop, "heartbeat").start();
|
new Thread(this::heartbeatLoop, "heartbeat").start();
|
||||||
|
|
||||||
running = true;
|
running = true;
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -105,7 +101,6 @@ public class TCPClient implements IClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void heartbeatLoop() {
|
private void heartbeatLoop() {
|
||||||
// thread che manda ping ogni 3s
|
|
||||||
ScheduledExecutorService sender = Executors.newSingleThreadScheduledExecutor();
|
ScheduledExecutorService sender = Executors.newSingleThreadScheduledExecutor();
|
||||||
sender.scheduleAtFixedRate(() -> {
|
sender.scheduleAtFixedRate(() -> {
|
||||||
try {
|
try {
|
||||||
@@ -117,7 +112,6 @@ public class TCPClient implements IClient {
|
|||||||
}
|
}
|
||||||
}, 0, 3, TimeUnit.SECONDS);
|
}, 0, 3, TimeUnit.SECONDS);
|
||||||
|
|
||||||
// thread corrente: aspetta pong con timeout
|
|
||||||
try {
|
try {
|
||||||
heartbeatSocket.setSoTimeout(5_000);
|
heartbeatSocket.setSoTimeout(5_000);
|
||||||
while (running) {
|
while (running) {
|
||||||
@@ -142,7 +136,7 @@ public class TCPClient implements IClient {
|
|||||||
running = false;
|
running = false;
|
||||||
try { communicationSocket.close(); } catch (IOException ignored) {}
|
try { communicationSocket.close(); } catch (IOException ignored) {}
|
||||||
try { heartbeatSocket.close(); } catch (IOException ignored) {}
|
try { heartbeatSocket.close(); } catch (IOException ignored) {}
|
||||||
controller.view.showError("Connessione al server persa");
|
controller.view.showError("Connection with server lost");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -162,7 +156,7 @@ public class TCPClient implements IClient {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (read instanceof NetworkEvent event) { //TODO: avoid instanceof
|
if (read instanceof NetworkEvent event) {
|
||||||
if (event.getIsError()) {
|
if (event.getIsError()) {
|
||||||
controller.view.showError(event.toString());
|
controller.view.showError(event.toString());
|
||||||
} else {
|
} else {
|
||||||
@@ -285,7 +279,6 @@ public class TCPClient implements IClient {
|
|||||||
private void doEvent(NetworkEvent event) {
|
private void doEvent(NetworkEvent event) {
|
||||||
try {
|
try {
|
||||||
synchronized (socketSend) {
|
synchronized (socketSend) {
|
||||||
System.out.println("Sending event: " + event);
|
|
||||||
socketSend.writeObject(event);
|
socketSend.writeObject(event);
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
|||||||
@@ -97,9 +97,8 @@ public class ServerLauncher {
|
|||||||
* All clients (both TCP and RMI) are notified of the event
|
* All clients (both TCP and RMI) are notified of the event
|
||||||
* @return the outcome of applying the event to the controller
|
* @return the outcome of applying the event to the controller
|
||||||
* @throws InterruptedException if an error occurs while accessing the actionQueue
|
* @throws InterruptedException if an error occurs while accessing the actionQueue
|
||||||
* @throws RemoteException if an RMI error occurs
|
|
||||||
*/
|
*/
|
||||||
public boolean doFirstEvent() throws InterruptedException, RemoteException {
|
public boolean doFirstEvent() throws InterruptedException {
|
||||||
NetworkEvent event = actionQueue.take();
|
NetworkEvent event = actionQueue.take();
|
||||||
if(gameController.getModel()!=null && !gameController.getModel().getCurrentState().equals(GameStages.ENDED))
|
if(gameController.getModel()!=null && !gameController.getModel().getCurrentState().equals(GameStages.ENDED))
|
||||||
{
|
{
|
||||||
@@ -114,7 +113,7 @@ public class ServerLauncher {
|
|||||||
disconnectionTimer.cancel(false);
|
disconnectionTimer.cancel(false);
|
||||||
disconnectionTimer = null;
|
disconnectionTimer = null;
|
||||||
}
|
}
|
||||||
int roundPrec=gameController.getModel().getCurrentState().getRound();
|
int roundPrev=gameController.getModel().getCurrentState().getRound();
|
||||||
synchronized(gameController){
|
synchronized(gameController){
|
||||||
event.setIsError(!event.apply(gameController));
|
event.setIsError(!event.apply(gameController));
|
||||||
Game game=gameController.getModel();
|
Game game=gameController.getModel();
|
||||||
@@ -134,7 +133,7 @@ public class ServerLauncher {
|
|||||||
}
|
}
|
||||||
serverRMI.notifyAll(event);
|
serverRMI.notifyAll(event);
|
||||||
serverTCP.notifyAll(event);
|
serverTCP.notifyAll(event);
|
||||||
if(game.getCurrentState().getRound()!=roundPrec)
|
if(game.getCurrentState().getRound()!=roundPrev)
|
||||||
{
|
{
|
||||||
ApplyNextRound nextRound=new ApplyNextRound(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(),game.getPlayers());
|
ApplyNextRound nextRound=new ApplyNextRound(game.getSlotMap(), game.orderLogicCard, game.getCurrentState(),game.getPlayers());
|
||||||
serverRMI.notifyAll(nextRound);
|
serverRMI.notifyAll(nextRound);
|
||||||
@@ -161,8 +160,8 @@ public class ServerLauncher {
|
|||||||
disconnectionTimer.cancel(false);
|
disconnectionTimer.cancel(false);
|
||||||
}
|
}
|
||||||
disconnectionTimer = timerExecutor.schedule(() -> {
|
disconnectionTimer = timerExecutor.schedule(() -> {
|
||||||
System.out.println("Timer scaduto: nessun giocatore riconnesso in 30s.");
|
System.out.println("Timer expired: no player reconnected in 60s.");
|
||||||
}, 30, TimeUnit.SECONDS);
|
}, 1, TimeUnit.MINUTES);
|
||||||
}
|
}
|
||||||
return !event.getIsError();
|
return !event.getIsError();
|
||||||
}
|
}
|
||||||
@@ -221,29 +220,24 @@ public class ServerLauncher {
|
|||||||
}
|
}
|
||||||
playerList.setAction(()->{
|
playerList.setAction(()->{
|
||||||
new Thread(()->{
|
new Thread(()->{
|
||||||
try {
|
System.out.println("\n\nNotifying model");
|
||||||
System.out.println("\n\nNotifying model");
|
MiniModel miniModel;
|
||||||
MiniModel miniModel;
|
synchronized (gameController) {
|
||||||
synchronized (gameController) {
|
Game game = gameController.getModel();
|
||||||
Game game = gameController.getModel();
|
miniModel= new MiniModel(game.getBoard(),game.getSlotMap(), game.orderLogicCard,game.getCurrentState(),game.getPlayers(), new ArrayList<>(List.of(Totems.values())));
|
||||||
miniModel= new MiniModel(game.getBoard(),game.getSlotMap(), game.orderLogicCard,game.getCurrentState(),game.getPlayers(), new ArrayList<>(List.of(Totems.values())));
|
|
||||||
}
|
|
||||||
serverRMI.notifyAll(miniModel);
|
|
||||||
serverTCP.notifyAll(miniModel);
|
|
||||||
view = new TUI(miniModel);
|
|
||||||
view.fullRender();
|
|
||||||
} catch (RemoteException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
|
serverRMI.notifyAll(miniModel);
|
||||||
|
serverTCP.notifyAll(miniModel);
|
||||||
|
view = new TUI(miniModel);
|
||||||
|
view.fullRender();
|
||||||
}).start();
|
}).start();
|
||||||
});
|
});
|
||||||
new Thread(()-> {
|
new Thread(()-> {
|
||||||
try {
|
try {
|
||||||
launcher.run();
|
launcher.run();
|
||||||
} catch (InterruptedException e) {
|
} catch (Exception e)
|
||||||
throw new RuntimeException(e);
|
{
|
||||||
} catch (RemoteException e) {
|
System.out.println("Generic exception occurred"+e.getMessage());
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
@@ -257,28 +251,17 @@ public class ServerLauncher {
|
|||||||
* Game creation: TCP/RMI servers send the game model to all players.
|
* Game creation: TCP/RMI servers send the game model to all players.
|
||||||
* Game execution: repeatedly calls doFirstEvent() to process the events in the actionQueue.
|
* Game execution: repeatedly calls doFirstEvent() to process the events in the actionQueue.
|
||||||
* @throws InterruptedException if the TCP server thread is interrupted
|
* @throws InterruptedException if the TCP server thread is interrupted
|
||||||
* @throws RemoteException if an RMI error occurs
|
|
||||||
*/
|
*/
|
||||||
public void run() throws InterruptedException, RemoteException {
|
public void run() {
|
||||||
|
|
||||||
// Game execution
|
|
||||||
while (true) {
|
while (true) {
|
||||||
try{
|
try{
|
||||||
this.doFirstEvent();
|
this.doFirstEvent();
|
||||||
try{
|
this.view.fullRender();
|
||||||
this.view.fullRender();
|
|
||||||
}
|
|
||||||
catch (NullPointerException e){
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch(InterruptedException e){
|
catch(InterruptedException e){
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
catch(RemoteException e){
|
|
||||||
//throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,20 +90,23 @@ public class TUI implements IView {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void render() {
|
public void render() {
|
||||||
if(model.currentState.getGameStage().equals(GameStages.TOTEM_CHOICE))
|
if(model != null)
|
||||||
{
|
{
|
||||||
renderTotems();
|
if(model.currentState.getGameStage().equals(GameStages.TOTEM_CHOICE))
|
||||||
|
{
|
||||||
|
renderTotems();
|
||||||
|
}
|
||||||
|
else if(model.currentState.getGameStage().equals(GameStages.ENDED))
|
||||||
|
{
|
||||||
|
//renderStanding
|
||||||
|
renderBoard();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
renderBoard();
|
||||||
|
}
|
||||||
|
System.out.println("\nYOUR ACTION:");
|
||||||
}
|
}
|
||||||
else if(model.currentState.getGameStage().equals(GameStages.ENDED))
|
|
||||||
{
|
|
||||||
//renderStanding
|
|
||||||
renderBoard();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
renderBoard();
|
|
||||||
}
|
|
||||||
System.out.println("\nYOUR ACTION:");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user