Unverified Commit 0b2f117a authored by hongyiheng's avatar hongyiheng Committed by GitHub

feat: implement imClient and base api (#3)

parent 23320c4a
package com.qcloud.im;
import com.qcloud.im.model.core.Account;
import com.qcloud.im.model.core.Message;
import com.qcloud.im.model.core.Profile;
import com.qcloud.im.model.core.SNS;
import com.qcloud.im.util.SigUtil;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author hyh
* @since 2021/07/29 16:11
*/
public class IMClient {
private static ConcurrentHashMap<String, IMClient> imClient = new ConcurrentHashMap<String, IMClient>();
private static String FORMAT_URL = "https://console.tim.qq.com/%s/%s/%s?sdkappid=%s&identifier=%s&usersig=%s&random=%d&contenttype=json";
/**
* core methods
*/
private Account account;
private Message message;
private Profile profile;
private SNS sns;
/**
* init property
*/
private String ver = "v4";
private Long sdkAppId;
private String userId;
private String userSig;
public static IMClient getInstance(Long sdkAppId, String userId, String key, Long expire) {
String identify = sdkAppId + "_" + userId;
if (imClient.get(identify) == null) {
imClient.putIfAbsent(identify, new IMClient(sdkAppId, userId, key, expire));
}
return imClient.get(identify);
}
public IMClient(Long sdkAppId, String userId, String key, Long expire) {
this.sdkAppId = sdkAppId;
this.userId = userId;
this.userSig = SigUtil.genUserSig(sdkAppId, userId, key, expire);
account = new Account(this);
message = new Message(this);
profile = new Profile(this);
sns = new SNS(this);
}
public IMClient() {
}
public String getUrl(String serviceName, String command) {
return String.format(FORMAT_URL, this.ver, serviceName, command,
this.sdkAppId, this.userId, this.userSig, new Random().nextInt());
}
}
package com.qcloud.im.model.core;
import com.qcloud.im.IMClient;
import com.qcloud.im.model.request.ImportMsgRequest;
import com.qcloud.im.model.response.AccountImportResult;
import com.qcloud.im.util.HttpUtil;
import com.qcloud.im.util.JsonUtil;
import java.io.IOException;
/**
* @author hyh
* @since 2021/07/29 14:52
*/
public class Account {
private final String SERVICE_NAME = "im_open_login_svc";
private final String ACCOUNT_IMPORT_COMMAND = "account_import";
private IMClient imClient;
public AccountImportResult accountImport(ImportMsgRequest importMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, ACCOUNT_IMPORT_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(importMsgRequest), null);
return JsonUtil.str2Obj(result, AccountImportResult.class);
}
public Account(IMClient imClient) {
this.imClient = imClient;
}
}
package com.qcloud.im.model.core;
import com.qcloud.im.IMClient;
import com.qcloud.im.model.request.ImportMsgRequest;
import com.qcloud.im.model.request.SendMsgRequest;
import com.qcloud.im.model.response.ImportMsgResult;
import com.qcloud.im.model.response.SendMsgResult;
import com.qcloud.im.util.HttpUtil;
import com.qcloud.im.util.JsonUtil;
import java.io.IOException;
/**
* @author hyh
* @since 2021/07/29 10:28
*/
public class Message {
private final String SERVICE_NAME = "openim";
private final String SEND_MSG_COMMAND = "sendmsg";
private final String IMPORT_MSG_COMMAND = "importmsg";
private IMClient imClient;
public SendMsgResult sendMsg(SendMsgRequest sendMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, SEND_MSG_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(sendMsgRequest), null);
return JsonUtil.str2Obj(result, SendMsgResult.class);
}
public ImportMsgResult importMsg(ImportMsgRequest importMsgRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, IMPORT_MSG_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(importMsgRequest), null);
return JsonUtil.str2Obj(result, ImportMsgResult.class);
}
public Message(IMClient imClient) {
this.imClient = imClient;
}
}
package com.qcloud.im.model.core;
import com.qcloud.im.IMClient;
import com.qcloud.im.model.request.PortraitSetRequest;
import com.qcloud.im.model.response.PortraitSetResult;
import com.qcloud.im.util.HttpUtil;
import com.qcloud.im.util.JsonUtil;
import java.io.IOException;
/**
* @author hyh
* @since 2021/07/29 15:11
*/
public class Profile {
private final String SERVICE_NAME = "profile";
private final String PORTRAIT_SET_COMMAND = "portrait_set";
private IMClient imClient;
public PortraitSetResult portraitSet(PortraitSetRequest portraitSetRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, PORTRAIT_SET_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(portraitSetRequest), null);
return JsonUtil.str2Obj(result, PortraitSetResult.class);
}
public Profile(IMClient imClient) {
this.imClient = imClient;
}
}
package com.qcloud.im.model.core;
import com.qcloud.im.IMClient;
import com.qcloud.im.model.request.FriendImportRequest;
import com.qcloud.im.model.response.FriendImportResult;
import com.qcloud.im.util.HttpUtil;
import com.qcloud.im.util.JsonUtil;
import java.io.IOException;
/**
* @author hyh
* @since 2021/07/29 15:11
*/
public class SNS {
private final String SERVICE_NAME = "sns";
private final String FRIEND_IMPORT_COMMAND = "friend_import";
private IMClient imClient;
public FriendImportResult friendImport(FriendImportRequest friendImportRequest) throws IOException {
String url = imClient.getUrl(SERVICE_NAME, FRIEND_IMPORT_COMMAND);
String result = HttpUtil.post(url, JsonUtil.obj2Str(friendImportRequest), null);
return JsonUtil.str2Obj(result, FriendImportResult.class);
}
public SNS(IMClient imClient) {
this.imClient = imClient;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author hyh
* @since 2021/07/29 14:56
*/
public class AccountImportRequest extends GenericRequest {
@JsonProperty("Identifier")
private String identifier;
@JsonProperty("Nick")
private String nick;
@JsonProperty("FaceUrl")
private String faceUrl;
public AccountImportRequest() {
}
public AccountImportRequest(String identifier, String nick, String faceUrl) {
this.identifier = identifier;
this.nick = nick;
this.faceUrl = faceUrl;
}
public String getIdentifier() {
return identifier;
}
public void setIdentifier(String identifier) {
this.identifier = identifier;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public String getFaceUrl() {
return faceUrl;
}
public void setFaceUrl(String faceUrl) {
this.faceUrl = faceUrl;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 15:37
*/
public class AddFriendItem {
@JsonProperty("To_Account")
private String toAccount;
@JsonProperty("Remark")
private String remark;
@JsonProperty("RemarkTime")
private Integer remarkTime;
@JsonProperty("GroupName")
private List<String> groupName;
@JsonProperty("AddSource")
private String addSource;
@JsonProperty("AddWording")
private String addWording;
@JsonProperty("AddTime")
private Integer addTime;
@JsonProperty("CustomItem")
private List<CustomItem> CustomItemList;
public AddFriendItem() {
}
public AddFriendItem(String toAccount, String remark, Integer remarkTime, List<String> groupName, String addSource, String addWording, Integer addTime, List<CustomItem> customItemList) {
this.toAccount = toAccount;
this.remark = remark;
this.remarkTime = remarkTime;
this.groupName = groupName;
this.addSource = addSource;
this.addWording = addWording;
this.addTime = addTime;
CustomItemList = customItemList;
}
public String getToAccount() {
return toAccount;
}
public void setToAccount(String toAccount) {
this.toAccount = toAccount;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getRemarkTime() {
return remarkTime;
}
public void setRemarkTime(Integer remarkTime) {
this.remarkTime = remarkTime;
}
public List<String> getGroupName() {
return groupName;
}
public void setGroupName(List<String> groupName) {
this.groupName = groupName;
}
public String getAddSource() {
return addSource;
}
public void setAddSource(String addSource) {
this.addSource = addSource;
}
public String getAddWording() {
return addWording;
}
public void setAddWording(String addWording) {
this.addWording = addWording;
}
public Integer getAddTime() {
return addTime;
}
public void setAddTime(Integer addTime) {
this.addTime = addTime;
}
public List<CustomItem> getCustomItemList() {
return CustomItemList;
}
public void setCustomItemList(List<CustomItem> customItemList) {
CustomItemList = customItemList;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author hyh
* @since 2021/07/29 15:45
*/
public class CustomItem {
@JsonProperty("Tag")
private String tag;
@JsonProperty("Value")
private String value;
public CustomItem() {
}
public CustomItem(String tag, String value) {
this.tag = tag;
this.value = value;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qcloud.im.model.response.GenericResult;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 15:19
*/
public class FriendImportRequest extends GenericResult {
@JsonProperty("From_Account")
private String fromAccount;
@JsonProperty("AddFriendItem")
private List<AddFriendItem> addFriendItemList;
public FriendImportRequest() {
}
public FriendImportRequest(String fromAccount, List<AddFriendItem> addFriendItemList) {
this.fromAccount = fromAccount;
this.addFriendItemList = addFriendItemList;
}
public String getFromAccount() {
return fromAccount;
}
public void setFromAccount(String fromAccount) {
this.fromAccount = fromAccount;
}
public List<AddFriendItem> getAddFriendItemList() {
return addFriendItemList;
}
public void setAddFriendItemList(List<AddFriendItem> addFriendItemList) {
this.addFriendItemList = addFriendItemList;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qcloud.im.model.response.MsgBodyItem;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 14:25
*/
public class ImportMsgRequest extends GenericRequest {
@JsonProperty("SyncFromOldSystem")
private Integer syncFromOldSystem;
@JsonProperty("From_Account")
private String fromAccount;
@JsonProperty("To_Account")
private String toAccount;
@JsonProperty("MsgSeq")
private Integer msgSeq;
@JsonProperty("MsgRandom")
private Integer msgRandom;
@JsonProperty("MsgTimeStamp")
private Integer msgTimeStamp;
@JsonProperty("MsgBody")
private List<MsgBodyItem> msgBody;
@JsonProperty("CloudCustomData")
private String cloudCustomData;
public ImportMsgRequest() {
}
public ImportMsgRequest(Integer syncFromOldSystem, String fromAccount, String toAccount, Integer msgSeq, Integer msgRandom, Integer msgTimeStamp, List<MsgBodyItem> msgBody, String cloudCustomData) {
this.syncFromOldSystem = syncFromOldSystem;
this.fromAccount = fromAccount;
this.toAccount = toAccount;
this.msgSeq = msgSeq;
this.msgRandom = msgRandom;
this.msgTimeStamp = msgTimeStamp;
this.msgBody = msgBody;
this.cloudCustomData = cloudCustomData;
}
public Integer getSyncFromOldSystem() {
return syncFromOldSystem;
}
public void setSyncFromOldSystem(Integer syncFromOldSystem) {
this.syncFromOldSystem = syncFromOldSystem;
}
public String getFromAccount() {
return fromAccount;
}
public void setFromAccount(String fromAccount) {
this.fromAccount = fromAccount;
}
public String getToAccount() {
return toAccount;
}
public void setToAccount(String toAccount) {
this.toAccount = toAccount;
}
public Integer getMsgSeq() {
return msgSeq;
}
public void setMsgSeq(Integer msgSeq) {
this.msgSeq = msgSeq;
}
public Integer getMsgRandom() {
return msgRandom;
}
public void setMsgRandom(Integer msgRandom) {
this.msgRandom = msgRandom;
}
public Integer getMsgTimeStamp() {
return msgTimeStamp;
}
public void setMsgTimeStamp(Integer msgTimeStamp) {
this.msgTimeStamp = msgTimeStamp;
}
public List<MsgBodyItem> getMsgBody() {
return msgBody;
}
public void setMsgBody(List<MsgBodyItem> msgBody) {
this.msgBody = msgBody;
}
public String getCloudCustomData() {
return cloudCustomData;
}
public void setCloudCustomData(String cloudCustomData) {
this.cloudCustomData = cloudCustomData;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 15:01
*/
public class PortraitSetRequest extends GenericRequest {
@JsonProperty("From_Account")
private String fromAccount;
@JsonProperty("ProfileItem")
private List<ProfileItem> profileItemList;
public PortraitSetRequest() {
}
public PortraitSetRequest(String fromAccount, List<ProfileItem> profileItemList) {
this.fromAccount = fromAccount;
this.profileItemList = profileItemList;
}
public String getFromAccount() {
return fromAccount;
}
public void setFromAccount(String fromAccount) {
this.fromAccount = fromAccount;
}
public List<ProfileItem> getProfileItemList() {
return profileItemList;
}
public void setProfileItemList(List<ProfileItem> profileItemList) {
this.profileItemList = profileItemList;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author hyh
* @since 2021/07/29 15:06
*/
public class ProfileItem {
@JsonProperty("Tag")
private String tag;
@JsonProperty("Value")
private String value;
public ProfileItem() {
}
public ProfileItem(String tag, String value) {
this.tag = tag;
this.value = value;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
package com.qcloud.im.model.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qcloud.im.model.response.MsgBodyItem;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 11:31
*/
public class SendMsgRequest extends GenericRequest {
@JsonProperty("SyncOtherMachine")
private Integer syncOtherMachine;
@JsonProperty("To_Account")
private String toAccount;
@JsonProperty("MsgLifeTime")
private Integer msgLifeTime;
@JsonProperty("MsgSeq")
private Integer msgSeq;
@JsonProperty("MsgRandom")
private Integer msgRandom;
@JsonProperty("MsgTimeStamp")
private Integer msgTimeStamp;
@JsonProperty("MsgBody")
private List<MsgBodyItem> msgBody;
@JsonProperty("CloudCustomData")
private String cloudCustomData;
public SendMsgRequest() {
}
public SendMsgRequest(Integer syncOtherMachine, String toAccount, Integer msgLifeTime, Integer msgSeq, Integer msgRandom, Integer msgTimeStamp, List<MsgBodyItem> msgBody, String cloudCustomData) {
this.syncOtherMachine = syncOtherMachine;
this.toAccount = toAccount;
this.msgLifeTime = msgLifeTime;
this.msgSeq = msgSeq;
this.msgRandom = msgRandom;
this.msgTimeStamp = msgTimeStamp;
this.msgBody = msgBody;
this.cloudCustomData = cloudCustomData;
}
public Integer getSyncOtherMachine() {
return syncOtherMachine;
}
public void setSyncOtherMachine(Integer syncOtherMachine) {
this.syncOtherMachine = syncOtherMachine;
}
public String getToAccount() {
return toAccount;
}
public void setToAccount(String toAccount) {
this.toAccount = toAccount;
}
public Integer getMsgLifeTime() {
return msgLifeTime;
}
public void setMsgLifeTime(Integer msgLifeTime) {
this.msgLifeTime = msgLifeTime;
}
public Integer getMsgSeq() {
return msgSeq;
}
public void setMsgSeq(Integer msgSeq) {
this.msgSeq = msgSeq;
}
public Integer getMsgRandom() {
return msgRandom;
}
public void setMsgRandom(Integer msgRandom) {
this.msgRandom = msgRandom;
}
public Integer getMsgTimeStamp() {
return msgTimeStamp;
}
public void setMsgTimeStamp(Integer msgTimeStamp) {
this.msgTimeStamp = msgTimeStamp;
}
public List<MsgBodyItem> getMsgBody() {
return msgBody;
}
public void setMsgBody(List<MsgBodyItem> msgBody) {
this.msgBody = msgBody;
}
public String getCloudCustomData() {
return cloudCustomData;
}
public void setCloudCustomData(String cloudCustomData) {
this.cloudCustomData = cloudCustomData;
}
}
package com.qcloud.im.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;
/**
* @author hyh
* @since 2021/07/29 15:52
*/
public class FriendImportResult extends GenericResult {
@JsonProperty("ResultItem")
private List<ResultItem> resultItemList;
@JsonProperty("ErrorDisplay")
private String errorDisplay;
public List<ResultItem> getResultItemList() {
return resultItemList;
}
public void setResultItemList(List<ResultItem> resultItemList) {
this.resultItemList = resultItemList;
}
public String getErrorDisplay() {
return errorDisplay;
}
public void setErrorDisplay(String errorDisplay) {
this.errorDisplay = errorDisplay;
}
}
package com.qcloud.im.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author hyh
* @since 2021/07/29 15:09
*/
public class PortraitSetResult extends GenericResult{
@JsonProperty("ErrorDisplay")
private String errorDisplay;
public String getErrorDisplay() {
return errorDisplay;
}
public void setErrorDisplay(String errorDisplay) {
this.errorDisplay = errorDisplay;
}
}
package com.qcloud.im.model.response;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author hyh
* @since 2021/07/29 15:55
*/
public class ResultItem {
@JsonProperty("To_Account")
private String toAccount;
@JsonProperty("ResultCode")
private Integer resultCode;
@JsonProperty("ResultInfo")
private String resultInfo;
public String getToAccount() {
return toAccount;
}
public void setToAccount(String toAccount) {
this.toAccount = toAccount;
}
public Integer getResultCode() {
return resultCode;
}
public void setResultCode(Integer resultCode) {
this.resultCode = resultCode;
}
public String getResultInfo() {
return resultInfo;
}
public void setResultInfo(String resultInfo) {
this.resultInfo = resultInfo;
}
}
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