Newer
Older
hanabi-networking / src / server / ClientGame.java
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;
	}
}