Package org.menacheri.zombie.game

Source Code of org.menacheri.zombie.game.SessionHandler

package org.menacheri.zombie.game;

import java.util.List;

import org.menacheri.jetserver.app.GameCommandInterpreter;
import org.menacheri.jetserver.app.Session;
import org.menacheri.jetserver.app.impl.InvalidCommandException;
import org.menacheri.jetserver.communication.DeliveryGuaranty.DeliveryGuarantyOptions;
import org.menacheri.jetserver.communication.MessageBuffer;
import org.menacheri.jetserver.communication.NettyMessageBuffer;
import org.menacheri.jetserver.event.Event;
import org.menacheri.jetserver.event.Events;
import org.menacheri.jetserver.event.NetworkEvent;
import org.menacheri.jetserver.event.impl.DefaultSessionEventHandler;
import org.menacheri.zombie.domain.Defender;
import org.menacheri.zombie.domain.IAM;
import org.menacheri.zombie.domain.Zombie;
import org.menacheri.zombie.domain.ZombieCommands;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@SuppressWarnings("rawtypes")
public class SessionHandler extends DefaultSessionEventHandler implements GameCommandInterpreter
{
  private static final Logger LOG = LoggerFactory.getLogger(SessionHandler.class);
  volatile int cmdCount;
 
  private Defender defender;
  private Zombie zombie;
  private IAM iam;
 
  public SessionHandler(Session session,Defender defender, Zombie zombie, IAM iam)
  {
    super(session);
    this.defender = defender;
    this.zombie = zombie;
    this.iam = iam;
  }
 
  public void onDataIn(Event event)
  {
    try
    {
      interpretCommand(event.getSource());
    }
    catch (InvalidCommandException e)
    {
      e.printStackTrace();
      LOG.error("{}",e);
    }
  }
 
 
  @Override
  public void interpretCommand(Object command) throws InvalidCommandException
  {
    cmdCount++;
    int type;
    int operation;
    boolean isDefaultProtocol = true;
    if(command instanceof MessageBuffer) {
      MessageBuffer buf = (MessageBuffer) command;
      type = buf.readInt();
      operation = buf.readInt();
    }else{
      // websocket
      isDefaultProtocol = false;
      List<Double> data = (List)command;
     
      type = data.get(0).intValue();
      operation = data.get(1).intValue();
    }
    IAM iam = IAM.getWho(type);
    ZombieCommands cmd = ZombieCommands.CommandsEnum.fromInt(operation);
    switch (iam)
    {
    case ZOMBIE:
      switch (cmd)
      {
      case EAT_BRAINS:
        //LOG.trace("Interpreted command EAT_BRAINS");
        zombie.eatBrains();
        break;
      case SELECT_TEAM:
        LOG.trace("Interpreted command ZOMBIE SELECT_TEAM");
        selectTeam(iam);
        break;
      }
      break;
    case DEFENDER:
      switch (cmd)
      {
      case SHOT_GUN:
        //LOG.trace("Interpreted command SHOT_GUN");
        defender.shotgun();
        break;
      case SELECT_TEAM:
        LOG.trace("Interpreted command DEFENDER SELECT_TEAM");
        selectTeam(iam);
        break;
      }
      break;
      default:
        LOG.error("Received invalid command {}",cmd);
        throw new InvalidCommandException("Received invalid command" + cmd);
    }
   
    if((cmdCount % 10000) == 0)
    {
      NettyMessageBuffer buffer = new NettyMessageBuffer();
      System.out.println("Command No: " + cmdCount);
      buffer.writeInt(cmdCount);
//      Event tcpEvent = Events.dataOutTcpEvent(buffer);
//      getSession().onEvent(tcpEvent);
      NetworkEvent udpEvent = null;
      if(isDefaultProtocol){
        udpEvent = Events.networkEvent(buffer, DeliveryGuarantyOptions.FAST);
      }else{
        udpEvent = Events.networkEvent(cmdCount);// for websocket protocol.
      }
      getSession().onEvent(udpEvent);
    }
  }

  public void selectTeam(IAM iam)
  {
    this.iam = iam;
  }
 
  public Defender getDefender()
  {
    return defender;
  }

  public void setDefender(Defender defender)
  {
    this.defender = defender;
  }

  public Zombie getZombie()
  {
    return zombie;
  }

  public void setZombie(Zombie zombie)
  {
    this.zombie = zombie;
  }

  public IAM getIam()
  {
    return iam;
  }

  public void setIam(IAM iam)
  {
    this.iam = iam;
  }

}
TOP

Related Classes of org.menacheri.zombie.game.SessionHandler

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.