diff --git a/src/server/ClientGame.java b/src/server/ClientGame.java index fd3b952..fe0b2d6 100644 --- a/src/server/ClientGame.java +++ b/src/server/ClientGame.java @@ -9,14 +9,15 @@ import java.net.UnknownHostException; import java.util.ArrayList; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.json.JSONTokener; import card.Card; -import server.ServerGame.PROTOCOL; +import player.BasePlayer; -public class ClientGame extends BaseGame { +public abstract class ClientGame extends BaseGame { public enum MSG_TYPES {ERROR, WARNING, INFORMATION, QUESTION}; @@ -28,13 +29,9 @@ Socket socket; String hostName; - boolean isConnected; - boolean initGameReceived; - int ownId; - - public static void main(String[] args){ - ClientGame client = new ClientGame(); - } + volatile boolean isConnected; + volatile boolean initGameReceived; + volatile int ownId; // TODO lock? public ClientGame(){ preinit(); @@ -73,6 +70,7 @@ } System.out.println("Client " + ownId + " waiting for game..."); } + init(); } @Override @@ -80,11 +78,19 @@ super.init(); loadOptions(); loadFont(); + createPlayers(); + createUI(); } @Override protected void createHistory() { history = new ArrayList<>(); } + + @Override + protected void createTrash() { + trash = new ArrayList<>(); + } + protected void loadOptions(){ try { JSONTokener tokener = new JSONTokener(options.toURI().toURL().openStream()); @@ -151,18 +157,15 @@ //public abstract void printMessage(String msg, MSG_TYPES type); - @Override - protected void createUI() { - // TODO Auto-generated method stub - } + + protected abstract void createUI(); public int getDifficulty(){ return difficulty; } - public void loadFont() { - - } + public abstract void loadFont(); + public int getFontSize(){ return fontSize; } @@ -173,15 +176,13 @@ } @Override - protected void receive(Socket socket) { + protected void receive(DataInputStream inStream) { System.out.println("Received data!"); - DataInputStream inStream = null; byte[] magic = new byte[4]; byte proto = 0; byte msgType = 0; byte[] useless = new byte[2]; try { - inStream = new DataInputStream(socket.getInputStream()); inStream.read(magic); proto = inStream.readByte(); msgType = inStream.readByte(); @@ -207,6 +208,7 @@ // TODO Auto-generated catch block e.printStackTrace(); } + // TODO error handling if(msg != null) jo = new JSONObject(msg); else return; // TODO MOVE_DRY @@ -216,10 +218,50 @@ ownId = jo.getInt("id"); break; case MOVE_UPDATE: - if(!initGameReceived) initGameReceived = true; + if(!initGameReceived){ + initGameReceived = true; + // TODO move createXY() somewhere else? + createPlayers(); + createDeck(); + createTrash(); + } + updateGame(jo); System.out.println("Received game:"); System.out.println(jo.toString(4)); break; } } + + private void updateGame(JSONObject jo){ + // TODO movesLeft = jo.getInt("movesLeft"); + cardsInDeck = jo.getInt("cardsInDeck"); + hints = jo.getInt("hints"); + flashs = jo.getInt("flashs"); + JSONArray trashArray = jo.getJSONArray("trash"); + trash.clear(); // TODO depends on protocol version + for(int i=0; i