package fr.lyrgard.hexScape.listener;
import com.google.common.eventbus.Subscribe;
import fr.lyrgard.hexScape.HexScapeCore;
import fr.lyrgard.hexScape.bus.CoreMessageBus;
import fr.lyrgard.hexScape.bus.GuiMessageBus;
import fr.lyrgard.hexScape.message.ConnectToServerMessage;
import fr.lyrgard.hexScape.message.ConnectedToServerMessage;
import fr.lyrgard.hexScape.message.DisconnectFromServerMessage;
import fr.lyrgard.hexScape.message.DisconnectedFromServerMessage;
import fr.lyrgard.hexScape.message.JoinRoomMessage;
import fr.lyrgard.hexScape.message.UserIdAllocatedMessage;
import fr.lyrgard.hexScape.model.CurrentUserInfo;
import fr.lyrgard.hexScape.model.Universe;
import fr.lyrgard.hexScape.model.player.User;
import fr.lyrgard.hexScape.model.room.Room;
import fr.lyrgard.hexscape.client.network.ClientNetwork;
public class ServerListener {
private static ServerListener instance;
public static void start() {
if (instance == null) {
instance = new ServerListener();
CoreMessageBus.register(instance);
}
}
private ServerListener() {
}
@Subscribe public void onConnectToServerMessage(ConnectToServerMessage message) {
String host = message.getHost();
String userId = CurrentUserInfo.getInstance().getId();
User user = Universe.getInstance().getUsersByIds().get(userId);
if (user != null) {
ClientNetwork.getInstance().connect(user, host);
}
}
@Subscribe public void onDisconnectFromServerMessage(DisconnectFromServerMessage message) {
ClientNetwork.getInstance().disconnect();
String oldUserId = CurrentUserInfo.getInstance().getId();
User user = Universe.getInstance().getUsersByIds().get(oldUserId);
Universe.getInstance().getGamesByGameIds().clear();
Universe.getInstance().getRoomsByRoomIds().clear();
Universe.getInstance().getUsersByIds().clear();
String newUserId = "1";
CurrentUserInfo.getInstance().setId(newUserId);
user.setId(newUserId);
Universe.getInstance().getUsersByIds().put(newUserId, user);
HexScapeCore.getInstance().setOnline(false);
DisconnectedFromServerMessage resultMessage = new DisconnectedFromServerMessage(newUserId);
GuiMessageBus.post(resultMessage);
}
@Subscribe public void onUserIdAllocated(UserIdAllocatedMessage message) {
String userId = message.getUserId();
String oldUserId = CurrentUserInfo.getInstance().getId();
User user = Universe.getInstance().getUsersByIds().get(oldUserId);
if (user != null) {
user.setId(userId);
Universe.getInstance().getUsersByIds().put(userId, user);
}
CurrentUserInfo.getInstance().setId(userId);
if (user != null) {
Universe.getInstance().getUsersByIds().remove(oldUserId);
}
ConnectedToServerMessage resultMessage = new ConnectedToServerMessage(userId);
CoreMessageBus.post(resultMessage);
}
@Subscribe public void onConnectedToServer(ConnectedToServerMessage message) {
HexScapeCore.getInstance().setOnline(true);
GuiMessageBus.post(message);
JoinRoomMessage resultMessage = new JoinRoomMessage(Room.DEFAULT_ROOM_ID);
ClientNetwork.getInstance().send(resultMessage);
}
}