From 82dfeaa3fcf871cb604e82abcc8a6db7581e83a2 Mon Sep 17 00:00:00 2001
From: zainali5120 <512061637@qq.com>
Date: Mon, 21 Sep 2020 00:59:54 +0800
Subject: [PATCH] 撮合交易代码提交

---
 src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java |   82 ++++++++++++++++++++++++++++++-----------
 1 files changed, 60 insertions(+), 22 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java b/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
index 5eedf8e..8e48637 100644
--- a/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
+++ b/src/main/java/com/xcong/excoin/websocket/TradePlateSendWebSocket.java
@@ -28,8 +28,6 @@
 @ServerEndpoint(value = "/trade/market")
 @Component
 public class TradePlateSendWebSocket {
-    @Resource
-    RedisUtils redisUtils;
 
     /**
      * 记录当前在线连接数
@@ -57,15 +55,15 @@
     public void onClose(Session session) {
         onlineCount.decrementAndGet(); // 在线数减1
         Collection<Map<String, Session>> values = tradeplateClients.values();
-        if(CollectionUtils.isNotEmpty(values)){
-            for(Map<String,Session> map : values){
+        if (CollectionUtils.isNotEmpty(values)) {
+            for (Map<String, Session> map : values) {
                 map.remove(session.getId());
             }
         }
 
         Collection<Map<String, Session>> klineClientsValues = klineClients.values();
-        if(CollectionUtils.isNotEmpty(klineClientsValues)){
-            for(Map<String,Session> map : klineClientsValues){
+        if (CollectionUtils.isNotEmpty(klineClientsValues)) {
+            for (Map<String, Session> map : klineClientsValues) {
                 map.remove(session.getId());
             }
         }
@@ -101,20 +99,20 @@
             SubResultModel subResultModel = new SubResultModel();
             subResultModel.setId("rocusdt");
             subResultModel.setSubbed(sub);
-            synchronized (session){
+            synchronized (session) {
                 try {
                     session.getBasicRemote().sendText(JSONObject.toJSONString(subResultModel));
                 } catch (IOException e) {
                     e.printStackTrace();
                 }
             }
-           synchronized (session){
-               try {
-                   session.getBasicRemote().sendText(nekk);
-               } catch (IOException e) {
-                   e.printStackTrace();
-               }
-           }
+            synchronized (session) {
+                try {
+                    session.getBasicRemote().sendText(nekk);
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
 
 
         }
@@ -140,7 +138,7 @@
             String symbol = split[1];
             symbol = CoinTypeConvert.convert(symbol);
             String period = split[3];
-            if("60min".equals(period)){
+            if ("60min".equals(period)) {
                 period = "1hour";
             }
             String key = symbol + "-" + period;
@@ -155,6 +153,37 @@
                 stringSessionMap.put(session.getId(), session);
                 klineClients.put(key, stringSessionMap);
             }
+            // 给他发送最新K线 TODO
+            String newKline = "NEW_KINE_{}";
+            key = StrUtil.format(newKline, symbol);
+            RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class);
+            Object o = redisUtils.get(key);
+            Map<String, Candlestick> currentKlineMap = (Map<String, Candlestick>) o;
+            String ch = "market.{}.kline.{}";
+            String chKey = period;
+            if (period.equals("60min")) {
+                chKey = "1hour";
+            }
+            if(currentKlineMap!=null && currentKlineMap.containsKey(chKey)){
+                Candlestick value = currentKlineMap.get(chKey);
+                // 转换
+                NewCandlestick newCandlestick = new NewCandlestick();
+                String nekkusdt = split[1];
+                ch = StrUtil.format(ch, nekkusdt, period);
+                newCandlestick.setCh(ch);
+                CandlestickModel model = new CandlestickModel();
+                model.setVol(value.getVolume());
+                model.setLow(value.getLow());
+                model.setOpen(value.getOpen());
+                model.setHigh(value.getHigh());
+                model.setCount(value.getCount());
+                model.setAmount(value.getAmount());
+                model.setId(value.getTimestamp() / 1000);
+                model.setTimestamp(value.getTimestamp() / 1000);
+                model.setClose(value.getClose());
+                newCandlestick.setTick(model);
+                sendMessageKlineNow(JSONObject.toJSONString(newCandlestick), session);
+            }
         }
 
         // 取消订阅
@@ -163,7 +192,7 @@
             String unsub = jsonObject.get("unsub").toString();
             String[] split = unsub.split("\\.");
             String strPeriod = split[3];
-            if("60min".equals(strPeriod)){
+            if ("60min".equals(strPeriod)) {
                 strPeriod = "1hour";
             }
             String symbol = split[1];
@@ -182,7 +211,7 @@
             String symbol = split[1];
             symbol = CoinTypeConvert.convert(symbol);
             String period = split[3];
-            if("60min".equals(period)){
+            if ("60min".equals(period)) {
                 period = "1hour";
             }
             //String key = symbol+"-"+period;
@@ -196,15 +225,15 @@
             List<CandlestickModel> candlestickModels = new ArrayList<>();
             CandlestickResult result = new CandlestickResult();
             result.setRep(sub);
-            if(o!=null){
-                List<Candlestick> list = (List<Candlestick>)o;
-                for(Candlestick candlestick : list){
+            if (o != null) {
+                List<Candlestick> list = (List<Candlestick>) o;
+                for (Candlestick candlestick : list) {
                     CandlestickModel model = new CandlestickModel();
                     model.setAmount(candlestick.getAmount());
                     model.setClose(candlestick.getClose());
                     model.setCount(candlestick.getCount());
                     model.setHigh(candlestick.getHigh());
-                    model.setId(candlestick.getTimestamp()/1000);
+                    model.setId(candlestick.getTimestamp() / 1000);
                     model.setOpen(candlestick.getOpen());
                     model.setLow(candlestick.getLow());
                     model.setVol(candlestick.getVolume());
@@ -228,7 +257,7 @@
      *
      * @param message 消息内容
      */
-    public void sendMessagePlate(String symbol,String message, Session fromSession) {
+    public void sendMessagePlate(String symbol, String message, Session fromSession) {
         if (tradeplateClients.containsKey(symbol)) {
             Map<String, Session> nekk = tradeplateClients.get(symbol);
             for (Map.Entry<String, Session> sessionEntry : nekk.entrySet()) {
@@ -245,6 +274,7 @@
 
     /**
      * 发送历史K线
+     *
      * @param message, toSession
      * @return void
      */
@@ -257,6 +287,7 @@
 
     /**
      * 发送最新K线
+     *
      * @param symbol, period, message, fromSession
      * @return void
      */
@@ -273,4 +304,11 @@
             }
         }
     }
+
+    public void sendMessageKlineNow(String message, Session toSession) {
+        boolean open = toSession.isOpen();
+        if (open) {
+            toSession.getAsyncRemote().sendText(message);
+        }
+    }
 }

--
Gitblit v1.9.1