Package net.socialgamer.cah.handlers

Source Code of net.socialgamer.cah.handlers.KickHandler

package net.socialgamer.cah.handlers;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;

import net.socialgamer.cah.Constants.AjaxOperation;
import net.socialgamer.cah.Constants.AjaxRequest;
import net.socialgamer.cah.Constants.DisconnectReason;
import net.socialgamer.cah.Constants.ErrorCode;
import net.socialgamer.cah.Constants.LongPollEvent;
import net.socialgamer.cah.Constants.LongPollResponse;
import net.socialgamer.cah.Constants.ReturnableData;
import net.socialgamer.cah.Constants.SessionAttribute;
import net.socialgamer.cah.RequestWrapper;
import net.socialgamer.cah.data.ConnectedUsers;
import net.socialgamer.cah.data.QueuedMessage;
import net.socialgamer.cah.data.QueuedMessage.MessageType;
import net.socialgamer.cah.data.User;

import org.apache.log4j.Logger;

import com.google.inject.Inject;


public class KickHandler extends Handler {
  protected final Logger logger = Logger.getLogger(KickHandler.class);

  public static final String OP = AjaxOperation.KICK.toString();

  private final ConnectedUsers connectedUsers;

  @Inject
  public KickHandler(final ConnectedUsers connectedUsers) {
    this.connectedUsers = connectedUsers;
  }

  @Override
  public Map<ReturnableData, Object> handle(final RequestWrapper request, final HttpSession session) {
    final User user = (User) session.getAttribute(SessionAttribute.USER);
    assert (user != null);

    if (!user.isAdmin()) {
      return error(ErrorCode.NOT_ADMIN);
    }

    if (null == request.getParameter(AjaxRequest.NICKNAME)
        || request.getParameter(AjaxRequest.NICKNAME).isEmpty()) {
      return error(ErrorCode.NO_NICK_SPECIFIED);
    }

    final User kickUser = connectedUsers.getUser(request.getParameter(AjaxRequest.NICKNAME));
    if (null == kickUser) {
      return error(ErrorCode.NO_SUCH_USER);
    }

    final Map<ReturnableData, Object> kickData = new HashMap<ReturnableData, Object>();
    kickData.put(LongPollResponse.EVENT, LongPollEvent.KICKED.toString());
    final QueuedMessage qm = new QueuedMessage(MessageType.KICKED, kickData);
    kickUser.enqueueMessage(qm);

    connectedUsers.removeUser(kickUser, DisconnectReason.KICKED);
    logger.warn(String.format("Kicking %s by request of %s", kickUser.getNickname(),
        user.getNickname()));

    return new HashMap<ReturnableData, Object>();
  }
}
TOP

Related Classes of net.socialgamer.cah.handlers.KickHandler

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.