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;
}
}
以上代码为消息传输中所能用到的消息类型