Skip to content

Commit 420763a

Browse files
committed
feat: add signal api support
1 parent 08a196b commit 420763a

File tree

45 files changed

+5075
-3
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+5075
-3
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.netease.nim</groupId>
88
<artifactId>yunxin-server-sdk</artifactId>
9-
<version>1.0.1</version>
9+
<version>1.1.0-SNAPSHOT</version>
1010
<name>yunxin-im-server-sdk</name>
1111
<url>https://github.com/netease-im/yunxin-server-sdk-java</url>
1212
<description>yunxin-im-server-sdk</description>

src/main/java/com/netease/nim/server/sdk/core/version/YunxinApiSdkVersion.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@
55
*/
66
public class YunxinApiSdkVersion {
77

8-
public static final String version = "1.0.1";
9-
8+
public static final String version = "1.1.0";
109
}

src/main/java/com/netease/nim/server/sdk/im/v1/YunxinV1ApiServices.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.netease.nim.server.sdk.im.v1.history.IHistoryV1Service;
1616
import com.netease.nim.server.sdk.im.v1.message.IMessageV1Service;
1717
import com.netease.nim.server.sdk.im.v1.message.MessageV1Service;
18+
import com.netease.nim.server.sdk.im.v1.signal.ISignalV1Service;
19+
import com.netease.nim.server.sdk.im.v1.signal.SignalV1Service;
1820
import com.netease.nim.server.sdk.im.v1.special_relation.ISpecialRelationV1Service;
1921
import com.netease.nim.server.sdk.im.v1.special_relation.SpecialRelationV1Service;
2022
import com.netease.nim.server.sdk.im.v1.super_team.ISuperTeamV1Service;
@@ -42,6 +44,7 @@ public class YunxinV1ApiServices {
4244
private final ISpecialRelationV1Service specialRelationService;
4345
private final IMessageV1Service messageService;
4446
private final ISystemNotificationV1Service systemNotificationService;
47+
private final ISignalV1Service signalService;
4548
private final IEventSubscribeV1Service eventSubscribeService;
4649

4750
public YunxinV1ApiServices(YunxinApiHttpClient yunxinApiHttpClient) {
@@ -56,6 +59,7 @@ public YunxinV1ApiServices(YunxinApiHttpClient yunxinApiHttpClient) {
5659
this.specialRelationService = new SpecialRelationV1Service(yunxinApiHttpClient);
5760
this.messageService = new MessageV1Service(yunxinApiHttpClient);
5861
this.systemNotificationService = new SystemNotificationV1Service(yunxinApiHttpClient);
62+
this.signalService = new SignalV1Service(yunxinApiHttpClient);
5963
this.eventSubscribeService = new EventSubscribeV1Service(yunxinApiHttpClient);
6064
}
6165

@@ -106,4 +110,8 @@ public ISystemNotificationV1Service getSystemNotificationService() {
106110
public IEventSubscribeV1Service getEventSubscribeService() {
107111
return eventSubscribeService;
108112
}
113+
114+
public ISignalV1Service getSignalService() {
115+
return signalService;
116+
}
109117
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.netease.nim.server.sdk.im.v1.signal;
2+
3+
import com.netease.nim.server.sdk.core.exception.YunxinSdkException;
4+
import com.netease.nim.server.sdk.core.Result;
5+
import com.netease.nim.server.sdk.im.v1.signal.request.CreateSignalRoomRequestV1;
6+
import com.netease.nim.server.sdk.im.v1.signal.request.DelaySignalRoomRequestV1;
7+
import com.netease.nim.server.sdk.im.v1.signal.request.CloseSignalRoomRequestV1;
8+
import com.netease.nim.server.sdk.im.v1.signal.request.GetSignalRoomInfoRequestV1;
9+
import com.netease.nim.server.sdk.im.v1.signal.request.CtrlSignalRoomRequestV1;
10+
import com.netease.nim.server.sdk.im.v1.signal.request.InviteSignalRoomRequestV1;
11+
import com.netease.nim.server.sdk.im.v1.signal.request.CancelSignalRoomInviteRequestV1;
12+
import com.netease.nim.server.sdk.im.v1.signal.request.KickSignalRoomRequestV1;
13+
import com.netease.nim.server.sdk.im.v1.signal.response.CreateSignalRoomResponseV1;
14+
import com.netease.nim.server.sdk.im.v1.signal.response.DelaySignalRoomResponseV1;
15+
import com.netease.nim.server.sdk.im.v1.signal.response.CloseSignalRoomResponseV1;
16+
import com.netease.nim.server.sdk.im.v1.signal.response.GetSignalRoomInfoResponseV1;
17+
import com.netease.nim.server.sdk.im.v1.signal.response.CtrlSignalRoomResponseV1;
18+
import com.netease.nim.server.sdk.im.v1.signal.response.InviteSignalRoomResponseV1;
19+
import com.netease.nim.server.sdk.im.v1.signal.response.CancelSignalRoomInviteResponseV1;
20+
import com.netease.nim.server.sdk.im.v1.signal.response.KickSignalRoomResponseV1;
21+
22+
/**
23+
* 信令服务接口
24+
*/
25+
public interface ISignalV1Service {
26+
27+
/**
28+
* 创建信令频道
29+
* @param request 创建信令频道请求
30+
* @return 创建信令频道响应
31+
* @throws YunxinSdkException SDK异常
32+
*/
33+
Result<CreateSignalRoomResponseV1> createRoom(CreateSignalRoomRequestV1 request) throws YunxinSdkException;
34+
35+
/**
36+
* 延长信令频道有效期
37+
* @param request 延长信令频道有效期请求
38+
* @return 延长信令频道有效期响应
39+
* @throws YunxinSdkException SDK异常
40+
*/
41+
Result<DelaySignalRoomResponseV1> delayRoom(DelaySignalRoomRequestV1 request) throws YunxinSdkException;
42+
43+
/**
44+
* 关闭信令频道
45+
* @param request 关闭信令频道请求
46+
* @return 关闭信令频道响应
47+
* @throws YunxinSdkException SDK异常
48+
*/
49+
Result<CloseSignalRoomResponseV1> closeRoom(CloseSignalRoomRequestV1 request) throws YunxinSdkException;
50+
51+
/**
52+
* 查询信令频道信息
53+
* @param request 查询信令频道信息请求
54+
* @return 查询信令频道信息响应
55+
* @throws YunxinSdkException SDK异常
56+
*/
57+
Result<GetSignalRoomInfoResponseV1> getRoomInfo(GetSignalRoomInfoRequestV1 request) throws YunxinSdkException;
58+
59+
/**
60+
* 发送控制指令
61+
* @param request 发送控制指令请求
62+
* @return 发送控制指令响应
63+
* @throws YunxinSdkException SDK异常
64+
*/
65+
Result<CtrlSignalRoomResponseV1> ctrlRoom(CtrlSignalRoomRequestV1 request) throws YunxinSdkException;
66+
67+
/**
68+
* 邀请加入信令频道
69+
* @param request 邀请加入信令频道请求
70+
* @return 邀请加入信令频道响应
71+
* @throws YunxinSdkException SDK异常
72+
*/
73+
Result<InviteSignalRoomResponseV1> invite(InviteSignalRoomRequestV1 request) throws YunxinSdkException;
74+
75+
/**
76+
* 取消邀请加入信令频道
77+
* @param request 取消邀请加入信令频道请求
78+
* @return 取消邀请加入信令频道响应
79+
* @throws YunxinSdkException SDK异常
80+
*/
81+
Result<CancelSignalRoomInviteResponseV1> cancelInvite(CancelSignalRoomInviteRequestV1 request) throws YunxinSdkException;
82+
83+
/**
84+
* 将成员踢出信令频道
85+
* @param request 将成员踢出信令频道请求
86+
* @return 将成员踢出信令频道响应
87+
* @throws YunxinSdkException SDK异常
88+
*/
89+
Result<KickSignalRoomResponseV1> kick(KickSignalRoomRequestV1 request) throws YunxinSdkException;
90+
91+
}
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package com.netease.nim.server.sdk.im.v1.signal;
2+
3+
import com.alibaba.fastjson2.JSONObject;
4+
import com.netease.nim.server.sdk.core.exception.YunxinSdkException;
5+
import com.netease.nim.server.sdk.core.Result;
6+
import com.netease.nim.server.sdk.core.YunxinApiHttpClient;
7+
import com.netease.nim.server.sdk.core.YunxinApiResponse;
8+
import com.netease.nim.server.sdk.im.v1.annotation.YunxinParamUtils;
9+
import com.netease.nim.server.sdk.im.v1.signal.request.CreateSignalRoomRequestV1;
10+
import com.netease.nim.server.sdk.im.v1.signal.request.DelaySignalRoomRequestV1;
11+
import com.netease.nim.server.sdk.im.v1.signal.request.CloseSignalRoomRequestV1;
12+
import com.netease.nim.server.sdk.im.v1.signal.request.GetSignalRoomInfoRequestV1;
13+
import com.netease.nim.server.sdk.im.v1.signal.request.CtrlSignalRoomRequestV1;
14+
import com.netease.nim.server.sdk.im.v1.signal.request.InviteSignalRoomRequestV1;
15+
import com.netease.nim.server.sdk.im.v1.signal.request.CancelSignalRoomInviteRequestV1;
16+
import com.netease.nim.server.sdk.im.v1.signal.request.KickSignalRoomRequestV1;
17+
import com.netease.nim.server.sdk.im.v1.signal.response.CreateSignalRoomResponseV1;
18+
import com.netease.nim.server.sdk.im.v1.signal.response.DelaySignalRoomResponseV1;
19+
import com.netease.nim.server.sdk.im.v1.signal.response.CloseSignalRoomResponseV1;
20+
import com.netease.nim.server.sdk.im.v1.signal.response.GetSignalRoomInfoResponseV1;
21+
import com.netease.nim.server.sdk.im.v1.signal.response.CtrlSignalRoomResponseV1;
22+
import com.netease.nim.server.sdk.im.v1.signal.response.InviteSignalRoomResponseV1;
23+
import com.netease.nim.server.sdk.im.v1.signal.response.CancelSignalRoomInviteResponseV1;
24+
import com.netease.nim.server.sdk.im.v1.signal.response.KickSignalRoomResponseV1;
25+
26+
import java.util.Map;
27+
28+
/**
29+
* 信令服务实现
30+
*/
31+
public class SignalV1Service implements ISignalV1Service {
32+
33+
private final YunxinApiHttpClient httpClient;
34+
35+
public SignalV1Service(YunxinApiHttpClient httpClient) {
36+
this.httpClient = httpClient;
37+
}
38+
39+
@Override
40+
public Result<CreateSignalRoomResponseV1> createRoom(CreateSignalRoomRequestV1 request) throws YunxinSdkException {
41+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
42+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.CREATE_ROOM, paramMap);
43+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
44+
int code = object.getIntValue("code");
45+
if (code != 200) {
46+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
47+
}
48+
CreateSignalRoomResponseV1 response = object.getObject("data", CreateSignalRoomResponseV1.class);
49+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
50+
}
51+
52+
@Override
53+
public Result<DelaySignalRoomResponseV1> delayRoom(DelaySignalRoomRequestV1 request) throws YunxinSdkException {
54+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
55+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.DELAY_ROOM, paramMap);
56+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
57+
int code = object.getIntValue("code");
58+
if (code != 200) {
59+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
60+
}
61+
DelaySignalRoomResponseV1 response = object.getObject("data", DelaySignalRoomResponseV1.class);
62+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
63+
}
64+
65+
@Override
66+
public Result<CloseSignalRoomResponseV1> closeRoom(CloseSignalRoomRequestV1 request) throws YunxinSdkException {
67+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
68+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.CLOSE_ROOM, paramMap);
69+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
70+
int code = object.getIntValue("code");
71+
if (code != 200) {
72+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
73+
}
74+
// API返回空的data对象,直接创建空响应对象
75+
CloseSignalRoomResponseV1 response = new CloseSignalRoomResponseV1();
76+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
77+
}
78+
79+
@Override
80+
public Result<GetSignalRoomInfoResponseV1> getRoomInfo(GetSignalRoomInfoRequestV1 request) throws YunxinSdkException {
81+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
82+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.GET_ROOM_INFO, paramMap);
83+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
84+
int code = object.getIntValue("code");
85+
if (code != 200) {
86+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
87+
}
88+
GetSignalRoomInfoResponseV1 response = object.getObject("data", GetSignalRoomInfoResponseV1.class);
89+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
90+
}
91+
92+
@Override
93+
public Result<CtrlSignalRoomResponseV1> ctrlRoom(CtrlSignalRoomRequestV1 request) throws YunxinSdkException {
94+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
95+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.CTRL_ROOM, paramMap);
96+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
97+
int code = object.getIntValue("code");
98+
if (code != 200) {
99+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
100+
}
101+
// API返回空的data对象,直接创建空响应对象
102+
CtrlSignalRoomResponseV1 response = new CtrlSignalRoomResponseV1();
103+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
104+
}
105+
106+
@Override
107+
public Result<InviteSignalRoomResponseV1> invite(InviteSignalRoomRequestV1 request) throws YunxinSdkException {
108+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
109+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.INVITE, paramMap);
110+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
111+
int code = object.getIntValue("code");
112+
if (code != 200) {
113+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
114+
}
115+
// API返回空的data对象,直接创建空响应对象
116+
InviteSignalRoomResponseV1 response = new InviteSignalRoomResponseV1();
117+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
118+
}
119+
120+
@Override
121+
public Result<CancelSignalRoomInviteResponseV1> cancelInvite(CancelSignalRoomInviteRequestV1 request) throws YunxinSdkException {
122+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
123+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.CANCEL_INVITE, paramMap);
124+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
125+
int code = object.getIntValue("code");
126+
if (code != 200) {
127+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
128+
}
129+
// API返回空的data对象,直接创建空响应对象
130+
CancelSignalRoomInviteResponseV1 response = new CancelSignalRoomInviteResponseV1();
131+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
132+
}
133+
134+
@Override
135+
public Result<KickSignalRoomResponseV1> kick(KickSignalRoomRequestV1 request) throws YunxinSdkException {
136+
Map<String, String> paramMap = YunxinParamUtils.convert(request);
137+
YunxinApiResponse apiResponse = httpClient.executeV1Api(SignalV1UrlContext.KICK, paramMap);
138+
JSONObject object = JSONObject.parseObject(apiResponse.getData());
139+
int code = object.getIntValue("code");
140+
if (code != 200) {
141+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), object.getString("desc"), null);
142+
}
143+
// API返回空的data对象,直接创建空响应对象
144+
KickSignalRoomResponseV1 response = new KickSignalRoomResponseV1();
145+
return new Result<>(apiResponse.getEndpoint(), code, apiResponse.getTraceId(), null, response);
146+
}
147+
148+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.netease.nim.server.sdk.im.v1.signal;
2+
3+
/**
4+
* URL路径常量类,用于所有信令相关的API请求
5+
*/
6+
public class SignalV1UrlContext {
7+
8+
// 创建信令频道
9+
static final String CREATE_ROOM = "/signal/createRoom.action";
10+
11+
// 延长信令频道有效期
12+
static final String DELAY_ROOM = "/signal/delayRoom.action";
13+
14+
// 关闭信令频道
15+
static final String CLOSE_ROOM = "/signal/closeRoom.action";
16+
17+
// 查询信令频道信息
18+
static final String GET_ROOM_INFO = "/signal/getRoomInfo.action";
19+
20+
// 发送控制指令
21+
static final String CTRL_ROOM = "/signal/ctrlRoom.action";
22+
23+
// 邀请加入信令频道
24+
static final String INVITE = "/signal/invite.action";
25+
26+
// 取消邀请加入信令频道
27+
static final String CANCEL_INVITE = "/signal/cancelInvite.action";
28+
29+
// 将成员踢出信令频道
30+
static final String KICK = "/signal/kick.action";
31+
32+
}

0 commit comments

Comments
 (0)