WsClient.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package com.xc.utils.websocket;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.xc.controller.websocket.WebSocketController;
  4. import com.xc.service.InitStockListService;
  5. import com.xc.utils.PropertiesUtil;
  6. import com.xc.vo.stock.StockVO;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.java_websocket.WebSocket;
  9. import org.java_websocket.client.WebSocketClient;
  10. import org.java_websocket.handshake.ServerHandshake;
  11. import java.math.BigDecimal;
  12. import java.net.URI;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. public class WsClient extends WebSocketClient {
  16. private static WsClient instance ;
  17. static InitStockListService initStockListServiceBiz;
  18. /**
  19. * 单例
  20. */
  21. public static WsClient getInstance(InitStockListService initStockListService) {
  22. initStockListServiceBiz=initStockListService;
  23. return instance;
  24. }
  25. public static WsClient getThis() {
  26. return instance;
  27. }
  28. public WsClient(URI serverUri) {
  29. super(serverUri);
  30. instance = this;
  31. }
  32. @Override
  33. public void onOpen(ServerHandshake arg0) {
  34. System.out.println(arg0);
  35. System.out.println("握手成功");
  36. }
  37. @Override
  38. public void onClose(int arg0, String arg1, boolean arg2) {
  39. if(arg0==1006||arg0==1001){
  40. Thread thread=new Thread(new Runnable() {
  41. @Override
  42. public void run() {
  43. try {
  44. boolean b = false ;
  45. while(!b){
  46. try {
  47. String url = PropertiesUtil.getProperty("ws.url");
  48. WsClient myClient = new WsClient(new URI(url));
  49. myClient.connect();
  50. Thread.sleep(5000);
  51. if(myClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
  52. b = true;
  53. System.out.println("订阅成功555");
  54. }
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }catch (Exception e){
  60. e.printStackTrace();
  61. }
  62. }
  63. });
  64. thread.start();
  65. }
  66. }
  67. @Override
  68. public void onError(Exception arg0) {
  69. System.out.println(arg0.toString());
  70. }
  71. /**
  72. * 订阅返回的数据
  73. * @param arg0
  74. */
  75. @Override
  76. public void onMessage(String arg0) {
  77. try {
  78. if(StringUtils.isNotBlank(arg0)){
  79. if(arg0.contains("testws")){
  80. System.out.println(arg0);
  81. }
  82. // 存储信息至redis
  83. JSONObject parse = (JSONObject) JSONObject.parse(arg0);
  84. StockVO stockVO = new StockVO();
  85. stockVO.setId(parse.getInteger("id"));
  86. stockVO.setName(parse.getString("name"));
  87. stockVO.setCode(parse.getString("code"));
  88. stockVO.setSpell(parse.getString("spell"));
  89. stockVO.setGid(parse.getString("gid"));
  90. stockVO.setNowPrice(parse.get("nowPrice")+"");
  91. stockVO.setHcrate(new BigDecimal(parse.get("hcrate")+""));
  92. stockVO.setToday_max(parse.get("today_max")+"");
  93. stockVO.setToday_min(parse.get("today_min")+"");
  94. stockVO.setBusiness_balance(parse.get("business_balance")+"");
  95. stockVO.setBusiness_amount(parse.get("business_amount")+"");
  96. stockVO.setPreclose_px(parse.get("preclose")+"");
  97. stockVO.setOpen_px(parse.get("open")+"");
  98. stockVO.setTransState(parse.getInteger("transState"));
  99. stockVO.setDepositAmt(parse.getInteger("depositAmt"));
  100. stockVO.setMinImg(parse.getString("minImg"));
  101. stockVO.setDayImg(parse.getString("dayImg"));
  102. stockVO.setWeekImg(parse.getString("weekImg"));
  103. stockVO.setMonthImg(parse.getString("monthImg"));
  104. stockVO.setChange(parse.get("change")+"");
  105. List<StockVO> stockVOList = new ArrayList<>();
  106. stockVOList.add(stockVO);
  107. initStockListServiceBiz.updateListInfo(stockVOList);
  108. initStockListServiceBiz.updateInfo(stockVO);
  109. // 处理数据 并 推送给 客户
  110. new WebSocketController().sendSysMsg("all",arg0);
  111. }
  112. }catch (Exception e){
  113. }
  114. }
  115. public void closeWebSocket(){
  116. this.onClose(1,"",true);
  117. }
  118. }