package cz.beranek.projekt;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes;
import com.google.appengine.api.channel.ChannelService;
import com.google.appengine.api.channel.ChannelServiceFactory;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import cz.beranek.model.Hra;
import cz.beranek.model.Hrac;
import cz.beranek.model.SeznamHracu;
import cz.beranek.model.SpravceHer;
@Controller
@SessionAttributes({"userId", "login","usrKey","hraId"})
public class HracController {
@RequestMapping("/profil.muj")
public String vychozi(Model model){
UserService userService = UserServiceFactory.getUserService();
String userId;
String login;
if(!userService.isUserLoggedIn()){
model.addAttribute("link", userService.createLoginURL("/profil.muj"));
return "login";
}
else {
//uzivatel je prihlasen
if(userService != null) {
userId = userService.getCurrentUser().getUserId();
login = userService.getCurrentUser().getNickname();
model.addAttribute("userId", Zpravy.upravText(userId));
model.addAttribute("login", Zpravy.upravText(login));
}
}
return "profil";
}
@RequestMapping("/zaloz.hru")
public String zalozHru(Model model,@ModelAttribute("userId") String userId,@ModelAttribute("login") String login){
//test
System.out.println(userId);
System.out.println(login);
String token;
Hrac zakladatel=new Hrac(userId,login);
Hra hra= new Hra();
hra.addHrac(userId,zakladatel );
hra.setHost(zakladatel);
//zatim je jako id hry login zakladatele
//System.out.println(SpravceHer.getInstance().toString());
SpravceHer.getInstance().pridejHru(login, hra);
//vytvoreni linku pro pripojeni
model.addAttribute("link", "/pripoj.se?hra="+login);
model.addAttribute("hraId", Zpravy.upravText(login));
model.addAttribute("login", Zpravy.upravText(login));
model.addAttribute("user", Zpravy.upravText(userId));
//vytvoreni tokenu
//asi vytvoreni kanalu a prirazeni tokenu
final ChannelService channelService = ChannelServiceFactory.getChannelService();
if (channelService != null){
token = channelService.createChannel(userId);
zakladatel.setChannel(token);
model.addAttribute("usrKey", Zpravy.upravText(token));
}
return "hostLobby";
}
@RequestMapping("/pripoj.se")
public String vychozi(Model model, @RequestParam("hra") String hraId){
//prihlaseni hrace
final ChannelService channelService = ChannelServiceFactory.getChannelService();
final UserService userService = UserServiceFactory.getUserService();
String userId;
String login;
String token;
if(!userService.isUserLoggedIn()){
model.addAttribute("link", userService.createLoginURL("/pripoj.se?hra="+hraId));
return "login";
}
else {
//uzivatel je prihlasen
if(userService != null) {
userId = userService.getCurrentUser().getUserId();
login = userService.getCurrentUser().getNickname();
model.addAttribute("userId", Zpravy.upravText(userId));
model.addAttribute("login", Zpravy.upravText(login));
Hrac pripojeny=new Hrac(userId,login);
SpravceHer.getInstance().getHra(hraId).addHrac(userId, pripojeny);
SeznamHracu sh = SpravceHer.getInstance().getHra(hraId).getHraci();
System.out.println(sh.vratPocetHracu());
//vytvoreni tokenu
//asi vytvoreni kanalu a prirazeni tokenu
if (channelService != null){
token = channelService.createChannel(userId);
pripojeny.setChannel(token);
model.addAttribute("usrKey", Zpravy.upravText(token));
model.addAttribute("hraId", Zpravy.upravText(hraId));
model.addAttribute("user", Zpravy.upravText(userId));
//odeslani ostatnim ze jsem se pripojil
Zpravy.odesliHrace(hraId, login, userId);
}
}
}
return "joinLobby";
}
/**Hrac je pripraven ke hre. (Aktivuje se tlacitkem v lobby.)*/
@RequestMapping("/ready.do")
public String ready(Model model, @RequestParam("hra") String hraId){
//prihlaseni hrace
final UserService userService = UserServiceFactory.getUserService();
String userId;
//TODO Overeni prihlaseni uzivatele - nema vyznam pro ajax
if (!userService.isUserLoggedIn()) {
model.addAttribute("link", userService.createLoginURL("/pripoj.se?hra=" + hraId));
return "login";
} else {
if (userService != null) {
userId = userService.getCurrentUser().getUserId();
Hra hra = SpravceHer.getInstance().getHra(hraId);
Hrac hrac = hra.getHrac(userId);
System.out.println("Hrac "+hrac.getNick()+" is ready");
hrac.setReady(true);
model.addAttribute("JSON", "{\"pripraven\":true}");
}
}
return "JSON";
}
/**Hrac byl presmerovan na stranku hry. Automaticky volano klientem po nacteni.*/
@RequestMapping("/hraNactena.do")
public String hraNactena(Model model, @ModelAttribute("hraId") String hraId){
//prihlaseni hrace
final UserService userService = UserServiceFactory.getUserService();
String userId;
if (!userService.isUserLoggedIn()) {
model.addAttribute("link", userService.createLoginURL("/pripoj.se?hra=" + hraId));
return "login";
} else {
if (userService != null) {
userId = userService.getCurrentUser().getUserId();
Hra hra = SpravceHer.getInstance().getHra(hraId);
Hrac hrac = hra.getHrac(userId);
hrac.setGameLoaded(true);
model.addAttribute("JSON", "{\"hraNactena\":true}");
}
}
return "JSON";
}
@RequestMapping("/stahni.hrace" )
public String stahniHrace(Model model,@RequestParam("hra") String hraId,@RequestParam("hrac") String hracId){
/*
//odeslani sobe seznam hracu
Zpravy.odesliSeznamHracu(hraId,hracId);
*/
Hra tmp = SpravceHer.getInstance().getHra(hraId);
ArrayList<String> pole = new ArrayList<String>();
for (Hrac s : tmp.getHraci().values()) {
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("nick", s.getNick());
zprava.put("idHrace",s.getUserId());
//pokud hra uz bezi, tak pridej informaci o poradi hracu
if(tmp.hraBezi()){
zprava.put("poradiHrace",Integer.toString(tmp.getHraci().getPoradi(s.getUserId())));
}
JSONObject json=JSONObject.fromObject(zprava);
pole.add(json.toString());
}
JSONArray arr = JSONArray.fromObject(pole);
//JSONObject json=JSONObject.fromObject(pole);
System.out.println(arr.toString());
model.addAttribute("JSON", arr.toString());
return "JSON";
}
@RequestMapping("/_ah/channel/connected/")
public String prihlaseni(){
System.out.println("nekdo se pripojil na channel api");
return "zprava";
}
@RequestMapping("/_ah/channel/disconnected/")
public void odhlaseni(Model model, @RequestParam("hra") String hraId,@ModelAttribute("userId") String userId){
System.out.println("odpojen");
Hra hr = SpravceHer.getInstance().getHra(hraId);
Hrac hrac=hr.getHrac(userId);
if(hr.hraBezi()) Zpravy.odesliVsemZpravu(hr, "Hr�� "+hrac.getNick()+" se odpojil.");
}
}