huaweicloud-sdk-java-v3 icon indicating copy to clipboard operation
huaweicloud-sdk-java-v3 copied to clipboard

请问有无计划添加meeting服务支持WebSocket接口

Open GuanTu opened this issue 3 years ago • 1 comments

需要用到会议级事件推送接口,目前代码中没有封装。两个问题 1.请问有无计划添加WebSocket相关API接口支持 2.自己写的WebSocket客户端连接请求后成功立刻又断开

String socketUrl = confLinkInfo.getWebSocketUrl() + "/cms/open/websocket/confctl/increment/conn";

        HTTP http = HTTP.builder().config(b -> {
            b.sslSocketFactory(Objects.requireNonNull(HuaWeiSSLFactory.getSSLSocketFactory()), HuaWeiSSLFactory.myTrustManager);
            b.hostnameVerifier(HuaWeiSSLFactory.myHostnameVerifier);
            // 配置 WebSocket 心跳间隔(默认没有心跳)
            b.pingInterval(10, TimeUnit.SECONDS);
            b.connectTimeout(30, TimeUnit.SECONDS);
            b.writeTimeout(30, TimeUnit.SECONDS);
            b.readTimeout(30, TimeUnit.SECONDS);
            b.connectionPool(new ConnectionPool(50, 5, TimeUnit.SECONDS));
        }).build();

        Map<String, String> headers = new HashMap<>();
        headers.put("origin", "https://r1.meeting.huaweicloud.com");

        wHttpTask = http.webSocket(socketUrl)
                .addUrlPara("confID", conferenceId)
                .addUrlPara("tmpToken", confLinkInfo.getWebSocketToken())
                .addHeader(headers)
                // .heatbeat(10, 0)
                .flexiblePing(false)
                .pingSupplier(() -> {
                    JSONObject object = new JSONObject()
                            .fluentPut("sequence", NumberUtil.decimalFormat("000000000000000000000000000000", System.currentTimeMillis()))
                            .fluentPut("action", "HeartBeat");
                    log.info("[WebSocket Heat] 发送心跳请求,conferenceId={}, content:{}", conferenceId, object.toJSONString());
                    // 每次心跳发送一个换行符
                    return ByteString.encodeUtf8(object.toJSONString());
                }).setOnOpen((WebSocket ws, HttpResult res) -> {
                    // WebSocket 连接成功时回调
                    log.info("[WebSocket Event] 连接成功时回调");

                    JSONArray subscribeType = new JSONArray();
                    subscribeType.fluentAdd("ConfBasicInfoNotify")
                            .fluentAdd("ConfDynamicInfoNotify")
                            .fluentAdd("ParticipantsNotify")
                            .fluentAdd("AttendeesNotify")
                            .fluentAdd("SpeakerChangeNotify")
                            .fluentAdd("NetConditionNotify")
                            .fluentAdd("InviteResultNotify")
                            .fluentAdd("RealTimeSubtitleNotify");

                    JSONObject data = new JSONObject();
                    data.fluentPut("conferenceID", conferenceId).fluentPut("confToken", confLinkInfo.getConferenceToken()).fluentPut("subscribeType", subscribeType);

                    JSONObject object = new JSONObject();
                    object.fluentPut("action", "Subscribe")
                            .fluentPut("sequence", NumberUtil.decimalFormat("000000000000000000000000000000", System.currentTimeMillis()))
                            .fluentPut("data", data);
                    
                    ws.send(object.toString());

                })
                .setOnMessage((WebSocket ws, WebSocket.Message msg) -> {
                    // 收到服务器下发的消息时回调
                    log.info("[WebSocket Event] 收到服务器下发的消息时回调:{}", JsonUtil.toString(msg));
                })
                .setOnException((WebSocket ws, Throwable thr) -> {
                    // 连接发生异常时回调
                    log.error("[WebSocket Event] 连接发生异常时回调", thr);
                })
                .setOnClosing((WebSocket ws, WebSocket.Close close) -> {
                    // 连接正在关闭时回调
                    log.info("[WebSocket Event] 连接正在关闭时回调:{}", JsonUtil.toString(close));
                })
                .setOnClosed((WebSocket ws, WebSocket.Close close) -> {
                    // 连接已关闭(v2.0.0 之后包含连接被取消 和 连接发生异常)时回调
                    log.info("[WebSocket Event] 连接已关闭(v2.0.0 之后包含连接被取消 和 连接发生异常)时回调:{}", JsonUtil.toString(close));
                });
        webSocket = wHttpTask.listen();

GuanTu avatar Feb 25 '22 02:02 GuanTu

websocket依赖:https://okhttps.ejlchina.com/v2/websocket.html

GuanTu avatar Feb 25 '22 02:02 GuanTu