Package net.cis.server.main.listener

Source Code of net.cis.server.main.listener.ServerMessageListener

package net.cis.server.main.listener;

import java.util.Map;

import net.cis.common.model.system.message.AuthorizeMessage;
import net.cis.common.model.system.message.GameInformationMessage;
import net.cis.common.model.system.message.GameVersionMessage;
import net.cis.common.model.system.message.UserDataMessage;
import net.cis.server.backend.manager.ISecurityManager;
import net.cis.server.backend.manager.ISystemManager;
import net.cis.server.backend.manager.IUserManager;
import net.cis.server.backend.model.ClientState;
import net.cis.server.backend.model.UserAuthorizedToken;

import org.apache.commons.logging.LogFactory;

import com.jme3.network.HostedConnection;
import com.jme3.network.Message;
import com.jme3.network.MessageListener;

public class ServerMessageListener implements MessageListener<HostedConnection> {

  private final Map<Integer, ClientState> clientMap;

  private ISystemManager systemManager;

  private ISecurityManager securityManager;

  private IUserManager userManager;

  public ServerMessageListener(Map<Integer, ClientState> clientMap) {
    this.clientMap = clientMap;
  }

  @Override
  public void messageReceived(HostedConnection source, Message m) {
    ClientState client = clientMap.get(source.getId());
    if (client == null) {
      source.close("You're not known by the server. Did you please gracefully for a connection?");
      LogFactory.getLog(ServerMessageListener.class).error("Unknown Host! : " + source.getAddress());
    }

    if (!client.isAuthorized())
      doHandshake(client, m);
  }

  private void doHandshake(ClientState client, Message m) {
    if (m instanceof GameVersionMessage) {
      GameVersionMessage msg = (GameVersionMessage) m;
      if (!systemManager.validateGameVersion(msg.getGameVersion())) {
        client.setUpToDate(false);
        client.conn.send(new GameVersionMessage(systemManager.getGameVersion()));
      } else {
        client.setUpToDate(true);
        client.conn.send(new GameInformationMessage(systemManager.getActualGameInformation()));
      }
    } else if (m instanceof AuthorizeMessage) {
      if (!client.isUpToDate()) {
        clientMap.remove(client.conn.getId());
        client.conn.close("You MUST update your Client!");
      }

      if (client.isAuthorized())
        return;

      AuthorizeMessage msg = (AuthorizeMessage) m;

      UserAuthorizedToken token = securityManager.authorize(msg.getUsername(), msg.getPassword());
      if (token == null) {
        clientMap.remove(client.conn.getId());
        client.conn.close("Username/password not known or incorrect!");
      } else {
        client.setAuthenticationToken(token);
        client.conn.send(new UserDataMessage(userManager.getUserData(token)));
      }
    }
  }

  public void setSystemManager(ISystemManager systemManager) {
    this.systemManager = systemManager;
  }

  public void setSecurityManager(ISecurityManager securityManager) {
    this.securityManager = securityManager;
  }

  public void setUserManager(IUserManager userManager) {
    this.userManager = userManager;
  }
}
TOP

Related Classes of net.cis.server.main.listener.ServerMessageListener

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.