t-io-websocket 即时通讯配置
t-io-websocket 下载地址:https://gitee.com/tywo45/tio-websocket-showcase
pom.xml
<!--tio-websocket -->
<dependency>
<groupId>org.t-io</groupId>
<artifactId>tio-websocket-server</artifactId>
<version>3.1.3.v20180720-RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
项目结构
socketPackage 是消息体对象
public class SocketPackage {
//文本内容
private String txt;
//消息类型
private String messageType;
//当前的人的名称
private String name;
//当前的房间主键
private String roomName;
//当前的消息主键
private String messageId;
//用户头像
private String icon;
//发送容器号
private String containerId;
//用户主键
private String userId;
//消息类型
private String type;
//当前操作对象
private ChannelContext channelContext;
//消息体对象
private String jsonMessage;
//消息体对象Object
private JSONObject jsonObject;
}
MessageHandler消息处理对象
- 消息类型方法处理public
文件类型方法
text:文字信息处理
event:自定义信息处理
updateRoomName:修改房间信息
addContainer:添加至容器信息处理
createContainer:创建容器信息处理
autoReturn:自动回复
removeContainer:容器内退出消息处理
updateUserInfo:修改用户信息 - 内部调用方法private
targetMessageText:带有业务主键信息处理
defaultHandler:基础信息处理(发送普通信息)
addMessageCenter:添加会话记录
第一步握手后处理
//如果有容器,则另外分组容器
handler.addContainer(containerId, channelContext, "big");//big代表自身信息不需要添加容器主键
//绑定到群组
Tio.bindGroup(channelContext, roomName);
//绑定到个人
Tio.bindBsId(channelContext, userId);
//发送提示信息-in为房间进入信息提示-containerIn为容器进入信息提示
handler.sendNoticeMessage(channelContext, roomName, name, containerId == null ? "in" : "containerIn", null);
消息类型的反射处理
Class<?> handlerClass = MessageHandler.class;
try {
//默认的是文字类型属性
Method method = handlerClass.getMethod(messageType == null ? "text" : messageType, SocketPackage.class);
method.invoke(handler, new SocketPackage(checkParam(txt), messageType, name, roomName,
messageId, icon, containerId, userId, type,
channelContext, msg.toJSONString(), msg));
} catch (NoSuchMethodException e) {
throw new BusinessException("消息类型错误");
}