package com.jenjinstudios.world.client;
import com.jenjinstudios.client.net.AuthClient;
import com.jenjinstudios.client.net.ClientUser;
import com.jenjinstudios.core.MessageIO;
import com.jenjinstudios.world.Actor;
import com.jenjinstudios.world.World;
import com.jenjinstudios.world.client.message.WorldClientMessageFactory;
import com.jenjinstudios.world.io.WorldDocumentException;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* The WorldClient class is used to connect to a WorldServer and stores information about the environment immediately
* surrounding the player.
*
* @author Caleb Brinkman
*/
public class WorldClient extends AuthClient
{
private static final Logger LOGGER = Logger.getLogger(WorldClient.class.getName());
private final WorldClientMessageFactory messageFactory;
private final ServerWorldFileTracker serverWorldFileTracker;
private World world;
private Actor player;
public WorldClient(MessageIO messageIO, ClientUser clientUser, File worldFile) throws WorldDocumentException {
super(messageIO, clientUser);
this.messageFactory = new WorldClientMessageFactory();
serverWorldFileTracker = new ServerWorldFileTracker(this, worldFile);
world = serverWorldFileTracker.readWorldFromFile();
}
public WorldClientMessageFactory getMessageFactory() {return messageFactory; }
public ServerWorldFileTracker getServerWorldFileTracker() { return serverWorldFileTracker; }
public Actor getPlayer() { return player; }
public void setPlayer(Actor player) { this.player = player; }
public World getWorld() { return world; }
public void readWorldFile() throws WorldDocumentException { world = serverWorldFileTracker.readWorldFromFile(); }
public void initializeWorldFromServer() throws WorldDocumentException {
getServerWorldFileTracker().setWaitingForChecksum(true);
getServerWorldFileTracker().requestServerWorldFileChecksum();
LOGGER.log(Level.INFO, "Requested World Checksum.");
getServerWorldFileTracker().waitForWorldFileChecksum();
LOGGER.log(Level.INFO, "Received World Checksum.");
getServerWorldFileTracker().setWaitingForFile(true);
getServerWorldFileTracker().requestServerWorldFile();
LOGGER.log(Level.INFO, "Requested World File.");
getServerWorldFileTracker().waitForWorldFile();
LOGGER.log(Level.INFO, "Received World File.");
getServerWorldFileTracker().writeReceivedWorldToFile();
readWorldFile();
}
}