文章目录
- 前言
- WebSocketHandler.java
- http请求
- 心跳
前言
springboot整合netty实现一对一聊天室。
WebSocketHandler.java
核心功能由WebSocketHandler实现,发来的消息反序列化为MessageVO对象,通过type判断不同的功能。
package com.meeting.chatroom.handler;
import com.alibaba.fastjson.JSON;
import com.meeting.chatroom.entity.*;
import com.meeting.chatroom.service.ChatService;
import com.meeting.chatroom.service.FriendService;
import com.meeting.chatroom.util.SpringUtil;
import com.meeting.common.util.JwtTokenUtil;
import io.netty.channel.*;
import io.netty.handler.codec.http.*;
import io.netty.handler.codec.http.websocketx.*;
import io.netty.handler.ssl.SslHandler;
import io.netty.util.AttributeKey;
import java.util.HashMap;
import java.util.Map;
import static io.netty.handler.codec.http.HttpMethod.GET;
import static io.netty.handler.codec.http.HttpResponseStatus.FORBIDDEN;
import static io.netty.handler.codec.http.HttpResponseStatus.UNAUTHORIZED;
import static io.netty.handler.codec.http.HttpVersion.HTTP_1_1;
public class WebSocketHandler extends SimpleChannelInboundHandler
http请求
部分功能经过考虑,由http请求实现更合理。
package com.meeting.chatroom.controller;
import com.meeting.chatroom.entity.ChatChannelGroup;
import com.meeting.chatroom.service.OnOpenService;
import com.meeting.common.entity.ResponseData;
import com.meeting.common.util.JwtTokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class OnOpenController {
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private OnOpenService onOpenService;
@ResponseBody
@GetMapping("/getFriendsAndMessages")
public ResponseData getFriendsAndMessages(@RequestHeader(value = "Authorization", required = false) String token) {
ResponseData responseData = null;
Long uid = null;
if (token == null || !jwtTokenUtil.validateToken(token)
|| (uid = jwtTokenUtil.getUserIdFromToken(token)) == null) {
return new ResponseData(401, "未登录");
}
return onOpenService.getFriendsAndMessage(uid);
}
}
package com.meeting.chatroom.controller;
import com.meeting.chatroom.service.ChatService;
import com.meeting.common.entity.ResponseData;
import com.meeting.common.exception.UnAuthorizedException;
import com.meeting.common.util.JwtTokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@Controller
@CrossOrigin(origins = ("*"))
public class HistoryController {
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private ChatService chatService;
@ResponseBody
@GetMapping("/getHistoryMessage")
public ResponseData getHistoryMessage(@RequestHeader(value = "Authorization", required = false) String token,
@RequestParam("toId") long uid,
@RequestParam(value = "page", required = false) Integer page) {
Long id = null;
if (token == null || !jwtTokenUtil.validateToken(token)
|| (id = jwtTokenUtil.getUserIdFromToken(token)) == null) {
throw new UnAuthorizedException();
}
if (page == null || page < 1) {
page = 1;
}
int num = 10;
int start = num * (page - 1);
return chatService.selectHistoryMessage(id, uid, start, num);
}
}
心跳
关于心跳处理,等之后再做。