jinpengyong
2020-09-28 121a5b01a2461b5d9d5c188f9dd36c2e4673db9d
实时风向与因子数据从同一个websokceket获取优化
3 files modified
59 ■■■■ changed files
src/main/java/com/moral/webSocketServer/WebSocketServer.java 27 ●●●● patch | view | raw | blame | history
src/main/webapp/js/newmoralmap.js 25 ●●●● patch | view | raw | blame | history
src/main/webapp/view/newmap.jsp 7 ●●●● patch | view | raw | blame | history
src/main/java/com/moral/webSocketServer/WebSocketServer.java
@@ -17,12 +17,18 @@
import com.moral.common.util.ParameterUtils;
import com.moral.entity.Device;
import com.moral.service.DeviceService;
import com.moral.util.RabbitMQUtils;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.QueueingConsumer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
@@ -79,15 +85,16 @@
        try {
            //打开连接和创建频道,与发送端一样
            ConnectionFactory factory = new ConnectionFactory();
            /*ConnectionFactory factory = new ConnectionFactory();
            //设置MabbitMQ所在主机ip或者主机名
            factory.setHost("47.96.15.25");
            factory.setPort(5672);
            factory.setUsername("guest");
            factory.setPassword("guest_pass");
            factory.setPassword("guest_pass");*/
            //Connection connection = RabbitMQUtils.getConnection();
            String routingKey;
            connection = factory.newConnection();
            channel = connection.createChannel();
            this.connection = RabbitMQUtils.getConnection();
            channel = this.connection.createChannel();
            //声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。
            channel.queueDeclare(QUEUE_NAME, false, false, true, null);
            for (Device d : deviceList) {
@@ -95,7 +102,8 @@
                channel.queueBind(QUEUE_NAME, "screens_data", routingKey);
            }
            //创建队列消费者
            QueueingConsumer consumer = new QueueingConsumer(channel);
            /*java废弃方法*/
            /*QueueingConsumer consumer = new QueueingConsumer(channel);
            //指定消费队列
            channel.basicConsume(QUEUE_NAME, true, consumer);
@@ -104,7 +112,15 @@
                QueueingConsumer.Delivery delivery = consumer.nextDelivery();
                String message = new String(delivery.getBody());
                sendMessage(message);
            }*/
            channel.basicConsume(QUEUE_NAME, false, new DefaultConsumer(channel){
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    String msg = new String(body, "utf-8");
                    sendMessage(msg);
                    channel.basicAck(envelope.getDeliveryTag(), false);
            }
            });
        } catch (Exception e) {
            log.error(e.getMessage());
        }
@@ -118,7 +134,6 @@
        /**从安全Set中 移除当前连接对象*/
        webSocketSet.remove(this);
        try {
            //channel.queueDelete("deviceInfo_" + accountId);
            connection.close();
        } catch (IOException e) {
            log.error(e.getMessage());
src/main/webapp/js/newmoralmap.js
@@ -399,7 +399,7 @@
        var timer = setTimeout(function () {
            baiduMap.closeInfoWindow.apply(baiduMap, arguments);
            moralMap["_closeInfoWinTimer"] = null;
        }, 1200);
        }, 500);
        moralMap["_closeInfoWinTimer"] = timer;
    }
    moralMap.clearOverlays = function () {
@@ -948,24 +948,14 @@
        }
        var mouseOverHandle = option['mouseover'];
        moralMarker.addEventListener("mouseover", function () {
            var obj = {};
            obj['methodName'] = 'deliverMac';
            obj['mac'] = option['mac'];
            var objStr = JSON.stringify(obj);
            if (!!window['external'] && !!window['external']['callWin']) {
                window['external'].callWin(objStr);
            } else {
                alert(objStr);
            }
            moralMap.showSensors = function (jsonData) {
                /* var deviceSensors = jsonData;
                var deviceSensors = jsonData;
                 var mac = deviceSensors["mac"];
                 if (mac == option['mac']) {*/
                if (!jsonData.hasOwnProperty('mac')) {
                    infoWindow.setContent("");
                    infoWindow.redraw();
                } else {
                    if (mac == option['mac']) {
                    var adressOutHtml = '<div style="min-height:20px;overflow:auto;max-height:480px;font-size: 12px;" onmouseover="moralMap.clearCloseInfoWindow()" onmouseout="moralMap.closeInfoWindow()">';
                    var y, m, d, h, mm, s;
                    var date = new Date($.now());
@@ -1000,6 +990,7 @@
                    infoWindow.redraw();
                }
            }
            }
            // }
            /*   if (!$.isEmptyObject(sensorInfo)) {
                   moralMap.openInfoWindow(infoWindow, this._point); //开启信息窗口
@@ -1008,14 +999,6 @@
        });
        moralMarker.addEventListener("mouseout", function () {
            var obj = {};
            obj['methodName'] = 'stopDeliverMac';
            var objStr = JSON.stringify(obj);
            if (!!window['external'] && !!window['external']['callWin']) {
                window['external'].callWin(objStr);
            } else {
                alert(objStr);
            }
            moralMap.closeInfoWindow();
        });
src/main/webapp/view/newmap.jsp
@@ -710,8 +710,9 @@
                      moralMap.showSensors(JSON.parse(JSON.parse(msg.data)));
                  }*/
                if ($("#close").html() == "CloseMq") {
                    ws.close();
                    ws.close(JSON.parse(msg.data));
                }
                moralMap.showSensors(JSON.parse(JSON.parse(msg.data)));
            };
            //关闭事件
@@ -722,7 +723,6 @@
            ws.onerror = function () {
                $("#close").html("websocket关闭错误");
            };
        }
    })(jQuery);
@@ -839,9 +839,6 @@
        } else if ("RefreshState" == methodName) {
            var states = jsonData.states;
            moralMap.refreshState(states);
        } else if ("DeliverSensors" == methodName) {
            $("#close").html(methodName);
            moralMap.showSensors(jsonData);
        } else if ("CloseMq" == methodName) {
            $("#close").html(methodName);
        }