package com.gtdev.web.ctrl.unity;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.gtdev.web.dao.PlayerDAO;
import com.gtdev.web.dao.UserDAO;
import com.gtdev.web.model.JsonUnity;
import com.gtdev.web.model.Network;
import com.gtdev.web.model.Serveur;
import com.gtdev.web.service.gae.UtilisateurService;
import com.gtdev.web.store.Player;
import com.gtdev.web.store.User;
/** @author Gregory Tardivel */
@Controller
public final class UnityController {
@Autowired
private JsonUnity message;
@Autowired
private UserDAO userDAO;
@Autowired
private PlayerDAO playerDAO;
@Autowired
private Network network;
@Autowired
private UtilisateurService userService;
@RequestMapping(value = "/user/check", headers = "Accept=application/json")
@ResponseBody
public JsonUnity isConnected() {
if (this.userService.isLogged()) {
final User userBD = this.userDAO.find(this.userService.getUser()
.getEmail());
if (userBD == null) {
// L'utilisateur doit créé un login
this.message.setError("register");
} else {
this.message.setPlayer(userBD.getPersonnage());
this.message.setMessage("Utilisateur connecté");
}
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/user/register", headers = "Accept=application/json")
@ResponseBody
public JsonUnity create(
final String login,
final int eyes,
final int hair,
final int hairColor,
final String male) {
if (this.userService.isLogged()) {
final User user = this.userService.getUser();
final Player perso = new Player();
perso.setNom(login);
perso.setMasculin(male.equals("True"));
perso.setEyes(eyes);
perso.setHair(hair);
perso.setHairColor(hairColor);
user.setPersonnage(perso);
this.userDAO.save(user);
this.message.setPlayer(perso);
this.message.setMessage("Login créé");
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/server/liste", headers = "Accept=application/json")
@ResponseBody
public JsonUnity listServeurs() {
if (this.userService.isLogged()) {
// Chargement de la liste des serveurs
// this.message.setServeurs(this.network.getServeurs());
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/server/new", headers = "Accept=application/json")
@ResponseBody
public JsonUnity newServeur(
final String adresseIP,
final String port,
final int clients,
final HttpServletRequest request) {
if (this.userService.isLogged()) {
this.network.addServeur(request.getSession().getId(), adresseIP
+ ":" + port, clients);
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/server/connect", headers = "Accept=application/json")
@ResponseBody
public JsonUnity connectServeur(final String name) {
if (this.userService.isLogged()) {
for (final Serveur serveur : this.network.getServeurs()) {
if (serveur.getName().equals(name)) {
// this.message.setAdresseIP(serveur.getAdresseIP().split(":")[0]);
// this.message.setPort(serveur.getAdresseIP().split(":")[1]);
serveur.setConnections(serveur.getConnections() + 1);
}
}
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/server/close", headers = "Accept=application/json")
@ResponseBody
public JsonUnity deleteServeur(final HttpServletRequest request) {
if (this.userService.isLogged()) {
final String adresseIP = request.getRemoteAddr();
this.network.removeServeur(adresseIP);
} else {
this.message
.setError("Vous devez être connecté avec votre compte Google");
}
return this.message;
}
@RequestMapping(value = "/player/save", headers = "Accept=application/json")
@ResponseBody
public JsonUnity sauvegarder(
final String nom,
final int sante,
final int santeMAX,
final int niveau,
final int experience,
final float positionX,
final float positionY,
final float positionZ,
final float rotationX,
final float rotationY,
final float rotationZ,
final float rotationW) {
final Player player = this.message.getPlayer();
player.setNom(nom);
player.setSante(sante);
player.setSanteMAX(santeMAX);
player.setNiveau(niveau);
player.setExperience(experience);
player.setPositionX(positionX);
player.setPositionY(positionY);
player.setPositionZ(positionZ);
player.setRotationX(rotationX);
player.setRotationY(rotationY);
player.setRotationZ(rotationZ);
player.setRotationW(rotationW);
this.message.setPlayer(this.playerDAO.save(player));
this.message.setMessage("Sauvegarde effectuée");
return this.message;
}
}