| | |
| | | package com.moral.api.websocket; |
| | | |
| | | import com.moral.api.entity.Device; |
| | | import com.moral.api.entity.Sensor; |
| | | import com.moral.api.entity.UnitConversion; |
| | | import com.moral.constant.RedisConstants; |
| | | import lombok.Data; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | |
| | | import javax.websocket.*; |
| | | import javax.websocket.server.PathParam; |
| | | import javax.websocket.server.ServerEndpoint; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.CopyOnWriteArraySet; |
| | | |
| | | /** |
| | |
| | | **/ |
| | | @ServerEndpoint("/singleDevice/{mac}") |
| | | @Component |
| | | @Data |
| | | public class SingleDeviceServer { |
| | | |
| | | //线程安全集合,用于存放server对象 |
| | | public static CopyOnWriteArraySet<SingleDeviceServer> sockets = new CopyOnWriteArraySet<>(); |
| | | |
| | | public static RedisTemplate redisTemplate; |
| | | |
| | | private Session session; |
| | | |
| | | private String mac; |
| | | |
| | | private Map<String, Device> devicesInfo; |
| | | |
| | | private List<UnitConversion> unitConversions; |
| | | |
| | | @OnOpen |
| | | public void onOpen(Session session, @PathParam("mac") String mac) throws Exception { |
| | | this.session = session; |
| | | this.mac = mac; |
| | | this.devicesInfo = redisTemplate.opsForHash().entries(RedisConstants.DEVICE_INFO); |
| | | this.unitConversions = redisTemplate.opsForList().range(RedisConstants.UNIT_CONVERSION, 0, -1); |
| | | sockets.add(this); |
| | | System.out.println(mac); |
| | | } |
| | | } |
| | | |
| | | @OnClose |
| | | public void onClose() { |
| | |
| | | |
| | | public void sendMessage(String message) throws Exception { |
| | | if (this.session.isOpen()) { |
| | | synchronized (session) { |
| | | this.session.getBasicRemote().sendText(message); |
| | | } |
| | | // synchronized (session) { |
| | | this.session.getBasicRemote().sendText(message); |
| | | // } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |