huaweicloud-sdk-java-v3
huaweicloud-sdk-java-v3 copied to clipboard
请问有无计划添加meeting服务支持WebSocket接口
需要用到会议级事件推送接口,目前代码中没有封装。两个问题 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();
websocket依赖:https://okhttps.ejlchina.com/v2/websocket.html