package server;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONTokener;
import card.Card;
public abstract class ClientGame extends BaseGame {
public enum MSG_TYPES {ERROR, WARNING, INFORMATION, QUESTION};
//Options stuff
final File options = new File("options.json");
JSONObject root;
int difficulty;
int fontSize;
@Override
protected void init() {
super.init();
loadOptions();
loadFont();
SocketListenerThread listenThread = new SocketListenerThread(socket);
listenThread.run();
}
@Override
protected void createHistory() {
history = new ArrayList<>();
}
protected void loadOptions(){
try {
JSONTokener tokener = new JSONTokener(options.toURI().toURL().openStream());
root = new JSONObject(tokener);
difficulty = root.getInt("difficulty");
fontSize = root.getInt("fontSize");
if(difficulty < 0) difficulty = 0;
if(fontSize <= 0) fontSize = 20;
} catch (JSONException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
protected void movePlaceCard(Card c){
movePlaceCard(c, false);
}
protected void movePlaceCard(Card c, boolean isDry) {
byte msgType = isDry ? MOVE_PLACE_CARD | MOVE_DRY : MOVE_PLACE_CARD;
send(msgType, c.toJson().toString());
}
protected void moveTrashCard(Card c){
movePlaceCard(c, false);
}
protected void moveTrashCard(Card c, boolean isDry) {
byte msgType = isDry ? MOVE_TRASH_CARD | MOVE_DRY : MOVE_TRASH_CARD;
send(msgType, c.toJson().toString());
}
protected void moveHint(Card c){
movePlaceCard(c, false);
}
protected void moveHint(Card c, boolean isDry) {
byte msgType = isDry ? MOVE_HINT | MOVE_DRY : MOVE_HINT;
send(msgType, c.toJson().toString());
}
private void send(byte msgType, String msg) {
DataOutputStream os = null;
try {
os = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
os.write(MAGIC);
os.write(ServerGame.PROTOCOL.VIBE_DUMB.ordinal());
os.write(msgType);
os.write(new byte[]{ 0, 0 });
os.writeUTF(msg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public abstract void printMessage(String msg, MSG_TYPES type);
@Override
protected void createUI() {
// TODO Auto-generated method stub
}
public int getDifficulty(){
return difficulty;
}
public void loadFont() {
}
public int getFontSize(){
return fontSize;
}
public Object getFont() {
// TODO
return null;
}
}