diff --git a/common/src/main/java/cn/wildfirechat/common/APIPath.java b/common/src/main/java/cn/wildfirechat/common/APIPath.java index 03a31f83..0c500544 100644 --- a/common/src/main/java/cn/wildfirechat/common/APIPath.java +++ b/common/src/main/java/cn/wildfirechat/common/APIPath.java @@ -1,5 +1,12 @@ package cn.wildfirechat.common; +/** + * API路径接口 + *

+ * 定义了野火IM服务器所有管理接口的API路径。 + * 包括聊天室、敏感词、域、用户、好友、黑名单、消息、群组、会议、频道等模块的接口路径。 + *

+ */ public interface APIPath { String Create_Chatroom = "/admin/chatroom/create"; String Chatroom_Destroy = "/admin/chatroom/del"; diff --git a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java index bd11b879..cf045171 100755 --- a/common/src/main/java/cn/wildfirechat/common/ErrorCode.java +++ b/common/src/main/java/cn/wildfirechat/common/ErrorCode.java @@ -8,6 +8,25 @@ package cn.wildfirechat.common; +/** + * 错误码枚举 + *

+ * 定义了野火IM系统中所有可能的错误码,包括: + *

+ *

+ */ public enum ErrorCode { //General error ERROR_CODE_SUCCESS(0, "success"), diff --git a/common/src/main/java/cn/wildfirechat/common/IMExceptionEvent.java b/common/src/main/java/cn/wildfirechat/common/IMExceptionEvent.java index 4527dcf9..91b021f8 100644 --- a/common/src/main/java/cn/wildfirechat/common/IMExceptionEvent.java +++ b/common/src/main/java/cn/wildfirechat/common/IMExceptionEvent.java @@ -1,6 +1,18 @@ package cn.wildfirechat.common; +/** + * IM异常事件类 + *

+ * 用于记录和传递IM系统中的异常事件信息。 + *

+ */ public class IMExceptionEvent { + /** + * 事件类型接口 + *

+ * 定义了各种异常事件的类型常量。 + *

+ */ public interface EventType { int RDBS_Exception = 1; int MONGO_Exception = 2; diff --git a/common/src/main/java/cn/wildfirechat/pojos/Conversation.java b/common/src/main/java/cn/wildfirechat/pojos/Conversation.java index 5601d43b..55c582e3 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/Conversation.java +++ b/common/src/main/java/cn/wildfirechat/pojos/Conversation.java @@ -8,6 +8,13 @@ package cn.wildfirechat.pojos; +/** + * 会话类 + *

+ * 表示一个会话对象,包含会话类型、目标ID和线路信息。 + * 用于标识消息发送或接收的目标会话。 + *

+ */ public class Conversation { private int type; private String target; diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java b/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java index 92202ef0..8cb696a5 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputAddGroupMember.java @@ -14,6 +14,12 @@ import io.netty.util.internal.StringUtil; import java.util.List; +/** + * 添加群组成员输入参数类 + *

+ * 封装添加群组成员的输入参数,包括群组ID、成员列表、成员额外信息等。 + *

+ */ public class InputAddGroupMember extends InputGroupBase { private String group_id; private List members; diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java index 63c4aa27..efa89e70 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputCreateGroup.java @@ -14,6 +14,12 @@ import io.netty.util.internal.StringUtil; import java.util.List; +/** + * 创建群组输入参数类 + *

+ * 封装创建群组的输入参数,包括群组信息、成员列表、成员额外信息等。 + *

+ */ public class InputCreateGroup extends InputGroupBase { private PojoGroup group; private String member_extra; diff --git a/common/src/main/java/cn/wildfirechat/pojos/InputOutputUserInfo.java b/common/src/main/java/cn/wildfirechat/pojos/InputOutputUserInfo.java index 2ce3e155..ad7e9ef8 100755 --- a/common/src/main/java/cn/wildfirechat/pojos/InputOutputUserInfo.java +++ b/common/src/main/java/cn/wildfirechat/pojos/InputOutputUserInfo.java @@ -11,6 +11,21 @@ package cn.wildfirechat.pojos; import cn.wildfirechat.proto.WFCMessage; +/** + * 用户信息类 + *

+ * 封装用户的所有信息,包括: + *

+ *

+ */ public class InputOutputUserInfo { private String userId; private String name; diff --git a/common/src/main/java/cn/wildfirechat/pojos/MessagePayload.java b/common/src/main/java/cn/wildfirechat/pojos/MessagePayload.java index be5cf02d..a70c0311 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/MessagePayload.java +++ b/common/src/main/java/cn/wildfirechat/pojos/MessagePayload.java @@ -16,6 +16,22 @@ import java.util.ArrayList; import java.util.Base64; import java.util.List; +/** + * 消息内容负载类 + *

+ * 封装消息的所有内容信息,包括: + *

+ *

+ */ public class MessagePayload { private int type; private String searchableContent; diff --git a/common/src/main/java/cn/wildfirechat/pojos/PojoGroup.java b/common/src/main/java/cn/wildfirechat/pojos/PojoGroup.java index b1b609ea..af5a2ed1 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/PojoGroup.java +++ b/common/src/main/java/cn/wildfirechat/pojos/PojoGroup.java @@ -10,6 +10,12 @@ package cn.wildfirechat.pojos; import java.util.List; +/** + * 群组对象类 + *

+ * 封装创建群组时使用的参数,包含群组信息和成员列表。 + *

+ */ public class PojoGroup { private PojoGroupInfo group_info; private List members; diff --git a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java index e0c61e11..99dfef40 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java +++ b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupInfo.java @@ -8,6 +8,19 @@ package cn.wildfirechat.pojos; +/** + * 群组信息类 + *

+ * 封装群组的信息,包括: + *

+ *

+ */ public class PojoGroupInfo { String target_id; String name; diff --git a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupMember.java b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupMember.java index 3b7ba536..662e67f1 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/PojoGroupMember.java +++ b/common/src/main/java/cn/wildfirechat/pojos/PojoGroupMember.java @@ -8,6 +8,19 @@ package cn.wildfirechat.pojos; +/** + * 群组成员类 + *

+ * 封装群组成员的信息,包括: + *

+ *

+ */ public class PojoGroupMember { String member_id; String alias; diff --git a/common/src/main/java/cn/wildfirechat/pojos/SendMessageResult.java b/common/src/main/java/cn/wildfirechat/pojos/SendMessageResult.java index d2a9f96a..188d34cb 100644 --- a/common/src/main/java/cn/wildfirechat/pojos/SendMessageResult.java +++ b/common/src/main/java/cn/wildfirechat/pojos/SendMessageResult.java @@ -11,6 +11,12 @@ package cn.wildfirechat.pojos; import cn.wildfirechat.proto.WFCMessage; import io.netty.util.internal.StringUtil; +/** + * 发送消息结果类 + *

+ * 封装发送消息后的返回结果,包含消息UID和时间戳。 + *

+ */ public class SendMessageResult { private long messageUid; private long timestamp; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/AdminConfig.java b/sdk/src/main/java/cn/wildfirechat/sdk/AdminConfig.java index 9a0cc5e3..8486ab1b 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/AdminConfig.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/AdminConfig.java @@ -2,7 +2,22 @@ package cn.wildfirechat.sdk; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 管理员配置类 + *

+ * 用于初始化管理员SDK的配置,包括IM服务器URL和密钥。 + * 在使用任何Admin功能之前,必须先调用initAdmin方法进行初始化。 + *

+ */ public class AdminConfig { + /** + * 初始化管理员配置 + *

+ * 在使用任何Admin功能之前,必须先调用此方法进行初始化。 + *

+ * @param url IM服务器地址,例如: http://your-im-server.com + * @param secret 管理员密钥,在服务器配置中设置 + */ public static void initAdmin(String url, String secret) { AdminHttpUtils.init(url, secret); } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/ChannelAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/ChannelAdmin.java index 8f38afaf..e57bf00f 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/ChannelAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/ChannelAdmin.java @@ -5,36 +5,87 @@ import cn.wildfirechat.pojos.*; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 频道管理类 + *

+ * 提供频道管理相关的功能,包括: + *

+ *

+ */ public class ChannelAdmin { + /** + * 创建频道 + * @param inputCreateChannel 频道创建信息 + * @return 创建结果,包含频道ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createChannel(InputCreateChannel inputCreateChannel) throws Exception { String path = APIPath.Create_Channel; return AdminHttpUtils.httpJsonPost(path, inputCreateChannel, OutputCreateChannel.class); } + /** + * 销毁频道 + * @param channelId 频道ID + * @return 销毁结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult destroyChannel(String channelId) throws Exception { String path = APIPath.Destroy_Channel; InputChannelId inputChannelId = new InputChannelId(channelId); return AdminHttpUtils.httpJsonPost(path, inputChannelId, Void.class); } + /** + * 获取频道信息 + * @param channelId 频道ID + * @return 频道信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getChannelInfo(String channelId) throws Exception { String path = APIPath.Get_Channel_Info; InputChannelId inputChannelId = new InputChannelId(channelId); return AdminHttpUtils.httpJsonPost(path, inputChannelId, OutputGetChannelInfo.class); } + /** + * 订阅频道 + * @param channelId 频道ID + * @param userId 用户ID + * @return 订阅结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult subscribeChannel(String channelId, String userId) throws Exception { String path = APIPath.Subscribe_Channel; InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 1); return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 取消订阅频道 + * @param channelId 频道ID + * @param userId 用户ID + * @return 取消订阅结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult unsubscribeChannel(String channelId, String userId) throws Exception { String path = APIPath.Subscribe_Channel; InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0); return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 检查用户是否订阅了频道 + * @param userId 用户ID + * @param channelId 频道ID + * @return true-已订阅,false-未订阅 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult isUserSubscribedChannel(String userId, String channelId) throws Exception { String path = APIPath.Check_User_Subscribe_Channel; InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/ChannelServiceApi.java b/sdk/src/main/java/cn/wildfirechat/sdk/ChannelServiceApi.java index b4fd2ce3..565e954d 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/ChannelServiceApi.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/ChannelServiceApi.java @@ -15,10 +15,28 @@ import java.util.List; import static cn.wildfirechat.proto.ProtoConstants.ApplicationType.ApplicationType_Channel; -//仅专业版支持,社区版不支持 +/** + * 频道服务类(仅专业版支持,社区版不支持) + *

+ * 提供频道相关的功能,包括: + *

    + *
  • 获取用户信息
  • + *
  • 修改频道信息
  • + *
  • 发送和撤回消息
  • + *
  • 用户订阅管理
  • + *
  • 订阅者列表查询
  • + *
+ *

+ */ public class ChannelServiceApi implements Closeable { private final ChannelHttpUtils channelHttpUtils; + /** + * 创建频道服务实例 + * @param imurl IM服务器地址 + * @param channelId 频道ID + * @param secret 频道密钥 + */ public ChannelServiceApi(String imurl, String channelId, String secret) { channelHttpUtils = new ChannelHttpUtils(imurl, channelId, secret); } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/ChatroomAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/ChatroomAdmin.java index f3cfb8f0..19cf3427 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/ChatroomAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/ChatroomAdmin.java @@ -5,7 +5,32 @@ import cn.wildfirechat.pojos.*; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 聊天室管理类 + *

+ * 提供聊天室管理相关的功能,包括: + *

    + *
  • 创建和销毁聊天室
  • + *
  • 获取聊天室信息
  • + *
  • 聊天室成员管理
  • + *
  • 聊天室黑名单管理(仅专业版)
  • + *
  • 聊天室管理员设置
  • + *
  • 聊天室全员禁言
  • + *
+ *

+ */ public class ChatroomAdmin { + /** + * 创建聊天室 + * @param chatroomId 聊天室ID(为空时自动生成) + * @param title 聊天室标题 + * @param desc 聊天室描述 + * @param portrait 聊天室头像 + * @param extra 额外信息 + * @param state 聊天室状态 + * @return 创建结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createChatroom(String chatroomId, String title, String desc ,String portrait, String extra, Integer state) throws Exception { String path = APIPath.Create_Chatroom; InputCreateChatroom input = new InputCreateChatroom(); @@ -18,6 +43,12 @@ public class ChatroomAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputCreateChatroom.class); } + /** + * 销毁聊天室 + * @param chatroomId 聊天室ID + * @return 销毁结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult destroyChatroom(String chatroomId) throws Exception { String path = APIPath.Chatroom_Destroy; InputDestoryChatroom input = new InputDestoryChatroom(); @@ -25,51 +56,103 @@ public class ChatroomAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取聊天室信息 + * @param chatroomId 聊天室ID + * @return 聊天室信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getChatroomInfo(String chatroomId) throws Exception { String path = APIPath.Chatroom_Info; InputGetChatroomInfo input = new InputGetChatroomInfo(chatroomId); return AdminHttpUtils.httpJsonPost(path, input, OutputGetChatroomInfo.class); } + /** + * 获取聊天室成员列表 + * @param chatroomId 聊天室ID + * @return 成员ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getChatroomMembers(String chatroomId) throws Exception { String path = APIPath.Chatroom_GetMembers; InputGetChatroomInfo input = new InputGetChatroomInfo(chatroomId); return AdminHttpUtils.httpJsonPost(path, input, OutputStringList.class); } + /** + * 获取用户所在的聊天室 + * @param userId 用户ID + * @return 用户所在的聊天室信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserChatroom(String userId) throws Exception { String path = APIPath.Chatroom_GetUserChatroom; InputUserId input = new InputUserId(userId); return AdminHttpUtils.httpJsonPost(path, input, OutputUserChatroom.class); } - //仅专业版支持 - //status:0,正常;1,禁言;2,禁止加入 + /** + * 设置聊天室黑名单状态(仅专业版支持) + *

status:0-正常;1-禁言;2-禁止加入

+ * @param chatroomId 聊天室ID + * @param userId 用户ID + * @param status 状态值 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setChatroomBlacklist(String chatroomId, String userId, int status) throws Exception { String path = APIPath.Chatroom_SetBlacklist; InputSetChatroomBlacklist input = new InputSetChatroomBlacklist(chatroomId, userId, status, 0); return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取聊天室黑名单 + * @param chatroomId 聊天室ID + * @return 黑名单信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getChatroomBlacklist(String chatroomId) throws Exception { String path = APIPath.Chatroom_GetBlacklist; InputChatroomId input = new InputChatroomId(chatroomId); return AdminHttpUtils.httpJsonPost(path, input, OutputChatroomBlackInfos.class); } - //status: 1 set; 0 unset + /** + * 设置聊天室管理员 + *

status:1-设置为管理员;0-取消管理员

+ * @param chatroomId 聊天室ID + * @param userId 用户ID + * @param status 状态值 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setChatroomManager(String chatroomId, String userId, int status) throws Exception { String path = APIPath.Chatroom_SetManager; InputSetChatroomManager input = new InputSetChatroomManager(chatroomId, userId, status); return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取聊天室管理员列表 + * @param chatroomId 聊天室ID + * @return 管理员ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getChatroomManagerList(String chatroomId) throws Exception { String path = APIPath.Chatroom_GetManagerList; InputChatroomId input = new InputChatroomId(chatroomId); return AdminHttpUtils.httpJsonPost(path, input, OutputStringList.class); } + /** + * 设置聊天室全员禁言 + * @param chatroomId 聊天室ID + * @param mute true-全员禁言,false-取消全员禁言 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setChatroomMute(String chatroomId, boolean mute) throws Exception { String path = APIPath.Chatroom_MuteAll; InputChatroomMute input = new InputChatroomMute(chatroomId, mute ? 1 : 0); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/ConferenceAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/ConferenceAdmin.java index 6b9e11cb..e57ed8a7 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/ConferenceAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/ConferenceAdmin.java @@ -5,7 +5,27 @@ import cn.wildfirechat.pojos.*; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 会议管理类 + *

+ * 提供音视频会议管理相关的功能,包括: + *

    + *
  • 会议列表查询
  • + *
  • 会议创建和销毁
  • + *
  • 会议参与者管理
  • + *
  • 会议录制控制
  • + *
  • RTP转发管理
  • + *
+ *

+ */ public class ConferenceAdmin { + /** + * 获取会议列表(分页) + * @param count 每页数量 + * @param offset 偏移量 + * @return 会议信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult listConferences(int count, int offset) throws Exception { String path = APIPath.Conference_List; InputCountOffset inputCountOffset = new InputCountOffset(); @@ -14,18 +34,44 @@ public class ConferenceAdmin { return AdminHttpUtils.httpJsonPost(path, inputCountOffset, PojoConferenceInfoList.class); } + /** + * 检查会议是否存在 + * @param conferenceId 会议ID + * @return true-存在,false-不存在 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult existsConferences(String conferenceId) throws Exception { String path = APIPath.Conference_Exist; PojoConferenceRoomId data = new PojoConferenceRoomId(conferenceId, false); return AdminHttpUtils.httpJsonPost(path, data, Boolean.class); } + /** + * 获取会议参与者列表 + * @param roomId 房间ID + * @param advance 是否使用高级模式 + * @return 参与者列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult listParticipants(String roomId, boolean advance) throws Exception { String path = APIPath.Conference_List_Participant; PojoConferenceRoomId data = new PojoConferenceRoomId(roomId, advance); return AdminHttpUtils.httpJsonPost(path, data, PojoConferenceParticipantList.class); } + /** + * 创建会议房间 + * @param roomId 房间ID + * @param description 描述 + * @param pin 房间密码 + * @param maxPublisher 最大推流数 + * @param advance 是否使用高级模式 + * @param bitrate 比特率 + * @param recording 是否录制 + * @param permanent 是否永久房间 + * @return 创建结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createRoom(String roomId, String description, String pin, int maxPublisher, boolean advance, int bitrate, boolean recording, boolean permanent) throws Exception { String path = APIPath.Conference_Create; PojoConferenceCreate create = new PojoConferenceCreate(); @@ -40,6 +86,14 @@ public class ConferenceAdmin { return AdminHttpUtils.httpJsonPost(path, create, Void.class); } + /** + * 启用或禁用会议录制 + * @param roomId 房间ID + * @param advance 是否使用高级模式 + * @param recording true-启用录制,false-禁用录制 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult enableRecording(String roomId, boolean advance, boolean recording) throws Exception { String path = APIPath.Conference_Recording; PojoConferenceRecording create = new PojoConferenceRecording(); @@ -49,24 +103,59 @@ public class ConferenceAdmin { return AdminHttpUtils.httpJsonPost(path, create, Void.class); } + /** + * 销毁会议房间 + * @param roomId 房间ID + * @param advance 是否使用高级模式 + * @return 销毁结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult destroy(String roomId, boolean advance) throws Exception { String path = APIPath.Conference_Destroy; PojoConferenceRoomId conferenceRoomId = new PojoConferenceRoomId(roomId, advance); return AdminHttpUtils.httpJsonPost(path, conferenceRoomId, Void.class); } + /** + * RTP转发 + * @param roomId 房间ID + * @param userId 用户ID + * @param rtpHost RTP主机地址 + * @param audioPort 音频端口 + * @param audioPt 音频Payload类型 + * @param audioSSRC 音频SSRC + * @param videoPort 视频端口 + * @param videoPt 视频Payload类型 + * @param videoSSRC 视频SSRC + * @return 转发结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult rtpForward(String roomId, String userId, String rtpHost, int audioPort, int audioPt, long audioSSRC, int videoPort, int videoPt, long videoSSRC) throws Exception { String path = APIPath.Conference_Rtp_Forward; PojoConferenceRtpForwardReq req = new PojoConferenceRtpForwardReq(roomId, userId, rtpHost, audioPort, audioPt, audioSSRC, videoPort, videoPt, videoSSRC); return AdminHttpUtils.httpJsonPost(path, req, Void.class); } + /** + * 停止RTP转发 + * @param roomId 房间ID + * @param userId 用户ID + * @param streamId 流ID + * @return 停止结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult stopRtpForward(String roomId, String userId, long streamId) throws Exception { String path = APIPath.Conference_Stop_Rtp_Forward; PojoConferenceStopRtpForwardReq req = new PojoConferenceStopRtpForwardReq(roomId, userId, streamId); return AdminHttpUtils.httpJsonPost(path, req, Void.class); } + /** + * 获取RTP转发列表 + * @param roomId 房间ID + * @return RTP转发列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult listRtpForwarders(String roomId) throws Exception { String path = APIPath.Conference_List_Rtp_Forward; PojoConferenceRoomId req = new PojoConferenceRoomId(); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java index b8474b71..b151f82f 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/GeneralAdmin.java @@ -5,7 +5,26 @@ import cn.wildfirechat.pojos.*; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 通用管理类 + *

+ * 提供通用的系统管理功能,包括: + *

    + *
  • 系统设置管理
  • + *
  • 文件管理(会话文件、用户文件)
  • + *
  • 用户设置管理(会话置顶等)
  • + *
  • 健康检查
  • + *
  • 频道管理(已废弃,请使用ChannelAdmin)
  • + *
+ *

+ */ public class GeneralAdmin { + /** + * 获取系统设置 + * @param id 设置项ID + * @return 系统设置信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getSystemSetting(int id) throws Exception { String path = APIPath.Get_System_Setting; SystemSettingPojo input = new SystemSettingPojo(); @@ -13,6 +32,14 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, input, SystemSettingPojo.class); } + /** + * 设置系统设置 + * @param id 设置项ID + * @param value 设置值 + * @param desc 设置描述 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setSystemSetting(int id, String value, String desc) throws Exception { String path = APIPath.Put_System_Setting; SystemSettingPojo input = new SystemSettingPojo(); @@ -81,8 +108,21 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputBooleanValue.class); } - //以下仅专业版支持 - //如果是单聊会话,target和userId代表会话的2个用户。如果是其他会话userId无意义 + /** + * 获取会话文件列表(仅专业版支持) + *

+ * 如果是单聊会话,target和userId代表会话的2个用户;如果是其他会话userId无意义。 + *

+ * @param conversationType 会话类型 + * @param target 会话目标ID + * @param line 线路 + * @param userId 用户ID + * @param offset 偏移量 + * @param desc 是否降序 + * @param count 每页数量 + * @return 文件列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getConversationFiles(int conversationType, String target, int line, String userId, int offset, boolean desc, int count) throws Exception { String path = APIPath.Get_Conversation_Files; GetConversationFilesPojo input = new GetConversationFilesPojo(); @@ -96,6 +136,15 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, input, FilesPojo.class); } + /** + * 获取用户文件列表 + * @param userId 用户ID + * @param offset 偏移量 + * @param desc 是否降序 + * @param count 每页数量 + * @return 文件列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserFiles(String userId, int offset, boolean desc, int count) throws Exception { String path = APIPath.Get_User_Files; GetUserFilesPojo input = new GetUserFilesPojo(); @@ -106,6 +155,12 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, input, FilesPojo.class); } + /** + * 根据消息ID获取文件信息 + * @param messageId 消息ID + * @return 文件信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getFile(long messageId) throws Exception { String path = APIPath.Get_Message_File; LongPojo input = new LongPojo(); @@ -113,12 +168,31 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, input, FilesPojo.FilePojo.class); } + /** + * 设置会话置顶 + * @param userId 用户ID + * @param conversationType 会话类型 + * @param target 会话目标ID + * @param line 线路 + * @param isTop true-置顶,false-取消置顶 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setConversationTop(String userId, int conversationType, String target, int line, boolean isTop) throws Exception { String key = conversationType + "-" + line + "-" + target; String value = isTop?"1":"0"; return setUserSetting(userId, 3, key, value); } + /** + * 获取会话置顶状态 + * @param userId 用户ID + * @param conversationType 会话类型 + * @param target 会话目标ID + * @param line 线路 + * @return true-已置顶,false-未置顶 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getConversationTop(String userId, int conversationType, String target, int line) throws Exception { String key = conversationType + "-" + line + "-" + target; IMResult result = getUserSetting(userId, 3, key); @@ -129,7 +203,14 @@ public class GeneralAdmin { return out; } - + /** + * 获取用户设置 + * @param userId 用户ID + * @param scope 设置范围 + * @param key 设置键 + * @return 用户设置信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserSetting(String userId, int scope, String key) throws Exception { String path = APIPath.User_Get_Setting; UserSettingPojo pojo = new UserSettingPojo(); @@ -139,6 +220,15 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, pojo, UserSettingPojo.class); } + /** + * 设置用户设置 + * @param userId 用户ID + * @param scope 设置范围 + * @param key 设置键 + * @param value 设置值 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setUserSetting(String userId, int scope, String key, String value) throws Exception { String path = APIPath.User_Put_Setting; UserSettingPojo pojo = new UserSettingPojo(); @@ -149,10 +239,20 @@ public class GeneralAdmin { return AdminHttpUtils.httpJsonPost(path, pojo, Void.class); } + /** + * 健康检查 + * @return 健康检查结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult healthCheck() throws Exception { return AdminHttpUtils.httpGet(APIPath.Health, HealthCheckResult.class); } + /** + * 获取客户信息 + * @return 客户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getCustomer() throws Exception { return AdminHttpUtils.httpJsonPost(APIPath.GET_CUSTOMER, null, String.class); } diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java index ee68cb65..fa427459 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/GroupAdmin.java @@ -8,7 +8,32 @@ import cn.wildfirechat.sdk.utilities.AdminHttpUtils; import java.util.List; +/** + * 群组管理类 + *

+ * 提供群组管理相关的功能,包括: + *

    + *
  • 群组的创建、解散、转移
  • + *
  • 群组信息修改
  • + *
  • 群组成员管理(添加、移除、踢出)
  • + *
  • 群组管理员设置
  • + *
  • 群组成员禁言
  • + *
  • 用户群组查询
  • + *
+ *

+ */ public class GroupAdmin { + /** + * 创建群组 + * @param operator 操作者用户ID + * @param group_info 群组信息 + * @param members 群组成员列表 + * @param member_extra 成员额外信息 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 创建结果,包含群组ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createGroup(String operator, PojoGroupInfo group_info, List members, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Create_Group; PojoGroup pojoGroup = new PojoGroup(); @@ -24,6 +49,12 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, createGroup, OutputCreateGroupResult.class); } + /** + * 获取群组信息 + * @param groupId 群组ID + * @return 群组信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupInfo(String groupId) throws Exception { String path = APIPath.Group_Get_Info; InputGetGroup input = new InputGetGroup(); @@ -32,11 +63,26 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, input, PojoGroupInfo.class); } + /** + * 批量获取群组信息 + * @param groupIds 群组ID列表 + * @return 群组信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult batchGroupInfos(List groupIds) throws Exception { String path = APIPath.Group_Batch_Info; return AdminHttpUtils.httpJsonPost(path, groupIds, PojoGroupInfoList.class); } + /** + * 解散群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 解散结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult dismissGroup(String operator, String groupId, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Dismiss; InputDismissGroup dismissGroup = new InputDismissGroup(); @@ -47,6 +93,16 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, dismissGroup, Void.class); } + /** + * 转让群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param newOwner 新群主用户ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 转让结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult transferGroup(String operator, String groupId, String newOwner, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Transfer; InputTransferGroup transferGroup = new InputTransferGroup(); @@ -58,6 +114,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, transferGroup, Void.class); } + /** + * 修改群组信息 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param type 修改信息类型(ModifyGroupInfoType) + * @param value 新值 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 修改结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult modifyGroupInfo(String operator, String groupId, /*ModifyGroupInfoType*/int type, String value, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Modify_Info; InputModifyGroupInfo modifyGroupInfo = new InputModifyGroupInfo(); @@ -70,7 +137,12 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, modifyGroupInfo, Void.class); } - + /** + * 获取群组成员列表 + * @param groupId 群组ID + * @return 群组成员列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupMembers(String groupId) throws Exception { String path = APIPath.Group_Member_List; InputGetGroup input = new InputGetGroup(); @@ -78,6 +150,13 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputGroupMemberList.class); } + /** + * 获取群组成员信息 + * @param groupId 群组ID + * @param memberId 成员用户ID + * @return 群组成员信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupMember(String groupId, String memberId) throws Exception { String path = APIPath.Group_Member_Get; InputGetGroupMember input = new InputGetGroupMember(); @@ -86,6 +165,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, input, PojoGroupMember.class); } + /** + * 添加群组成员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMembers 要添加的成员列表 + * @param member_extra 成员额外信息 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 添加结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult addGroupMembers(String operator, String groupId, List groupMembers, String member_extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Add; InputAddGroupMember addGroupMember = new InputAddGroupMember(); @@ -98,6 +188,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 设置或取消群组管理员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMemberIds 成员用户ID列表 + * @param isManager true-设置为管理员,false-取消管理员 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setGroupManager(String operator, String groupId, List groupMemberIds, boolean isManager, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Set_Manager; InputSetGroupManager addGroupMember = new InputSetGroupManager(); @@ -110,6 +211,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 禁言或解禁群组成员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMemberIds 成员用户ID列表 + * @param isMute true-禁言,false-解禁 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 禁言结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult muteGroupMemeber(String operator, String groupId, List groupMemberIds, boolean isMute, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Mute_Member; InputMuteGroupMember addGroupMember = new InputMuteGroupMember(); @@ -122,6 +234,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 允许或禁止群组成员发言 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMemberIds 成员用户ID列表 + * @param isAllow true-允许,false-禁止 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult allowGroupMemeber(String operator, String groupId, List groupMemberIds, boolean isAllow, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Allow_Member; InputMuteGroupMember addGroupMember = new InputMuteGroupMember(); @@ -134,6 +257,16 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 踢出群组成员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMemberIds 要踢出的成员用户ID列表 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 踢出结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult kickoffGroupMembers(String operator, String groupId, List groupMemberIds, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Kickoff; InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember(); @@ -145,6 +278,15 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, kickoffGroupMember, Void.class); } + /** + * 退出群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 退出结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult quitGroup(String operator, String groupId, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Quit; InputQuitGroup quitGroup = new InputQuitGroup(); @@ -155,6 +297,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, quitGroup, Void.class); } + /** + * 设置群组成员别名 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param memberId 成员用户ID + * @param alias 别名 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setGroupMemberAlias(String operator, String groupId, String memberId, String alias, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Set_Member_Alias; InputSetGroupMemberAlias input = new InputSetGroupMemberAlias(); @@ -167,6 +320,17 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 设置群组成员额外信息 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param memberId 成员用户ID + * @param extra 额外信息 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setGroupMemberExtra(String operator, String groupId, String memberId, String extra, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Set_Member_Extra; InputSetGroupMemberExtra input = new InputSetGroupMemberExtra(); @@ -179,10 +343,25 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 设置群组备注(用户个性化设置) + * @param userId 用户ID + * @param groupId 群组ID + * @param remark 备注内容 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setGroupRemark(String userId, String groupId, String remark) throws Exception { return GeneralAdmin.setUserSetting(userId, 26, groupId, remark); } + /** + * 获取群组备注(用户个性化设置) + * @param userId 用户ID + * @param groupId 群组ID + * @return 备注内容 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupRemark(String userId, String groupId) throws Exception { IMResult imResult = GeneralAdmin.getUserSetting(userId, 26, groupId); IMResult result = new IMResult<>(); @@ -194,10 +373,25 @@ public class GroupAdmin { return result; } + /** + * 设置群组是否收藏(用户个性化设置) + * @param userId 用户ID + * @param groupId 群组ID + * @param fav true-收藏,false-取消收藏 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setFavGroup(String userId, String groupId, boolean fav) throws Exception { return GeneralAdmin.setUserSetting(userId, 6, groupId, fav?"1":"0"); } + /** + * 检查群组是否收藏(用户个性化设置) + * @param userId 用户ID + * @param groupId 群组ID + * @return true-已收藏,false-未收藏 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult isFavGroup(String userId, String groupId) throws Exception { IMResult imResult = GeneralAdmin.getUserSetting(userId, 6, groupId); IMResult result = new IMResult<>(); @@ -209,6 +403,12 @@ public class GroupAdmin { return result; } + /** + * 获取用户的群组列表 + * @param user 用户ID + * @return 用户所属的群组ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserGroups(String user) throws Exception { String path = APIPath.Get_User_Groups; InputUserId inputUserId = new InputUserId(); @@ -216,12 +416,26 @@ public class GroupAdmin { return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputGroupIds.class); } + /** + * 根据成员类型获取用户的群组列表 + * @param user 用户ID + * @param groupMemberType 群组成员类型列表(GroupMemberType) + * @return 用户所属的群组ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserGroupsByType(String user, List groupMemberType) throws Exception { String path = APIPath.Get_User_Groups_By_Type; InputGetUserGroupByType input = new InputGetUserGroupByType(user, groupMemberType); return AdminHttpUtils.httpJsonPost(path, input, OutputGroupIds.class); } + /** + * 获取两个用户的共同群组 + * @param user1 用户1的ID + * @param user2 用户2的ID + * @return 共同群组ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getCommonGroups(String user1, String user2) throws Exception { String path = APIPath.Get_Common_Groups; StringPairPojo intput = new StringPairPojo(user1, user2); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java index d31c08a5..6ab665b0 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/Main.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/Main.java @@ -20,27 +20,54 @@ import static cn.wildfirechat.pojos.MyInfoType.Modify_DisplayName; import static cn.wildfirechat.proto.ProtoConstants.ChannelState.*; import static cn.wildfirechat.proto.ProtoConstants.SystemSettingType.Group_Max_Member_Count; +/** + * 野火IM Server SDK示例程序主类 + *

+ * 提供SDK功能演示的示例代码,包括: + *

    + *
  • 用户管理操作
  • + *
  • 群组管理操作
  • + *
  • 消息发送操作
  • + *
  • 好友关系管理
  • + *
  • 朋友圈功能
  • + *
  • 机器人功能
  • + *
+ *

+ */ public class Main { + /** 是否为商业版服务器 */ private static boolean commercialServer = false; + /** 是否启用高级音视频功能 */ private static boolean advanceVoip = false; + /** 是否启用机器人朋友圈功能 */ private static boolean robotMomentsEnabled = false; + /** 是否启用朋友圈功能 */ private static boolean momentsEnabled = false; - //管理端口是8080 + /** 管理端口是18080 */ private static String AdminUrl = "http://localhost:18080"; + /** 管理员密钥 */ private static String AdminSecret = "123456"; - //机器人和频道使用IM服务的公开端口80,注意不是18080 + /** 机器人和频道使用IM服务的公开端口80,注意不是18080 */ private static String IMUrl = "http://localhost"; + /** + * 程序主入口 + * @param args 命令行参数,包括:adminUrl、adminSecret、imUrl、commercialServer、advanceVoip + * @throws Exception 当测试过程中发生错误时抛出异常 + */ public static void main(String[] args) throws Exception { + // 解析命令行参数 if (args.length == 5) { + // 从命令行参数获取配置信息 AdminUrl = args[0]; AdminSecret = args[1]; IMUrl = args[2]; commercialServer = Boolean.parseBoolean(args[3]); advanceVoip = Boolean.parseBoolean(args[4]); } else { + // 显示帮助信息或使用默认值 if(args.length == 1 && (args[0].equals("-h") || args[0].equals("--help") || args[0].equals("-help"))) { System.out.println("Usage: java -jar checker.jar adminUrl adminSecret imUrl commercialServer advanceVoip \n e.g. java -jar checker.jar http://192.168.1.80:18080 123456 http://192.168.1.80 false false"); return; @@ -53,6 +80,7 @@ public class Main { //admin使用的是18080端口,超级管理接口,理论上不能对外开放端口,也不能让非内部服务知悉密钥。 + // 执行管理员API测试 testAdmin(); //测试解析数据库中消息内容 @@ -62,32 +90,62 @@ public class Main { testMessageSharding(); //Robot和Channel都是使用的80端口,第三方可以创建或者为第三方创建,第三方可以使用robot或者channel与IM系统进行对接。 + // 测试机器人功能 testRobot(); + // 测试频道功能 testChannel(); } + /** + * 管理员API测试总入口 + *

+ * 测试所有管理员功能,包括: + *

    + *
  • 用户管理
  • + *
  • 用户关系管理
  • + *
  • 群组管理
  • + *
  • 聊天室管理
  • + *
  • 消息管理
  • + *
  • 消息内容测试
  • + *
  • 频道API测试
  • + *
  • 通用API测试
  • + *
  • 敏感词API测试
  • + *
  • 设备管理测试(仅商业版)
  • + *
  • 会议功能测试(仅高级音视频版)
  • + *
  • 朋友圈功能测试(仅启用时)
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testAdmin() throws Exception { - //初始化服务API + //初始化服务API,使用管理员URL和密钥 AdminConfig.initAdmin(AdminUrl, AdminSecret); - testUser(); - testUserRelation(); - testGroup(); - testChatroom(); - testMessage(); - testMessageContent(); - testChannelApi(); - testGeneralApi(); - testSensitiveApi(); + // 执行各类管理员API测试 + testUser(); // 用户管理测试 + testUserRelation(); // 用户关系测试 + testGroup(); // 群组管理测试 + testChatroom(); // 聊天室测试 + testMessage(); // 消息发送测试 + testMessageContent(); // 消息内容编码测试 + testChannelApi(); // 频道API测试 + testGeneralApi(); // 通用API测试 + testSensitiveApi(); // 敏感词API测试 + + // 商业版功能测试 if (commercialServer) { - testDevice(); + testDevice(); // 设备测试(仅商业版) } + + // 高级音视频功能测试 if(advanceVoip) { - testConference(); + testConference(); // 会议功能测试(仅高级音视频版) } + + // 朋友圈功能测试 if (momentsEnabled) { - testMomentsApi(); + testMomentsApi(); // 朋友圈API测试 } System.out.println("Congratulation, all admin test case passed!!!!!!!"); @@ -96,7 +154,29 @@ public class Main { //*********************************************** //**** 用户相关的API //*********************************************** + /** + * 用户管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 创建普通用户
  • + *
  • 创建和删除机器人
  • + *
  • 获取用户信息(按用户名、手机号、用户ID、邮箱)
  • + *
  • 批量获取用户信息
  • + *
  • 更新用户信息
  • + *
  • 获取用户IM Token
  • + *
  • 用户封禁/解封
  • + *
  • 检查用户在线状态
  • + *
  • 销毁用户(慎用)
  • + *
  • 获取所有用户列表
  • + *
  • 获取在线用户数量和列表(仅商业版)
  • + *
  • 获取用户会话信息(仅商业版)
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testUser() throws Exception { + // 创建用户信息对象 InputOutputUserInfo userInfo = new InputOutputUserInfo(); //用户ID,必须保证唯一性 userInfo.setUserId("userId1"); @@ -105,6 +185,7 @@ public class Main { userInfo.setMobile("13900000000"); userInfo.setDisplayName("user 1"); + // 调用SDK创建用户 IMResult resultCreateUser = UserAdmin.createUser(userInfo); if (resultCreateUser != null && resultCreateUser.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("Create user " + resultCreateUser.getResult().getName() + " success"); @@ -113,6 +194,7 @@ public class Main { System.exit(-1); } + // 创建机器人信息对象 InputCreateRobot createRobot = new InputCreateRobot(); createRobot.setUserId("robot1"); createRobot.setName("robot1"); @@ -120,6 +202,7 @@ public class Main { createRobot.setOwner("userId1"); createRobot.setSecret("123456"); createRobot.setCallback("http://127.0.0.1:8883/robot/recvmsg"); + // 调用SDK创建机器人 IMResult resultCreateRobot = UserAdmin.createRobot(createRobot); if (resultCreateRobot != null && resultCreateRobot.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("Create robot " + resultCreateRobot.getResult().getUserId() + " success"); @@ -128,6 +211,7 @@ public class Main { System.exit(-1); } + // 获取机器人信息 IMResult outputRobotIMResult = UserAdmin.getRobotInfo("robot1"); if(outputRobotIMResult != null && outputRobotIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("Get robot success"); @@ -136,6 +220,7 @@ public class Main { System.exit(-1); } + // 销毁机器人 IMResult destroyResult = UserAdmin.destroyRobot("robot1"); if(destroyResult != null && destroyResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("success"); @@ -144,6 +229,7 @@ public class Main { System.exit(-1); } + // 通过用户名获取用户信息 IMResult resultGetUserInfo1 = UserAdmin.getUserByName(userInfo.getName()); if (resultGetUserInfo1 != null && resultGetUserInfo1.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (userInfo.getUserId().equals(resultGetUserInfo1.getResult().getUserId()) @@ -160,6 +246,7 @@ public class Main { System.exit(-1); } + // 通过手机号获取用户信息 IMResult resultGetUserInfo2 = UserAdmin.getUserByMobile(userInfo.getMobile()); if (resultGetUserInfo2 != null && resultGetUserInfo2.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (userInfo.getUserId().equals(resultGetUserInfo2.getResult().getUserId()) @@ -176,6 +263,7 @@ public class Main { System.exit(-1); } + // 通过用户ID获取用户信息 IMResult resultGetUserInfo3 = UserAdmin.getUserByUserId(userInfo.getUserId()); if (resultGetUserInfo3 != null && resultGetUserInfo3.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (userInfo.getUserId().equals(resultGetUserInfo3.getResult().getUserId()) @@ -192,6 +280,7 @@ public class Main { System.exit(-1); } + // 通过邮箱获取用户信息(允许用户不存在) IMResult userInfoListIMResult = UserAdmin.getUserByEmail("13900000001@139.com"); if(userInfoListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS || userInfoListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_NOT_EXIST) { System.out.println("getUserByEmail success"); @@ -200,6 +289,7 @@ public class Main { System.exit(-1); } + // 批量获取用户信息 IMResult batchGetUsers = UserAdmin.getBatchUsers(Arrays.asList("userId1", "admin", "FireRobot", "TestUser")); if (batchGetUsers.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get batch user success"); @@ -208,10 +298,12 @@ public class Main { System.exit(-1); } + // 准备更新用户信息(先测试不存在的用户ID) InputOutputUserInfo updateUserInfo = new InputOutputUserInfo(); updateUserInfo.setUserId(System.currentTimeMillis()+""); updateUserInfo.setDisplayName("updatedUserName"); updateUserInfo.setPortrait("updatedUserPortrait"); + // 设置更新标志:更新显示名称和头像 int updateUserFlag = ProtoConstants.UpdateUserInfoMask.Update_User_DisplayName | ProtoConstants.UpdateUserInfoMask.Update_User_Portrait; IMResult result = UserAdmin.updateUserInfo(updateUserInfo, updateUserFlag); if(result != null && result.getErrorCode() == ErrorCode.ERROR_CODE_NOT_EXIST) { @@ -221,6 +313,7 @@ public class Main { System.exit(-1); } + // 更新存在的用户信息 updateUserInfo.setUserId(userInfo.getUserId()); result = UserAdmin.updateUserInfo(updateUserInfo, updateUserFlag); if(result != null && result.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { @@ -230,6 +323,7 @@ public class Main { System.exit(-1); } + // 验证用户信息是否更新成功 IMResult resultGetUserInfo4 = UserAdmin.getUserByUserId(userInfo.getUserId()); if (resultGetUserInfo4 != null && resultGetUserInfo4.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (userInfo.getUserId().equals(resultGetUserInfo4.getResult().getUserId()) @@ -245,6 +339,7 @@ public class Main { System.exit(-1); } + // 获取用户的IM Token,用于客户端登录 IMResult resultGetToken = UserAdmin.getUserToken(userInfo.getUserId(), "client111", ProtoConstants.Platform.Platform_Android); if (resultGetToken != null && resultGetToken.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get token success: " + resultGetToken.getResult().getToken()); @@ -253,6 +348,7 @@ public class Main { System.exit(-1); } + // 封禁用户(状态码:2表示封禁) IMResult resultVoid =UserAdmin.updateUserBlockStatus(userInfo.getUserId(), 2); if (resultVoid != null && resultVoid.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("block user done"); @@ -261,6 +357,7 @@ public class Main { System.exit(-1); } + // 检查用户封禁状态 IMResult resultCheckUserStatus = UserAdmin.checkUserBlockStatus(userInfo.getUserId()); if (resultCheckUserStatus != null && resultCheckUserStatus.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (resultCheckUserStatus.getResult().getStatus() == 2) { @@ -274,6 +371,7 @@ public class Main { System.exit(-1); } + // 获取所有被封禁用户列表 IMResult resultBlockStatusList = UserAdmin.getBlockedList(); if (resultBlockStatusList != null && resultBlockStatusList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { boolean success = false; @@ -293,6 +391,7 @@ public class Main { System.exit(-1); } + // 解封用户(状态码:0表示正常) resultVoid =UserAdmin.updateUserBlockStatus(userInfo.getUserId(), 0); if (resultVoid != null && resultVoid.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("block user done"); @@ -301,6 +400,7 @@ public class Main { System.exit(-1); } + // 再次检查用户状态,确认已解封 resultCheckUserStatus = UserAdmin.checkUserBlockStatus(userInfo.getUserId()); if (resultCheckUserStatus != null && resultCheckUserStatus.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { if (resultCheckUserStatus.getResult().getStatus() == 0) { @@ -314,6 +414,7 @@ public class Main { System.exit(-1); } + // 检查用户在线状态 IMResult outputCheckUserOnline = UserAdmin.checkUserOnlineStatus(userInfo.getUserId()); if (outputCheckUserOnline != null && outputCheckUserOnline.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("check user online status success:" + outputCheckUserOnline.getResult().getSessions().size()); @@ -323,6 +424,7 @@ public class Main { } //慎用,这个方法可能功能不完全,如果用户不在需要,建议使用block功能屏蔽用户 + // 销毁用户(物理删除,不可恢复) IMResult voidIMResult = UserAdmin.destroyUser("user11"); if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("destroy user success"); @@ -331,6 +433,7 @@ public class Main { System.exit(-1); } + // 获取所有用户列表(分页:每页100条,第0页) IMResult getUserListIMResult = UserAdmin.getAllUsers(100, 0); if (getUserListIMResult != null && getUserListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("getUserListIMResult success"); @@ -339,7 +442,9 @@ public class Main { System.exit(-1); } + // 商业版专属功能 if (commercialServer) { + // 获取在线用户总数 IMResult getOnlineUserCountResultIMResult = UserAdmin.getOnlineUserCount(); if (getOnlineUserCountResultIMResult != null && getOnlineUserCountResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get user online count success"); @@ -348,6 +453,7 @@ public class Main { System.exit(-1); } + // 获取在线用户列表(分页:第1页,从0开始,每页100条) IMResult getOnlineUserResultIMResult = UserAdmin.getOnlineUser(1, 0, 100); if (getOnlineUserResultIMResult != null && getOnlineUserResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get user online success"); @@ -356,6 +462,7 @@ public class Main { System.exit(-1); } + // 获取指定用户的会话信息 IMResult getUserSessionResultIMResult = UserAdmin.getUserSession("hygqmws2k"); if (getUserSessionResultIMResult != null && getUserSessionResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get user session success"); @@ -369,15 +476,33 @@ public class Main { //*********************************************** //**** 用户关系相关的API //*********************************************** + /** + * 用户关系管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 发送好友请求
  • + *
  • 设置好友关系
  • + *
  • 获取好友列表
  • + *
  • 解除好友关系
  • + *
  • 黑名单管理
  • + *
  • 好友备注(别名)管理
  • + *
  • 好友额外信息管理
  • + *
  • 获取好友关系详情
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testUserRelation() throws Exception { - //先创建2个用户 + //先创建2个用户用于测试好友关系 InputOutputUserInfo userInfo = new InputOutputUserInfo(); userInfo.setUserId("ff1"); userInfo.setName("ff1"); userInfo.setMobile("13800000000"); userInfo.setDisplayName("ff1"); + // 调用SDK创建第一个用户 IMResult resultCreateUser = UserAdmin.createUser(userInfo); if (resultCreateUser != null && resultCreateUser.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("Create user " + resultCreateUser.getResult().getName() + " success"); @@ -386,12 +511,14 @@ public class Main { System.exit(-1); } + // 创建第二个用户 userInfo = new InputOutputUserInfo(); userInfo.setUserId("ff2"); userInfo.setName("ff2"); userInfo.setMobile("13800000001"); userInfo.setDisplayName("ff2"); + // 调用SDK创建第二个用户 resultCreateUser = UserAdmin.createUser(userInfo); if (resultCreateUser != null && resultCreateUser.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("Create user " + resultCreateUser.getResult().getName() + " success"); @@ -400,6 +527,7 @@ public class Main { System.exit(-1); } + // 发送好友请求:ff1向ff2发送好友请求,附带问候语"hello",直接设为好友 IMResult result = RelationAdmin.sendFriendRequest("ff1", "ff2", "hello", true); if (result != null && (result.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS || result.getErrorCode() == ErrorCode.ERROR_CODE_ALREADY_FRIENDS)) { System.out.println("send friend request success"); @@ -408,6 +536,7 @@ public class Main { System.exit(-1); } + // 设置好友关系:ff1把ff2设为好友,并附带额外信息 IMResult updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", true, "{\"from\":1}"); if (updateFriendStatusResult != null && updateFriendStatusResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("update friend status success"); @@ -416,6 +545,7 @@ public class Main { System.exit(-1); } + // 获取ff1的好友列表 IMResult resultGetFriendList = RelationAdmin.getFriendList("ff1"); if (resultGetFriendList != null && resultGetFriendList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && resultGetFriendList.getResult().getList().contains("ff2")) { System.out.println("get friend status success"); @@ -424,6 +554,7 @@ public class Main { System.exit(-1); } + // 解除好友关系:ff1删除ff2 updateFriendStatusResult = RelationAdmin.setUserFriend("ff1", "ff2", false, null); if (updateFriendStatusResult != null && updateFriendStatusResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("update friend status success"); @@ -432,6 +563,7 @@ public class Main { System.exit(-1); } + // 再次获取好友列表,确认ff2已被删除 resultGetFriendList = RelationAdmin.getFriendList("ff1"); if (resultGetFriendList != null && resultGetFriendList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && !resultGetFriendList.getResult().getList().contains("ff2")) { System.out.println("get friend status success"); @@ -441,6 +573,7 @@ public class Main { } + // 将ff2加入黑名单:ff1把ff2加入黑名单 IMResult updateBlacklistStatusResult = RelationAdmin.setUserBlacklist("ff1", "ff2", true); if (updateBlacklistStatusResult != null && updateBlacklistStatusResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("update blacklist status success"); @@ -449,6 +582,7 @@ public class Main { System.exit(-1); } + // 获取黑名单列表 resultGetFriendList = RelationAdmin.getUserBlacklist("ff1"); if (resultGetFriendList != null && resultGetFriendList.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && resultGetFriendList.getResult().getList().contains("ff2")) { System.out.println("get blacklist status success"); @@ -457,6 +591,7 @@ public class Main { System.exit(-1); } + // 设置好友备注(别名) String alias = "hello" + System.currentTimeMillis(); IMResult updateFriendAlias = RelationAdmin.updateFriendAlias("ff1", "ff2", alias); if (updateFriendAlias != null && updateFriendAlias.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { @@ -466,6 +601,7 @@ public class Main { System.exit(-1); } + // 获取好友备注(别名) IMResult getFriendAlias = RelationAdmin.getFriendAlias("ff1", "ff2"); if (getFriendAlias != null && getFriendAlias.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && getFriendAlias.getResult().getAlias().equals(alias)) { System.out.println("get friend alias success"); @@ -474,6 +610,7 @@ public class Main { System.exit(-1); } + // 设置好友额外信息(可以存储自定义数据) String friendExtra = "hello friend extra"; IMResult setExtraResult = RelationAdmin.updateFriendExtra("ff1", "ff2", friendExtra); if (setExtraResult != null && setExtraResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { @@ -483,6 +620,7 @@ public class Main { System.exit(-1); } + // 获取好友关系详情(包括额外信息等) IMResult getRelation = RelationAdmin.getRelation("ff1", "ff2"); if (getRelation != null && getRelation.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("get friend relation success"); @@ -491,6 +629,7 @@ public class Main { System.exit(-1); } + // 验证好友额外信息是否正确 if(!friendExtra.equals(getRelation.getResult().extra)) { System.out.println("set friend extra failure"); System.exit(-1); @@ -499,8 +638,31 @@ public class Main { //*********************************************** //**** 群组相关功能 //*********************************************** + /** + * 群组管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 创建群组
  • + *
  • 获取群组信息
  • + *
  • 转移群主
  • + *
  • 修改群组信息(名称、扩展字段)
  • + *
  • 获取群成员列表
  • + *
  • 添加群成员
  • + *
  • 踢出群成员
  • + *
  • 设置群成员别名和扩展信息
  • + *
  • 设置/取消群管理员(仅商业版)
  • + *
  • 退出群组
  • + *
  • 获取用户的群组列表
  • + *
  • 获取共同群组
  • + *
  • 群成员禁言/白名单管理(仅商业版)
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testGroup() throws Exception { + // 先解散可能存在的测试群组 IMResult voidIMResult1 = GroupAdmin.dismissGroup("user1", "groupId1", null, null); PojoGroupInfo groupInfo = new PojoGroupInfo(); @@ -748,10 +910,33 @@ public class Main { //*********************************************** //**** 消息相关功能 //*********************************************** + /** + * 消息管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 发送单聊消息
  • + *
  • 获取消息详情
  • + *
  • 撤回消息
  • + *
  • 删除消息(仅商业版)
  • + *
  • 更新消息内容(仅商业版)
  • + *
  • 广播消息(仅商业版)
  • + *
  • 撤回广播消息(仅商业版)
  • + *
  • 获取会话已读时间戳(仅商业版)
  • + *
  • 获取消息投递状态(仅商业版)
  • + *
  • 清除会话(仅商业版)
  • + *
  • 群发消息
  • + *
  • 撤回群发消息
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testMessage() throws Exception { + // 创建会话对象:目标用户ff2,会话类型为私聊 Conversation conversation = new Conversation(); conversation.setTarget("ff2"); conversation.setType(ProtoConstants.ConversationType.ConversationType_Private); + // 创建文本消息内容并编码为MessagePayload TextMessageContent textMessageContent = new TextMessageContent("Hello world"); MessagePayload payload = textMessageContent.encode(); @@ -868,8 +1053,31 @@ public class Main { //*********************************************** //**** 发送各种消息。 //*********************************************** + /** + * 消息内容编码测试 + *

+ * 测试各种类型消息的编码和发送: + *

    + *
  • 文本消息
  • + *
  • 语音消息
  • + *
  • 图片消息
  • + *
  • 视频消息
  • + *
  • 位置消息
  • + *
  • 文件消息
  • + *
  • 动态表情消息
  • + *
  • 链接消息
  • + *
  • 名片消息
  • + *
  • 提醒消息
  • + *
  • 富通知消息
  • + *
  • 流式文本消息
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testMessageContent() throws Exception { + // 设置发送者 String sender = "userId2"; + // 创建会话对象 Conversation conversation = new Conversation(); conversation.setTarget("3ygqmws2k"); conversation.setType(ProtoConstants.ConversationType.ConversationType_Private); @@ -1007,12 +1215,24 @@ public class Main { } //消息相关表分为2类,分表是:t_messages_x和t_user_messages_y,并且是分表存储的。表内存储数据和分表规则请参考 https://docs.wildfirechat.cn/faq/server.html 问题2 + /** + * 消息分表计算测试 + *

+ * 演示如何计算消息存储的分表名称: + *

    + *
  • 用户消息表:t_user_messages_x (x为用户ID哈希值%128)
  • + *
  • 消息表:t_messages_y (y为年份*12+月份)
  • + *
+ *

+ */ static void testMessageSharding() { String userId = "user1"; + // 计算用户消息表:使用用户ID的哈希值对128取模 int hashId = Math.abs(userId.hashCode())%128; String userMessageTable = "t_user_messages_" + hashId; System.out.println("user:" + userId + " user messages table is " + userMessageTable); + // 计算消息表:使用年份和月份 Calendar calendar = Calendar.getInstance(); Date date = new Date(); calendar.setTime(date); @@ -1023,6 +1243,19 @@ public class Main { System.out.println("This month save message to table " + messageTable); } + /** + * 从数据库读取消息内容测试 + *

+ * 演示如何从数据库的二进制数据解析消息内容: + *

    + *
  • 从数据库读取_messageContent字段
  • + *
  • 解析为协议栈MessageContent对象
  • + *
  • 使用MessageContentFactory解码为具体消息类型
  • + *
  • 处理不同类型的消息(文本、图片、语音等)
  • + *
+ *

+ * @throws Exception 当解析过程中发生错误时抛出异常 + */ static void testReadMessageContentFromDB() throws Exception { //从数据库t_messages_x表中读取到消息内容字段_data的二进制数据为 byte[] data = {8,1,18,5,72,101,108,108,111,64,3}; @@ -1063,6 +1296,13 @@ public class Main { // 比如 MessageContentFactory.registerCustomMessageContent(CustomTextMessageContent.class); } + /** + * 检查消息发送结果 + *

+ * 验证消息是否发送成功,如果失败则退出程序。 + *

+ * @param resultSendMessage 消息发送结果 + */ static void checkSendMessageResult(IMResult resultSendMessage) { if (resultSendMessage != null && resultSendMessage.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { System.out.println("send message success"); @@ -1072,7 +1312,22 @@ public class Main { } } + /** + * 流式文本消息测试 + *

+ * 演示如何发送流式文本消息,模拟AI逐字生成效果: + *

    + *
  • 将长文本分段发送
  • + *
  • 使用StreamTextGeneratingMessageContent表示正在生成
  • + *
  • 使用StreamTextGeneratedMessageContent表示生成完成
  • + *
+ *

+ * @param sender 发送者用户ID + * @param conversation 会话对象 + * @throws Exception 当发送过程中发生错误时抛出异常 + */ static void testStreamingText(String sender, Conversation conversation) throws Exception { + // 准备要发送的长文本 String fullText = "北京野火无限网络科技有限公司是成立于2019年底的一家科技创新企业,公司的主要目标是为广大企业和单位提供优质可控、私有部署的即时通讯和实时音视频能力,为社会信息化水平提高作出自己的贡献。\n" + "\n" + "野火IM是公司研发一套自主可控的即时通讯组件,具有全部私有化、功能齐全、协议稳定可靠、全平台支持、安全性高和支持国产化等技术特点。客户端分层设计,既可开箱即用,也可与现有系统深度融合。具有完善的服务端API和自定义消息功能,可以任意扩展功能。代码开源率高,方便二次开发和使用。支持多人实时音视频和会议功能,线上沟通更通畅。\n" + @@ -1113,6 +1368,21 @@ public class Main { //*********************************************** //**** 测试频道功能 //*********************************************** + /** + * 频道管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 创建频道
  • + *
  • 获取频道信息
  • + *
  • 关注频道
  • + *
  • 取消关注频道
  • + *
  • 检查用户关注状态
  • + *
  • 销毁频道(标记为已删除状态)
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testChannelApi() throws Exception { String channelName = "MyChannel"; String channelOwner = "user1"; @@ -1194,6 +1464,19 @@ public class Main { //*********************************************** //**** 一些其它的功能,比如创建频道,更新用户设置等 //*********************************************** + /** + * 通用API测试 + *

+ * 测试以下功能: + *

    + *
  • 获取系统设置(如群组最大成员数)
  • + *
  • 修改用户设置
  • + *
  • 发送用户设置
  • + *
  • 获取用户设置
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testGeneralApi() throws Exception { IMResult resultGetSystemSetting = GeneralAdmin.getSystemSetting(Group_Max_Member_Count); if (resultGetSystemSetting != null && resultGetSystemSetting.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) { @@ -1228,6 +1511,23 @@ public class Main { } } + /** + * 聊天室管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 创建聊天室
  • + *
  • 获取聊天室信息
  • + *
  • 获取聊天室成员列表
  • + *
  • 销毁聊天室
  • + *
  • 获取用户的聊天室
  • + *
  • 设置聊天室黑名单(仅商业版)
  • + *
  • 获取聊天室黑名单(仅商业版)
  • + *
  • 发送聊天室消息
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testChatroom() throws Exception { String chatroomId = "chatroomId1"; String chatroomTitle = "TESTCHATROM"; @@ -1392,6 +1692,32 @@ public class Main { } } + /** + * 机器人功能测试 + *

+ * 测试以下功能: + *

    + *
  • 创建机器人
  • + *
  • 初始化RobotService(使用IM端口80)
  • + *
  • 获取机器人信息
  • + *
  • 发送消息
  • + *
  • 撤回消息(仅商业版)
  • + *
  • 更新消息(仅商业版)
  • + *
  • 获取用户信息
  • + *
  • 创建群组
  • + *
  • 发送群组消息
  • + *
  • 获取群组信息
  • + *
  • 获取群组成员
  • + *
  • 修改群组信息
  • + *
  • 添加群成员
  • + *
  • 踢出群成员
  • + *
  • 退出群组
  • + *
  • 解散群组
  • + *
  • 销毁机器人
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testRobot() throws Exception { String robotId = "robot1"; String robotSecret = "123456"; @@ -1819,6 +2145,27 @@ public class Main { } //***测试频道API功能,仅专业版支持*** + /** + * 频道功能测试(仅专业版支持) + *

+ * 测试以下功能: + *

    + *
  • 创建频道
  • + *
  • 获取频道信息
  • + *
  • 修改频道信息
  • + *
  • 获取频道列表
  • + *
  • 关注/取消关注频道
  • + *
  • 获取频道关注者
  • + *
  • 设置频道菜单
  • + *
  • 获取频道菜单
  • + *
  • 发送频道消息
  • + *
  • 获取频道历史消息
  • + *
  • 获取用户关注的频道
  • + *
  • 删除频道(标记为已删除)
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testChannel() throws Exception { //初始化服务API AdminConfig.initAdmin(AdminUrl, AdminSecret); @@ -2046,6 +2393,20 @@ public class Main { //使用完需要释放 channelServiceApi.close(); } + + /** + * 敏感词管理API测试 + *

+ * 测试以下功能: + *

    + *
  • 添加敏感词到敏感词库
  • + *
  • 获取敏感词列表
  • + *
  • 从敏感词库移除敏感词
  • + *
  • 验证敏感词添加和移除操作
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testSensitiveApi() throws Exception { List words = Arrays.asList("a","b","c"); IMResult addResult = SensitiveAdmin.addSensitives(words); @@ -2084,6 +2445,18 @@ public class Main { } } + /** + * 朋友圈(动态)API测试 + *

+ * 测试以下功能: + *

    + *
  • 发布动态(朋友圈)
  • + *
  • 发送文本动态内容
  • + *
  • 验证动态发送结果
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testMomentsApi() throws Exception { FeedPojo feedPojo = new FeedPojo(); feedPojo.sender = "73055b4105de4b70993b7258afbfc387"; @@ -2101,6 +2474,20 @@ public class Main { //*********************************************** //**** 物联网相关的API,仅专业版支持 //*********************************************** + /** + * 物联网设备管理API测试(仅专业版支持) + *

+ * 测试以下功能: + *

    + *
  • 创建或更新设备
  • + *
  • 获取设备信息
  • + *
  • 设备绑定多个所有者
  • + *
  • 设备ID唯一性验证
  • + *
  • 销毁设备
  • + *
+ *

+ * @throws Exception 当测试过程中发生错误时抛出异常 + */ static void testDevice() throws Exception { InputCreateDevice createDevice = new InputCreateDevice(); createDevice.setDeviceId("deviceId1"); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java index 32c53770..f53401fa 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/MeshAdmin.java @@ -8,12 +8,38 @@ import cn.wildfirechat.sdk.utilities.AdminHttpUtils; import java.util.List; +/** + * Mesh服务管理类 + *

+ * 提供Mesh网络(多域互联)服务管理相关的功能,包括: + *

    + *
  • 域管理(创建、删除、查询)
  • + *
  • 跨域用户搜索
  • + *
  • 跨域好友管理
  • + *
  • 跨域消息发送
  • + *
  • 跨域群组管理
  • + *
  • 会议控制
  • + *
+ *

+ */ public class MeshAdmin { + /** + * 创建域 + * @param domainInfo 域信息 + * @return 创建结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createDomain(InputOutputDomainInfo domainInfo) throws Exception { String path = APIPath.Create_Domain; return AdminHttpUtils.httpJsonPost(path, domainInfo, Void.class); } + /** + * 获取域信息 + * @param domainId 域ID + * @return 域信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getDomain(String domainId) throws Exception { String path = APIPath.Get_Domain; InputStringValue inputId = new InputStringValue(); @@ -21,6 +47,12 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, inputId, InputOutputDomainInfo.class); } + /** + * 删除域 + * @param domainId 域ID + * @return 删除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult deleteDomain(String domainId) throws Exception { String path = APIPath.Destroy_Domain; InputStringValue inputId = new InputStringValue(); @@ -28,17 +60,37 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, inputId, Void.class); } + /** + * 获取所有域列表 + * @return 域信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getAllDomain() throws Exception { String path = APIPath.List_Domain; return AdminHttpUtils.httpJsonPost(path, null, InputOutputDomainInfoList.class); } + /** + * 批量获取用户信息 + * @param userIds 用户ID列表 + * @return 用户信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getBatchUserInfos(List userIds) throws Exception { String path = APIPath.User_Batch_Get_Infos; OutputStringList getUserInfo = new OutputStringList(userIds); return AdminHttpUtils.httpJsonPost(path, getUserInfo, OutputUserInfoList.class); } + /** + * 搜索用户 + * @param keyword 搜索关键词 + * @param searchType 搜索类型 + * @param userType 用户类型 + * @param page 页码 + * @return 搜索结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult searchUser(String keyword, int searchType, int userType, int page) throws Exception { String path = APIPath.Search_User; PojoSearchUserReq req = new PojoSearchUserReq(); @@ -49,6 +101,14 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, req, PojoSearchUserRes.class); } + /** + * 发送跨域好友请求 + * @param userId 用户ID + * @param targetId 目标用户ID + * @param reason 申请理由 + * @return 发送结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendFriendRequest(String userId, String targetId, String reason) throws Exception { String path = APIPath.Friend_Send_Request; InputAddFriendRequest input = new InputAddFriendRequest(); @@ -59,6 +119,14 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 处理跨域好友请求 + * @param userId 用户ID + * @param targetId 目标用户ID + * @param status 状态 + * @return 处理结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult handleFriendRequest(String userId, String targetId, int status) throws Exception { String path = APIPath.Handle_Friend_Send_Request; InputHandleFriendRequest input = new InputHandleFriendRequest(); @@ -68,6 +136,15 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 发送跨域消息 + * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @param toUsers 接收用户ID列表 + * @return 发送结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload, List toUsers) throws Exception { String path = APIPath.Msg_Send; SendMessageData messageData = new SendMessageData(); @@ -82,6 +159,14 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, SendMessageResult.class); } + /** + * 发布跨域消息 + * @param messageData 消息数据 + * @param receivers 接收者ID列表 + * @param messageId 消息ID + * @return 发布结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult publishMessage(SendMessageData messageData, List receivers, long messageId) throws Exception { String path = APIPath.Msg_Publish; PojoPublishMessageReq req = new PojoPublishMessageReq(); @@ -91,6 +176,13 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, req, SendMessageResult.class); } + /** + * 撤回跨域消息 + * @param operator 操作者用户ID + * @param messageId 消息ID + * @return 撤回结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult recallMessage(String operator, long messageId) throws Exception { String path = APIPath.Msg_Recall; RecallMessageData req = new RecallMessageData(); @@ -100,6 +192,15 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, req, String.class); } + /** + * 更新跨域消息内容 + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @param payload 新的消息内容 + * @param distribute 是否分发 + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateMessageContent(String operator, long messageUid, MessagePayload payload, boolean distribute) throws Exception { String path = APIPath.Msg_Update; UpdateMessageContentData updateMessageContentData = new UpdateMessageContentData(); @@ -112,6 +213,13 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, updateMessageContentData, Void.class); } + /** + * 同步跨域群组 + * @param group_info 群组信息 + * @param members 成员列表 + * @return 同步结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult syncGroup(PojoGroupInfo group_info, List members) throws Exception { String path = APIPath.Sync_Group; PojoGroup pojoGroup = new PojoGroup(); @@ -121,14 +229,36 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, pojoGroup, Void.class); } + /** + * 获取跨域群组信息 + * @param groupId 群组ID + * @return 群组信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupInfo(String groupId) throws Exception { return GroupAdmin.getGroupInfo(groupId); } + /** + * 获取跨域群组成员列表 + * @param groupId 群组ID + * @return 群组成员列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getGroupMembers(String groupId) throws Exception { return GroupAdmin.getGroupMembers(groupId); } + /** + * 添加跨域群组成员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMembers 成员列表 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 添加结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult addGroupMembers(String operator, String groupId, List groupMembers, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Add; InputAddGroupMember addGroupMember = new InputAddGroupMember(); @@ -141,6 +271,16 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 添加跨域加群申请 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param userIds 用户ID列表 + * @param reason 理由 + * @param extra 额外信息 + * @return 添加结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult addJoinGroupRequest(String operator, String groupId, List userIds, String reason, String extra) throws Exception { String path = APIPath.Group_Join_Request_Add; PojoAddJoinGroupRequest addGroupMember = new PojoAddJoinGroupRequest(); @@ -152,10 +292,25 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class); } + /** + * 批量获取跨域群组信息 + * @param groupIds 群组ID列表 + * @return 群组信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult batchGroupInfos(List groupIds) throws Exception { return GroupAdmin.batchGroupInfos(groupIds); } + /** + * 退出跨域群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 退出结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult quitGroup(String operator, String groupId, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Quit; InputQuitGroup quitGroup = new InputQuitGroup(); @@ -167,7 +322,15 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, quitGroup, Void.class); } - + /** + * 解散跨域群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 解散结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult dismissGroup(String operator, String groupId, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Dismiss; InputDismissGroup dismissGroup = new InputDismissGroup(); @@ -179,6 +342,16 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, dismissGroup, Void.class); } + /** + * 踢出跨域群组成员 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param groupMemberIds 成员用户ID列表 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 踢出结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult kickoffGroupMembers(String operator, String groupId, List groupMemberIds, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Member_Kickoff; InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember(); @@ -191,6 +364,16 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, kickoffGroupMember, Void.class); } + /** + * 转让跨域群组 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param newOwner 新群主用户ID + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 转让结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult transferGroup(String operator, String groupId, String newOwner, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Transfer; InputTransferGroup transferGroup = new InputTransferGroup(); @@ -203,6 +386,17 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, transferGroup, Void.class); } + /** + * 修改跨域群组信息 + * @param operator 操作者用户ID + * @param groupId 群组ID + * @param type 修改信息类型(ModifyGroupInfoType) + * @param value 新值 + * @param to_lines 消息同步到的线路列表 + * @param notify_message 通知消息 + * @return 修改结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult modifyGroupInfo(String operator, String groupId, /*ModifyGroupInfoType*/int type, String value, List to_lines, MessagePayload notify_message) throws Exception { String path = APIPath.Group_Modify_Info; InputModifyGroupInfo modifyGroupInfo = new InputModifyGroupInfo(); @@ -216,6 +410,18 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, modifyGroupInfo, Void.class); } + /** + * 用户会议请求 + * @param clientID 客户端ID + * @param fromUser 发起用户ID + * @param request 请求内容 + * @param sessionId 会话ID + * @param roomId 房间ID + * @param data 数据 + * @param advanced 是否高级模式 + * @return 会议响应 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult userConferenceRequest(String clientID, String fromUser, String request, long sessionId, String roomId, String data, boolean advanced) throws Exception { String path = APIPath.Conference_User_Request; PojoUserConferenceRequest conferenceRequest = new PojoUserConferenceRequest(); @@ -229,6 +435,15 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, conferenceRequest, PojoUserConferenceResponse.class); } + /** + * 用户会议事件 + * @param data 事件数据 + * @param userId 用户ID + * @param clientId 客户端ID + * @param isRobot 是否为机器人 + * @return 事件处理结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult userConferenceEvent(String data, String userId, String clientId, boolean isRobot) throws Exception { String path = APIPath.Conference_User_Event; PojoUserConferenceEvent event = new PojoUserConferenceEvent(); @@ -239,6 +454,12 @@ public class MeshAdmin { return AdminHttpUtils.httpJsonPost(path, event, Void.class); } + /** + * Ping域 + * @param domainId 域ID + * @return Ping响应 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult pingDomain(String domainId) throws Exception { String path = APIPath.Ping_Domain; PojoDomainPingRequest request = new PojoDomainPingRequest(); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/MessageAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/MessageAdmin.java index 71d2a2f2..6f47b4f3 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/MessageAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/MessageAdmin.java @@ -7,17 +7,63 @@ import cn.wildfirechat.sdk.utilities.AdminHttpUtils; import java.util.List; +/** + * 消息管理类 + *

+ * 提供消息管理相关的功能,包括: + *

    + *
  • 发送消息(单聊、群聊、聊天室等)
  • + *
  • 撤回消息
  • + *
  • 删除消息
  • + *
  • 更新消息内容
  • + *
  • 广播和群发消息
  • + *
  • 会话管理
  • + *
  • 消息已读和投递状态查询
  • + *
+ *

+ */ public class MessageAdmin { + /** + * 发送消息 + * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @return 发送结果,包含消息ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload) throws Exception { return sendMessage(sender, conversation, payload, null); } - //toUsers为发送给会话中部分用户用的,正常为null,仅当需要指定群/频道/聊天室中部分接收用户时使用 + /** + * 发送消息(可指定部分接收用户) + *

+ * toUsers为发送给会话中部分用户用的,正常为null,仅当需要指定群/频道/聊天室中部分接收用户时使用 + *

+ * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @param toUsers 接收用户ID列表,null表示发送给会话中所有用户 + * @return 发送结果,包含消息ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload, List toUsers) throws Exception { return sendMessage(sender, conversation, payload, toUsers, false); } - - //toUsers为发送给会话中部分用户用的,正常为null,仅当需要指定群/频道/聊天室中部分接收用户时使用 + + /** + * 发送消息(完整参数版本) + *

+ * toUsers为发送给会话中部分用户用的,正常为null,仅当需要指定群/频道/聊天室中部分接收用户时使用 + *

+ * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @param toUsers 接收用户ID列表,null表示发送给会话中所有用户 + * @param isUserMessage 是否为用户消息 + * @return 发送结果,包含消息ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload, List toUsers, boolean isUserMessage) throws Exception { String path = APIPath.Msg_Send; SendMessageData messageData = new SendMessageData(); @@ -32,6 +78,13 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, SendMessageResult.class); } + /** + * 撤回消息 + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @return 撤回结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult recallMessage(String operator, long messageUid) throws Exception { String path = APIPath.Msg_Recall; RecallMessageData messageData = new RecallMessageData(); @@ -40,7 +93,12 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, String.class); } - //仅专业版支持 + /** + * 删除消息(仅专业版支持) + * @param messageUid 消息UID + * @return 删除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult deleteMessage(long messageUid) throws Exception { String path = APIPath.Msg_Delete; DeleteMessageData deleteMessageData = new DeleteMessageData(); @@ -48,14 +106,30 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, deleteMessageData, Void.class); } - //仅专业版支持 + /** + * 清除用户消息(仅专业版支持) + * @param userId 用户ID + * @param conversation 会话信息 + * @param fromTime 起始时间 + * @param toTime 结束时间 + * @return 清除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult clearUserMessages(String userId, Conversation conversation, long fromTime, long toTime) throws Exception { String path = APIPath.Msg_Clear_By_User; InputClearUserMessages clearUserMessages = new InputClearUserMessages(userId, conversation, fromTime, toTime); return AdminHttpUtils.httpJsonPost(path, clearUserMessages, Void.class); } - //仅专业版支持 + /** + * 更新消息内容(仅专业版支持) + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @param payload 新的消息内容 + * @param distribute 是否分发更新 + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateMessageContent(String operator, long messageUid, MessagePayload payload, boolean distribute) throws Exception { String path = APIPath.Msg_Update; UpdateMessageContentData updateMessageContentData = new UpdateMessageContentData(); @@ -67,7 +141,13 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, updateMessageContentData, Void.class); } - //仅专业版支持 + /** + * 清除会话(仅专业版支持) + * @param userId 用户ID + * @param conversation 会话信息 + * @return 清除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult clearConversation(String userId, Conversation conversation) throws Exception { String path = APIPath.Conversation_Delete; InputUserConversation input = new InputUserConversation(); @@ -77,10 +157,11 @@ public class MessageAdmin { } /** - * 获取单条消息。如果想要更多消息的读取,可以直接读取IM服务的数据库。 - * @param messageUid - * @return - * @throws Exception + * 获取单条消息 + *

如果想要更多消息的读取,可以直接读取IM服务的数据库

+ * @param messageUid 消息UID + * @return 消息数据 + * @throws Exception 请求失败时抛出异常 */ public static IMResult getMessage(long messageUid) throws Exception { String path = APIPath.Msg_GetOne; @@ -88,7 +169,13 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, inputMessageUid, OutputMessageData.class); } - //仅专业版支持 + /** + * 撤回广播消息(仅专业版支持) + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @return 撤回结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult recallBroadCastMessage(String operator, long messageUid) throws Exception { String path = APIPath.Msg_RecallBroadCast; RecallMessageData messageData = new RecallMessageData(); @@ -97,6 +184,14 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, Void.class); } + /** + * 撤回群发消息 + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @param receivers 接收者ID列表 + * @return 撤回结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult recallMultiCastMessage(String operator, long messageUid, List receivers) throws Exception { String path = APIPath.Msg_RecallMultiCast; RecallMultiCastMessageData messageData = new RecallMultiCastMessageData(); @@ -106,7 +201,13 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, Void.class); } - //仅专业版支持 + /** + * 删除广播消息(仅专业版支持) + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @return 删除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult deleteBroadCastMessage(String operator, long messageUid) throws Exception { String path = APIPath.Msg_DeleteBroadCast; RecallMessageData messageData = new RecallMessageData(); @@ -115,6 +216,14 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, Void.class); } + /** + * 删除群发消息 + * @param operator 操作者用户ID + * @param messageUid 消息UID + * @param receivers 接收者ID列表 + * @return 删除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult deleteMultiCastMessage(String operator, long messageUid, List receivers) throws Exception { String path = APIPath.Msg_DeleteMultiCast; RecallMultiCastMessageData messageData = new RecallMultiCastMessageData(); @@ -124,7 +233,14 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, Void.class); } - //仅专业版支持 + /** + * 广播消息(仅专业版支持) + * @param sender 发送者用户ID + * @param line 线路 + * @param payload 消息内容 + * @return 广播结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult broadcastMessage(String sender, int line, MessagePayload payload) throws Exception { String path = APIPath.Msg_Broadcast; BroadMessageData messageData = new BroadMessageData(); @@ -134,6 +250,15 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, BroadMessageResult.class); } + /** + * 群发消息 + * @param sender 发送者用户ID + * @param receivers 接收者ID列表 + * @param line 线路 + * @param payload 消息内容 + * @return 群发结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult multicastMessage(String sender, List receivers, int line, MessagePayload payload) throws Exception { String path = APIPath.Msg_Multicast; MulticastMessageData messageData = new MulticastMessageData(); @@ -144,12 +269,25 @@ public class MessageAdmin { return AdminHttpUtils.httpJsonPost(path, messageData, MultiMessageResult.class); } + /** + * 获取会话已读时间戳 + * @param userId 用户ID + * @param conversation 会话信息 + * @return 已读时间戳 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getConversationReadTimestamp(String userId, Conversation conversation) throws Exception { String path = APIPath.Msg_ConvRead; InputGetConvReadTime input = new InputGetConvReadTime(userId, conversation.getType(), conversation.getTarget(), conversation.getLine()); return AdminHttpUtils.httpJsonPost(path, input, OutputTimestamp.class); } + /** + * 获取消息投递时间戳 + * @param userId 用户ID + * @return 投递时间戳 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getMessageDelivery(String userId) throws Exception { String path = APIPath.Msg_Delivery; InputUserId input = new InputUserId(userId); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/MomentsAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/MomentsAdmin.java index c9b7514f..8d3ba4c4 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/MomentsAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/MomentsAdmin.java @@ -6,8 +6,19 @@ import cn.wildfirechat.pojos.moments.FeedPojo; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; - +/** + * 朋友圈管理类 + *

+ * 提供朋友圈(动态)管理相关的功能。 + *

+ */ public class MomentsAdmin { + /** + * 发布朋友圈动态 + * @param feedPojo 动态内容 + * @return 发布结果,包含消息ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult postFeeds(FeedPojo feedPojo) throws Exception { String path = APIPath.Admin_Moments_Post_Feed; return AdminHttpUtils.httpJsonPost(path, feedPojo, SendMessageResult.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java index e7926b31..7a25bb02 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/RelationAdmin.java @@ -5,7 +5,29 @@ import cn.wildfirechat.pojos.*; import cn.wildfirechat.sdk.model.IMResult; import cn.wildfirechat.sdk.utilities.AdminHttpUtils; +/** + * 好友关系管理类 + *

+ * 提供好友关系管理相关的功能,包括: + *

    + *
  • 设置和获取好友关系
  • + *
  • 黑名单管理
  • + *
  • 好友别名和额外信息管理
  • + *
  • 好友请求发送
  • + *
  • 关系查询
  • + *
+ *

+ */ public class RelationAdmin { + /** + * 设置用户好友关系 + * @param userId 用户ID + * @param targetId 目标用户ID + * @param isFriend true-设置为好友,false-删除好友 + * @param extra 额外信息 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setUserFriend(String userId, String targetId, boolean isFriend, String extra) throws Exception { String path = APIPath.Friend_Update_Status; InputUpdateFriendStatusRequest input = new InputUpdateFriendStatusRequest(); @@ -16,6 +38,12 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取好友列表 + * @param userId 用户ID + * @return 好友ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getFriendList(String userId) throws Exception { String path = APIPath.Friend_Get_List; InputUserId input = new InputUserId(); @@ -23,6 +51,14 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputStringList.class); } + /** + * 设置黑名单 + * @param userId 用户ID + * @param targetId 目标用户ID + * @param isBlacklist true-加入黑名单,false-移出黑名单 + * @return 设置结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult setUserBlacklist(String userId, String targetId, boolean isBlacklist) throws Exception { String path = APIPath.Blacklist_Update_Status; InputBlacklistRequest input = new InputBlacklistRequest(); @@ -32,6 +68,12 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取用户黑名单 + * @param userId 用户ID + * @return 黑名单用户ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserBlacklist(String userId) throws Exception { String path = APIPath.Blacklist_Get_List; InputUserId input = new InputUserId(); @@ -39,6 +81,14 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputStringList.class); } + /** + * 更新好友别名 + * @param operator 操作者用户ID + * @param targetId 目标用户ID + * @param alias 别名 + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateFriendAlias(String operator, String targetId, String alias) throws Exception { String path = APIPath.Friend_Set_Alias; InputUpdateAlias input = new InputUpdateAlias(); @@ -48,6 +98,13 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取好友别名 + * @param operator 操作者用户ID + * @param targetId 目标用户ID + * @return 好友别名 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getFriendAlias(String operator, String targetId) throws Exception { String path = APIPath.Friend_Get_Alias; InputGetAlias input = new InputGetAlias(); @@ -56,6 +113,14 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputGetAlias.class); } + /** + * 更新好友额外信息 + * @param operator 操作者用户ID + * @param targetId 目标用户ID + * @param extra 额外信息 + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateFriendExtra(String operator, String targetId, String extra) throws Exception { String path = APIPath.Friend_Set_Extra; InputUpdateFriendExtra input = new InputUpdateFriendExtra(); @@ -64,6 +129,16 @@ public class RelationAdmin { input.setExtra(extra); return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + + /** + * 发送好友请求 + * @param userId 用户ID + * @param targetId 目标用户ID + * @param reason 申请理由 + * @param force 是否强制添加(直接成为好友无需对方同意) + * @return 发送结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult sendFriendRequest(String userId, String targetId, String reason, boolean force) throws Exception { String path = APIPath.Friend_Send_Request; InputAddFriendRequest input = new InputAddFriendRequest(); @@ -74,6 +149,13 @@ public class RelationAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取两个用户之间的关系 + * @param userId 用户1的ID + * @param targetId 用户2的ID + * @return 关系信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getRelation(String userId, String targetId) throws Exception { String path = APIPath.Relation_Get; StringPairPojo input = new StringPairPojo(userId, targetId); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java b/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java index e17a8d15..1430245d 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/RobotService.java @@ -14,21 +14,62 @@ import java.util.List; import static cn.wildfirechat.proto.ProtoConstants.ApplicationType.ApplicationType_Robot; +/** + * 机器人服务类 + *

+ * 提供机器人相关的功能,包括: + *

    + *
  • 发送和回复消息
  • + *
  • 获取用户信息
  • + *
  • 群组管理
  • + *
  • 朋友圈管理
  • + *
  • 会议控制
  • + *
  • 回调管理
  • + *
+ *

+ */ public class RobotService implements Closeable { private final RobotHttpUtils robotHttpUtils; + /** + * 创建机器人服务实例 + * @param url IM服务器地址 + * @param robotId 机器人ID + * @param robotSecret 机器人密钥 + */ public RobotService(String url, String robotId, String robotSecret) { robotHttpUtils = new RobotHttpUtils(url, robotId, robotSecret); } + /** + * 获取机器人ID + * @return 机器人ID + */ public String getRobotId() { return robotHttpUtils.getRobotId(); } + /** + * 发送消息 + * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @return 发送结果 + * @throws Exception 请求失败时抛出异常 + */ public IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload) throws Exception { return sendMessage(sender, conversation, payload, null); } + /** + * 发送消息(可指定接收用户) + * @param sender 发送者用户ID + * @param conversation 会话信息 + * @param payload 消息内容 + * @param toUsers 接收用户ID列表 + * @return 发送结果 + * @throws Exception 请求失败时抛出异常 + */ public IMResult sendMessage(String sender, Conversation conversation, MessagePayload payload, List toUsers) throws Exception { String path = APIPath.Robot_Message_Send; SendMessageData messageData = new SendMessageData(); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/SensitiveAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/SensitiveAdmin.java index a936aca5..116903c6 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/SensitiveAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/SensitiveAdmin.java @@ -7,7 +7,24 @@ import cn.wildfirechat.sdk.utilities.AdminHttpUtils; import java.util.List; +/** + * 敏感词管理类 + *

+ * 提供敏感词管理相关的功能,包括: + *

    + *
  • 添加敏感词
  • + *
  • 删除敏感词
  • + *
  • 查询敏感词列表
  • + *
+ *

+ */ public class SensitiveAdmin { + /** + * 添加敏感词 + * @param sensitives 敏感词列表 + * @return 添加结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult addSensitives(List sensitives) throws Exception { String path = APIPath.Sensitive_Add; InputOutputSensitiveWords input = new InputOutputSensitiveWords(); @@ -15,6 +32,12 @@ public class SensitiveAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 删除敏感词 + * @param sensitives 敏感词列表 + * @return 删除结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult removeSensitives(List sensitives) throws Exception { String path = APIPath.Sensitive_Del; InputOutputSensitiveWords input = new InputOutputSensitiveWords(); @@ -22,6 +45,11 @@ public class SensitiveAdmin { return AdminHttpUtils.httpJsonPost(path, input, Void.class); } + /** + * 获取敏感词列表 + * @return 敏感词列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getSensitives() throws Exception { String path = APIPath.Sensitive_Query; return AdminHttpUtils.httpJsonPost(path, null, InputOutputSensitiveWords.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java b/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java index 938b66f7..f24646d0 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/UserAdmin.java @@ -7,42 +7,108 @@ import cn.wildfirechat.sdk.utilities.AdminHttpUtils; import java.util.List; +/** + * 用户管理类 + *

+ * 提供用户管理相关的功能,包括: + *

    + *
  • 用户信息的获取、创建、更新、销毁
  • + *
  • 机器人管理
  • + *
  • 用户封禁状态管理
  • + *
  • 用户在线状态查询
  • + *
  • 用户设备管理
  • + *
  • 用户Token管理
  • + *
+ *

+ */ public class UserAdmin { + /** + * 根据用户名获取用户信息(不包含已删除用户) + * @param name 用户名 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByName(String name) throws Exception { return getUserByName(name, false); } + /** + * 根据用户名获取用户信息 + * @param name 用户名 + * @param includeDeleted 是否包含已删除的用户 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByName(String name, boolean includeDeleted) throws Exception { String path = APIPath.User_Get_Info; InputGetUserInfo getUserInfo = new InputGetUserInfo(null, name, null, includeDeleted); return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class); } + /** + * 根据用户ID获取用户信息(不包含已删除用户) + * @param userId 用户ID + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByUserId(String userId) throws Exception { return getUserByUserId(userId, false); } + /** + * 根据用户ID获取用户信息 + * @param userId 用户ID + * @param includeDeleted 是否包含已删除的用户 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByUserId(String userId, boolean includeDeleted) throws Exception { String path = APIPath.User_Get_Info; InputGetUserInfo getUserInfo = new InputGetUserInfo(userId, null, null, includeDeleted); return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class); } + /** + * 根据手机号获取用户信息(不包含已删除用户) + * @param mobile 手机号 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByMobile(String mobile) throws Exception { return getUserByMobile(mobile, false); } + /** + * 根据手机号获取用户信息 + * @param mobile 手机号 + * @param includeDeleted 是否包含已删除的用户 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByMobile(String mobile, boolean includeDeleted) throws Exception { String path = APIPath.User_Get_Info; InputGetUserInfo getUserInfo = new InputGetUserInfo(null, null, mobile, includeDeleted); return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class); } + /** + * 根据邮箱获取用户信息列表 + * @param email 邮箱地址 + * @return 用户信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserByEmail(String email) throws Exception { String path = APIPath.User_Get_Email_Info; return AdminHttpUtils.httpJsonPost(path, email, OutputUserInfoList.class); } + /** + * 获取所有用户列表(分页) + * @param count 每页数量 + * @param offset 偏移量 + * @return 用户列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getAllUsers(int count, int offset) throws Exception { String path = APIPath.User_Get_All; InputGetUserList input = new InputGetUserList(); @@ -51,6 +117,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputGetUserList.class); } + /** + * 批量获取用户信息 + * @param userIds 用户ID列表 + * @return 用户信息列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getBatchUsers(List userIds) throws Exception { String path = APIPath.User_Batch_Get_Infos; InputStringList input = new InputStringList(); @@ -58,11 +130,24 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputUserInfoList.class); } + /** + * 创建用户 + * @param user 用户信息 + * @return 创建结果,包含用户ID + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createUser(InputOutputUserInfo user) throws Exception { String path = APIPath.Create_User; return AdminHttpUtils.httpJsonPost(path, user, OutputCreateUser.class); } + /** + * 更新用户信息 + * @param user 用户信息 + * @param flag 更新标志位,指定要更新的字段(UpdateUserInfoMask) + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateUserInfo(InputOutputUserInfo user, int/*UpdateUserInfoMask*/ flag) throws Exception { String path = APIPath.Update_User; InputUpdateUserInfo updateUserInfo = new InputUpdateUserInfo(); @@ -71,13 +156,23 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, updateUserInfo, Void.class); } + /** + * 创建机器人 + * @param robot 机器人信息 + * @return 创建结果,包含机器人ID和Token + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createRobot(InputCreateRobot robot) throws Exception { String path = APIPath.Create_Robot; return AdminHttpUtils.httpJsonPost(path, robot, OutputCreateRobot.class); } - /* - 销毁机器人和销毁用户是同一个接口 + /** + * 销毁机器人 + *

销毁机器人和销毁用户使用同一个接口

+ * @param userId 机器人用户ID + * @return 销毁结果 + * @throws Exception 请求失败时抛出异常 */ public static IMResult destroyRobot(String userId) throws Exception { String path = APIPath.Destroy_User; @@ -86,6 +181,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, inputDestroyUser, Void.class); } + /** + * 获取机器人信息 + * @param robotId 机器人ID + * @return 机器人信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getRobotInfo(String robotId) throws Exception { String path = APIPath.User_Get_Robot_Info; InputRobotId getRobotInfo = new InputRobotId(); @@ -93,6 +194,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, getRobotInfo, OutputRobot.class); } + /** + * 获取用户的机器人列表 + * @param userId 用户ID + * @return 机器人ID列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserRobots(String userId) throws Exception { String path = APIPath.User_Get_User_Robots; InputUserId getRobotInfo = new InputUserId(); @@ -100,37 +207,78 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, getRobotInfo, OutputStringList.class); } + /** + * 获取用户的IM Token + * @param userId 用户ID + * @param clientId 客户端ID + * @param platform 平台类型 + * @return Token信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserToken(String userId, String clientId, int platform) throws Exception { String path = APIPath.User_Get_Token; InputGetToken getToken = new InputGetToken(userId, clientId, platform); return AdminHttpUtils.httpJsonPost(path, getToken, OutputGetIMTokenData.class); } + /** + * 更新用户封禁状态 + * @param userId 用户ID + * @param block 封禁状态:0-正常,1-封禁 + * @return 更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult updateUserBlockStatus(String userId, int block) throws Exception { String path = APIPath.User_Update_Block_Status; InputOutputUserBlockStatus blockStatus = new InputOutputUserBlockStatus(userId, block); return AdminHttpUtils.httpJsonPost(path, blockStatus, Void.class); } + /** + * 检查用户封禁状态 + * @param userId 用户ID + * @return 用户封禁状态 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult checkUserBlockStatus(String userId) throws Exception { String path = APIPath.User_Check_Block_Status; InputGetUserInfo getUserInfo = new InputGetUserInfo(userId, null, null); return AdminHttpUtils.httpJsonPost(path, getUserInfo, OutputUserStatus.class); } + /** + * 获取被封禁用户列表 + * @return 被封禁用户列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getBlockedList() throws Exception { String path = APIPath.User_Get_Blocked_List; return AdminHttpUtils.httpJsonPost(path, null, OutputUserBlockStatusList.class); } + /** + * 检查用户在线状态 + * @param userId 用户ID + * @return 用户在线状态 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult checkUserOnlineStatus(String userId) throws Exception { String path = APIPath.User_Get_Online_Status; InputGetUserInfo getUserInfo = new InputGetUserInfo(userId, null, null); return AdminHttpUtils.httpJsonPost(path, getUserInfo, OutputCheckUserOnline.class); } - /* 强迫用户下线,需要用户重新获取token才能进行连接。 - userId必须有效,clientId可以为空,当为空时,踢下线说有客户端,当不为空时仅踢掉对应客户端。 + /** + * 强迫用户下线 + *

+ * 强迫用户下线后,用户需要重新获取token才能进行连接。 + * userId必须有效,clientId可以为空。 + * 当clientId为空时,踢下线所有客户端;当不为空时仅踢掉对应客户端。 + *

+ * @param userId 用户ID + * @param clientId 客户端ID,为空时踢下线所有客户端 + * @return 下线结果 + * @throws Exception 请求失败时抛出异常 */ public static IMResult kickoffUserClient(String userId, String clientId) throws Exception { String path = APIPath.User_Kickoff_Client; @@ -138,6 +286,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, pojo, Void.class); } + /** + * 销毁用户 + * @param userId 用户ID + * @return 销毁结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult destroyUser(String userId) throws Exception { String path = APIPath.Destroy_User; InputDestroyUser inputDestroyUser = new InputDestroyUser(); @@ -145,13 +299,23 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, inputDestroyUser, Void.class); } - //仅专业版支持 + /** + * 创建或更新设备信息(仅专业版支持) + * @param device 设备信息 + * @return 创建或更新结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult createOrUpdateDevice(InputCreateDevice device) throws Exception { String path = APIPath.CreateOrUpdate_Device; return AdminHttpUtils.httpJsonPost(path, device, OutputCreateDevice.class); } - //仅专业版支持 + /** + * 获取设备信息(仅专业版支持) + * @param deviceId 设备ID + * @return 设备信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getDevice(String deviceId) throws Exception { String path = APIPath.Get_Device; InputDeviceId inputDeviceId = new InputDeviceId(); @@ -159,6 +323,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, inputDeviceId, OutputDevice.class); } + /** + * 获取用户的设备列表 + * @param userId 用户ID + * @return 用户设备列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserDevices(String userId) throws Exception { String path = APIPath.Get_User_Devices; InputUserId inputUserId = new InputUserId(); @@ -166,10 +336,23 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputDeviceList.class); } + /** + * 获取在线用户数量 + * @return 在线用户数量统计结果 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getOnlineUserCount() throws Exception { return AdminHttpUtils.httpJsonPost(APIPath.User_Online_Count, null, GetOnlineUserCountResult.class); } + /** + * 获取在线用户列表(分页) + * @param nodeId 节点ID,用于分布式部署场景 + * @param offset 偏移量 + * @param count 每页数量 + * @return 在线用户列表 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getOnlineUser(int nodeId, int offset, int count) throws Exception { GetOnlineUserRequest request = new GetOnlineUserRequest(); request.nodeId = nodeId; @@ -178,6 +361,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(APIPath.User_Online_List, request, GetOnlineUserResult.class); } + /** + * 通过应用授权码获取用户信息 + * @param authCode 应用授权码 + * @return 用户信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult applicationGetUserInfo(String authCode) throws Exception { String path = APIPath.User_Application_Get_UserInfo; InputApplicationGetUserInfo input = new InputApplicationGetUserInfo(); @@ -185,6 +374,12 @@ public class UserAdmin { return AdminHttpUtils.httpJsonPost(path, input, OutputApplicationUserInfo.class); } + /** + * 获取用户会话信息 + * @param userId 用户ID + * @return 用户会话信息 + * @throws Exception 请求失败时抛出异常 + */ public static IMResult getUserSession(String userId) throws Exception { InputUserId inputUserId = new InputUserId(userId); return AdminHttpUtils.httpJsonPost(APIPath.User_Session_List, inputUserId, GetUserSessionResult.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ArticlesMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ArticlesMessageContent.java index e70556f4..fdc4e8b7 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ArticlesMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ArticlesMessageContent.java @@ -16,6 +16,13 @@ import java.util.Base64; import java.util.List; +/** + * 图文消息内容类 + *

+ * 表示图文链接类型的消息内容,包含一个主文章和多个子文章。 + * 通常用于公众号文章分享等场景。 + *

+ */ public class ArticlesMessageContent extends MessageContent { public Article topArticle; public ArrayList
subArticles; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CallStartMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CallStartMessageContent.java index b8d5c607..c045be14 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CallStartMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CallStartMessageContent.java @@ -20,6 +20,13 @@ import java.util.List; * Created by heavyrain lee on 2017/12/6. */ +/** + * 音视频通话消息内容类 + *

+ * 表示音视频通话相关的消息内容,包含通话ID、参与者、连接时间等信息。 + * 支持一对一和多人音视频通话。 + *

+ */ public class CallStartMessageContent extends MessageContent { private String callId; // 多人视音频是有效,不包含自己,一对一忽略此参数 diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CardMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CardMessageContent.java index 032db8da..cacbbccc 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CardMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/CardMessageContent.java @@ -17,6 +17,12 @@ import org.json.simple.parser.ParseException; import java.util.Base64; +/** + * 名片消息内容类 + *

+ * 表示分享的名片消息,可以是用户名片、群组名片、聊天室名片或频道名片。 + *

+ */ public class CardMessageContent extends MessageContent { /** * 0,用户;1,群组;2,聊天室;3,频道 diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java index 2e84f7b7..02afbf92 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/DeleteMessageContent.java @@ -6,6 +6,12 @@ import cn.wildfirechat.proto.ProtoConstants; import java.nio.charset.StandardCharsets; import java.util.Base64; +/** + * 删除消息内容类 + *

+ * 表示消息删除通知,包含被删除消息的ID和操作者信息。 + *

+ */ public class DeleteMessageContent extends MessageContent { private long messageId; private String operatorId; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/FileMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/FileMessageContent.java index 58a46931..3ecb6230 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/FileMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/FileMessageContent.java @@ -8,6 +8,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 文件消息内容类 + *

+ * 表示文件类型的消息内容,继承自MediaMessageContent。 + * 包含文件名和文件大小信息。 + *

+ */ public class FileMessageContent extends MediaMessageContent { private String name; private int size; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ImageMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ImageMessageContent.java index 8026ff00..1342afa1 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ImageMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/ImageMessageContent.java @@ -10,6 +10,13 @@ import cn.wildfirechat.proto.ProtoConstants; import java.util.Base64; +/** + * 图片消息内容类 + *

+ * 表示图片类型的消息内容,继承自MediaMessageContent。 + * 包含图片缩略图数据。 + *

+ */ public class ImageMessageContent extends MediaMessageContent { private byte[] thumbnailBytes; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LinkMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LinkMessageContent.java index 316a1b8d..bf65f537 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LinkMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LinkMessageContent.java @@ -14,6 +14,12 @@ import org.json.simple.parser.ParseException; import java.util.Base64; +/** + * 链接消息内容类 + *

+ * 表示链接分享类型的消息内容,包含标题、描述、URL和缩略图。 + *

+ */ public class LinkMessageContent extends MessageContent { private String title; private String contentDigest; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LocationMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LocationMessageContent.java index e83f6038..36d0e374 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LocationMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/LocationMessageContent.java @@ -13,6 +13,12 @@ import org.json.simple.parser.ParseException; import java.util.Base64; +/** + * 位置消息内容类 + *

+ * 表示位置类型的消息内容,包含标题、缩略图、经纬度信息。 + *

+ */ public class LocationMessageContent extends MessageContent { private String title; public byte[] thumbnailByte; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MediaMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MediaMessageContent.java index 4d544df1..be2dcfa3 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MediaMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MediaMessageContent.java @@ -2,6 +2,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; +/** + * 媒体消息内容基类 + *

+ * 所有媒体类型消息(图片、语音、视频、文件等)的抽象基类。 + * 包含媒体文件的远程URL信息。 + *

+ */ abstract public class MediaMessageContent extends MessageContent { private String remoteMediaUrl; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContent.java index c115a125..0aaeef0e 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContent.java @@ -4,6 +4,13 @@ import cn.wildfirechat.pojos.MessagePayload; import java.util.List; +/** + * 消息内容基类 + *

+ * 所有消息内容类型的抽象基类,定义了消息内容的通用属性和方法。 + * 子类需要实现具体的消息类型编码和解码逻辑。 + *

+ */ public abstract class MessageContent { private int mentionedType; private List mentionedTargets; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java index b92957c4..0be307b6 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MessageContentFactory.java @@ -13,6 +13,13 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +/** + * 消息内容工厂类 + *

+ * 负责消息内容的编码和解码,维护消息类型到消息内容类的映射关系。 + * 支持内置消息类型和自定义消息类型的注册。 + *

+ */ public class MessageContentFactory { private static final Map> contentClassMap = new ConcurrentHashMap<>(); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MultiCallOngoingMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MultiCallOngoingMessageContent.java index 1b15e605..d85bfed4 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MultiCallOngoingMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/MultiCallOngoingMessageContent.java @@ -15,6 +15,13 @@ import java.util.ArrayList; import java.util.Base64; import java.util.List; +/** + * 多人通话进行中消息内容类 + *

+ * 表示多人音视频通话进行中的状态消息。 + * 包含通话ID、发起者、是否仅语音、参与者列表等信息。 + *

+ */ public class MultiCallOngoingMessageContent extends MessageContent { private String callId; private String initiator; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/NotDeliveredMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/NotDeliveredMessageContent.java index e3aa624d..dae08e8b 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/NotDeliveredMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/NotDeliveredMessageContent.java @@ -16,6 +16,13 @@ import java.util.ArrayList; import java.util.Base64; import java.util.List; +/** + * 消息未送达通知类 + *

+ * 表示消息未能成功送达的通知,包含失败原因和失败用户列表。 + * 用于跨域消息投递失败的场景。 + *

+ */ public class NotDeliveredMessageContent extends MessageContent { // 请求的类型,1 发送消息,2 撤回消息,3 删除消息 private int type; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/PTTSoundMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/PTTSoundMessageContent.java index e8e5caf5..c3bfd9a2 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/PTTSoundMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/PTTSoundMessageContent.java @@ -9,6 +9,13 @@ import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; import org.json.simple.JSONObject; +/** + * 对讲语音消息内容类 + *

+ * 表示对讲语音类型的消息内容,继承自SoundMessageContent。 + * 用于实时对讲场景。 + *

+ */ public class PTTSoundMessageContent extends SoundMessageContent { public PTTSoundMessageContent() { diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java index 710522ca..16725955 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RecallMessageContent.java @@ -10,6 +10,12 @@ import org.json.simple.parser.ParseException; import java.nio.charset.StandardCharsets; import java.util.Base64; +/** + * 撤回消息内容类 + *

+ * 表示消息撤回通知,包含被撤回消息的原始信息。 + *

+ */ public class RecallMessageContent extends MessageContent { private long messageId; private String operatorId; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RichNotificationMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RichNotificationMessageContent.java index 3240ed90..c3197bad 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RichNotificationMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/RichNotificationMessageContent.java @@ -9,6 +9,13 @@ import org.json.simple.JSONObject; import java.nio.charset.StandardCharsets; import java.util.Base64; +/** + * 富媒体通知消息内容类 + *

+ * 表示富媒体类型的消息内容,包含标题、描述、扩展信息等。 + * 支持自定义数据和扩展字段。 + *

+ */ public class RichNotificationMessageContent extends MessageContent { private String title; private String desc; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/SoundMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/SoundMessageContent.java index db4958fa..47a47285 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/SoundMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/SoundMessageContent.java @@ -4,6 +4,13 @@ import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; import org.json.simple.JSONObject; +/** + * 语音消息内容类 + *

+ * 表示语音类型的消息内容,继承自MediaMessageContent。 + * 包含语音时长信息。 + *

+ */ public class SoundMessageContent extends MediaMessageContent { private int duration; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StickerMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StickerMessageContent.java index 598c0a54..364a1362 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StickerMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StickerMessageContent.java @@ -12,6 +12,13 @@ import org.json.simple.parser.ParseException; import java.util.Base64; +/** + * 动态表情消息内容类 + *

+ * 表示动态表情(贴纸)类型的消息内容,继承自MediaMessageContent。 + * 包含表情图片的宽高信息。 + *

+ */ public class StickerMessageContent extends MediaMessageContent { public int width; public int height; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratedMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratedMessageContent.java index 16e8a09a..8b2e6319 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratedMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratedMessageContent.java @@ -3,6 +3,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 流式文本已生成消息内容类 + *

+ * 表示AI流式文本生成的结果消息。 + * 包含生成的完整文本内容和流ID。 + *

+ */ public class StreamTextGeneratedMessageContent extends MessageContent { private String text; private String streamId; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratingMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratingMessageContent.java index d0cd8af9..1a7b5d35 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratingMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/StreamTextGeneratingMessageContent.java @@ -3,6 +3,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 流式文本生成中消息内容类 + *

+ * 表示AI流式文本正在生成的状态消息。 + * 包含生成的文本内容和流ID。 + *

+ */ public class StreamTextGeneratingMessageContent extends MessageContent { private String text; private String streamId; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TextMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TextMessageContent.java index b0f5ffdd..4b1650f7 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TextMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TextMessageContent.java @@ -11,6 +11,12 @@ import org.json.simple.parser.ParseException; import java.nio.charset.StandardCharsets; import java.util.Base64; +/** + * 文本消息内容类 + *

+ * 表示文本类型的消息内容,支持纯文本和引用回复功能。 + *

+ */ public class TextMessageContent extends MessageContent { private String text; private QuoteInfo quoteInfo; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TipNotificationMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TipNotificationMessageContent.java index eff819dd..41d96eec 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TipNotificationMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TipNotificationMessageContent.java @@ -8,6 +8,12 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 提示通知消息内容类 + *

+ * 表示提示类型的消息内容,用于显示各种提示信息(如"对方正在输入"等)。 + *

+ */ public class TipNotificationMessageContent extends MessageContent { public String tip; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TypingMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TypingMessageContent.java index 92fb55b4..634a4ed2 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TypingMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/TypingMessageContent.java @@ -7,6 +7,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 正在输入消息内容类 + *

+ * 表示正在输入的状态消息,用于显示对方正在输入的提示。 + * 支持多种输入类型:文本、语音、视频、位置、文件等。 + *

+ */ public class TypingMessageContent extends MessageContent { public static final int TYPING_TEXT = 0; public static final int TYPING_VOICE = 1; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/UnknownMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/UnknownMessageContent.java index c7dc9cba..40017adb 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/UnknownMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/UnknownMessageContent.java @@ -3,6 +3,13 @@ package cn.wildfirechat.sdk.messagecontent; import cn.wildfirechat.pojos.MessagePayload; import cn.wildfirechat.proto.ProtoConstants; +/** + * 未知消息内容类 + *

+ * 表示未知类型的消息内容,用于处理无法识别的消息类型。 + * 保存原始的消息负载以便后续处理。 + *

+ */ public class UnknownMessageContent extends MessageContent { private MessagePayload orignalPayload; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/VideoMessageContent.java b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/VideoMessageContent.java index ac72ff3a..4a44609d 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/VideoMessageContent.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/messagecontent/VideoMessageContent.java @@ -14,13 +14,19 @@ import java.util.Base64; /** - * Created by heavyrain lee on 2017/12/6. + * 创建者 heavyrain lee * * @refactor dhl * 添加小视频的宽高,时长 */ - +/** + * 视频消息内容类 + *

+ * 表示视频类型的消息内容,继承自MediaMessageContent。 + * 包含视频缩略图和时长信息。 + *

+ */ public class VideoMessageContent extends MediaMessageContent { private byte[] thumbnailBytes; private long duration ; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java index 79401173..8104155d 100755 --- a/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/IMResult.java @@ -2,6 +2,14 @@ package cn.wildfirechat.sdk.model; import cn.wildfirechat.common.ErrorCode; +/** + * IM结果类 + *

+ * 泛型类,用于封装所有API调用的返回结果。 + * 包含错误码、错误消息和返回数据。 + *

+ * @param 返回数据的类型 + */ public class IMResult { public int code; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/Message.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/Message.java index fa3d88a5..22fe7900 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/model/Message.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/Message.java @@ -5,6 +5,12 @@ import cn.wildfirechat.sdk.messagecontent.MessageContent; import java.util.List; +/** + * 消息类 + *

+ * 表示一条完整的消息,包含会话信息、消息内容、发送者、时间等。 + *

+ */ public class Message { public Conversation conversation; public MessageContent content; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/model/QuoteInfo.java b/sdk/src/main/java/cn/wildfirechat/sdk/model/QuoteInfo.java index 8b306a86..8c44f6a4 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/model/QuoteInfo.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/model/QuoteInfo.java @@ -6,6 +6,13 @@ package cn.wildfirechat.sdk.model; import org.json.simple.JSONObject; +/** + * 引用消息信息类 + *

+ * 封装被引用消息的信息,包括消息UID、发送者信息、消息摘要等。 + * 用于回复消息时引用原消息内容。 + *

+ */ public class QuoteInfo { private long messageUid; private String userId; diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java index bf052082..e844c4d0 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/AdminHttpUtils.java @@ -21,6 +21,13 @@ import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.concurrent.TimeUnit; +/** + * 管理员HTTP工具类 + *

+ * 提供管理员API调用的HTTP工具方法,包括初始化、请求签名、HTTP请求等。 + * 继承自HttpUtils,专门用于管理员接口的调用。 + *

+ */ public class AdminHttpUtils extends HttpUtils { // ======================== 常量定义(消除硬编码)======================== private static final Logger LOG = LoggerFactory.getLogger(AdminHttpUtils.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ChannelHttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ChannelHttpUtils.java index 44060977..ac3271d6 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ChannelHttpUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ChannelHttpUtils.java @@ -30,6 +30,13 @@ import java.nio.charset.Charset; import java.util.concurrent.TimeUnit; +/** + * 频道HTTP工具类 + *

+ * 提供频道API调用的HTTP工具方法,包括初始化、请求签名、HTTP请求等。 + * 继承自HttpUtils并实现Closeable接口,专门用于频道接口的调用。 + *

+ */ public class ChannelHttpUtils extends HttpUtils implements Closeable { private static final Logger LOG = LoggerFactory.getLogger(ChannelHttpUtils.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ClassUtil.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ClassUtil.java index 8485851b..3e737d26 100755 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ClassUtil.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/ClassUtil.java @@ -18,6 +18,13 @@ import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; +/** + * 类工具类 + *

+ * 提供类加载和扫描相关的工具方法,用于获取指定包下的所有类。 + * 支持从文件系统和JAR包中加载类。 + *

+ */ public class ClassUtil { /** diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/HttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/HttpUtils.java index 259d5129..d9ae2e7e 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/HttpUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/HttpUtils.java @@ -27,6 +27,18 @@ import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.concurrent.TimeUnit; +/** + * HTTP工具类 + *

+ * 提供HTTP请求相关的工具方法,包括: + *

    + *
  • HTTP POST请求
  • + *
  • HTTP GET请求
  • + *
  • 响应处理
  • + *
  • 日志记录
  • + *
+ *

+ */ public class HttpUtils extends JsonUtils { // ======================== 常量定义(消除硬编码)======================== private static final Logger LOG = LoggerFactory.getLogger(HttpUtils.class); diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/JsonUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/JsonUtils.java index f7f71ae2..494de433 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/JsonUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/JsonUtils.java @@ -6,6 +6,12 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import ikidou.reflect.TypeBuilder; +/** + * JSON工具类 + *

+ * 提供JSON序列化和反序列化的工具方法。 + *

+ */ public class JsonUtils { public static final Gson gson = new GsonBuilder().disableHtmlEscaping().create(); public static IMResult fromJsonObject(String content, Class clazz) { diff --git a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/RobotHttpUtils.java b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/RobotHttpUtils.java index 8a142782..f554761a 100644 --- a/sdk/src/main/java/cn/wildfirechat/sdk/utilities/RobotHttpUtils.java +++ b/sdk/src/main/java/cn/wildfirechat/sdk/utilities/RobotHttpUtils.java @@ -31,6 +31,13 @@ import java.nio.charset.Charset; import java.util.concurrent.TimeUnit; +/** + * 机器人HTTP工具类 + *

+ * 提供机器人API调用的HTTP工具方法,包括初始化、请求签名、HTTP请求等。 + * 继承自HttpUtils并实现Closeable接口,专门用于机器人接口的调用。 + *

+ */ public class RobotHttpUtils extends HttpUtils implements Closeable { private static final Logger LOG = LoggerFactory.getLogger(RobotHttpUtils.class); public static final Gson gson = new GsonBuilder().disableHtmlEscaping().create();