// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/core/Connection.java
// public class Connection {
// 
//     private ChannelHandlerContext chc;
// 
//     public void send(Packet packet) {
//         chc.channel().writeAndFlush(packet);
//     }
// 
//     public ChannelHandlerContext getChc() {
//         return chc;
//     }
// 
//     public void setChc(ChannelHandlerContext chc) {
//         this.chc = chc;
//     }
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/dto/LoginReq.java
// @org.msgpack.annotation.Message
// public class LoginReq {
//     public String token;
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/dto/Command.java
// public enum Command {
//     HEARTBEAT(1),
//     HANDSHAKE_REQ(10),
//     HANDSHAKE_RESP(11),
//     ERROR(2),
//     LOGIN(3),
//     LOGOUT(4),
//     BIND(5),
//     UNBIND(6),
//     PUSH(7),
//     TEXT_MESSAGE(100),
//     UNKNOWN(-1);
// 
//     Command(int cmd) {
//         this.cmd = (byte) cmd;
//     }
// 
//     public final byte cmd;
// 
//     public static Command toCMD(byte b) {
//         for (Command command : values()) {
//             if (command.cmd == b) {
//                 return command;
//             }
//         }
//         return UNKNOWN;
//     }
// 
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/handler/AbstractHandler.java
// public abstract class AbstractHandler<T> extends PacketHandler {
// 
//     public T decode(Packet packet) {
//         try {
//             return new MessagePack().read(packet.getBody(), getType());
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
//     public abstract Class<T> getType();
// 
//     public abstract void handle(T message, Connection connection);
// 
//     public void handle(Packet packet, Connection connection) {
//         T t = decode(packet);
//         if (t != null) {
//             handle(t, connection);
//         }
//     }
// }


import cn.ctodb.push.core.Connection;
import cn.ctodb.push.dto.LoginReq;
import cn.ctodb.push.dto.Command;
import cn.ctodb.push.handler.AbstractHandler;
package cn.ctodb.push.server.handler;


/**
 * All rights Reserved, Designed By www.ctodb.cn
 *
 * @version V1.0
 * @author: lichaohn@163.com
 * @Copyright: 2018 www.ctodb.cn Inc. All rights reserved.
 */
public final class LoginHandler extends AbstractHandler<LoginReq> {

    @Override
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/core/Connection.java
// public class Connection {
// 
//     private ChannelHandlerContext chc;
// 
//     public void send(Packet packet) {
//         chc.channel().writeAndFlush(packet);
//     }
// 
//     public ChannelHandlerContext getChc() {
//         return chc;
//     }
// 
//     public void setChc(ChannelHandlerContext chc) {
//         this.chc = chc;
//     }
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/dto/LoginReq.java
// @org.msgpack.annotation.Message
// public class LoginReq {
//     public String token;
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/dto/Command.java
// public enum Command {
//     HEARTBEAT(1),
//     HANDSHAKE_REQ(10),
//     HANDSHAKE_RESP(11),
//     ERROR(2),
//     LOGIN(3),
//     LOGOUT(4),
//     BIND(5),
//     UNBIND(6),
//     PUSH(7),
//     TEXT_MESSAGE(100),
//     UNKNOWN(-1);
// 
//     Command(int cmd) {
//         this.cmd = (byte) cmd;
//     }
// 
//     public final byte cmd;
// 
//     public static Command toCMD(byte b) {
//         for (Command command : values()) {
//             if (command.cmd == b) {
//                 return command;
//             }
//         }
//         return UNKNOWN;
//     }
// 
// }
// 
// Path: cn.ctodb.push.core/src/main/java/cn/ctodb/push/handler/AbstractHandler.java
// public abstract class AbstractHandler<T> extends PacketHandler {
// 
//     public T decode(Packet packet) {
//         try {
//             return new MessagePack().read(packet.getBody(), getType());
//         } catch (IOException e) {
//             e.printStackTrace();
//         }
//         return null;
//     }
// 
//     public abstract Class<T> getType();
// 
//     public abstract void handle(T message, Connection connection);
// 
//     public void handle(Packet packet, Connection connection) {
//         T t = decode(packet);
//         if (t != null) {
//             handle(t, connection);
//         }
//     }
// }


// Path: cn.ctodb.push.server/src/main/java/cn/ctodb/push/server/handler/LoginHandler.java
import cn.ctodb.push.core.Connection;
import cn.ctodb.push.dto.LoginReq;
import cn.ctodb.push.dto.Command;
import cn.ctodb.push.handler.AbstractHandler;

package cn.ctodb.push.server.handler;


/**
 * All rights Reserved, Designed By www.ctodb.cn
 *
 * @version V1.0
 * @author: lichaohn@163.com
 * @Copyright: 2018 www.ctodb.cn Inc. All rights reserved.
 */
public final class LoginHandler extends AbstractHandler<LoginReq> {

    @Override
    public Class<LoginReq> getType() {