Commit e6aca3ce by 罗长华

增加PAAS平台 回调相关类

SDK增加getFriend接口
parent ae4aa1d6
......@@ -41,6 +41,7 @@ public class RestTemplateConfig {
factory.setReadTimeout(5000);
//单位为ms
factory.setConnectTimeout(5000);
return factory;
}
}
......@@ -39,7 +39,7 @@ spring:
dubbo:
protocol:
port: 20881
port: 20882
name: dubbo
registry:
address: nacos://localhost:8848?username=nacos&password=nacos
......@@ -58,4 +58,4 @@ load-blance:
rocketmq:
namesrvAddr: 127.0.0.1:9876
# 生产者的组名
producerId: im-server
\ No newline at end of file
producerId: im-server
......@@ -145,6 +145,10 @@
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
</dependencies>
<!-- <build>-->
......@@ -177,4 +181,4 @@
<!-- </plugins>-->
<!-- </build>-->
</project>
\ No newline at end of file
</project>
......@@ -69,6 +69,12 @@ public class ImApplication extends BaseEntity implements Application {
@ApiModelProperty("创建会话时对比扩展字段 0不 1是")
private Integer contrastExtendedFieldStatus;
@ApiModelProperty("在线状态订阅地址")
private String onlineStatusSubscribeUrl;
@ApiModelProperty("全量消息订阅地址")
private String fullMessageSubscribeUrl;
@Override
public Boolean isActive() {
return true;
......
package com.wecloud.im.event;
import org.springframework.context.ApplicationEvent;
/**
* 客户端在线状态变化事件
* @Author luozh
* @Date 2022年04月22日 09:44
* @Version 1.0
*/
public class ClientOnlineStatusChangeEvent extends ApplicationEvent {
/**
* Create a new {@code ApplicationEvent}.
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public ClientOnlineStatusChangeEvent(Object source) {
super(source);
}
}
package com.wecloud.im.event;
import org.springframework.context.ApplicationEvent;
/**
* 消息发送事件
* @Author luozh
* @Date 2022年04月22日 09:40
* @Version 1.0
*/
public class ClientSendMessageEvent extends ApplicationEvent {
/**
* Create a new {@code ApplicationEvent}.
* @param source the object on which the event initially occurred or with
* which the event is associated (never {@code null})
*/
public ClientSendMessageEvent(Object source) {
super(source);
}
}
package com.wecloud.im.event.listener;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import com.wecloud.im.event.ClientOnlineStatusChangeEvent;
/**
*
* @Author luozh
* @Date 2022年04月22日 09:47
* @Version 1.0
*/
@Component
public class ClientOnlineStatusChangeListener implements ApplicationListener<ClientOnlineStatusChangeEvent> {
@Override
public void onApplicationEvent(ClientOnlineStatusChangeEvent event) {
}
}
package com.wecloud.im.event.listener;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import com.wecloud.im.event.ClientSendMessageEvent;
/**
*
* @Author luozh
* @Date 2022年04月22日 09:48
* @Version 1.0
*/
@Component
public class ClientSendMessageListener implements ApplicationListener<ClientSendMessageEvent> {
@Override
public void onApplicationEvent(ClientSendMessageEvent event) {
}
}
package com.wecloud.im.externalaccess.controller;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.externalaccess.param.FriendDto;
import com.wecloud.im.externalaccess.service.FriendService;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
import io.geekidea.springbootplus.framework.common.controller.BaseController;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.externalaccess.param.FriendDto;
import com.wecloud.im.externalaccess.service.FriendService;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.service.ImClientService;
/**
* @Author wenzhida
......@@ -41,16 +47,18 @@ public class FriendController extends BaseController {
@PostMapping("/info")
@ApiOperation(value = "查询好友信息,只有自己的好友才查得到")
public ApiResult<FriendDto> getFriendInfo(@RequestBody ImFriendBaseParam param) {
ImClient imClient = imClientService.getCurrentClient();
if(param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
return ApiResult.ok(friendService.getFriendInfo(param));
return ApiResult.ok(friendService.getFriendInfo(imClient, param));
}
@PostMapping("/getFriends")
@ApiOperation(value = "全量获取好友列表")
public ApiResult<List<FriendDto>> getFriends() {
return ApiResult.ok(friendService.getFriends());
ImClient imClient = imClientService.getCurrentClient();
return ApiResult.ok(friendService.getFriends(imClient));
}
/**
......@@ -59,7 +67,49 @@ public class FriendController extends BaseController {
@PostMapping("/unsureFriends")
@ApiOperation(value = "获取好友请求列表,最多只返回1000个")
public ApiResult<List<FriendDto>> getUnsureFriends() {
List<FriendDto> applyFriends = friendService.getApplyFriends();
ImClient imClient = imClientService.getCurrentClient();
List<FriendDto> applyFriends = friendService.getApplyFriends(imClient);
return ApiResult.ok(applyFriends);
}
/**
* 查询好友信息,只有自己的好友才查得到 sdk
*/
@GetMapping("/sdk/info")
@ApiOperation(value = "查询好友信息,只有自己的好友才查得到")
public ApiResult<FriendDto> getFriendInfoSdk(@RequestBody ImFriendBaseParam param) {
if (param == null) {
return ApiResult.fail(ApiCode.PARAMETER_EXCEPTION, null);
}
Long appId = SecurityUtils.getCurrentAppId();
ImClient imClient = imClientService.getCacheImClient(appId, param.getClientId());
return ApiResult.ok(friendService.getFriendInfo(imClient, param));
}
/**
* 全量获取好友列表 sdk使用
* @Author luozh
* @Date 2022年04月22日 11:28:44
* @param
* @Return
*/
@GetMapping("/sdk/getFriends")
@ApiOperation(value = "全量获取好友列表")
public ApiResult<List<FriendDto>> getFriendsSdk(@RequestParam("clientId") String clientId) {
Long appId = SecurityUtils.getCurrentAppId();
ImClient imClient = imClientService.getCacheImClient(appId, clientId);
return ApiResult.ok(friendService.getFriends(imClient));
}
/**
* 好友请求列表,最多只返回1000个 sdk使用
*/
@GetMapping("/sdk/unsureFriends")
@ApiOperation(value = "获取好友请求列表,最多只返回1000个")
public ApiResult<List<FriendDto>> getUnsureFriendsSdk(@RequestParam("clientId") String clientId) {
Long appId = SecurityUtils.getCurrentAppId();
ImClient imClient = imClientService.getCacheImClient(appId, clientId);
List<FriendDto> applyFriends = friendService.getApplyFriends(imClient);
return ApiResult.ok(applyFriends);
}
......
package com.wecloud.im.externalaccess.service;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.wecloud.im.entity.ImClient;
import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.mapper.UserMapper;
import com.wecloud.im.externalaccess.param.FriendDto;
import com.wecloud.im.friend.param.ImFriendApplyDto;
import com.wecloud.im.friend.param.ImFriendBaseDto;
import com.wecloud.im.friend.param.ImFriendBaseParam;
import com.wecloud.im.friend.param.ImFriendPageParam;
import com.wecloud.im.friend.service.ImFriendService;
import com.wecloud.im.service.ImClientService;
import com.wecloud.im.externalaccess.entity.User;
import com.wecloud.im.externalaccess.mapper.UserMapper;
import com.wecloud.im.externalaccess.param.FriendDto;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.common.service.impl.BaseServiceImpl;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author wenzhida
......@@ -43,8 +45,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
private UserService userService;
public FriendDto getFriendInfo(ImFriendBaseParam param) {
ImClient currentClient = imClientService.getCurrentClient();
public FriendDto getFriendInfo(ImClient currentClient, ImFriendBaseParam param) {
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
......@@ -73,8 +74,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
/**
* 全量获取好友列表
*/
public List<FriendDto> getFriends() {
ImClient currentClient = imClientService.getCurrentClient();
public List<FriendDto> getFriends(ImClient currentClient) {
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
......@@ -86,27 +86,10 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
if (pageFriends == null || CollectionUtils.isEmpty(pageFriends.getRecords())) {
return friendDtoList;
}
List<String> friendClientIds = pageFriends.getRecords().stream().map(ImFriendBaseDto::getFriendClientId).collect(Collectors.toList());
List<User> userList = userService.list(
new QueryWrapper<User>().lambda()
.in(User::getId, friendClientIds)
);
if (CollectionUtils.isEmpty(userList)) {
return friendDtoList;
}
Map<String, User> userMap = Maps.newHashMap();
for (User user : userList) {
userMap.put(user.getId().toString(), user);
}
for (ImFriendBaseDto record : pageFriends.getRecords()) {
FriendDto friendDto = new FriendDto();
BeanUtils.copyProperties(record, friendDto);
User user = userMap.get(record.getFriendClientId());
if (user != null) {
friendDto.setIdNumber(user.getIdNumber());
friendDto.setHeadPortrait(user.getHeadPortrait());
friendDto.setNickname(user.getNickname());
}
friendDtoList.add(friendDto);
}
return friendDtoList;
......@@ -115,8 +98,7 @@ public class FriendService extends BaseServiceImpl<UserMapper, User> {
/**
* 获取好友列表申请
*/
public List<FriendDto> getApplyFriends() {
ImClient currentClient = imClientService.getCurrentClient();
public List<FriendDto> getApplyFriends(ImClient currentClient) {
if (currentClient == null) {
throw new BusinessException("当前登录用户未找到");
}
......
......@@ -7,7 +7,6 @@ import io.geekidea.springbootplus.framework.common.enums.BaseEnum;
import io.geekidea.springbootplus.framework.core.pagination.Paging;
import io.geekidea.springbootplus.framework.log.annotation.OperationLog;
import io.geekidea.springbootplus.framework.log.enums.OperationLogType;
import io.geekidea.springbootplus.framework.shiro.util.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
......@@ -16,11 +15,9 @@ import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.wecloud.im.entity.ImClient;
......@@ -114,24 +111,6 @@ public class ImFriendController extends BaseController {
}
/**
* 待接受的好友请求列表,最多只返回1000个(sdk 调用)
* @Author luozh
* @Date 2022年04月21日 05:07:31
* @param
* @Return
*/
@GetMapping("/sdk/unsureFriends")
@ApiOperation(value = "待接受的好友请求列表,最多只返回1000个")
public ApiResult<List<ImFriendApplyDto>> getUnsureFriendsSdk(@RequestParam("clientId") String clientId) {
ImClient currentClient = imClientService.getCacheImClient(SecurityUtils.getCurrentAppId(), clientId);
if (currentClient == null) {
return ApiResult.fail(ApiCode.CLIENT_NOT_FOUNT, null);
}
List<ImFriendApplyDto> friendInfo = imFriendService.getApplyFriends(currentClient);
return ApiResult.ok(friendInfo);
}
/**
* 接受/拒绝好友申请
*/
@PostMapping("/approve")
......
......@@ -14,6 +14,9 @@ import java.io.Serializable;
public class ImFriendBaseParam implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("clientId")
private String clientId;
@ApiModelProperty("好友的client-id")
private String friendClientId;
}
package com.wecloud.im.param;
import lombok.Builder;
import lombok.Data;
/**
*
* @Author luozh
* @Date 2022年04月22日 11:07
* @Version 1.0
*/
@Builder
@Data
public class ClientOnlineStatusChangeDto {
/**
* 用户id
*/
private String userId;
/**
* 状态:0:online 上线、1:offline 离线、2:logout 登出。
*/
private Integer status;
/**
* 操作系统:iOS、Android、Websocket、PC、MiniProgram(小程序),用户上线时同步。
*/
private String os;
/**
* 发生时间
*/
private Long time;
/**
* 用户当前的 IP 地址及端口。
*/
private String clientIp;
}
package com.wecloud.im.service;
/**
* sdk 回调服务
* @Author luozh
* @Date 2022年04月22日 09:08
* @Version 1.0
*/
public interface ImCallbackService {
/**
* 全量消息路由
* @Author luozh
* @Date 2022年04月22日 09:10:15
* @param
* @Return 路由结果
*/
Boolean fullMessageRouting();
/**
* 用户在线状态变化
* @Author luozh
* @Date 2022年04月22日 09:11:28
* @param
* @Return
*/
Boolean clientOnlineStatusChange(Long applicationId, String clientId, Integer status,
Integer deviceType, Long time, String clientIp);
}
package com.wecloud.im.service.impl;
import io.geekidea.springbootplus.framework.common.exception.BusinessException;
import io.geekidea.springbootplus.framework.shiro.signature.SignUtils;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.id.NanoId;
import com.wecloud.im.entity.ImApplication;
import com.wecloud.im.param.ClientOnlineStatusChangeDto;
import com.wecloud.im.service.ImApplicationService;
import com.wecloud.im.service.ImCallbackService;
/**
* 回调服务实现类
* @Author luozh
* @Date 2022年04月22日 09:11
* @Version 1.0
*/
public class ImCallbackServiceImpl implements ImCallbackService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private ImApplicationService applicationService;
/**
* 全量消息路由
* @Author luozh
* @Date 2022年04月22日 09:35:24
* @param
* @Return
*/
@Override
public Boolean fullMessageRouting() {
return null;
}
/**
* 用户在线状态
* @Author luozh
* @Date 2022年04月22日 09:35:47
* @param clientId
* @param status
* @param deviceType
* @param time
* @param clientIp
* @Return
*/
@Override
public Boolean clientOnlineStatusChange(Long applicationId, String clientId, Integer status,
Integer deviceType, Long time, String clientIp) {
ImApplication application = applicationService.getCacheById(applicationId);
if (application == null) {
throw new BusinessException("application not exist");
}
String subscribeUrl = application.getOnlineStatusSubscribeUrl();
String appKey = application.getAppKey();
String appSecret = application.getAppSecret();
String callbackUrl = buildCallbackUrl(subscribeUrl, appKey, appSecret);
ClientOnlineStatusChangeDto body = ClientOnlineStatusChangeDto.builder()
.userId(clientId)
.status(status)
.os("")
.time(time)
.clientIp(clientIp)
.build();
ResponseEntity<Object> response = restTemplate.postForEntity(callbackUrl, body, Object.class);
// 同步在线状态时需要接收服务提供应答,只要有 HTTP 应答码 200 即认为状态已经同步
if (response.getStatusCode().equals(HttpStatus.OK)) {
// do nothing
} else {
// 如果应答超时 5 秒,会再尝试推送 2 次,如果仍然失败,将不再同步此条状态。如短时间内有大面积超时,将暂停推送,1 分钟后会继续推送。
}
return true;
}
/**
* 构建回调请求
* @Author luozh
* @Date 2022年04月22日 10:58:42
* @param
* @Return
*/
private String buildCallbackUrl(String subscribeUrl, String appKey, String appSecret) {
// 计算 Signature (数据签名)
String nonce = NanoId.randomNanoId();
String date = DateUtil.formatHttpDate(new Date());
String signature = SignUtils.buildSignature(appKey, appSecret, nonce, date);
String finalUrl =
subscribeUrl + "?appKey=" + appKey + "&nonce=" + nonce + "&date=" + date + "&signature=" + signature;
return finalUrl;
}
}
......@@ -136,4 +136,19 @@ public class SignUtils {
return new HmacSHA256Signature().computeSignature(secretAccessKey, canonicalString);
}
/**
* 创建回调 Signature (数据签名)
* @Author luozh
* @Date 2022年04月22日 08:43:04
* @param appKey 蔚可云平台分配的App Key
* @param appSecret 蔚可云平台分配的App Secret
* @param nonce 随机字符串 长度为21
* @param date GMT格式时间8
* @Return 数据签名
*/
public static String buildSignature(String appKey, String appSecret, String nonce, String date) {
String canonicalString = appKey + nonce + date;
return new HmacSHA256Signature().computeSignature(appSecret, canonicalString);
}
}
......@@ -29,7 +29,12 @@ public class ResourcePathConstants {
/**
* 获取好友申请列表
*/
public static final String GET_UNSURE_FRIENDS = "/api/friend/sdk/unsureFriends";
public static final String GET_UNSURE_FRIENDS = "/api/friends/sdk/unsureFriends";
/**
* 全量获取好友列表
*/
public static final String GET_FRIENDS = "/api/friends/sdk/getFriends";
}
......@@ -5,6 +5,7 @@ import java.util.List;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend;
/**
*
......@@ -25,7 +26,7 @@ public interface WecloudIm {
* @Return
* @return
*/
ImClient registerClient(Long userId, String headPortrait, String nickname);
ImClient registerClient(String userId, String headPortrait, String nickname);
/**
* 获取用户token
......@@ -35,7 +36,7 @@ public interface WecloudIm {
* @param deviceType 设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac
* @Return
*/
Token getToken(Long userId, Integer deviceType);
Token getToken(String userId, Integer deviceType);
/**
......@@ -47,7 +48,7 @@ public interface WecloudIm {
* @param headPortrait 头像
* @Return
*/
Boolean modifyUser(Long userId, String nickname, String headPortrait);
Boolean modifyUser(String userId, String nickname, String headPortrait);
/**
* 获取好友请求列表
......@@ -56,6 +57,14 @@ public interface WecloudIm {
* @param userId 用户id
* @Return
*/
List<Friend> getUnsureFriends(Long userId);
List<UnsureFriend> getUnsureFriends(String userId);
/**
* 获取所有好友列表
* @Author luozh
* @Date 2022年04月22日 11:45:15
* @param userId 用户id
* @Return
*/
List<Friend> getFriends(String userId);
}
......@@ -6,11 +6,13 @@ import java.util.List;
import com.wecloud.im.sdk.internal.WecloudImClientOperation;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.GetFriendsRequest;
import com.wecloud.im.sdk.model.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend;
/**
*
......@@ -46,7 +48,7 @@ public class WecloudImClient implements WecloudIm {
}
@Override
public ImClient registerClient(Long userId, String headPortrait, String nickname) {
public ImClient registerClient(String userId, String headPortrait, String nickname) {
RegisterClientRequest registerClientRequest =
RegisterClientRequest.builder()
.userId(userId).headPortrait(headPortrait)
......@@ -56,14 +58,14 @@ public class WecloudImClient implements WecloudIm {
}
@Override
public Token getToken(Long userId, Integer deviceType) {
public Token getToken(String userId, Integer deviceType) {
ClientLoginRequest clientLoginRequest = ClientLoginRequest.builder().clientId(userId).deviceType(deviceType).build();
return imClientOperation.getToken(clientLoginRequest);
}
@Override
public Boolean modifyUser(Long userId, String nickname, String headPortrait) {
public Boolean modifyUser(String userId, String nickname, String headPortrait) {
ModifyUserRequest modifyUserRequest =
ModifyUserRequest.builder().userId(userId).nickname(nickname).headPortrait(headPortrait).build();
......@@ -71,12 +73,19 @@ public class WecloudImClient implements WecloudIm {
}
@Override
public List<Friend> getUnsureFriends(Long userId) {
public List<UnsureFriend> getUnsureFriends(String userId) {
GetUnsureFriendsRequest getUnsureFriendsRequest = GetUnsureFriendsRequest.builder().userId(userId).build();
return imClientOperation.getUnsureFriends(getUnsureFriendsRequest);
}
@Override
public List<Friend> getFriends(String userId) {
GetFriendsRequest getFriendsRequest = GetFriendsRequest.builder().userId(userId).build();
return imClientOperation.getFriends(getFriendsRequest);
}
private void initOperations() {
this.imClientOperation = new WecloudImClientOperation(apiDomain, appKey, appSecret);
}
......
......@@ -144,4 +144,19 @@ public class SignUtils {
return new HmacSHA256Signature().computeSignature(secretAccessKey, canonicalString);
}
/**
* 创建回调 Signature (数据签名)
* @Author luozh
* @Date 2022年04月22日 08:43:04
* @param appKey 蔚可云平台分配的App Key
* @param appSecret 蔚可云平台分配的App Secret
* @param nonce 随机字符串 长度为21
* @param date GMT格式时间8
* @Return 数据签名
*/
public static String buildSignature(String appKey, String appSecret, String nonce, String date) {
String canonicalString = appKey + nonce + date;
return new HmacSHA256Signature().computeSignature(appSecret, canonicalString);
}
}
......@@ -12,12 +12,15 @@ import com.wecloud.im.sdk.common.HttpMethod;
import com.wecloud.im.sdk.common.RequestMessage;
import com.wecloud.im.sdk.model.ClientLoginRequest;
import com.wecloud.im.sdk.model.Friend;
import com.wecloud.im.sdk.model.GetFriendsRequest;
import com.wecloud.im.sdk.model.GetUnsureFriendsRequest;
import com.wecloud.im.sdk.model.ImClient;
import com.wecloud.im.sdk.model.ModifyUserRequest;
import com.wecloud.im.sdk.model.RegisterClientRequest;
import com.wecloud.im.sdk.model.Token;
import com.wecloud.im.sdk.model.UnsureFriend;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_FRIENDS;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_TOKEN_URL;
import static com.wecloud.im.sdk.ResourcePathConstants.GET_UNSURE_FRIENDS;
import static com.wecloud.im.sdk.ResourcePathConstants.MODIFY_USER_URL;
......@@ -45,7 +48,7 @@ public class WecloudImClientOperation extends WecloudImOperation {
* @Return
*/
public ImClient registerClient(RegisterClientRequest registerClientRequest) {
Long userId = registerClientRequest.getUserId();
String userId = registerClientRequest.getUserId();
// 参数校验
assertParameterNotNull(userId, "userId");
// 校验通过 构建参数
......@@ -71,7 +74,7 @@ public class WecloudImClientOperation extends WecloudImOperation {
* @Return
*/
public Token getToken(ClientLoginRequest clientLoginRequest) {
Long clientId = clientLoginRequest.getClientId();
String clientId = clientLoginRequest.getClientId();
Integer deviceType = clientLoginRequest.getDeviceType();
// 参数校验
assertParameterNotNull(clientId, "userId");
......@@ -99,7 +102,7 @@ public class WecloudImClientOperation extends WecloudImOperation {
* @Return
*/
public Boolean modifyUser(ModifyUserRequest modifyUserRequest) {
Long userId = modifyUserRequest.getUserId();
String userId = modifyUserRequest.getUserId();
String headPortrait = modifyUserRequest.getHeadPortrait();
String nickname = modifyUserRequest.getNickname();
// 参数校验
......@@ -128,8 +131,8 @@ public class WecloudImClientOperation extends WecloudImOperation {
* @param getUnsureFriendsRequest
* @Return
*/
public List<Friend> getUnsureFriends(GetUnsureFriendsRequest getUnsureFriendsRequest) {
Long userId = getUnsureFriendsRequest.getUserId();
public List<UnsureFriend> getUnsureFriends(GetUnsureFriendsRequest getUnsureFriendsRequest) {
String userId = getUnsureFriendsRequest.getUserId();
// 参数校验
assertParameterNotNull(userId, "userId");
// 校验通过 构建参数
......@@ -142,9 +145,28 @@ public class WecloudImClientOperation extends WecloudImOperation {
.setOriginalRequest(getUnsureFriendsRequest).build();
Object result = doOperation(request);
TypeReference<List<UnsureFriend>> typeReference = new TypeReference<List<UnsureFriend>>() {
};
List<UnsureFriend> unsureFriends = JSON.parseObject(JSON.toJSONString(result), typeReference);
return unsureFriends;
}
public List<Friend> getFriends(GetFriendsRequest getFriendsRequest) {
String userId = getFriendsRequest.getUserId();
// 参数校验
assertParameterNotNull(userId, "userId");
// 校验通过 构建参数
Map<String, String> param = new HashMap<>();
param.put("clientId", userId + "");
// 发送请求
RequestMessage request = new WecloudRequestMessageBuilder().setEndpoint(GET_FRIENDS)
.setMethod(HttpMethod.GET).setParameters(param)
.setOriginalRequest(getFriendsRequest).build();
Object result = doOperation(request);
TypeReference<List<Friend>> typeReference = new TypeReference<List<Friend>>() {
};
List<Friend> friends = JSON.parseObject(JSON.toJSONString(result), typeReference);
return friends;
List<Friend> unsureFriends = JSON.parseObject(JSON.toJSONString(result), typeReference);
return unsureFriends;
}
}
......@@ -85,6 +85,4 @@ public abstract class WecloudImOperation {
return new RequestSigner(method.toString(), resourcePath, creds);
}
}
......@@ -18,7 +18,7 @@ public class ClientLoginRequest extends WebServiceRequest {
/**
* 用户id
*/
private Long clientId;
private String clientId;
/**
* 设备类型 1:ios; 2:android; 3:web; 4:win; 5:mac
......
......@@ -5,7 +5,7 @@ import lombok.Data;
import java.io.Serializable;
/**
*
* 申请中的用户信息
* @Author luozh
* @Date 2022年04月13日 11:03
* @Version 1.0
......@@ -30,19 +30,4 @@ public class Friend implements Serializable {
*/
private Integer state;
/**
* 好友申请者
*/
private String claimerClientId;
/**
* 好友拒绝原因
*/
private String rejectRemark;
/**
* 好友请求说明
*/
private String requestRemark;
}
package com.wecloud.im.sdk.model;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 全量获取好友列表请求
* @Author luozh
* @Date 2022年04月21日 16:51
* @Version 1.0
*/
@EqualsAndHashCode(callSuper = true)
@Builder
@Data
public class GetFriendsRequest extends WebServiceRequest {
/**
* 用户id
*/
private String userId;
}
......@@ -18,5 +18,5 @@ public class GetUnsureFriendsRequest extends WebServiceRequest {
/**
* 用户id
*/
private Long userId;
private String userId;
}
......@@ -18,7 +18,7 @@ public class ModifyUserRequest extends WebServiceRequest {
/**
* userId
*/
private Long userId;
private String userId;
/**
* 昵称
......
......@@ -18,7 +18,7 @@ public class RegisterClientRequest extends WebServiceRequest {
/**
* app 用户id
*/
private Long userId;
private String userId;
/**
* 头像
......
package com.wecloud.im.sdk.model;
import lombok.Data;
import java.io.Serializable;
/**
* 申请中的用户信息
* @Author luozh
* @Date 2022年04月13日 11:03
* @Version 1.0
*/
@Data
public class UnsureFriend implements Serializable {
private static final long serialVersionUID = 5580006330057637138L;
/**
* 好友的client-id
*/
private String friendClientId;
/**
* 好友的昵称备注
*/
private String friendName;
/**
* 好友关系状态,1:待确定,2:已确认,3:已拒绝,4:已删除
*/
private Integer state;
/**
* 好友申请者
*/
private String claimerClientId;
/**
* 好友拒绝原因
*/
private String rejectRemark;
/**
* 好友请求说明
*/
private String requestRemark;
}
......@@ -18,7 +18,7 @@ public class GetTokenSample {
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
Long userId = 20220413001L;
String userId = "20220413001";
Integer deviceType = 1;
Token token = im.getToken(userId, deviceType);
System.out.println("\t get token result=" + JSONObject.toJSONString(token));
......
......@@ -17,7 +17,7 @@ public class ModifySample {
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
Long userId = 20220413001L;
String userId = "20220413001";
String headPortrait = "http://123";
String nickname = "luo_test2";
Boolean result = im.modifyUser(userId, nickname, headPortrait);
......
......@@ -18,7 +18,7 @@ public class RegisterClientSample {
"QizKVHcILRWp6Td2",
"287d04828099fb7de871e9dda845fa8b6b2302faf2ab3737");
Long userId = 20220413001L;
String userId = "20220413001";
String headPortrait = "";
String nickname = "luo_test1";
ImClient imClient = im.registerClient(userId, headPortrait, nickname);
......
......@@ -38,7 +38,7 @@
<reflections.version>0.9.9</reflections.version>
<jansi.version>1.18</jansi.version>
<lombok.version>1.18.12</lombok.version>
<hutool.version>5.2.4</hutool.version>
<hutool.version>5.7.22</hutool.version>
<junit.version>4.12</junit.version>
<ini4j.version>0.5.4</ini4j.version>
<mapstruct.version>1.3.1.Final</mapstruct.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