packagecom.snw.supplyChain.websocket;importcom.snw.supplyChain.model.VisualizationProduct;importcom.snw.supplyChain.service.IVisualizationService;importnet.sf.json.JSONObject;importorg.apache.commons.lang3.StringUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.socket.CloseStatus;importorg.springframework.web.socket.TextMessage;importorg.springframework.web.socket.WebSocketSession;importorg.springframework.web.socket.handler.TextWebSocketHandler;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;public class VisualizationWebSocketHandler extendsTextWebSocketHandler {private static final Map sessions = new HashMap();private static final Map threads = new HashMap();private Thread polingVisualization = null;//用户标识

private static final String CLIENT_ID = "sessionId";

@AutowiredprivateIVisualizationService visualizationService;

@Overridepublic void afterConnectionEstablished(WebSocketSession session) throwsException {

System.out.println("afterConnectionEstablished: \n"+session.getId());

Object sessionType= session.getAttributes().get("mall");if(sessionType != null && "mall".equals(sessionType)){

sessions.put(CLIENT_ID,session);

sessions.put(session.getId(),session);

}super.afterConnectionEstablished(session);

}

@Overridepublic voidafterConnectionClosed(WebSocketSession session, CloseStatus status) {

Thread thread=threads.get(session.getId());if(thread != null){

thread.interrupt();try{

thread.join();

threads.remove(session.getId());

}catch(InterruptedException e) {

e.printStackTrace();

}

}

sessions.remove(session.getId());

sessions.remove(CLIENT_ID);

polingVisualization= null;try{super.afterConnectionClosed(session, status);

}catch(Exception e) {

}

}//这里是处理前端发送的消息以及返回给前端的数据//可以从session里面获取attributes,

@Overrideprotected voidhandleTextMessage(WebSocketSession session,

TextMessage message)throwsException {super.handleTextMessage(session, message);

Thread thread=threads.get(session.getId());if(thread == null){

System.out.println("handleTextMessage: \n"+session.getId());

WebSocketSession sessi=sessions.get(session.getId());if(sessi == null){

sessions.put(session.getId(),session);

}else{

session=sessi;

}final WebSocketSession localSession =session;final TextMessage localMessage =message;

String payload=message.getPayload();if(StringUtils.isNotBlank(payload)){

String[] split= payload.split("_");if(StringUtils.isNotBlank(split[2])){if("mall".equals(split[1])){final int universalid = Integer.parseInt(split[2]);//这里的Thread可以用java.util.concurrent代替

Thread polingVisualization = new Thread(newRunnable() {public voidrun() {while(!Thread.currentThread().isInterrupted()){try{

polingVisualization(localSession, localMessage, universalid);try{

Thread.sleep(180000);//300000

} catch(InterruptedException e) {

e.printStackTrace();

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

});

polingVisualization.start();

threads.put(sessi.getId(),polingVisualization);

}

}

}

}

}privateVisualizationProduct polingVisualization(WebSocketSession session,

TextMessage message,Integer universalid)throwsIOException {

VisualizationProduct visualizationProduct=visualizationService.findInquiryPriceOrderVisualization(universalid);

Map dataMap = new HashMap();

dataMap.put("status","1");

dataMap.put("visualizationProduct", visualizationProduct);

String dataStr=JSONObject.fromObject(dataMap).toString();

TextMessage returnMessage= newTextMessage(dataStr);

session.sendMessage(returnMessage);returnvisualizationProduct;

}/*** 给正在发布的商品发送新数据

*@paramuniversalid 发布会ID

*@paramsessionId*/

public voidsendNewProductDatas(Integer universalid, String sessionId){if(universalid != null){

Set keys =sessions.keySet();for(String key : keys) {

WebSocketSession webSocketSession=sessions.get(key);if(webSocketSession != null &&webSocketSession.isOpen()){

VisualizationProduct visualizationProduct=visualizationService.findInquiryPriceOrderVisualization(universalid);

Map dataMap = new HashMap();

dataMap.put("status","1");

dataMap.put("visualizationProduct", visualizationProduct);

String dataStr=JSONObject.fromObject(dataMap).toString();

System.out.println(dataStr);

TextMessage returnMessage= newTextMessage(dataStr);try{

webSocketSession.sendMessage(returnMessage);

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

}

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐