package com.cloud.retrieve.websocket; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.cloud.common.utils.DateUtil; import com.cloud.retrieve.service.EsDataService; import jdk.nashorn.internal.runtime.logging.Loggable; import jdk.nashorn.internal.runtime.logging.Logger; import lombok.extern.slf4j.Slf4j; import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.net.InetSocketAddress; import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Slf4j //@Component public class AlarmSocketServer extends WebSocketServer { @Autowired private EsDataService esDataService; private Map conns = new HashMap<>(); // public AlarmSocketServer(){ // super(new InetSocketAddress(7678)); // // new Thread(){ // @Override // public void run(){ // // Object startTime =null; // Map map = new HashMap<>(); // // try { // Thread.sleep(2000); // AlarmSocketServer.this.start(); // } catch (InterruptedException e) { // e.printStackTrace(); // } // // while(true){ // try { // Thread.sleep(2000); // JSONObject alarmData = esDataService.findEsAllAlarmDataByPage(1, 200,null,null); // // for(WebSocket conn : conns.keySet()){ // try { // String resourceDescriptor = conn.getResourceDescriptor(); // String[] params = resourceDescriptor.split("/"); // String method = params[1]; // // try { // if(conns.get(conn) != null && conns.get(conn) instanceof Map){ // startTime = ((Map)conns.get(conn)).get("startTime"); // map = (Map)(((Map)conns.get(conn)).get("map")); // if(map == null){ // map = new HashMap<>(); // } // } // } catch (Exception e) { // e.printStackTrace(); // startTime = null; // map = new HashMap<>(); // } // // } catch (Exception e) { // e.printStackTrace(); // try { // if(conn.isClosed()){ // conns.remove(conn); // } // } catch (Exception e1) { // e1.printStackTrace(); // } // } // // try { // Map curMap = new HashMap<>(); // if((alarmData !=null && alarmData.get("total")!= null && Integer.parseInt(alarmData.getString("total")) > 0)){ // JSONArray curAlarmList = alarmData.getJSONArray("equList"); // // List sendList = new ArrayList<>(); // Timestamp lastLikeDate = null; // if(startTime !=null){//socket获取过数据 // lastLikeDate = Timestamp.valueOf(startTime.toString()); // for(int i=0;i < curAlarmList.size();i++){ // JSONObject obj = (JSONObject) curAlarmList.get(i); // Timestamp sTime = Timestamp.valueOf(obj.getString("likeDate")); // String recordId = obj.get("Id").toString(); // curMap.put(recordId, obj); // if(sTime.after(lastLikeDate) && !map.containsKey(recordId)){ // sendList.add(obj); // } // } // }else{ // for(int i=0;i < curAlarmList.size();i++){ // JSONObject obj = (JSONObject) curAlarmList.get(i); // String recordId = obj.get("Id").toString(); // curMap.put(recordId, obj); // sendList.add(obj); // } // // } // // if(sendList.size() > 0){ // JSONObject sData = new JSONObject(); // sData.put("total",alarmData.getString("total")); // sData.put("data", sendList); // log.info("websocket推送es数据:"+sendList); // conn.send(JSON.toJSONString(sData, SerializerFeature.WriteMapNullValue).toString()); // // Map connMap = new HashMap<>(); // lastLikeDate = Timestamp.valueOf(((JSONObject)sendList.get(sendList.size()-1)).getString("likeDate")); // log.info("websocket推送es数据 startTime:"+lastLikeDate); // connMap.put("startTime", lastLikeDate); // connMap.put("map", curMap); // conns.put(conn, connMap); // // }else{ // /* JSONObject sData = new JSONObject(); // sData.put("total",alarmData.getString("total")); // sData.put("data", sendList); // conn.send(JSON.toJSONString(sData, SerializerFeature.WriteMapNullValue).toString()); // log.info("sendList.size=0");*/ // } // } // } catch (Exception e) { // e.printStackTrace(); // } // } // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // } // }.start(); // } @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { try { log.info("建立连接"); conns.put(conn, new HashMap()); } catch (Exception e) { e.printStackTrace(); } } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { try { log.info("连接关闭"); conns.remove(conn); } catch (Exception e) { e.printStackTrace(); } } @Override public void onMessage(WebSocket conn, String message) { } @Override public void onError(WebSocket conn, Exception ex) { log.info("exception:"+ex.getMessage()); } @Override public void onStart() { } }