Netty初体验,聊天室02

1、客户端与服务端进行数据传输的协议

  抽象的消息类实现序列化

 PS:本博主不会描述,逼急眼了只会上代码。

@Data
public abstract class Message implements Serializable {

    /**
     * 根据消息类型获取对应的class
     * @param messageType
     * @return
     */
    public static Class<? extends Message> getMessageClass(int messageType){
        return map.get(messageType);
    }

    private int sequenceId;

    private int messageType;

    public abstract int getMessageType();

    public static final int LoginRequestMessage = 0;
    public static final int LoginResponseMessage = 1;
    public static final int ChatRequestMessage = 2;
    public static final int ChatResponseMessage = 3;
    public static final int GroupCreateRequestMessage = 4;
    public static final int GroupCreateResponseMessage = 5;
    public static final int GroupJoinRequestMessage = 6;
    public static final int GroupJoinResponseMessage = 7;
    public static final int GroupQuitRequestMessage = 8;
    public static final int GroupQuitResponseMessage = 9;
    public static final int GroupChatRequestMessage = 10;
    public static final int GroupChatResponseMessage = 11;
    public static final int GroupMemberRequestMessage = 12;
    public static final int GroupMemberResponseMessage = 13;
    public static final int PingMessage = 14;
    public static final int PongMessage = 15;
    /**
     * 请求类型 byte 值
     */
    public static final int RPC_MESSAGE_TYPE_REQUEST = 101;
    /**
     * 响应类型byte值
     */
    public static final int RPC_MESSAGE_TYPE_RESPONSE = 102;

    private static final Map<Integer,Class<? extends Message>> map = new HashMap<>();

    static {
        map.put(0, com.chatroomserver.message.ChatRequestMessage.class);
        map.put(1,LoginResponse.class);
    }

}

响应抽象类

public abstract class AbstractResponseMessage extends Message{

    private boolean success;

    private String reason;

    public AbstractResponseMessage() {
    }

    public AbstractResponseMessage(boolean success, String reason) {
        this.success = success;
        this.reason = reason;
    }

    public boolean isSuccess(){
        //System.out.println(this.success);
        return this.success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }
}

在具体业务中,请求类与相应类一一对应,并由特定Handler接收

LogingRequestMessage--- LoginResponseMessage

ChatRequestMessage --- ChatResponseMessage

GroupChatRequestMessage --- GroupChatResponseMessage

直接上代码

@Data
@ToString(callSuper = true)
public class LoginRequestMessage extends Message{

    private String username;
    private String password;

    public LoginRequestMessage() {
    }

    public LoginRequestMessage(String username, String password) {
        this.username = username;
        this.password = password;
    }

    @Override
    public int getMessageType() {
        return LoginRequestMessage;
    }
}
@Data
@ToString(callSuper = true)
public class LoginResponse extends AbstractResponseMessage{

    private String from;
    private String content;

    public LoginResponse(boolean success, String reason) {
        super(success, reason);
    }

    public LoginResponse(String from, String content) {
        this.from = from;
        this.content = content;
    }

    @Override
    public int getMessageType() {
        return LoginResponseMessage;
    }
}
@Data
@ToString(callSuper = true)
public class ChatRequestMessage extends Message{
    private String content;
    private String to;
    private String from;
    @Override
    public int getMessageType() {
        return LoginRequestMessage;
    }

    public ChatRequestMessage(String content, String to, String from) {
        this.content = content;
        this.to = to;
        this.from = from;
    }

}
@Data
@ToString(callSuper = true)
public class ChatResponseMessage extends AbstractResponseMessage{

    private String from;

    private String context;

    public ChatResponseMessage(boolean success, String reason) {
        super(success, reason);
    }

    @Override
    public int getMessageType() {
        return ChatResponseMessage;
    }

    public ChatResponseMessage(String from, String context) {
        this.from = from;
        this.context = context;
    }
}
@Data
@ToString(callSuper = true)
public class GroupChatRequestMessage extends Message{

    private String from;
    private String groupName;
    private String context;

    public GroupChatRequestMessage(String from, String groupName, String context) {
        this.from = from;
        this.groupName = groupName;
        this.context = context;
    }

    @Override
    public int getMessageType() {
        return GroupChatRequestMessage;
    }
}
@Data
@ToString(callSuper = true)
public class GroupChatResponseMessage extends AbstractResponseMessage{

    private String from;
    private String content;

    @Override
    public int getMessageType() {
        return GroupChatResponseMessage;
    }

    public GroupChatResponseMessage(boolean success, String reason) {
        super(success, reason);
    }

    public GroupChatResponseMessage(String from, String content) {
        this.from = from;
        this.content = content;
    }
}
@Data
@ToString(callSuper = true)
public class GroupCreateRequestMessage extends Message{

    private String from;
    private String groupName;
    private Set<String> members;

    public GroupCreateRequestMessage(String from, String groupName, Set<String> members) {
        this.from = from;
        this.groupName = groupName;
        this.members = members;
    }

    @Override
    public int getMessageType() {
        return GroupChatRequestMessage;
    }
}
@Data
@ChannelHandler.Sharable
public class GroupCreateResponseMessage extends AbstractResponseMessage{

    private String from;
    private String content;

    public GroupCreateResponseMessage(String from, String content) {
        this.setSuccess(true);
        this.from = from;
        this.content = content;
    }

    public GroupCreateResponseMessage(boolean success, String reason) {
        super(success, reason);
    }

    @Override
    public int getMessageType() {
        return GroupCreateResponseMessage;
    }
}
@Data
@ToString(callSuper = true)
public class PingMessage extends Message{

    private Integer code;

    private String message;

    public PingMessage(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public int getMessageType() {
        return PingMessage;
    }
}
public class PongMessage extends AbstractResponseMessage{

    public PongMessage(boolean success, String reason) {
        super(success, reason);
    }

    @Override
    public int getMessageType() {
        return PongMessage;
    }
}

以上代码为消息传输中所能用到的消息类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工作这么多年,学会了内卷

共同加油,继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值