Unverified Commit 1f9caca2 authored by Yang Libin's avatar Yang Libin Committed by GitHub

feat: support client configuration (#47)

parent 50dd9de3
......@@ -22,7 +22,7 @@ Add the Maven dependency:
<dependency>
<groupId>io.github.doocs</groupId>
<artifactId>im-server-sdk-java</artifactId>
<version>0.2.2</version>
<version>0.2.3</version>
</dependency>
```
......
......@@ -6,7 +6,7 @@
<groupId>io.github.doocs</groupId>
<artifactId>im-server-sdk-java</artifactId>
<version>0.2.2</version>
<version>0.2.3</version>
<packaging>jar</packaging>
<name>qcloud-im-server-sdk-java</name>
......
package io.github.doocs.im;
import io.github.doocs.im.util.VersionInfoUtil;
/**
* @author bingo
* @since 2021/11/2 14:17
*/
public class ClientConfiguration {
private static final String DEFAULT_USER_AGENT = VersionInfoUtil.getDefaultUserAgent();
private static final int DEFAULT_MAX_RETRIES = 3;
/**
* default value, unit: milliseconds
*/
private static final long DEFAULT_CONNECT_TIMEOUT = 3000L;
private static final long DEFAULT_READ_TIMEOUT = 3000L;
private static final long DEFAULT_WRITE_TIMEOUT = 3000L;
private static final long DEFAULT_EXPIRE_TIME = 24 * 60 * 60L;
private int maxRetries = DEFAULT_MAX_RETRIES;
private long connectTimeout = DEFAULT_CONNECT_TIMEOUT;
private long readTimeout = DEFAULT_READ_TIMEOUT;
private long writeTimeout = DEFAULT_WRITE_TIMEOUT;
private long expireTime = DEFAULT_EXPIRE_TIME;
private String userAgent = DEFAULT_USER_AGENT;
public ClientConfiguration() {
}
public ClientConfiguration(int maxRetries, long connectTimeout, long readTimeout,
long writeTimeout, long expireTime, String userAgent) {
this.maxRetries = maxRetries;
this.connectTimeout = connectTimeout;
this.readTimeout = readTimeout;
this.writeTimeout = writeTimeout;
this.expireTime = expireTime;
this.userAgent = userAgent;
}
public int getMaxRetries() {
return maxRetries;
}
public void setMaxRetries(int maxRetries) {
this.maxRetries = maxRetries;
}
public long getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(long connectTimeout) {
this.connectTimeout = connectTimeout;
}
public long getReadTimeout() {
return readTimeout;
}
public void setReadTimeout(long readTimeout) {
this.readTimeout = readTimeout;
}
public long getWriteTimeout() {
return writeTimeout;
}
public void setWriteTimeout(long writeTimeout) {
this.writeTimeout = writeTimeout;
}
public long getExpireTime() {
return expireTime;
}
public void setExpireTime(long expireTime) {
this.expireTime = expireTime;
}
public String getUserAgent() {
return userAgent;
}
public void setUserAgent(String userAgent) {
this.userAgent = userAgent;
}
}
......@@ -3,7 +3,6 @@ package io.github.doocs.im;
import io.github.doocs.im.core.*;
import io.github.doocs.im.util.SigUtil;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadLocalRandom;
......@@ -14,13 +13,10 @@ import java.util.concurrent.ThreadLocalRandom;
public class ImClient {
private final long sdkAppId;
private final String userId;
private final String key;
private String userSig;
private long userSigExpireTs;
private final String userSig;
private final ClientConfiguration config;
private static final String VERSION = "v4";
private static final long EXPIRE_TIME = 24 * 60 * 60L;
private static final ConcurrentHashMap<String, ImClient> IM_CLIENT = new ConcurrentHashMap<>();
private static final String FORMAT_URL = "https://console.tim.qq.com/%s/%s/%s?sdkappid=%d&identifier=%s&usersig=%s&random=%d&contenttype=json";
public final Account account;
......@@ -32,20 +28,25 @@ public class ImClient {
public final Operation operation;
public final RecentContact recentContact;
private static final ClientConfiguration DEFAULT_CONFIG = new ClientConfiguration();
public static ImClient getInstance(long sdkAppId, String userId, String key) {
String identify = sdkAppId + "_" + userId;
if (!IM_CLIENT.containsKey(identify)) {
IM_CLIENT.putIfAbsent(identify, new ImClient(sdkAppId, userId, key));
}
return IM_CLIENT.get(identify);
return new ImClient(sdkAppId, userId, key);
}
public static ImClient getInstance(long sdkAppId, String userId, String key, ClientConfiguration config) {
return new ImClient(sdkAppId, userId, key, config);
}
public ImClient(long sdkAppId, String userId, String key) {
this(sdkAppId, userId, key, DEFAULT_CONFIG);
}
public ImClient(long sdkAppId, String userId, String key, ClientConfiguration config) {
this.sdkAppId = sdkAppId;
this.userId = userId;
this.key = key;
this.userSig = SigUtil.genUserSig(sdkAppId, key, userId, EXPIRE_TIME);
this.userSigExpireTs = System.currentTimeMillis() / 1000 + EXPIRE_TIME - 100;
this.config = config;
this.userSig = SigUtil.genUserSig(sdkAppId, key, userId, config.getExpireTime());
account = new Account(this);
message = new Message(this);
......@@ -57,24 +58,13 @@ public class ImClient {
recentContact = new RecentContact(this);
}
public ClientConfiguration getConfig() {
return config;
}
public String getUrl(String serviceName, String command) {
// 随机生成32位无符号整数
long random = ThreadLocalRandom.current().nextLong(0, 0x100000000L);
String sig = getUserSig();
return String.format(FORMAT_URL, VERSION, serviceName, command,
sdkAppId, userId, sig, random);
}
private String getUserSig() {
long currentTs = System.currentTimeMillis() / 1000;
if (currentTs >= userSigExpireTs) {
synchronized (this) {
if (currentTs >= userSigExpireTs) {
userSig = SigUtil.genUserSig(sdkAppId, key, userId, EXPIRE_TIME);
userSigExpireTs = currentTs + EXPIRE_TIME - 100;
}
}
}
return userSig;
sdkAppId, userId, userSig, random);
}
}
......@@ -30,31 +30,31 @@ public class Account {
public AccountImportResult accountImport(AccountImportRequest accountImportRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_IMPORT_COMMAND);
return HttpUtil.post(url, accountImportRequest, AccountImportResult.class);
return HttpUtil.post(url, accountImportRequest, AccountImportResult.class, imClient.getConfig());
}
public MultiAccountImportResult multiAccountImport(MultiAccountImportRequest multiAccountImportRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, MULTI_ACCOUNT_IMPORT_COMMAND);
return HttpUtil.post(url, multiAccountImportRequest, MultiAccountImportResult.class);
return HttpUtil.post(url, multiAccountImportRequest, MultiAccountImportResult.class, imClient.getConfig());
}
public AccountDeleteResult accountDelete(AccountDeleteRequest accountDeleteRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_DELETE_COMMAND);
return HttpUtil.post(url, accountDeleteRequest, AccountDeleteResult.class);
return HttpUtil.post(url, accountDeleteRequest, AccountDeleteResult.class, imClient.getConfig());
}
public AccountCheckResult accountCheck(AccountCheckRequest accountCheckRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_CHECK_COMMAND);
return HttpUtil.post(url, accountCheckRequest, AccountCheckResult.class);
return HttpUtil.post(url, accountCheckRequest, AccountCheckResult.class, imClient.getConfig());
}
public KickResult kick(KickRequest kickRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, KICK_COMMAND);
return HttpUtil.post(url, kickRequest, KickResult.class);
return HttpUtil.post(url, kickRequest, KickResult.class, imClient.getConfig());
}
public QueryOnlineStatusResult queryOnlineStatus(QueryOnlineStatusRequest queryOnlineStatusRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OPEN_IM, QUERY_ONLINE_STATUS_COMMAND);
return HttpUtil.post(url, queryOnlineStatusRequest, QueryOnlineStatusResult.class);
return HttpUtil.post(url, queryOnlineStatusRequest, QueryOnlineStatusResult.class, imClient.getConfig());
}
}
......@@ -47,121 +47,121 @@ public class Group {
public GetAppidGroupListResult getAppIdGroupList(GetAppidGroupListRequest getAppidGroupListRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_APPID_GROUP_LIST_COMMAND);
return HttpUtil.post(url, getAppidGroupListRequest, GetAppidGroupListResult.class);
return HttpUtil.post(url, getAppidGroupListRequest, GetAppidGroupListResult.class, imClient.getConfig());
}
public CreateGroupResult createGroup(CreateGroupRequest createGroupRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, CREATE_GROUP_COMMAND);
return HttpUtil.post(url, createGroupRequest, CreateGroupResult.class);
return HttpUtil.post(url, createGroupRequest, CreateGroupResult.class, imClient.getConfig());
}
public GetGroupInfoResult getGroupInfo(GetGroupInfoRequest getGroupInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_GROUP_INFO_COMMAND);
return HttpUtil.post(url, getGroupInfoRequest, GetGroupInfoResult.class);
return HttpUtil.post(url, getGroupInfoRequest, GetGroupInfoResult.class, imClient.getConfig());
}
public GetGroupMemberInfoResult getGroupMemberInfo(GetGroupMemberInfoRequest getGroupMemberInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_GROUP_MEMBER_INFO_COMMAND);
return HttpUtil.post(url, getGroupMemberInfoRequest, GetGroupMemberInfoResult.class);
return HttpUtil.post(url, getGroupMemberInfoRequest, GetGroupMemberInfoResult.class, imClient.getConfig());
}
public ModifyGroupBaseInfoResult modifyGroupBaseInfo(ModifyGroupBaseInfoRequest modifyGroupBaseInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, MODIFY_GROUP_BASE_INFO_COMMAND);
return HttpUtil.post(url, modifyGroupBaseInfoRequest, ModifyGroupBaseInfoResult.class);
return HttpUtil.post(url, modifyGroupBaseInfoRequest, ModifyGroupBaseInfoResult.class, imClient.getConfig());
}
public AddGroupMemberResult addGroupMember(AddGroupMemberRequest addGroupMemberRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ADD_GROUP_MEMBER_COMMAND);
return HttpUtil.post(url, addGroupMemberRequest, AddGroupMemberResult.class);
return HttpUtil.post(url, addGroupMemberRequest, AddGroupMemberResult.class, imClient.getConfig());
}
public DeleteGroupMemberResult deleteGroupMember(DeleteGroupMemberRequest deleteGroupMemberRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, DELETE_GROUP_MEMBER_COMMAND);
return HttpUtil.post(url, deleteGroupMemberRequest, DeleteGroupMemberResult.class);
return HttpUtil.post(url, deleteGroupMemberRequest, DeleteGroupMemberResult.class, imClient.getConfig());
}
public ModifyGroupMemberInfoResult modifyGroupMemberInfo(ModifyGroupMemberInfoRequest modifyGroupMemberInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, MODIFY_GROUP_MEMBER_INFO_COMMAND);
return HttpUtil.post(url, modifyGroupMemberInfoRequest, ModifyGroupMemberInfoResult.class);
return HttpUtil.post(url, modifyGroupMemberInfoRequest, ModifyGroupMemberInfoResult.class, imClient.getConfig());
}
public DestroyGroupResult destroyGroup(DestroyGroupRequest destroyGroupRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, DESTROY_GROUP_COMMAND);
return HttpUtil.post(url, destroyGroupRequest, DestroyGroupResult.class);
return HttpUtil.post(url, destroyGroupRequest, DestroyGroupResult.class, imClient.getConfig());
}
public GetJoinGroupListResult getJoinGroupList(GetJoinedGroupListRequest getJoinedGroupListRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_JOINED_GROUP_LIST_COMMAND);
return HttpUtil.post(url, getJoinedGroupListRequest, GetJoinGroupListResult.class);
return HttpUtil.post(url, getJoinedGroupListRequest, GetJoinGroupListResult.class, imClient.getConfig());
}
public GetRoleInGroupResult getRoleInGroup(GetRoleInGroupRequest getRoleInGroupRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_ROLE_IN_GROUP_COMMAND);
return HttpUtil.post(url, getRoleInGroupRequest, GetRoleInGroupResult.class);
return HttpUtil.post(url, getRoleInGroupRequest, GetRoleInGroupResult.class, imClient.getConfig());
}
public ForbidSendMsgResult forbidSendMsg(ForbidSendMsgRequest forbidSendMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FORBID_SEND_MSG_COMMAND);
return HttpUtil.post(url, forbidSendMsgRequest, ForbidSendMsgResult.class);
return HttpUtil.post(url, forbidSendMsgRequest, ForbidSendMsgResult.class, imClient.getConfig());
}
public GetGroupShuttedUinResult getGroupShuttedUin(GetGroupShuttedUinRequest getGroupShuttedUinRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_GROUP_SHUTTED_UIN_COMMAND);
return HttpUtil.post(url, getGroupShuttedUinRequest, GetGroupShuttedUinResult.class);
return HttpUtil.post(url, getGroupShuttedUinRequest, GetGroupShuttedUinResult.class, imClient.getConfig());
}
public SendGroupMsgResult sendGroupMsg(SendGroupMsgRequest sendGroupMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_GROUP_MSG_COMMAND);
return HttpUtil.post(url, sendGroupMsgRequest, SendGroupMsgResult.class);
return HttpUtil.post(url, sendGroupMsgRequest, SendGroupMsgResult.class, imClient.getConfig());
}
public SendGroupSystemNotificationResult sendGroupSystemNotification(SendGroupSystemNotificationRequest sendGroupSystemNotificationRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_GROUP_SYSTEM_NOTIFICATION_COMMAND);
return HttpUtil.post(url, sendGroupSystemNotificationRequest, SendGroupSystemNotificationResult.class);
return HttpUtil.post(url, sendGroupSystemNotificationRequest, SendGroupSystemNotificationResult.class, imClient.getConfig());
}
public ChangeGroupOwnerResult changeGroupOwner(ChangeGroupOwnerRequest changeGroupOwnerRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, CHANGE_GROUP_OWNER_COMMAND);
return HttpUtil.post(url, changeGroupOwnerRequest, ChangeGroupOwnerResult.class);
return HttpUtil.post(url, changeGroupOwnerRequest, ChangeGroupOwnerResult.class, imClient.getConfig());
}
public GroupMsgRecallResult groupMsgRecall(GroupMsgRecallRequest groupMsgRecallRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GROUP_MSG_RECALL_COMMAND);
return HttpUtil.post(url, groupMsgRecallRequest, GroupMsgRecallResult.class);
return HttpUtil.post(url, groupMsgRecallRequest, GroupMsgRecallResult.class, imClient.getConfig());
}
public ImportGroupResult importGroup(ImportGroupRequest importGroupRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IMPORT_GROUP_COMMAND);
return HttpUtil.post(url, importGroupRequest, ImportGroupResult.class);
return HttpUtil.post(url, importGroupRequest, ImportGroupResult.class, imClient.getConfig());
}
public ImportGroupMsgResult importGroupMsg(ImportGroupMsgRequest importGroupMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IMPORT_GROUP_MSG_COMMAND);
return HttpUtil.post(url, importGroupMsgRequest, ImportGroupMsgResult.class);
return HttpUtil.post(url, importGroupMsgRequest, ImportGroupMsgResult.class, imClient.getConfig());
}
public ImportGroupMemberResult importGroupMember(ImportGroupMemberRequest importGroupMemberRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IMPORT_GROUP_MEMBER_COMMAND);
return HttpUtil.post(url, importGroupMemberRequest, ImportGroupMemberResult.class);
return HttpUtil.post(url, importGroupMemberRequest, ImportGroupMemberResult.class, imClient.getConfig());
}
public SetUnreadMsgNumResult setUnreadMsgNum(SetUnreadMsgNumRequest setUnreadMsgNumRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SET_UNREAD_MSG_NUM_COMMAND);
return HttpUtil.post(url, setUnreadMsgNumRequest, SetUnreadMsgNumResult.class);
return HttpUtil.post(url, setUnreadMsgNumRequest, SetUnreadMsgNumResult.class, imClient.getConfig());
}
public DeleteGroupMsgBySenderResult deleteGroupMsgBySender(DeleteGroupMsgBySenderRequest deleteGroupMsgBySenderRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, DELETE_GROUP_MSG_BY_SENDER_COMMAND);
return HttpUtil.post(url, deleteGroupMsgBySenderRequest, DeleteGroupMsgBySenderResult.class);
return HttpUtil.post(url, deleteGroupMsgBySenderRequest, DeleteGroupMsgBySenderResult.class, imClient.getConfig());
}
public GroupMsgGetSimpleResult groupMsgGetSimple(GroupMsgGetSimpleRequest groupMsgGetSimpleRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GROUP_MSG_GET_SIMPLE_COMMAND);
return HttpUtil.post(url, groupMsgGetSimpleRequest, GroupMsgGetSimpleResult.class);
return HttpUtil.post(url, groupMsgGetSimpleRequest, GroupMsgGetSimpleResult.class, imClient.getConfig());
}
public GetOnlineMemberNumResult getOnlineMemberNum(GetOnlineMemberNumRequest getOnlineMemberNumRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_ONLINE_MEMBER_NUM_COMMAND);
return HttpUtil.post(url, getOnlineMemberNumRequest, GetOnlineMemberNumResult.class);
return HttpUtil.post(url, getOnlineMemberNumRequest, GetOnlineMemberNumResult.class, imClient.getConfig());
}
}
......@@ -33,51 +33,51 @@ public class Member {
public ImPushResult imPush(ImPushRequest imPushRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_PUSH_COMMAND);
return HttpUtil.post(url, imPushRequest, ImPushResult.class);
return HttpUtil.post(url, imPushRequest, ImPushResult.class, imClient.getConfig());
}
public ImSetAttrNameResult imSetAttrName(ImSetAttrNameRequest imSetAttrNameRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_SET_ATTR_NAME_COMMAND);
return HttpUtil.post(url, imSetAttrNameRequest, ImSetAttrNameResult.class);
return HttpUtil.post(url, imSetAttrNameRequest, ImSetAttrNameResult.class, imClient.getConfig());
}
public ImGetAttrNameResult imGetAttrName(ImGetAttrNameRequest imGetAttrNameRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_GET_ATTR_NAME_COMMAND);
return HttpUtil.post(url, imGetAttrNameRequest, ImGetAttrNameResult.class);
return HttpUtil.post(url, imGetAttrNameRequest, ImGetAttrNameResult.class, imClient.getConfig());
}
public ImGetAttrResult imGetAttr(ImGetAttrRequest imGetAttrRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_GET_ATTR_COMMAND);
return HttpUtil.post(url, imGetAttrRequest, ImGetAttrResult.class);
return HttpUtil.post(url, imGetAttrRequest, ImGetAttrResult.class, imClient.getConfig());
}
public ImSetAttrResult imSetAttr(ImSetAttrRequest imSetAttrRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_SET_ATTR_COMMAND);
return HttpUtil.post(url, imSetAttrRequest, ImSetAttrResult.class);
return HttpUtil.post(url, imSetAttrRequest, ImSetAttrResult.class, imClient.getConfig());
}
public ImRemoveAttrResult imRemoveAttr(ImRemoveAttrRequest imRemoveAttrRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_REMOVE_ATTR_COMMAND);
return HttpUtil.post(url, imRemoveAttrRequest, ImRemoveAttrResult.class);
return HttpUtil.post(url, imRemoveAttrRequest, ImRemoveAttrResult.class, imClient.getConfig());
}
public ImGetTagResult imGetTag(ImGetTagRequest imGetTagRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_GET_TAG_COMMAND);
return HttpUtil.post(url, imGetTagRequest, ImGetTagResult.class);
return HttpUtil.post(url, imGetTagRequest, ImGetTagResult.class, imClient.getConfig());
}
public ImAddTagResult imAddTag(ImAddTagRequest imAddTagRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_ADD_TAG_COMMAND);
return HttpUtil.post(url, imAddTagRequest, ImAddTagResult.class);
return HttpUtil.post(url, imAddTagRequest, ImAddTagResult.class, imClient.getConfig());
}
public ImRemoveTagResult imRemoveTag(ImRemoveTagRequest imRemoveTagRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_REMOVE_TAG_COMMAND);
return HttpUtil.post(url, imRemoveTagRequest, ImRemoveTagResult.class);
return HttpUtil.post(url, imRemoveTagRequest, ImRemoveTagResult.class, imClient.getConfig());
}
public ImRemoveAllTagsResult imRemoveAllTags(ImRemoveAllTagsRequest imRemoveAllTagsRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IM_REMOVE_ALL_TAGS_COMMAND);
return HttpUtil.post(url, imRemoveAllTagsRequest, ImRemoveAllTagsResult.class);
return HttpUtil.post(url, imRemoveAllTagsRequest, ImRemoveAllTagsResult.class, imClient.getConfig());
}
}
......@@ -30,36 +30,36 @@ public class Message {
public SendMsgResult sendMsg(SendMsgRequest sendMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_MSG_COMMAND);
return HttpUtil.post(url, sendMsgRequest, SendMsgResult.class);
return HttpUtil.post(url, sendMsgRequest, SendMsgResult.class, imClient.getConfig());
}
public BatchSendMsgResult batchSendMsg(BatchSendMsgRequest batchSendMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, BATCH_SEND_MSG_COMMAND);
return HttpUtil.post(url, batchSendMsgRequest, BatchSendMsgResult.class);
return HttpUtil.post(url, batchSendMsgRequest, BatchSendMsgResult.class, imClient.getConfig());
}
public ImportMsgResult importMsg(ImportMsgRequest importMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IMPORT_MSG_COMMAND);
return HttpUtil.post(url, importMsgRequest, ImportMsgResult.class);
return HttpUtil.post(url, importMsgRequest, ImportMsgResult.class, imClient.getConfig());
}
public AdminRoamMsgResult getRoamMsg(AdminGetRoamMsgRequest adminGetRoamMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ADMIN_GET_ROAM_MSG_COMMAND);
return HttpUtil.post(url, adminGetRoamMsgRequest, AdminRoamMsgResult.class);
return HttpUtil.post(url, adminGetRoamMsgRequest, AdminRoamMsgResult.class, imClient.getConfig());
}
public AdminMsgWithdrawResult msgWithdraw(AdminMsgWithdrawRequest adminMsgWithdrawRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ADMIN_MSG_WITHDRAW_COMMAND);
return HttpUtil.post(url, adminMsgWithdrawRequest, AdminMsgWithdrawResult.class);
return HttpUtil.post(url, adminMsgWithdrawRequest, AdminMsgWithdrawResult.class, imClient.getConfig());
}
public AdminSetMsgReadResult setMsgRead(AdminSetMsgReadRequest adminSetMsgReadRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ADMIN_SET_MSG_READ_COMMAND);
return HttpUtil.post(url, adminSetMsgReadRequest, AdminSetMsgReadResult.class);
return HttpUtil.post(url, adminSetMsgReadRequest, AdminSetMsgReadResult.class, imClient.getConfig());
}
public C2cUnreadMsgNumResult getC2cUnreadMsgNum(GetC2cUnreadMsgRequest getC2cUnreadMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_C2C_UNREAD_MSG_NUM_COMMAND);
return HttpUtil.post(url, getC2cUnreadMsgRequest, C2cUnreadMsgNumResult.class);
return HttpUtil.post(url, getC2cUnreadMsgRequest, C2cUnreadMsgNumResult.class, imClient.getConfig());
}
}
......@@ -31,26 +31,26 @@ public class Operation {
public SetNoSpeakingResult setNoSpeaking(SetNoSpeakingRequest setNoSpeakingRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OPEN_CONFIG, SET_NO_SPEAKING_COMMAND);
return HttpUtil.post(url, setNoSpeakingRequest, SetNoSpeakingResult.class);
return HttpUtil.post(url, setNoSpeakingRequest, SetNoSpeakingResult.class, imClient.getConfig());
}
public GetNoSpeakingResult getNoSpeaking(GetNoSpeakingRequest getNoSpeakingRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OPEN_CONFIG, GET_NO_SPEAKING_COMMAND);
return HttpUtil.post(url, getNoSpeakingRequest, GetNoSpeakingResult.class);
return HttpUtil.post(url, getNoSpeakingRequest, GetNoSpeakingResult.class, imClient.getConfig());
}
public GetAppInfoResult getAppInfo(GetAppInfoRequest getAppInfoRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OPEN_CONFIG, GET_APP_INFO_COMMAND);
return HttpUtil.post(url, getAppInfoRequest, GetAppInfoResult.class);
return HttpUtil.post(url, getAppInfoRequest, GetAppInfoResult.class, imClient.getConfig());
}
public GetHistoryResult getHistory(GetHistoryRequest getHistoryRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_OPEN_MSG, GET_HISTORY_COMMAND);
return HttpUtil.post(url, getHistoryRequest, GetHistoryResult.class);
return HttpUtil.post(url, getHistoryRequest, GetHistoryResult.class, imClient.getConfig());
}
public GetIpListResult getIpList(GetIpListRequest getIpListRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME_CONFIG, GET_IP_LIST_COMMAND);
return HttpUtil.post(url, getIpListRequest, GetIpListResult.class);
return HttpUtil.post(url, getIpListRequest, GetIpListResult.class, imClient.getConfig());
}
}
......@@ -27,11 +27,11 @@ public class Profile {
public PortraitSetResult portraitSet(PortraitSetRequest portraitSetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, PORTRAIT_SET_COMMAND);
return HttpUtil.post(url, portraitSetRequest, PortraitSetResult.class);
return HttpUtil.post(url, portraitSetRequest, PortraitSetResult.class, imClient.getConfig());
}
public PortraitGetResult portraitGet(PortraitGetRequest portraitGetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, PORTRAIT_GET_COMMAND);
return HttpUtil.post(url, portraitGetRequest, PortraitGetResult.class);
return HttpUtil.post(url, portraitGetRequest, PortraitGetResult.class, imClient.getConfig());
}
}
......@@ -27,11 +27,11 @@ public class RecentContact {
public GetRecentContactListResult recentContactList(GetRecentContactListRequest recentContactListRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GET_RECENT_CONTACT_LIST);
return HttpUtil.post(url, recentContactListRequest, GetRecentContactListResult.class);
return HttpUtil.post(url, recentContactListRequest, GetRecentContactListResult.class, imClient.getConfig());
}
public DeleteRecentContactResult deleteRecentContact(DeleteRecentContactRequest deleteRecentContactRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, DELETE_RECENT_CONTACT);
return HttpUtil.post(url, deleteRecentContactRequest, DeleteRecentContactResult.class);
return HttpUtil.post(url, deleteRecentContactRequest, DeleteRecentContactResult.class, imClient.getConfig());
}
}
......@@ -38,76 +38,76 @@ public class Sns {
public FriendAddResult friendAdd(FriendAddRequest friendAddRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_ADD_COMMAND);
return HttpUtil.post(url, friendAddRequest, FriendAddResult.class);
return HttpUtil.post(url, friendAddRequest, FriendAddResult.class, imClient.getConfig());
}
public FriendImportResult friendImport(FriendImportRequest friendImportRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_IMPORT_COMMAND);
return HttpUtil.post(url, friendImportRequest, FriendImportResult.class);
return HttpUtil.post(url, friendImportRequest, FriendImportResult.class, imClient.getConfig());
}
public FriendUpdateResult friendUpdate(FriendUpdateRequest friendUpdateRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_UPDATE_COMMAND);
return HttpUtil.post(url, friendUpdateRequest, FriendUpdateResult.class);
return HttpUtil.post(url, friendUpdateRequest, FriendUpdateResult.class, imClient.getConfig());
}
public FriendDeleteResult friendDelete(FriendDeleteRequest friendDeleteRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_DELETE_COMMAND);
return HttpUtil.post(url, friendDeleteRequest, FriendDeleteResult.class);
return HttpUtil.post(url, friendDeleteRequest, FriendDeleteResult.class, imClient.getConfig());
}
public FriendDeleteAllResult friendDeleteAll(FriendDeleteAllRequest friendDeleteAllRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_DELETE_ALL_COMMAND);
return HttpUtil.post(url, friendDeleteAllRequest, FriendDeleteAllResult.class);
return HttpUtil.post(url, friendDeleteAllRequest, FriendDeleteAllResult.class, imClient.getConfig());
}
public FriendCheckResult friendCheck(FriendCheckRequest friendCheckRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_CHECK_COMMAND);
return HttpUtil.post(url, friendCheckRequest, FriendCheckResult.class);
return HttpUtil.post(url, friendCheckRequest, FriendCheckResult.class, imClient.getConfig());
}
public FriendGetResult friendGet(FriendGetRequest friendGetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_GET_COMMAND);
return HttpUtil.post(url, friendGetRequest, FriendGetResult.class);
return HttpUtil.post(url, friendGetRequest, FriendGetResult.class, imClient.getConfig());
}
public FriendGetListResult friendGetList(FriendGetListRequest friendGetListRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_GET_LIST_COMMAND);
return HttpUtil.post(url, friendGetListRequest, FriendGetListResult.class);
return HttpUtil.post(url, friendGetListRequest, FriendGetListResult.class, imClient.getConfig());
}
public BlackListAddResult blackListAdd(BlackListAddRequest blackListAddRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, BLACK_LIST_ADD_COMMAND);
return HttpUtil.post(url, blackListAddRequest, BlackListAddResult.class);
return HttpUtil.post(url, blackListAddRequest, BlackListAddResult.class, imClient.getConfig());
}
public BlackListDeleteResult blackListDelete(BlackListDeleteRequest blackListDeleteRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, BLACK_LIST_DELETE_COMMAND);
return HttpUtil.post(url, blackListDeleteRequest, BlackListDeleteResult.class);
return HttpUtil.post(url, blackListDeleteRequest, BlackListDeleteResult.class, imClient.getConfig());
}
public BlackListGetResult blackListGet(BlackListGetRequest blackListGetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, BLACK_LIST_GET_COMMAND);
return HttpUtil.post(url, blackListGetRequest, BlackListGetResult.class);
return HttpUtil.post(url, blackListGetRequest, BlackListGetResult.class, imClient.getConfig());
}
public BlackListCheckResult blackListCheck(BlackListCheckRequest blackListCheckRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, BLACK_LIST_CHECK_COMMAND);
return HttpUtil.post(url, blackListCheckRequest, BlackListCheckResult.class);
return HttpUtil.post(url, blackListCheckRequest, BlackListCheckResult.class, imClient.getConfig());
}
public GroupAddResult groupAdd(GroupAddRequest groupAddRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GROUP_ADD_COMMAND);
return HttpUtil.post(url, groupAddRequest, GroupAddResult.class);
return HttpUtil.post(url, groupAddRequest, GroupAddResult.class, imClient.getConfig());
}
public GroupDeleteResult groupDelete(GroupDeleteRequest groupDeleteRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GROUP_DELETE_COMMAND);
return HttpUtil.post(url, groupDeleteRequest, GroupDeleteResult.class);
return HttpUtil.post(url, groupDeleteRequest, GroupDeleteResult.class, imClient.getConfig());
}
public GroupGetResult groupGet(GroupGetRequest groupGetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, GROUP_GET_COMMAND);
return HttpUtil.post(url, groupGetRequest, GroupGetResult.class);
return HttpUtil.post(url, groupGetRequest, GroupGetResult.class, imClient.getConfig());
}
}
package io.github.doocs.im.util;
import io.github.doocs.im.ClientConfiguration;
import okhttp3.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* HTTP tool
*
* @author bingo
* @since 2021/10/31 15:57
*/
public class HttpUtil {
private static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
private static final String USER_AGENT_KEY = "User-Agent";
private static final ClientConfiguration DEFAULT_CONFIG = new ClientConfiguration();
private static final String DEFAULT_USER_AGENT = DEFAULT_CONFIG.getUserAgent();
private static final OkHttpClient DEFAULT_CLIENT = new OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(1000, TimeUnit.MICROSECONDS)
.readTimeout(1000, TimeUnit.MILLISECONDS)
.writeTimeout(1000, TimeUnit.MILLISECONDS)
.retryOnConnectionFailure(DEFAULT_CONFIG.getMaxRetries() > 0)
.connectTimeout(DEFAULT_CONFIG.getConnectTimeout(), TimeUnit.MILLISECONDS)
.readTimeout(DEFAULT_CONFIG.getReadTimeout(), TimeUnit.MILLISECONDS)
.writeTimeout(DEFAULT_CONFIG.getWriteTimeout(), TimeUnit.MILLISECONDS)
.build();
private HttpUtil() {
}
public static String post(String url, String json) throws IOException {
public static String post(String url, String json, ClientConfiguration config) throws IOException {
OkHttpClient httpClient = DEFAULT_CLIENT;
if (config != null) {
httpClient = DEFAULT_CLIENT.newBuilder()
.connectTimeout(config.getConnectTimeout(), TimeUnit.MILLISECONDS)
.readTimeout(config.getReadTimeout(), TimeUnit.MILLISECONDS)
.writeTimeout(config.getWriteTimeout(), TimeUnit.MILLISECONDS)
.retryOnConnectionFailure(config.getMaxRetries() > 0)
.build();
}
Map<String, String> headers = new HashMap<>(2);
headers.put(USER_AGENT_KEY, config == null || config.getUserAgent() == null ? DEFAULT_USER_AGENT : config.getUserAgent());
return post(url, json, httpClient, headers);
}
public static String post(String url, String json, OkHttpClient httpClient, Map<String, String> headers) throws IOException {
RequestBody body = RequestBody.create(json, JSON);
Headers.Builder hb = new Headers.Builder();
if (headers != null && !headers.isEmpty()) {
headers.forEach(hb::add);
}
Request request = new Request.Builder()
.url(url)
.headers(hb.build())
.post(body)
.build();
try (Response response = DEFAULT_CLIENT.newCall(request).execute()) {
try (Response response = httpClient.newCall(request).execute()) {
return Objects.requireNonNull(response.body()).string();
}
}
public static String post(String url, Object data) throws IOException {
return post(url, JsonUtil.obj2Str(data));
public static <T> T post(String url, Object data, Class<T> cls, ClientConfiguration config) throws IOException {
String result = post(url, JsonUtil.obj2Str(data), config);
return JsonUtil.str2Obj(result, cls);
}
public static <T> T post(String url, Object data, Class<T> cls) throws IOException {
String result = post(url, JsonUtil.obj2Str(data));
return JsonUtil.str2Obj(result, cls);
return post(url, data, cls, null);
}
public static String get(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
try (Response response = DEFAULT_CLIENT.newCall(request).execute()) {
return Objects.requireNonNull(response.body()).string();
}
......
package io.github.doocs.im.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Version tool
*
* @author bingo
* @since 2021/11/2 14:21
*/
public class VersionInfoUtil {
private static String version = null;
private static String defaultUserAgent = null;
private static final String VERSION_INFO_FILE = "version.properties";
private static final String USER_AGENT_PREFIX = "qcloud-im-server-sdk-java";
public static String getDefaultUserAgent() {
if (defaultUserAgent == null) {
String osName = System.getProperty("os.name");
String osVersion = System.getProperty("os.version");
String osArch = System.getProperty("os.arch");
String javaVersion = System.getProperty("java.version");
defaultUserAgent = String.format("%s/%s(%s/%s/%s;%s)", USER_AGENT_PREFIX, getVersion(), osName, osVersion, osArch, javaVersion);
}
return defaultUserAgent;
}
private static String getVersion() {
if (version == null) {
init();
}
return version;
}
private static void init() {
Properties versionProperties = new Properties();
try (InputStream is = VersionInfoUtil.class.getClassLoader().getResourceAsStream(VERSION_INFO_FILE)) {
if (is != null) {
versionProperties.load(is);
version = versionProperties.getProperty("version");
}
} catch (IOException e) {
version = "unknown-version";
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment