Package org.elip.stewiemaze.client

Source Code of org.elip.stewiemaze.client.Stewiemaze

package org.elip.stewiemaze.client;

import org.elip.stewiemaze.shared.entities.Player;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class Stewiemaze implements EntryPoint {

  private DatastoreServiceAsync _datastoreService;
  private FacebookServiceAsync _facebookService;

  @Override
  public void onModuleLoad() {

    /* Get a reference to the datastore imple class for calls to the datastore */
    _datastoreService = (DatastoreServiceAsync)GWT.create(DatastoreService.class);
    ((ServiceDefTarget)_datastoreService).setServiceEntryPoint("/stewiemaze/datastoreService");

    /* Get a reference to the facebook imple class for calls to the facebook details */
    _facebookService = (FacebookServiceAsync)GWT.create(FacebookService.class);
    ((ServiceDefTarget)_facebookService).setServiceEntryPoint("/stewiemaze/facebookService");

    /* Add a button to retrieve the highscore from the database
     * this button is clicked by javascript when a game ends */
    addRetrieveRecordsButton();

    /* Check for cookies in the page */
    String nickname = Cookies.getCookie("nickname");
    String highscore = Cookies.getCookie("highscore");
    String token = Cookies.getCookie("accesToken");

    /* if cookies exist, display the nickname and highscore */
    if ((nickname != null) && (highscore != null) && token == null) {
      addHelloFriendPanel(nickname, highscore);
      addExitButton();
      RootPanel.get("register-form").clear();
      RootPanel.get("social-plugins").clear();
    }
    else {

      /* If no cookies are found, but the user is connected to facebook and to my app then set cookies
       * by calling the server for the username and highscore saved in the database 
       */
      String accesToken = Cookies.getCookie("accesToken");
      if (accesToken != null) {
        _facebookService.getUsername(accesToken, new AsyncCallback<String>() {

          @Override
          public void onSuccess(final String result) {
            if (result == null) {
              Window.alert("lookes like you deletes the app from your facebook account...");
              Cookies.removeCookie("accesToken");
              Cookies.removeCookie("nickname");
              Cookies.removeCookie("highscore");
              Cookies.removeCookie("tempScore");
              addLoginPanel();
              closeModalWindow();
            }
            else {
              _datastoreService.retrieveFacebookPlayer(result, new AsyncCallback<Player>() { 
                @Override
                public void onSuccess(Player player) {
                  if (player != null) {
                    Cookies.setCookie("nickname", player.getNickname());
                    Cookies.setCookie("highscore", player.getHighscore() + "");
                    addHelloFriendPanel(result, player.getHighscore() + "");
                    addWarning();
                    addSocialPlugins();
                    closeModalWindow();
                  }
                }

                @Override
                public void onFailure(Throwable caught) {

                }
              });
            }
          }

          @Override
          public void onFailure(Throwable caught) {

          }
        });
        showModal();
        //Window.alert("retrieving information from facebook, this may take a couple of seconds...");
      }
      /* if there are no cookies, and the access token is null, give the user a chance to login */
      else {
        addLoginPanel()
     
    }
  }

  private native void closeModalWindow() /*-{
    $wnd.TINY.box.hide();

  }-*/;

  private native void addSocialPlugins() /*-{
    $doc.getElementById('social-plugins').style.visibility='visible';

  }-*/;
 
  private native void showModal() /*-{
    $wnd.TINY.box.show({image:'css/images/slideShowLoader.gif',boxid:'frameless',animate:true, close:false})


  }-*/;

  private void addLoginPanel() {
    RootPanel rootPanel = RootPanel.get("login_area");
    Label nicknameLabel = new Label("Nickname:");
    nicknameLabel.addStyleName("instructions-style");
    final TextBox nicknameTextBox = new TextBox();
    Label passwordLabel = new Label("Password:");
    passwordLabel.addStyleName("instructions-style");
    final PasswordTextBox password = new PasswordTextBox();

    ClickHandler loginHander = new ClickHandler() {

      @Override
      public void onClick(ClickEvent event) {
        String nickname = nicknameTextBox.getText();
        String passwordS = password.getText();

        AsyncCallback<Player> callback = new AsyncCallback<Player>() {

          @Override
          public void onSuccess(Player result) {
            if (result != null) {
              Cookies.setCookie("nickname", result.getNickname());
              Cookies.setCookie("highscore", result.getHighscore() + "");
              Window.Location.reload();
            }
            else {
              showErrorModal();
              //Window.alert("Wrong user name or password");
            }
          }

          @Override
          public void onFailure(Throwable caught) {

          }
        };
        _datastoreService.retrievePlayer(nickname, passwordS, callback);
      }
    };
    Button login = new Button("login", loginHander);
    login.addStyleName("button");
    Label registered = new Label("If youre registered, why not login?");
    registered.addStyleName("instructions-style");
    HorizontalPanel hPanel = new HorizontalPanel();
    hPanel.setSpacing(2);
    hPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
    hPanel.add(nicknameLabel);
    hPanel.add(nicknameTextBox);
    hPanel.add(passwordLabel);
    hPanel.add(password);
    hPanel.add(login);
    hPanel.add(registered);
    rootPanel.add(hPanel);
    rootPanel.getElement().setAttribute("style", "visibility: visible");

  }

  private native void showErrorModal() /*-{
    $wnd.TINY.box.show({html:'Wrong username or password!',animate:false,close:false,boxid:'error',top:5})
  }-*/;

  private void addHelloFriendPanel(String nickname, String highscore) {
    Cookies.removeCookie("tempScore");
    Label hello = new Label("hello " + nickname + " , your highscore is : " + highscore);
    hello.getElement().setId("hello-panel");
    hello.addStyleName("instructions-style");
    RootPanel.get("hello-friend").getElement().appendChild(hello.getElement());
  }

  private void addWarning() {
    HTML warn = new HTML("NOTE : logging out of facebook without refreshing the page will cause unexpected behavior");
    warn.addStyleName("instructions-style");
    RootPanel.get("hello-friend").getElement().appendChild(warn.getElement());
  }

  private void addRetrieveRecordsButton() {
    ClickHandler recordsHandler = new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        showScoresModal();
        final String tempScore = Cookies.getCookie("tempScore");
        final String nickname = Cookies.getCookie("nickname");
        if (Integer.parseInt(tempScore) > Integer.parseInt(Cookies.getCookie("highscore")) ) {
          _datastoreService.updateScore(nickname, tempScore, new AsyncCallback<String[]>() {

            @Override
            public void onSuccess(String[] result) {
              Cookies.setCookie("highscore", tempScore);
              updateHighscoreLabel(nickname, tempScore);
              addRecords(result);
              closeScoresModal();
            }

            @Override
            public void onFailure(Throwable caught) {

            }
          });

        }
        else {
          _datastoreService.retrieveRecordsTable(new AsyncCallback<String[]>() {
            @Override
            public void onSuccess(String[] result) {
              if (result != null) {
                addRecords(result);
                closeScoresModal();
              }
              else {
                Window.alert("No scores found");
                closeScoresModal();
             
            }
            @Override
            public void onFailure(Throwable caught) {


            }
          });

        }
      }
    };
    Button retrieveRecordTable = new Button("", recordsHandler);
    retrieveRecordTable.setVisible(false);
    RootPanel.get("record_table_get_area").add(retrieveRecordTable);

 

  private void addRecords(String[] records) {
    RootPanel.get("records_table_area").clear();
    ScrollPanel recordsPanel = new ScrollPanel();
    VerticalPanel vPanel = createRecordsPanel(records);
    HorizontalPanel hPanel = new HorizontalPanel();
    hPanel.setSpacing(5);
    vPanel.add(hPanel);
    recordsPanel.add(vPanel);
    RootPanel.get("records_table_area").add(recordsPanel);
  }

  private VerticalPanel createRecordsPanel(String[] records) {

    VerticalPanel vPanel = new VerticalPanel();
    for (String s : records) {
      HTML score = new HTML(s);
      score.addStyleName("instructions-style");
      vPanel.add(score);
    }
    return vPanel;
  }

  private void addExitButton() {
    /* also, add an exit button to allow other users to login */
    ClickHandler handler = new ClickHandler() { 
      @Override
      public void onClick(ClickEvent event) {

        /* The exit button deletes all cookies and reloads the page */
        Cookies.removeCookie("nickname");
        Cookies.removeCookie("highscore");
        Cookies.removeCookie("tempScore");
        Window.Location.reload();

      }
    };
    Button exit = new Button("exit");
    exit.addStyleName("button");
    exit.addClickHandler(handler);
    RootPanel.get("hello-friend").add(exit);
  }
 
  private native void updateHighscoreLabel(String nickname, String score) /*-{
    $wnd.$('#hello-panel').text("hello " + nickname + " , your highscore is : " + score);
  }-*/;

  private native void showScoresModal() /*-{
    $wnd.TINY.box.show({image:'css/images/img_loader.gif',boxid:'frameless',animate:true, close:false})
  }-*/;

  private native void closeScoresModal() /*-{
    $wnd.TINY.box.hide();
  }-*/;

}
 
TOP

Related Classes of org.elip.stewiemaze.client.Stewiemaze

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.