@Component//申明为spring组件
@ServerEndpoint("/confservice/confWebSocketService/{id}")//webSocket连接地址
public class ConfWebSocketService {
private static final Logger logger=Logger.getLogger(ConfWebSocketService.class);
private static Map sessionMaps = new HashMap<>();
private static Session sessionf;
private static List allUserMS = new ArrayList<>();
private static List allUserWY = new ArrayList<>();
@Autowired
private IUserService userService;//静态初使化当前类
public static ConfWebSocketService confWebSocketService;//注解@PostConstruct,这样方法就会在Bean初始化之后被Spring容器执行
@PostConstruct
publicvoidinit() {
confWebSocketService= this;
}/**
* 连接成功调用
* @param session*/@OnOpen
publicvoid onOpen(Session session, @PathParam("id") String id) {
Thread thread= new Thread(newRunnable() {
@Override
publicvoidrun() {try{
sessionf=session;
sessionMaps.put(session, id);
}catch(Exception e) {
logger.debug("webSocket连接异常:"+e.getMessage());
e.printStackTrace();
}
}
});
thread.start();
}/**
* 关闭连接调用*/@OnClose
publicvoidonClose(Session session) {
Thread thread= new Thread(newRunnable() {
@Override
publicvoidrun() {
sessionMaps.remove(session);
}
});
thread.start();
}/**
* 收到客户端消息调用
* @param message
* @param session*/@OnMessage
publicvoidonMessage(String message,Session session) {if (message.equals("ping!")) {//保持和会议服务长连接
sendMessage(message,"0");
}else if(message.equals("yuyin!"))
{//保持和语音识别长连接
sendMessage(message,"2");
}
}/**
* 出现错误调用
* @param session
* @param error*/@OnError
publicvoidonError(Session session, Throwable error) {
error.printStackTrace();
}/**
* 发送消息(自定义的方法)*/public staticvoidsendMessage(String message,String flag) {try{//session.getBasicRemote().sendText(message);//同步发送消息
if (flag.equals("1") || flag.equals("2")) {
Role role=newRole();if (flag.equals("1")) {
role.setType("2");if (allUserMS.size() == 0) {
allUserMS=confWebSocketService.userService.getUserByRole(role);
}
}else{
role.setType("0");if (allUserWY.size() == 0) {
allUserWY=confWebSocketService.userService.getUserByRole(role);
}
}
}
Set> entrySet =sessionMaps.entrySet();for (Entrymap : entrySet) {
String checkId=map.getValue();if (flag.equals("0") && checkId.equals("huiyifuwu")) {
sessionf=map.getKey();
sessionf.getAsyncRemote().sendText(message);//异步发送消息
break;
}else if (flag.equals("1") && allUserMS.size() > 0) {for(User user : allUserMS) {if(checkId.equals(user.getId())) {
sessionf=map.getKey();
sessionf.getAsyncRemote().sendText(message);//异步发送消息
break;
}
}
}else if (flag.equals("2") && allUserWY.size() > 0) {for(User user : allUserWY) {if(checkId.equals(user.getId())) {
sessionf=map.getKey();
sessionf.getAsyncRemote().sendText(message);//异步发送消息
break;
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}
}
}