DeviceInfoDetailHandler.java 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package com.coffee.bus.websocket;
  2. import cn.hutool.core.collection.CollectionUtil;
  3. import com.coffee.common.Constants;
  4. import com.coffee.common.bo.LoginUser;
  5. import com.coffee.common.config.websocket.MessagingRequest;
  6. import com.coffee.common.config.websocket.handler.Subscribe;
  7. import org.springframework.stereotype.Component;
  8. import org.tio.core.ChannelContext;
  9. import java.util.List;
  10. import java.util.stream.Collectors;
  11. /**
  12. * @author lifang
  13. * @version 1.0.0
  14. * @ClassName DeviceInfoDetailHandler.java
  15. * @Description 处理订阅设备详情
  16. * @createTime 2022年03月25日 14:20:00
  17. */
  18. @Component
  19. public class DeviceInfoDetailHandler extends Subscribe{
  20. @Override
  21. public String getId() {
  22. return WebSocketConstant.DEVICE_INFO_DETAIL;
  23. }
  24. @Override
  25. public void onMessage(MessagingRequest message, ChannelContext channelContext) {
  26. LoginUser loginUser = (LoginUser) channelContext.get(Constants.LOGIN_USER_KEY);
  27. if(loginUser==null){
  28. channelContext.setClosed(true);
  29. return;
  30. }
  31. //获取所有设备id
  32. List<String> params = message.getParams();
  33. if(CollectionUtil.isEmpty(params)){
  34. return;
  35. }
  36. //需要处理的主题
  37. List<String> subScribeTopic =
  38. params.stream().map(deviceId -> WebSocketConstant.getTopic(this.getId(), message.getProductName(), deviceId, loginUser.getTenantId()))
  39. .collect(Collectors.toList());
  40. MessagingRequest.Type type = message.getType();
  41. if(MessagingRequest.Type.sub==type){
  42. //订阅主题
  43. subScribeTopic.forEach(topic->this.subscribe(channelContext,topic));
  44. }else {
  45. //取消订阅主题
  46. subScribeTopic.forEach(topic->this.unsubscribe(channelContext,topic));
  47. }
  48. }
  49. @Override
  50. public void close(ChannelContext channelContext) {
  51. }
  52. }