Package us.aaronweiss.juicebot.net

Source Code of us.aaronweiss.juicebot.net.ClientHandlerAdapter

/*
* Copyright (C) 2013 Aaron Weiss <aaronweiss74@gmail.com>
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom
* the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package us.aaronweiss.juicebot.net;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import us.aaronweiss.juicebot.Client;
import us.aaronweiss.juicebot.Message;
import us.aaronweiss.juicebot.internal.InternalUtilities;
import us.aaronweiss.juicebot.internal.JuiceBotDefaults;

/**
* An inbound-only message handler to provide client functionality.
*
* @author Aaron Weiss
* @version 2.0.0
* @since 1.0.0
*/
public class ClientHandlerAdapter extends ChannelInboundHandlerAdapter {
  protected final boolean verbose, autoPing;
  private boolean connected;
  protected final Client client;

  /**
   * Creates a {@code ClientHandlerAdapter} with auto-ping.
   *
   * @param client the client to handle
   */
  public ClientHandlerAdapter(Client client) {
    this(client, JuiceBotDefaults.VERBOSE_BY_DEFAULT, true);
  }

  /**
   * Creates a {@code ClientHandlerAdapter} with auto-ping.
   *
   * @param client  the client to handle
   * @param verbose whether or not to be verbose
   */
  public ClientHandlerAdapter(Client client, boolean verbose) {
    this(client, verbose, true);
  }

  /**
   * Creates a {@code ClientHandlerAdapter}.
   *
   * @param client   the client to handle
   * @param verbose  whether or not to be verbose
   * @param autoPing whether or not to automatically handle pings
   */
  public ClientHandlerAdapter(Client client, boolean verbose, boolean autoPing) {
    this.client = client;
    this.verbose = verbose;
    this.autoPing = autoPing;
  }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        String message = (String) msg;
        System.out.println("RECEIVED: " + message);
        if (!connected) {
            connected = true;
            client.connected(ctx.channel());
        }
        for (String command : message.split("\r\n")) {
            if (verbose)
                InternalUtilities.println(command);
            if ((autoPing || !connected) && command.contains("PING") && command.indexOf("PING") < command.indexOf(':', 1) && !command.contains("supported")) {
                String pong = command.replaceFirst("PING", "PONG").substring(command.indexOf("PING"));
                if (verbose)
                    InternalUtilities.println(pong);
                client.send(pong);
            } else if (client.isSimpleMessageReceiver()) {
                client.receive(command, ctx.channel());
            } else {
                client.receive(new Message(command.split(" "), client, ctx.channel()));
            }
        }
    }

  @Override
  public void channelInactive(ChannelHandlerContext ctx) throws Exception {
    connected = false;
    client.disconnected(ctx.channel());
  }
}
TOP

Related Classes of us.aaronweiss.juicebot.net.ClientHandlerAdapter

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.