Unverified Commit b0964296 authored by Yang Libin's avatar Yang Libin Committed by GitHub

feat: update imclient and add junit test (#5)

parent 99bf2023
...@@ -36,7 +36,12 @@ ...@@ -36,7 +36,12 @@
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <version>3.12.0</version>
</dependency> </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
</project> </project>
...@@ -6,8 +6,8 @@ import com.qcloud.im.model.core.Profile; ...@@ -6,8 +6,8 @@ import com.qcloud.im.model.core.Profile;
import com.qcloud.im.model.core.SNS; import com.qcloud.im.model.core.SNS;
import com.qcloud.im.util.SigUtil; import com.qcloud.im.util.SigUtil;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadLocalRandom;
/** /**
...@@ -15,19 +15,19 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -15,19 +15,19 @@ import java.util.concurrent.ConcurrentHashMap;
* @since 2021/07/29 16:11 * @since 2021/07/29 16:11
*/ */
public class IMClient { public class IMClient {
private static ConcurrentHashMap<String, IMClient> imClient = new ConcurrentHashMap<String, IMClient>(); private static ConcurrentHashMap<String, IMClient> imClient = new ConcurrentHashMap<>();
private static String FORMAT_URL = "https://console.tim.qq.com/%s/%s/%s?sdkappid=%s&identifier=%s&usersig=%s&random=%d&contenttype=json"; private static String FORMAT_URL = "https://console.tim.qq.com/%s/%s/%s?sdkappid=%d&identifier=%s&usersig=%s&random=%d&contenttype=json";
/** /**
* core methods * core methods
*/ */
private Account account; public Account account;
private Message message; public Message message;
private Profile profile; public Profile profile;
private SNS sns; public SNS sns;
/** /**
* init property * init property
*/ */
private String ver = "v4"; private String version = "v4";
private Long sdkAppId; private Long sdkAppId;
private String userId; private String userId;
private String userSig; private String userSig;
...@@ -40,21 +40,28 @@ public class IMClient { ...@@ -40,21 +40,28 @@ public class IMClient {
return imClient.get(identify); return imClient.get(identify);
} }
public static IMClient getInstance(Long sdkAppId, String userId, String key) {
String identify = sdkAppId + "_" + userId;
if (imClient.get(identify) == null) {
imClient.putIfAbsent(identify, new IMClient(sdkAppId, userId, key, 24 * 60 * 60L));
}
return imClient.get(identify);
}
public IMClient(Long sdkAppId, String userId, String key, Long expire) { public IMClient(Long sdkAppId, String userId, String key, Long expire) {
this.sdkAppId = sdkAppId; this.sdkAppId = sdkAppId;
this.userId = userId; this.userId = userId;
this.userSig = SigUtil.genUserSig(sdkAppId, userId, key, expire); this.userSig = SigUtil.genUserSig(sdkAppId, key, userId, expire);
account = new Account(this); account = new Account(this);
message = new Message(this); message = new Message(this);
profile = new Profile(this); profile = new Profile(this);
sns = new SNS(this); sns = new SNS(this);
} }
public IMClient() {
}
public String getUrl(String serviceName, String command) { public String getUrl(String serviceName, String command) {
return String.format(FORMAT_URL, this.ver, serviceName, command, // 随机生成32位无符号整数
this.sdkAppId, this.userId, this.userSig, new Random().nextInt()); long random = ThreadLocalRandom.current().nextLong(0, 0x100000000L);
return String.format(FORMAT_URL, this.version, serviceName, command,
this.sdkAppId, this.userId, this.userSig, random);
} }
} }
package com.qcloud.im.model.core; package com.qcloud.im.model.core;
import com.qcloud.im.IMClient; import com.qcloud.im.IMClient;
import com.qcloud.im.model.request.ImportMsgRequest; import com.qcloud.im.model.request.AccountImportRequest;
import com.qcloud.im.model.response.AccountImportResult; import com.qcloud.im.model.response.AccountImportResult;
import com.qcloud.im.util.HttpUtil; import com.qcloud.im.util.HttpUtil;
import com.qcloud.im.util.JsonUtil; import com.qcloud.im.util.JsonUtil;
...@@ -18,9 +18,9 @@ public class Account { ...@@ -18,9 +18,9 @@ public class Account {
private IMClient imClient; private IMClient imClient;
public AccountImportResult accountImport(ImportMsgRequest importMsgRequest) throws IOException { public AccountImportResult accountImport(AccountImportRequest accountImportRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_IMPORT_COMMAND); String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_IMPORT_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(importMsgRequest), null); String result = HttpUtil.post(url, JsonUtil.obj2Str(accountImportRequest), null);
return JsonUtil.str2Obj(result, AccountImportResult.class); return JsonUtil.str2Obj(result, AccountImportResult.class);
} }
......
...@@ -48,4 +48,13 @@ public abstract class GenericResult { ...@@ -48,4 +48,13 @@ public abstract class GenericResult {
public void setErrorCode(String errorCode) { public void setErrorCode(String errorCode) {
this.errorCode = errorCode; this.errorCode = errorCode;
} }
@Override
public String toString() {
return "GenericResult{" +
"actionStatus='" + actionStatus + '\'' +
", errorInfo='" + errorInfo + '\'' +
", errorCode='" + errorCode + '\'' +
'}';
}
} }
...@@ -10,7 +10,7 @@ import java.util.List; ...@@ -10,7 +10,7 @@ import java.util.List;
*/ */
public class IMGetAttrResult extends GenericResult { public class IMGetAttrResult extends GenericResult {
@JsonProperty("UserAttrs") @JsonProperty("UserAttrs")
List<UserAttrItem> userAttrs; private List<UserAttrItem> userAttrs;
public List<UserAttrItem> getUserAttrs() { public List<UserAttrItem> getUserAttrs() {
return userAttrs; return userAttrs;
......
package com.qcloud.im;
import com.qcloud.im.model.request.AccountImportRequest;
import com.qcloud.im.model.response.AccountImportResult;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
/**
* @author bingo
* @since 2021/7/30 16:17
*/
public class AccountTest {
@Test
public void testAccountImport() throws IOException {
long appId = 11212L;
String key = "xxx";
String userId = "test";
IMClient client = IMClient.getInstance(appId, userId, key);
AccountImportRequest request = new AccountImportRequest();
request.setFaceUrl("http://www.qq.com");
request.setIdentifier("bingo123");
request.setNick("bingo");
AccountImportResult accountImportResult = client.account.accountImport(request);
Assert.assertEquals(accountImportResult.getActionStatus(), "OK");
}
}
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