Package com.kolakcc.loljclient.controller

Source Code of com.kolakcc.loljclient.controller.CustomGameLobbyController

package com.kolakcc.loljclient.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import java.util.concurrent.ExecutionException;

import javax.swing.SwingWorker;

import com.gvaneyck.rtmp.encoding.TypedObject;
import com.kolakcc.loljclient.StartupClass;
import com.kolakcc.loljclient.model.CustomGameDetailed;
import com.kolakcc.loljclient.model.CustomGameListItem;
import com.kolakcc.loljclient.model.swing.TeamListModel;
import com.kolakcc.loljclient.model.swing.TeamListModel.TEAM;
import com.kolakcc.loljclient.view.CustomGameLobbyView;

public class CustomGameLobbyController extends KolaController implements
    ActionListener, WindowListener {
  CustomGameLobbyView view;
  SwingWorker<TypedObject, Void> joinGameWorker;
  int gameID;
  CustomGameDetailed gameDetailed;
  ChampionSelectController selectController;
 
  TeamListModel team1Model;
  TeamListModel team2Model;

  //TODO: data with a higher optimistcLock has a higher priority.
    private CustomGameLobbyController() {
        this.view = new CustomGameLobbyView();
        this.view.quitGameButton.addActionListener(this);
        this.view.addBotOnTeam1Button.addActionListener(this);
        this.view.addBotOnTeam2Button.addActionListener(this);
        this.view.swapTeamButton.addActionListener(this);
        this.view.startGameButton.addActionListener(this);
        this.view.addWindowListener(this);
        this.setView(this.view);
    }
  public CustomGameLobbyController(CustomGameListItem game) {
    this(game.getID());
  }
  public CustomGameLobbyController(int gameID) {
        this();
    this.gameID = gameID;
    this.initializeWorkers();
    this.joinGameWorker.execute();
  }

    public CustomGameLobbyController(TypedObject result) {
        this();
        this.receivePacket(result);
        this.gameID = gameDetailed.getID();
    }

  public void actionPerformed(ActionEvent event) {
    try {
      if (event.getSource() == view.quitGameButton) {
        closeLobby();
      } else if (event.getSource() == view.swapTeamButton) {
        int id = StartupClass.Client.invoke("gameService", "switchTeams", new Object[] { gameID });
        System.out.println(StartupClass.Client.getResult(id));
      } else if (event.getSource() == view.startGameButton) {
                System.out.println("gameID: " + gameID);
        int id = StartupClass.Client.invoke("gameService", "startChampionSelection", new Object[] { gameID, 1 }); //TODO: what is this 1?
        TypedObject result = StartupClass.Client.getResult(id).getTO("data");
        System.out.println(result.toPrettyString());
      }
    } catch (Exception e) { e.printStackTrace(); }
  }

  protected void initializeWorkers() {
    this.joinGameWorker = new SwingWorker<TypedObject, Void>() {
      protected TypedObject doInBackground() throws Exception {
        int id = StartupClass.Client
            .invoke("gameService", "joinGame",
                new Object[] { new Double(CustomGameLobbyController.this.gameID), null });
        return StartupClass.Client.getResult(id);
      }

      protected void done() {
        try {
          TypedObject result = this.get();
          if (result.get("result").equals("_error")) {
            TypedObject error = result.getTO("data").getTO(
                "rootCause");
            if (error.getString("rootCauseClassname")
                .equals("com.riotgames.platform.game.UserBannedException")) {
              CustomGameLobbyController.this.HandleException("You're banned from this game.","The game creator has banned you from this game.\r\n" + error.toString());
              System.out.println("You're banned from this game.");
            } else {
              System.out.println(error.getString("message"));
            }
          }
          System.out.println(result);
        } catch (InterruptedException | ExecutionException e) {
          e.printStackTrace();
        }
      }
    };
  }

  public void receivePacket(TypedObject to) {
    this.gameDetailed = new CustomGameDetailed(to);
    this.updateGameLobby();
    System.out.println("game state: "+gameDetailed.getGameState());
    view.setTitle(gameDetailed.getName());
    if (gameDetailed.getGameState().equals("CHAMP_SELECT"))  {
      team1Model.addChampionData(gameDetailed.getPlayerChampionSelections());
      team2Model.addChampionData(gameDetailed.getPlayerChampionSelections());
      if (selectController == null) {
        selectController = new ChampionSelectController(team1Model,team2Model);
        try {
          StartupClass.Client.invoke("gameService", "setClientReceivedGameMessage", new Object[] { new Double(gameID), "CHAMP_SELECT_CLIENT" });
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    //TODO: move this to championselectcontroller
    if (gameDetailed.getGameState().equals("POST_CHAMP_SELECT"))  {
      selectController.countDown(10);
    }
    if (gameDetailed.getGameState().equals("START_REQUESTED"))  {
      //TODO: start requested
     
    }
  }

  public void updateGameLobby() {
    team1Model = new TeamListModel(this.gameDetailed, TEAM.TEAM1);
    team2Model = new TeamListModel(this.gameDetailed, TEAM.TEAM2);
    this.view.team1List.setModel(team1Model);
    this.view.team2List.setModel(team2Model);
    if (this.selectController != null) {
      this.selectController.view.team1List.setModel(team1Model);
      this.selectController.view.team2List.setModel(team2Model)
    }

    this.view.revalidate();
    this.view.repaint();
  }
  public void closeLobby() {
    try {
      StartupClass.Client.invoke("gameService", "quitGame",new Object[] {});
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    this.view.dispose();
  }
  @Override
  public void windowClosing(WindowEvent e) {
    closeLobby();
  }
  public void windowClosed(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
  public void windowOpened(WindowEvent e) {}
}
TOP

Related Classes of com.kolakcc.loljclient.controller.CustomGameLobbyController

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.