package cz.beranek.projekt;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Locale;
import net.sf.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.google.appengine.api.channel.ChannelMessage;
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.SpravceHer;
/**
*
* @author Kudrna
*
*/
/*
* TODO Presunout metodu zpracuj tak, aby trida zpravy nemusela byt controller
*/
@Controller
public class Zpravy {
public static String toUTF8(String vstup){
String convertedStr = null;
try {
convertedStr = new String(vstup.getBytes("UTF-8"), "UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("chyba kodovani");
e.printStackTrace();
}
return convertedStr;
}
@RequestMapping(value = "/zpracuj.do")
public String zpracuj(@RequestParam("text") String text, @RequestParam("hra") String hraId) {
/*TODO Navrhuji nasledujici kod presunout do jine, staticke metody,
* ktera pujde volat i z jinych mist.
*/
System.out.println("prijata zprava:" + text + ";");
// login bz slo posilat abz se nemusel tahat z google
// Bych to takhle nechal z "bezpecnostnich duvodu" treba
final ChannelService channel = ChannelServiceFactory.getChannelService();
final UserService userService = UserServiceFactory.getUserService();
String login = userService.getCurrentUser().getNickname();
// return null;
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "chat");
zprava.put("login",login);
zprava.put("zprava",text);
JSONObject json=JSONObject.fromObject(zprava);
Hra tmp = SpravceHer.getInstance().getHra(hraId);
if (tmp == null) {
System.out.println("neexistujici hra");
return "zprava";
}
System.out.println(json.toString());
for (Hrac s : tmp.getHraci().values()) {
channel.sendMessage(new ChannelMessage(s.getUserId(), json.toString()));
}
return "zprava";
}
public static void presmeruj(Hra hra, String cil) {
final ChannelService chanel = ChannelServiceFactory.getChannelService();
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "redirect");
zprava.put("cil", cil);
JSONObject json=JSONObject.fromObject(zprava);
String z = toUTF8(json.toString());
for (Hrac h : hra.getHraci().values()) {
chanel.sendMessage(new ChannelMessage(h.getUserId(), json.toString()));
}
}
public static void odesliHraci(Hrac hrac,String zprava){
final ChannelService chanel = ChannelServiceFactory.getChannelService();
chanel.sendMessage(new ChannelMessage(hrac.getUserId(), toUTF8(zprava)));
}
/**
* Odesle zpravu, ktera je urcena pro vypis do chatu
* @param hra
* @param textZpravy
*/
public static void odesliVsem(Hra hra,String typ,String textZpravy){
final ChannelService chanel = ChannelServiceFactory.getChannelService();
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", typ);
zprava.put("text", textZpravy);
JSONObject json=JSONObject.fromObject(zprava);
for (Hrac s : hra.getHraci().values()) {
chanel.sendMessage(new ChannelMessage(s.getUserId(), json.toString()));
}
}
/**
* Odesle zpravu vsem hracum ve hre
* @param hra
* @param textZpravy
*/
public static void odesliVsem(Hra hra,String JSONtextZpravy){
final ChannelService chanel = ChannelServiceFactory.getChannelService();
for (Hrac s : hra.getHraci().values()) {
chanel.sendMessage(new ChannelMessage(s.getUserId(), JSONtextZpravy));
}
}
public static void odesliHrace(String hraId, String login, String userId) {
final ChannelService chanel = ChannelServiceFactory.getChannelService();
Hra tmp = SpravceHer.getInstance().getHra(hraId);
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "connect");
zprava.put("login", login);
JSONObject json=JSONObject.fromObject(zprava);
for (Hrac s : tmp.getHraci().values()) {
if (!userId.equals(s.getUserId()))
chanel.sendMessage(new ChannelMessage(s.getUserId(), json.toString()));
}
}
public static void odesliSeznamHracu(String hraId, String userId) {
System.out.println("odeslani seznamu hracu");
final ChannelService chanel = ChannelServiceFactory.getChannelService();
Hra tmp = SpravceHer.getInstance().getHra(hraId);
for (Hrac s : tmp.getHraci().values()) {
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "connect");
zprava.put("login", s.getNick());
JSONObject json=JSONObject.fromObject(zprava);
chanel.sendMessage(new ChannelMessage(userId, json.toString()));
System.out.println("odelslano" + userId);
}
}
/**
*
* @param hra
* @param cisloHrace Cislo hrace, ktere je dane poradim hrace ze seznamuHracu->poradiHracu.
* @param cisloPolicka Cislo policka ve hre, na ktere se ma figurka premistit.
*/
public static void odesliPoziciHrace(Hra hra,Hrac hrac,int cisloPolicka){
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "presun");
zprava.put("hrac",Integer.toString(hra.getHraci().getPoradi(hrac.getUserId())));
zprava.put("pole", Integer.toString(cisloPolicka));
JSONObject json=JSONObject.fromObject(zprava);
odesliVsem(hra, json.toString());
}
/**
* Odesle vsem hracum ve hre zpravu, ktera se zobrazi v chatovacim okne
* @param hra
* @param hrac
* @param zprava
*/
public static void odesliVsemZpravu(Hra hra, String zprava){
HashMap<String, String> jsonMap=new HashMap<String, String>();
jsonMap.put("typ", "chatInfo");
jsonMap.put("text",zprava);
JSONObject json=JSONObject.fromObject(jsonMap);
//odesliVsem(hra, toUTF8(json.toString()));
odesliVsem(hra, json.toString());
}
/**
* Odesle konkretnimu hraci zpravu, ktera se zobrazi v chatovacim okne
* @param hra
* @param hrac
* @param zprava
*/
public static void odesliHraciZpravu(Hrac hrac, String zprava){
final ChannelService chanel = ChannelServiceFactory.getChannelService();
HashMap<String, String> jsonMap=new HashMap<String, String>();
jsonMap.put("typ", "chatInfo");
jsonMap.put("text",zprava);
JSONObject json=JSONObject.fromObject(jsonMap);
chanel.sendMessage(new ChannelMessage(hrac.getUserId(), toUTF8(json.toString())));
}
/**
* Odesle vsem hracum informaci o tom ktery hrac je na tahu
* @param hrac
*/
public static void odesliHraceNaTahu(Hra hra,Hrac hrac){
//final ChannelService chanel = ChannelServiceFactory.getChannelService();
HashMap<String, String> jsonMap=new HashMap<String, String>();
jsonMap.put("typ", "zmenaTahu");
jsonMap.put("idHrace",hrac.getUserId());
jsonMap.put("nickHrace",hrac.getNick());
JSONObject json=JSONObject.fromObject(jsonMap);
odesliVsem(hra, json.toString());
//chanel.sendMessage(new ChannelMessage(hrac.getUserId(), json.toString()));
}
/**
* Odesle vsem hracum informaci o stavu penez konkretniho hrace
* @param hra
* @param hrac
* @param castka
*/
public static void odesliStavPenez(Hra hra,Hrac hrac,int castka){
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "zmenaPenez");
zprava.put("idHrace",hrac.getUserId());
zprava.put("castka", Integer.toString(castka));
JSONObject json=JSONObject.fromObject(zprava);
odesliVsem(hra, json.toString());
}
public static void odesliStavPenezJednomu(Hra hra,Hrac hrac,int castka){
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "zmenaPenez");
zprava.put("idHrace",hrac.getUserId());
zprava.put("castka", Integer.toString(castka));
JSONObject json=JSONObject.fromObject(zprava);
odesliHraci(hrac, json.toString());
}
/**
* Odesle vsem hraci informaci o tom, ze pole koupil hrac
* @param hra
* @param hrac
*/
public static void odesliKoupiPole(Hra hra, Hrac hrac){
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "koupePole");
zprava.put("vysledek", "true");
zprava.put("hrac", Integer.toString(hra.getHraci().getPoradi(hrac.getUserId())));
zprava.put("pole", Integer.toString(hrac.getPozice() + 1));
JSONObject json=JSONObject.fromObject(zprava);
Zpravy.odesliVsem(hra, json.toString());
}
/**
* Odesle pocet zetonu ktere jsou na policku
* @param hra
* @param hrac
* @param pocet Pocet dostihu
* @param pole Cislo policka
*/
public static void odesliPocetDostihu(Hra hra, Hrac hrac,int pocet,int pole){
HashMap<String, String> zprava=new HashMap<String, String>();
zprava.put("typ", "koupeDostihu");
zprava.put("nick", hrac.getNick());
zprava.put("pocet", Integer.toString(pocet));
zprava.put("pole", Integer.toString(pole + 1));
JSONObject json=JSONObject.fromObject(zprava);
Zpravy.odesliVsem(hra, json.toString());
}
/**
* odstrani uvozovky na zacatku a konci
* @param st
* @return
*/
public static String upravText(String st){
String novy;
if(st.charAt(0)=='\'') {
novy=st.substring(1,st.length()-1);
} else novy=st;
return novy;
}
}