public abstract class OnlinePlayer extends Player implements AsyncSocketListener {
    protected AsyncSocket socket;
    protected int wantedBoardSize;

    protected boolean hasReceivedCoinPackage;

    /**
     * Constructor
     * @param size the size of the board the enemy player wants to play with
     * the actual board size will be determined once the semester of the online partner is known
     * @param socket an AsyncSocket to communicate with the enemy through
     */
    public OnlinePlayer(Integer size, AsyncSocket socket) {
        this.socket = socket;
        this.wantedBoardSize = size;
        this.myCoin = null;
        socket.setHandler(this);
        //TODO Auto-generated constructor stub
    }

    public abstract void sendIAM();

    public abstract void receive(String message);

    @Override
    public abstract void receiveShoot(Point point);

    @Override
    public abstract void receiveHit(HitResponse hitResponse);

    @Override
    public abstract void receiveCoin(boolean coin);

    /**
     * closes the socket and does player cleanup work
     * @author Luca Conte
     */
    @Override
    public void destroy() {
        super.destroy();
        this.socket.close();
    }

}
