Package org.menacheri.jetserver.app.impl

Source Code of org.menacheri.jetserver.app.impl.PlayerSessionTest

package org.menacheri.jetserver.app.impl;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;

import org.junit.Before;
import org.junit.Test;
import org.menacheri.jetserver.app.Game;
import org.menacheri.jetserver.app.GameRoom;
import org.menacheri.jetserver.app.PlayerSession;
import org.menacheri.jetserver.app.Session;
import org.menacheri.jetserver.app.impl.GameRoomSession.GameRoomSessionBuilder;
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.jetserver.protocols.Protocol;
import org.menacheri.jetserver.protocols.impl.DummyProtocol;

public class PlayerSessionTest
{
  private static final Protocol DUMMY_PROTOCOL = new DummyProtocol();
  private static final AtomicLong COUNTER = new AtomicLong(0l);
  private static final int NUM_OF_GAME_ROOMS = 1000;
  private static final int SESSIONS_PER_GAME_ROOM = 50;
  private static final int EVENTS_PER_SESSION = 10;
  private static final int LATCH_COUNT = ((NUM_OF_GAME_ROOMS * SESSIONS_PER_GAME_ROOM) * (EVENTS_PER_SESSION * SESSIONS_PER_GAME_ROOM))
      + (EVENTS_PER_SESSION * SESSIONS_PER_GAME_ROOM * NUM_OF_GAME_ROOMS);
  private static final CountDownLatch LATCH = new CountDownLatch(LATCH_COUNT);
  private Game game;
  private List<GameRoom> gameRoomList;
  private List<Session> sessionList;

  @Before
  public void setUp()
  {
    game = new SimpleGame(1, "Test");
    gameRoomList = new ArrayList<GameRoom>(NUM_OF_GAME_ROOMS);
    sessionList = new ArrayList<Session>(NUM_OF_GAME_ROOMS
        * SESSIONS_PER_GAME_ROOM);
    for (int i = 1; i <= NUM_OF_GAME_ROOMS; i++)
    {
      GameRoomSessionBuilder sessionBuilder = new GameRoomSessionBuilder();
      sessionBuilder.parentGame(game).gameRoomName("Zombie_ROOM_" + i)
          .protocol(DUMMY_PROTOCOL);
      Session gameRoomSession = new TestGameRoom(sessionBuilder);
      gameRoomSession.addHandler(new GameRoomSessionHandler(
          gameRoomSession));
      gameRoomList.add((GameRoom) gameRoomSession);
    }
    for (GameRoom gameRoom : gameRoomList)
    {
      for (int j = 1; j <= SESSIONS_PER_GAME_ROOM; j++)
      {
        PlayerSession playerSession = gameRoom.createPlayerSession(null);
        gameRoom.connectSession(playerSession);
        playerSession.addHandler(new SessionHandler(playerSession));
        sessionList.add(playerSession);
      }
    }
  }

  @Test
  public void eventHandlingPerformance() throws InterruptedException
  {
    long start = System.nanoTime();
    Thread t = new Thread(new Runnable()
    {

      @Override
      public void run()
      {
        for (Session session : sessionList)
        {
          for (int i = 1; i <= EVENTS_PER_SESSION; i++)
          {
            Event event = Events.event(null,
                Events.SESSION_MESSAGE);
            session.onEvent(event);
          }
        }
      }
    },"Event-Injector");
    t.start();

    assertTrue(LATCH.await(20, TimeUnit.SECONDS));
    assertEquals(LATCH_COUNT,COUNTER.get());
   
    long time = System.nanoTime() - start;
    System.out.printf(
        "Took  %.3f seconds to pass %d messages between sessions\n",
        time / 1e9, COUNTER.get());
    System.out.printf("Message passing rate was %.3f million messages/sec",
        COUNTER.get() / ((time / 1e9) * 1000000));
  }

  private static class TestGameRoom extends GameRoomSession
  {
    protected TestGameRoom(GameRoomSessionBuilder gameRoomSessionBuilder)
    {
      super(gameRoomSessionBuilder);
    }

    @Override
    public void onLogin(PlayerSession playerSession)
    {
      SessionHandler handler = new SessionHandler(playerSession);
      playerSession.addHandler(handler);
    }
  }

  private static class GameRoomSessionHandler extends
      DefaultSessionEventHandler
  {
    public GameRoomSessionHandler(Session session)
    {
      super(session);
    }

    @Override
    public void onNetworkMessage(NetworkEvent event)
    {
      COUNTER.incrementAndGet();
      LATCH.countDown();
    }
  }

  private static class SessionHandler extends DefaultSessionEventHandler
  {
    public SessionHandler(Session session)
    {
      super(session);
    }

    @Override
    public void onNetworkMessage(NetworkEvent event)
    {
      COUNTER.incrementAndGet();
      LATCH.countDown();
    }
  }
}
TOP

Related Classes of org.menacheri.jetserver.app.impl.PlayerSessionTest

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.