Browse Source

friend logic

master
tangmingyou 4 years ago
parent
commit
65e1f6774c
  1. 6
      doc/db/.back_so-im/so-im-backup-2022523162225.pdma.json
  2. 6
      doc/db/.back_so-im/so-im-backup-2022523173150.pdma.json
  3. 10
      doc/db/.back_so-im/so-im-backup-2022523173156.pdma.json
  4. 4
      doc/db/so-im.chnr.json
  5. 10
      im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendSearchHandler.java
  6. 3
      im-common/src/main/java/net/sopod/soim/common/constant/LogicConsts.java
  7. 2
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java
  8. 50
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java
  9. 5
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java
  10. 80
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java
  11. 5
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java
  12. 2
      im-das/im-das-user/src/main/resources/application.properties
  13. 4
      im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml
  14. 3
      im-entry/src/main/java/net/sopod/soim/entry/EntryApplication.java
  15. 5
      im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java
  16. 50
      im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAddFriendHandler.java
  17. 29
      im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java
  18. 3
      im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java
  19. 6
      im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java
  20. 80
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java
  21. 1038
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java
  22. 2426
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/Friend.java
  23. 880
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java
  24. 839
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserMsg.java
  25. 2
      im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto
  26. 14
      im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto
  27. 26
      im-service-api/im-entry-protocol/src/main/resources/proto/user/Friend.proto
  28. 11
      im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto
  29. 12
      im-service-api/im-entry-protocol/src/main/resources/proto/user/UserMsg.proto
  30. 32
      im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt
  31. 27
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/FriendService.java
  32. 59
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java

6
doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json → doc/db/.back_so-im/so-im-backup-2022523162225.pdma.json

@ -4,7 +4,7 @@
"avatar": "",
"version": "4.1.1",
"createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-5-22 23:29:29",
"updatedTime": "2022-5-23 16:22:23",
"profile": {
"default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -1145,7 +1145,7 @@
},
{
"defKey": "status",
"defName": "状态:1.正常,2.禁用,3删除",
"defName": "状态:0删除,1.正常,2.禁用",
"comment": "",
"type": "",
"len": "",
@ -1443,7 +1443,7 @@
"len": "",
"scale": "",
"primaryKey": false,
"notNull": false,
"notNull": true,
"autoIncrement": false,
"defaultValue": "",
"hideInGraph": false,

6
doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json → doc/db/.back_so-im/so-im-backup-2022523173150.pdma.json

@ -4,7 +4,7 @@
"avatar": "",
"version": "4.1.1",
"createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-5-22 23:29:38",
"updatedTime": "2022-5-23 16:22:25",
"profile": {
"default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -1145,7 +1145,7 @@
},
{
"defKey": "status",
"defName": "状态:1.正常,2.禁用,3删除",
"defName": "状态:0删除,1.正常,2.禁用",
"comment": "",
"type": "",
"len": "",
@ -1443,7 +1443,7 @@
"len": "",
"scale": "",
"primaryKey": false,
"notNull": false,
"notNull": true,
"autoIncrement": false,
"defaultValue": "",
"hideInGraph": false,

10
doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json → doc/db/.back_so-im/so-im-backup-2022523173156.pdma.json

@ -4,7 +4,7 @@
"avatar": "",
"version": "4.1.1",
"createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-5-22 23:29:35",
"updatedTime": "2022-5-23 17:31:50",
"profile": {
"default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -1145,7 +1145,7 @@
},
{
"defKey": "status",
"defName": "状态:1.正常,2.禁用,3删除",
"defName": "状态:0删除,1.正常,2.禁用",
"comment": "",
"type": "",
"len": "",
@ -1422,7 +1422,7 @@
"defKey": "fid",
"defName": "好友id",
"comment": "",
"type": "bigint",
"type": "",
"len": "",
"scale": "",
"primaryKey": false,
@ -1432,7 +1432,7 @@
"hideInGraph": false,
"refDict": "",
"extProps": {},
"domain": "",
"domain": "1E5537DF-B204-49BC-AC1D-457BC6DEE707",
"id": "E8A2D3BB-2D91-42C5-9403-FE6B103C2712"
},
{
@ -1443,7 +1443,7 @@
"len": "",
"scale": "",
"primaryKey": false,
"notNull": false,
"notNull": true,
"autoIncrement": false,
"defaultValue": "",
"hideInGraph": false,

4
doc/db/so-im.chnr.json

@ -4,7 +4,7 @@
"avatar": "",
"version": "4.1.1",
"createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-5-22 23:29:40",
"updatedTime": "2022-5-23 17:31:56",
"profile": {
"default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -1145,7 +1145,7 @@
},
{
"defKey": "status",
"defName": "状态:1.正常,2.禁用,3删除",
"defName": "状态:0删除,1.正常,2.禁用",
"comment": "",
"type": "",
"len": "",

10
im-client/src/main/java/net/sopod/soim/client/handler/msg/ResFriendSearchHandler.java

@ -3,7 +3,9 @@ package net.sopod.soim.client.handler.msg;
import com.google.inject.Singleton;
import net.sopod.soim.client.logger.Logger;
import net.sopod.soim.client.session.MessageHandler;
import net.sopod.soim.data.msg.friend.Friend;
import net.sopod.soim.data.msg.user.AccountSearch;
import net.sopod.soim.data.msg.user.UserGroup;
import net.sopod.soim.data.msg.user.UserMsg;
import java.util.List;
import java.util.stream.Collectors;
@ -15,11 +17,11 @@ import java.util.stream.Collectors;
* @date 2022-05-17 23:41
*/
@Singleton
public class ResFriendSearchHandler implements MessageHandler<Friend.ResFriendSearch> {
public class ResFriendSearchHandler implements MessageHandler<AccountSearch.ResAccountSearch> {
@Override
public void handleMsg(Friend.ResFriendSearch msg) {
List<Friend.UserInfo> usersList = msg.getUsersList();
public void handleMsg(AccountSearch.ResAccountSearch msg) {
List<UserMsg.UserInfo> usersList = msg.getUsersList();
List<String> userLines = usersList.stream()
.map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname())
.collect(Collectors.toList());

3
im-common/src/main/java/net/sopod/soim/common/constant/LogicConsts.java

@ -8,10 +8,11 @@ package net.sopod.soim.common.constant;
*/
public interface LogicConsts {
Integer STATUS_DELETED = 0;
Integer STATUS_NORMAL = 1;
Integer STATUS_DISABLED = 2;
Integer STATUS_DELETED = 3;
}

2
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImUser.java

@ -28,7 +28,7 @@ public class ImUser implements Serializable {
@TableId(value = "id", type= IdType.INPUT)
private Long id;
/** 状态:1.正常,2.禁用,3删除 */
/** 状态:0删除,1.正常,2.禁用 */
@TableField(value = "status")
private Integer status;

50
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/FriendDas.java

@ -0,0 +1,50 @@
package net.sopod.soim.das.user.api.service;
import net.sopod.soim.das.user.api.model.entity.ImUser;
import java.util.List;
/**
* FriendDas
*
* @author tmy
* @date 2022-05-23 15:45
*/
public interface FriendDas {
/**
* 新增好友
*
* @param uid 用户id
* @param fid 好友id
* @return 影响行数
*/
int insert(Long uid, Long fid);
/**
* 好友是否存在
*
* @param uid 用户id
* @param fid 好友id
* @return 影响行数
*/
Boolean isExists(Long uid, Long fid);
/**
* 删除好友
*
* @param uid 用户id
* @param fid 好友id
* @return 影响行数
*/
int remove(Long uid, Long fid);
/**
* 查询所有好友
*
* @param uid 主键
* @return 好友列表
*/
List<ImUser> queryAllFriend(Long uid);
}

5
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java

@ -2,8 +2,11 @@ package net.sopod.soim.das.user.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.sopod.soim.das.user.api.model.entity.ImFriend;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* FriendMapper
*
@ -13,4 +16,6 @@ import org.springframework.stereotype.Repository;
@Repository
public interface FriendMapper extends BaseMapper<ImFriend> {
List<Long> selectAllFriendId(@Param("uid") Long uid);
}

80
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/FriendDasImpl.java

@ -0,0 +1,80 @@
package net.sopod.soim.das.user.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.AllArgsConstructor;
import net.sopod.soim.common.constant.LogicConsts;
import net.sopod.soim.common.util.Collects;
import net.sopod.soim.common.util.ImClock;
import net.sopod.soim.das.user.api.model.entity.ImFriend;
import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.FriendDas;
import net.sopod.soim.das.user.dao.FriendMapper;
import net.sopod.soim.das.user.dao.UserMapper;
import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* FriendDasImpl
*
* @author tmy
* @date 2022-05-23 16:07
*/
@DubboService
@AllArgsConstructor
public class FriendDasImpl implements FriendDas {
private static Logger logger = LoggerFactory.getLogger(FriendDasImpl.class);
private FriendMapper friendMapper;
private UserMapper userMapper;
@Override
public int insert(Long uid, Long fid) {
ImFriend imFriend = new ImFriend()
.setUid(uid)
.setFid(fid)
.setStatus(1)
.setCreateTime(ImClock.date());
return friendMapper.insert(imFriend);
}
@Override
public Boolean isExists(Long uid, Long fid) {
LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda()
.eq(ImFriend::getUid, uid)
.eq(ImFriend::getFid, fid)
.eq(ImFriend::getStatus, 1);
List<ImFriend> imFriends = friendMapper.selectList(friendQuery);
if (Collects.isEmpty(imFriends)) {
return Boolean.FALSE;
}
if (imFriends.size() > 1) {
logger.warn("重复的好友数据: user={}, friend={}", uid, fid);
}
return Boolean.TRUE;
}
@Override
public int remove(Long uid, Long fid) {
LambdaQueryWrapper<ImFriend> friendQuery = new QueryWrapper<ImFriend>().lambda()
.eq(ImFriend::getUid, uid)
.eq(ImFriend::getFid, fid)
.eq(ImFriend::getStatus, 1);
return friendMapper.update(new ImFriend().setStatus(0), friendQuery);
}
@Override
public List<ImUser> queryAllFriend(Long uid) {
List<Long> fids = friendMapper.selectAllFriendId(uid);
LambdaQueryWrapper<ImUser> userQuery = new QueryWrapper<ImUser>().lambda()
.in(ImUser::getId, fids)
.eq(ImUser::getStatus, LogicConsts.STATUS_NORMAL);
return userMapper.selectList(userQuery);
}
}

5
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasImpl.java

@ -26,7 +26,10 @@ public class UserDasImpl implements UserDas {
@Override
public ImUser getUserById(Long id) {
return userMapper.selectById(id);
LambdaQueryWrapper<ImUser> userQuery = new QueryWrapper<ImUser>().lambda()
.eq(ImUser::getId, id)
.eq(ImUser::getStatus, LogicConsts.STATUS_NORMAL);
return userMapper.selectOne(userQuery);
}
@Override

2
im-das/im-das-user/src/main/resources/application.properties

@ -26,7 +26,7 @@ spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.type=INL
spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.props.algorithm-expression=im_user_$->{id % 4}
# im_friend
spring.shardingsphere.rules.sharding.tables.im_friend.actual-data-nodes=ds1.im_user_$->{0..7}
spring.shardingsphere.rules.sharding.tables.im_friend.table-strategy.standard.sharding-column=id
spring.shardingsphere.rules.sharding.tables.im_friend.table-strategy.standard.sharding-column=uid
spring.shardingsphere.rules.sharding.tables.im_friend.table-strategy.standard.sharding-algorithm-name=im-friend-inline
spring.shardingsphere.rules.sharding.sharding-algorithms.im-friend-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.im-friend-inline.props.algorithm-expression=im-friend-_$->{uid % 8}

4
im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml

@ -2,4 +2,8 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.sopod.soim.das.user.dao.FriendMapper">
<select id="selectAllFriendId" resultType="long">
select fid from im_friend where uid = #{uid} and status = 0
</select>
</mapper>

3
im-entry/src/main/java/net/sopod/soim/entry/EntryApplication.java

@ -1,9 +1,6 @@
package net.sopod.soim.entry;
import com.alibaba.nacos.api.exception.NacosException;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

5
im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java

@ -3,6 +3,7 @@ package net.sopod.soim.entry.handlers.user;
import com.google.protobuf.MessageLite;
import net.sopod.soim.data.msg.user.AccountSearch;
import net.sopod.soim.data.msg.user.UserGroup;
import net.sopod.soim.data.msg.user.UserMsg;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.user.service.AccountService;
@ -30,8 +31,8 @@ public class ReqAccountSearchHandler extends AccountMessageHandler<AccountSearch
public MessageLite handle(Account account, AccountSearch.ReqAccountSearch msg) {
CompletableFuture<List<UserInfo>> future = accountService.searchAccountLikely(msg.getKeyword());
future.thenAccept(userInfos -> {
List<UserGroup.UserInfo> infos = userInfos.stream().map(
acc -> UserGroup.UserInfo.newBuilder()
List<UserMsg.UserInfo> infos = userInfos.stream().map(
acc -> UserMsg.UserInfo.newBuilder()
.setAccount(acc.getAccount())
.setNickname(acc.getNickname())
.setUid(acc.getUid())

50
im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAddFriendHandler.java

@ -0,0 +1,50 @@
package net.sopod.soim.entry.handlers.user;
import com.google.protobuf.MessageLite;
import net.sopod.soim.data.msg.user.AccountSearch;
import net.sopod.soim.data.msg.user.Friend;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.user.service.FriendService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
/**
* ReqAddFriendHandler
*
* @author tmy
* @date 2022-05-23 15:39
*/
@Service
public class ReqAddFriendHandler extends AccountMessageHandler<Friend.ReqAddFriend> {
private static final Logger logger = LoggerFactory.getLogger(ReqAddFriendHandler.class);
@DubboReference
private FriendService friendService;
@Override
public MessageLite handle(Account account, Friend.ReqAddFriend req) {
// 好友id
long fid = req.getFid();
long uid = account.getUid();
logger.info("添加好友: {}, {}", uid, fid);
CompletableFuture<String> addFuture = friendService.addFriend(uid, fid);
addFuture.whenComplete((msg, err) -> {
if (err != null) {
logger.error("添加好友失败:", err);
return;
}
Friend.ResAddFriend res = Friend.ResAddFriend.newBuilder()
.setSuccess(msg == null).setMsg(msg).build();
account.writeNow(res);
logger.info("添加好友成功");
});
return null;
}
}

29
im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqFriendListHandler.java

@ -0,0 +1,29 @@
package net.sopod.soim.entry.handlers.user;
import com.google.protobuf.MessageLite;
import net.sopod.soim.data.msg.user.Friend;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.user.service.FriendService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
/**
* ReqFriendListHandler
*
* @author tmy
* @date 2022-05-23 17:42
*/
@Service
public class ReqFriendListHandler extends AccountMessageHandler<Friend.ReqFriendList> {
@DubboReference
private FriendService friendService;
@Override
public MessageLite handle(Account account, Friend.ReqFriendList req) {
return null;
}
}

3
im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqOnlineUserListHandler.java

@ -1,6 +1,7 @@
package net.sopod.soim.entry.handlers.user;
import com.google.protobuf.MessageLite;
import net.sopod.soim.data.msg.user.UserMsg;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.data.msg.user.UserGroup;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
@ -32,7 +33,7 @@ public class ReqOnlineUserListHandler extends AccountMessageHandler<UserGroup.Re
public MessageLite handle(Account account, UserGroup.ReqOnlineUserList msg) {
List<UserInfo> userInfos = userBizService.onlineUserList(msg.getKeyword());
List<UserGroup.UserInfo> resUserInfos = userInfos.stream().map(user -> UserGroup.UserInfo.newBuilder()
List<UserMsg.UserInfo> resUserInfos = userInfos.stream().map(user -> UserMsg.UserInfo.newBuilder()
.setUid(user.getUid())
.setAccount(user.getAccount())
.build())

6
im-entry/src/main/java/net/sopod/soim/entry/server/handler/AccountMessageHandler.java

@ -14,16 +14,16 @@ import net.sopod.soim.entry.server.session.NetUser;
public abstract class AccountMessageHandler<T> implements MessageHandler<T> {
@Override
public final void exec(NetUser netUser, T msg) {
public final void exec(NetUser netUser, T req) {
if (!netUser.isAccount()) {
throw new IllegalStateException("NetUser is not account!" + netUser);
}
MessageLite res = handle((Account) netUser, msg);
MessageLite res = handle((Account) netUser, req);
if (res != null) {
netUser.writeNow(res);
}
}
public abstract MessageLite handle(Account account, T msg);
public abstract MessageLite handle(Account account, T req);
}

80
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java

@ -589,12 +589,12 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo>
java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo>
getUsersList();
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index);
net.sopod.soim.data.msg.user.UserMsg.UserInfo getUsers(int index);
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
@ -602,12 +602,12 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
java.util.List<? extends net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>
java.util.List<? extends net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder>
getUsersOrBuilderList();
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder(
net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder getUsersOrBuilder(
int index);
}
/**
@ -659,11 +659,11 @@ public final class AccountSearch {
break;
case 66: {
if (!((mutable_bitField0_ & 0x00000001) != 0)) {
users_ = new java.util.ArrayList<net.sopod.soim.data.msg.user.UserGroup.UserInfo>();
users_ = new java.util.ArrayList<net.sopod.soim.data.msg.user.UserMsg.UserInfo>();
mutable_bitField0_ |= 0x00000001;
}
users_.add(
input.readMessage(net.sopod.soim.data.msg.user.UserGroup.UserInfo.parser(), extensionRegistry));
input.readMessage(net.sopod.soim.data.msg.user.UserMsg.UserInfo.parser(), extensionRegistry));
break;
}
default: {
@ -702,19 +702,19 @@ public final class AccountSearch {
}
public static final int USERS_FIELD_NUMBER = 8;
private java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo> users_;
private java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo> users_;
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
@java.lang.Override
public java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo> getUsersList() {
public java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo> getUsersList() {
return users_;
}
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
@java.lang.Override
public java.util.List<? extends net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>
public java.util.List<? extends net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder>
getUsersOrBuilderList() {
return users_;
}
@ -729,14 +729,14 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
@java.lang.Override
public net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index) {
public net.sopod.soim.data.msg.user.UserMsg.UserInfo getUsers(int index) {
return users_.get(index);
}
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
@java.lang.Override
public net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder(
public net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder getUsersOrBuilder(
int index) {
return users_.get(index);
}
@ -1083,22 +1083,22 @@ public final class AccountSearch {
}
private int bitField0_;
private java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo> users_ =
private java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo> users_ =
java.util.Collections.emptyList();
private void ensureUsersIsMutable() {
if (!((bitField0_ & 0x00000001) != 0)) {
users_ = new java.util.ArrayList<net.sopod.soim.data.msg.user.UserGroup.UserInfo>(users_);
users_ = new java.util.ArrayList<net.sopod.soim.data.msg.user.UserMsg.UserInfo>(users_);
bitField0_ |= 0x00000001;
}
}
private com.google.protobuf.RepeatedFieldBuilderV3<
net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder> usersBuilder_;
net.sopod.soim.data.msg.user.UserMsg.UserInfo, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder, net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder> usersBuilder_;
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo> getUsersList() {
public java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo> getUsersList() {
if (usersBuilder_ == null) {
return java.util.Collections.unmodifiableList(users_);
} else {
@ -1118,7 +1118,7 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public net.sopod.soim.data.msg.user.UserGroup.UserInfo getUsers(int index) {
public net.sopod.soim.data.msg.user.UserMsg.UserInfo getUsers(int index) {
if (usersBuilder_ == null) {
return users_.get(index);
} else {
@ -1129,7 +1129,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder setUsers(
int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo value) {
int index, net.sopod.soim.data.msg.user.UserMsg.UserInfo value) {
if (usersBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@ -1146,7 +1146,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder setUsers(
int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) {
int index, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder builderForValue) {
if (usersBuilder_ == null) {
ensureUsersIsMutable();
users_.set(index, builderForValue.build());
@ -1159,7 +1159,7 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder addUsers(net.sopod.soim.data.msg.user.UserGroup.UserInfo value) {
public Builder addUsers(net.sopod.soim.data.msg.user.UserMsg.UserInfo value) {
if (usersBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@ -1176,7 +1176,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder addUsers(
int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo value) {
int index, net.sopod.soim.data.msg.user.UserMsg.UserInfo value) {
if (usersBuilder_ == null) {
if (value == null) {
throw new NullPointerException();
@ -1193,7 +1193,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder addUsers(
net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) {
net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder builderForValue) {
if (usersBuilder_ == null) {
ensureUsersIsMutable();
users_.add(builderForValue.build());
@ -1207,7 +1207,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder addUsers(
int index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder builderForValue) {
int index, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder builderForValue) {
if (usersBuilder_ == null) {
ensureUsersIsMutable();
users_.add(index, builderForValue.build());
@ -1221,7 +1221,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public Builder addAllUsers(
java.lang.Iterable<? extends net.sopod.soim.data.msg.user.UserGroup.UserInfo> values) {
java.lang.Iterable<? extends net.sopod.soim.data.msg.user.UserMsg.UserInfo> values) {
if (usersBuilder_ == null) {
ensureUsersIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll(
@ -1261,14 +1261,14 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder getUsersBuilder(
public net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder getUsersBuilder(
int index) {
return getUsersFieldBuilder().getBuilder(index);
}
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder getUsersOrBuilder(
public net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder getUsersOrBuilder(
int index) {
if (usersBuilder_ == null) {
return users_.get(index); } else {
@ -1278,7 +1278,7 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public java.util.List<? extends net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>
public java.util.List<? extends net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder>
getUsersOrBuilderList() {
if (usersBuilder_ != null) {
return usersBuilder_.getMessageOrBuilderList();
@ -1289,31 +1289,31 @@ public final class AccountSearch {
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder addUsersBuilder() {
public net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder addUsersBuilder() {
return getUsersFieldBuilder().addBuilder(
net.sopod.soim.data.msg.user.UserGroup.UserInfo.getDefaultInstance());
net.sopod.soim.data.msg.user.UserMsg.UserInfo.getDefaultInstance());
}
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder addUsersBuilder(
public net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder addUsersBuilder(
int index) {
return getUsersFieldBuilder().addBuilder(
index, net.sopod.soim.data.msg.user.UserGroup.UserInfo.getDefaultInstance());
index, net.sopod.soim.data.msg.user.UserMsg.UserInfo.getDefaultInstance());
}
/**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/
public java.util.List<net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder>
public java.util.List<net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder>
getUsersBuilderList() {
return getUsersFieldBuilder().getBuilderList();
}
private com.google.protobuf.RepeatedFieldBuilderV3<
net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>
net.sopod.soim.data.msg.user.UserMsg.UserInfo, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder, net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder>
getUsersFieldBuilder() {
if (usersBuilder_ == null) {
usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
net.sopod.soim.data.msg.user.UserGroup.UserInfo, net.sopod.soim.data.msg.user.UserGroup.UserInfo.Builder, net.sopod.soim.data.msg.user.UserGroup.UserInfoOrBuilder>(
net.sopod.soim.data.msg.user.UserMsg.UserInfo, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder, net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder>(
users_,
((bitField0_ & 0x00000001) != 0),
getParentForChildren(),
@ -1395,16 +1395,16 @@ public final class AccountSearch {
static {
java.lang.String[] descriptorData = {
"\n\036proto/user/AccountSearch.proto\022\034net.so" +
"pod.soim.data.msg.user\032\032proto/user/UserG" +
"roup.proto\"#\n\020ReqAccountSearch\022\017\n\007keywor" +
"d\030\001 \001(\t\"I\n\020ResAccountSearch\0225\n\005users\030\010 \003" +
"(\0132&.net.sopod.soim.data.msg.user.UserIn" +
"foB\021B\rAccountSearchP\000b\006proto3"
"pod.soim.data.msg.user\032\030proto/user/UserM" +
"sg.proto\"#\n\020ReqAccountSearch\022\017\n\007keyword\030" +
"\001 \001(\t\"I\n\020ResAccountSearch\0225\n\005users\030\010 \003(\013" +
"2&.net.sopod.soim.data.msg.user.UserInfo" +
"B\021B\rAccountSearchP\000b\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
net.sopod.soim.data.msg.user.UserGroup.getDescriptor(),
net.sopod.soim.data.msg.user.UserMsg.getDescriptor(),
});
internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor =
getDescriptor().getMessageTypes().get(0);
@ -1418,7 +1418,7 @@ public final class AccountSearch {
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor,
new java.lang.String[] { "Users", });
net.sopod.soim.data.msg.user.UserGroup.getDescriptor();
net.sopod.soim.data.msg.user.UserMsg.getDescriptor();
}
// @@protoc_insertion_point(outer_class_scope)

1038
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java

File diff suppressed because it is too large Load Diff

2426
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/Friend.java

File diff suppressed because it is too large Load Diff

880
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java

File diff suppressed because it is too large Load Diff

839
im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserMsg.java

@ -0,0 +1,839 @@
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: proto/user/UserMsg.proto
package net.sopod.soim.data.msg.user;
public final class UserMsg {
private UserMsg() {}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistryLite registry) {
}
public static void registerAllExtensions(
com.google.protobuf.ExtensionRegistry registry) {
registerAllExtensions(
(com.google.protobuf.ExtensionRegistryLite) registry);
}
public interface UserInfoOrBuilder extends
// @@protoc_insertion_point(interface_extends:net.sopod.soim.data.msg.user.UserInfo)
com.google.protobuf.MessageOrBuilder {
/**
* <code>int64 uid = 1;</code>
* @return The uid.
*/
long getUid();
/**
* <code>string account = 2;</code>
* @return The account.
*/
java.lang.String getAccount();
/**
* <code>string account = 2;</code>
* @return The bytes for account.
*/
com.google.protobuf.ByteString
getAccountBytes();
/**
* <code>string nickname = 3;</code>
* @return The nickname.
*/
java.lang.String getNickname();
/**
* <code>string nickname = 3;</code>
* @return The bytes for nickname.
*/
com.google.protobuf.ByteString
getNicknameBytes();
}
/**
* Protobuf type {@code net.sopod.soim.data.msg.user.UserInfo}
*/
public static final class UserInfo extends
com.google.protobuf.GeneratedMessageV3 implements
// @@protoc_insertion_point(message_implements:net.sopod.soim.data.msg.user.UserInfo)
UserInfoOrBuilder {
private static final long serialVersionUID = 0L;
// Use UserInfo.newBuilder() to construct.
private UserInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
super(builder);
}
private UserInfo() {
account_ = "";
nickname_ = "";
}
@java.lang.Override
@SuppressWarnings({"unused"})
protected java.lang.Object newInstance(
UnusedPrivateParameter unused) {
return new UserInfo();
}
@java.lang.Override
public final com.google.protobuf.UnknownFieldSet
getUnknownFields() {
return this.unknownFields;
}
private UserInfo(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
this();
if (extensionRegistry == null) {
throw new java.lang.NullPointerException();
}
com.google.protobuf.UnknownFieldSet.Builder unknownFields =
com.google.protobuf.UnknownFieldSet.newBuilder();
try {
boolean done = false;
while (!done) {
int tag = input.readTag();
switch (tag) {
case 0:
done = true;
break;
case 8: {
uid_ = input.readInt64();
break;
}
case 18: {
java.lang.String s = input.readStringRequireUtf8();
account_ = s;
break;
}
case 26: {
java.lang.String s = input.readStringRequireUtf8();
nickname_ = s;
break;
}
default: {
if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) {
done = true;
}
break;
}
}
}
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
throw e.setUnfinishedMessage(this);
} catch (java.io.IOException e) {
throw new com.google.protobuf.InvalidProtocolBufferException(
e).setUnfinishedMessage(this);
} finally {
this.unknownFields = unknownFields.build();
makeExtensionsImmutable();
}
}
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return net.sopod.soim.data.msg.user.UserMsg.internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return net.sopod.soim.data.msg.user.UserMsg.internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable
.ensureFieldAccessorsInitialized(
net.sopod.soim.data.msg.user.UserMsg.UserInfo.class, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder.class);
}
public static final int UID_FIELD_NUMBER = 1;
private long uid_;
/**
* <code>int64 uid = 1;</code>
* @return The uid.
*/
@java.lang.Override
public long getUid() {
return uid_;
}
public static final int ACCOUNT_FIELD_NUMBER = 2;
private volatile java.lang.Object account_;
/**
* <code>string account = 2;</code>
* @return The account.
*/
@java.lang.Override
public java.lang.String getAccount() {
java.lang.Object ref = account_;
if (ref instanceof java.lang.String) {
return (java.lang.String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
account_ = s;
return s;
}
}
/**
* <code>string account = 2;</code>
* @return The bytes for account.
*/
@java.lang.Override
public com.google.protobuf.ByteString
getAccountBytes() {
java.lang.Object ref = account_;
if (ref instanceof java.lang.String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
account_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
public static final int NICKNAME_FIELD_NUMBER = 3;
private volatile java.lang.Object nickname_;
/**
* <code>string nickname = 3;</code>
* @return The nickname.
*/
@java.lang.Override
public java.lang.String getNickname() {
java.lang.Object ref = nickname_;
if (ref instanceof java.lang.String) {
return (java.lang.String) ref;
} else {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
nickname_ = s;
return s;
}
}
/**
* <code>string nickname = 3;</code>
* @return The bytes for nickname.
*/
@java.lang.Override
public com.google.protobuf.ByteString
getNicknameBytes() {
java.lang.Object ref = nickname_;
if (ref instanceof java.lang.String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
nickname_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
private byte memoizedIsInitialized = -1;
@java.lang.Override
public final boolean isInitialized() {
byte isInitialized = memoizedIsInitialized;
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
memoizedIsInitialized = 1;
return true;
}
@java.lang.Override
public void writeTo(com.google.protobuf.CodedOutputStream output)
throws java.io.IOException {
if (uid_ != 0L) {
output.writeInt64(1, uid_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 2, account_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 3, nickname_);
}
unknownFields.writeTo(output);
}
@java.lang.Override
public int getSerializedSize() {
int size = memoizedSize;
if (size != -1) return size;
size = 0;
if (uid_ != 0L) {
size += com.google.protobuf.CodedOutputStream
.computeInt64Size(1, uid_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, account_);
}
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(nickname_)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, nickname_);
}
size += unknownFields.getSerializedSize();
memoizedSize = size;
return size;
}
@java.lang.Override
public boolean equals(final java.lang.Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof net.sopod.soim.data.msg.user.UserMsg.UserInfo)) {
return super.equals(obj);
}
net.sopod.soim.data.msg.user.UserMsg.UserInfo other = (net.sopod.soim.data.msg.user.UserMsg.UserInfo) obj;
if (getUid()
!= other.getUid()) return false;
if (!getAccount()
.equals(other.getAccount())) return false;
if (!getNickname()
.equals(other.getNickname())) return false;
if (!unknownFields.equals(other.unknownFields)) return false;
return true;
}
@java.lang.Override
public int hashCode() {
if (memoizedHashCode != 0) {
return memoizedHashCode;
}
int hash = 41;
hash = (19 * hash) + getDescriptor().hashCode();
hash = (37 * hash) + UID_FIELD_NUMBER;
hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
getUid());
hash = (37 * hash) + ACCOUNT_FIELD_NUMBER;
hash = (53 * hash) + getAccount().hashCode();
hash = (37 * hash) + NICKNAME_FIELD_NUMBER;
hash = (53 * hash) + getNickname().hashCode();
hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash;
return hash;
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
java.nio.ByteBuffer data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
java.nio.ByteBuffer data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
com.google.protobuf.ByteString data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
com.google.protobuf.ByteString data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(byte[] data)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
byte[] data,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return PARSER.parseFrom(data, extensionRegistry);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseDelimitedFrom(java.io.InputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseDelimitedFrom(
java.io.InputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseDelimitedWithIOException(PARSER, input, extensionRegistry);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
com.google.protobuf.CodedInputStream input)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input);
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo parseFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
return com.google.protobuf.GeneratedMessageV3
.parseWithIOException(PARSER, input, extensionRegistry);
}
@java.lang.Override
public Builder newBuilderForType() { return newBuilder(); }
public static Builder newBuilder() {
return DEFAULT_INSTANCE.toBuilder();
}
public static Builder newBuilder(net.sopod.soim.data.msg.user.UserMsg.UserInfo prototype) {
return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
}
@java.lang.Override
public Builder toBuilder() {
return this == DEFAULT_INSTANCE
? new Builder() : new Builder().mergeFrom(this);
}
@java.lang.Override
protected Builder newBuilderForType(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
Builder builder = new Builder(parent);
return builder;
}
/**
* Protobuf type {@code net.sopod.soim.data.msg.user.UserInfo}
*/
public static final class Builder extends
com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
// @@protoc_insertion_point(builder_implements:net.sopod.soim.data.msg.user.UserInfo)
net.sopod.soim.data.msg.user.UserMsg.UserInfoOrBuilder {
public static final com.google.protobuf.Descriptors.Descriptor
getDescriptor() {
return net.sopod.soim.data.msg.user.UserMsg.internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor;
}
@java.lang.Override
protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internalGetFieldAccessorTable() {
return net.sopod.soim.data.msg.user.UserMsg.internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable
.ensureFieldAccessorsInitialized(
net.sopod.soim.data.msg.user.UserMsg.UserInfo.class, net.sopod.soim.data.msg.user.UserMsg.UserInfo.Builder.class);
}
// Construct using net.sopod.soim.data.msg.user.UserMsg.UserInfo.newBuilder()
private Builder() {
maybeForceBuilderInitialization();
}
private Builder(
com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
super(parent);
maybeForceBuilderInitialization();
}
private void maybeForceBuilderInitialization() {
if (com.google.protobuf.GeneratedMessageV3
.alwaysUseFieldBuilders) {
}
}
@java.lang.Override
public Builder clear() {
super.clear();
uid_ = 0L;
account_ = "";
nickname_ = "";
return this;
}
@java.lang.Override
public com.google.protobuf.Descriptors.Descriptor
getDescriptorForType() {
return net.sopod.soim.data.msg.user.UserMsg.internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor;
}
@java.lang.Override
public net.sopod.soim.data.msg.user.UserMsg.UserInfo getDefaultInstanceForType() {
return net.sopod.soim.data.msg.user.UserMsg.UserInfo.getDefaultInstance();
}
@java.lang.Override
public net.sopod.soim.data.msg.user.UserMsg.UserInfo build() {
net.sopod.soim.data.msg.user.UserMsg.UserInfo result = buildPartial();
if (!result.isInitialized()) {
throw newUninitializedMessageException(result);
}
return result;
}
@java.lang.Override
public net.sopod.soim.data.msg.user.UserMsg.UserInfo buildPartial() {
net.sopod.soim.data.msg.user.UserMsg.UserInfo result = new net.sopod.soim.data.msg.user.UserMsg.UserInfo(this);
result.uid_ = uid_;
result.account_ = account_;
result.nickname_ = nickname_;
onBuilt();
return result;
}
@java.lang.Override
public Builder clone() {
return super.clone();
}
@java.lang.Override
public Builder setField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.setField(field, value);
}
@java.lang.Override
public Builder clearField(
com.google.protobuf.Descriptors.FieldDescriptor field) {
return super.clearField(field);
}
@java.lang.Override
public Builder clearOneof(
com.google.protobuf.Descriptors.OneofDescriptor oneof) {
return super.clearOneof(oneof);
}
@java.lang.Override
public Builder setRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
int index, java.lang.Object value) {
return super.setRepeatedField(field, index, value);
}
@java.lang.Override
public Builder addRepeatedField(
com.google.protobuf.Descriptors.FieldDescriptor field,
java.lang.Object value) {
return super.addRepeatedField(field, value);
}
@java.lang.Override
public Builder mergeFrom(com.google.protobuf.Message other) {
if (other instanceof net.sopod.soim.data.msg.user.UserMsg.UserInfo) {
return mergeFrom((net.sopod.soim.data.msg.user.UserMsg.UserInfo)other);
} else {
super.mergeFrom(other);
return this;
}
}
public Builder mergeFrom(net.sopod.soim.data.msg.user.UserMsg.UserInfo other) {
if (other == net.sopod.soim.data.msg.user.UserMsg.UserInfo.getDefaultInstance()) return this;
if (other.getUid() != 0L) {
setUid(other.getUid());
}
if (!other.getAccount().isEmpty()) {
account_ = other.account_;
onChanged();
}
if (!other.getNickname().isEmpty()) {
nickname_ = other.nickname_;
onChanged();
}
this.mergeUnknownFields(other.unknownFields);
onChanged();
return this;
}
@java.lang.Override
public final boolean isInitialized() {
return true;
}
@java.lang.Override
public Builder mergeFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws java.io.IOException {
net.sopod.soim.data.msg.user.UserMsg.UserInfo parsedMessage = null;
try {
parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
parsedMessage = (net.sopod.soim.data.msg.user.UserMsg.UserInfo) e.getUnfinishedMessage();
throw e.unwrapIOException();
} finally {
if (parsedMessage != null) {
mergeFrom(parsedMessage);
}
}
return this;
}
private long uid_ ;
/**
* <code>int64 uid = 1;</code>
* @return The uid.
*/
@java.lang.Override
public long getUid() {
return uid_;
}
/**
* <code>int64 uid = 1;</code>
* @param value The uid to set.
* @return This builder for chaining.
*/
public Builder setUid(long value) {
uid_ = value;
onChanged();
return this;
}
/**
* <code>int64 uid = 1;</code>
* @return This builder for chaining.
*/
public Builder clearUid() {
uid_ = 0L;
onChanged();
return this;
}
private java.lang.Object account_ = "";
/**
* <code>string account = 2;</code>
* @return The account.
*/
public java.lang.String getAccount() {
java.lang.Object ref = account_;
if (!(ref instanceof java.lang.String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
account_ = s;
return s;
} else {
return (java.lang.String) ref;
}
}
/**
* <code>string account = 2;</code>
* @return The bytes for account.
*/
public com.google.protobuf.ByteString
getAccountBytes() {
java.lang.Object ref = account_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
account_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>string account = 2;</code>
* @param value The account to set.
* @return This builder for chaining.
*/
public Builder setAccount(
java.lang.String value) {
if (value == null) {
throw new NullPointerException();
}
account_ = value;
onChanged();
return this;
}
/**
* <code>string account = 2;</code>
* @return This builder for chaining.
*/
public Builder clearAccount() {
account_ = getDefaultInstance().getAccount();
onChanged();
return this;
}
/**
* <code>string account = 2;</code>
* @param value The bytes for account to set.
* @return This builder for chaining.
*/
public Builder setAccountBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
checkByteStringIsUtf8(value);
account_ = value;
onChanged();
return this;
}
private java.lang.Object nickname_ = "";
/**
* <code>string nickname = 3;</code>
* @return The nickname.
*/
public java.lang.String getNickname() {
java.lang.Object ref = nickname_;
if (!(ref instanceof java.lang.String)) {
com.google.protobuf.ByteString bs =
(com.google.protobuf.ByteString) ref;
java.lang.String s = bs.toStringUtf8();
nickname_ = s;
return s;
} else {
return (java.lang.String) ref;
}
}
/**
* <code>string nickname = 3;</code>
* @return The bytes for nickname.
*/
public com.google.protobuf.ByteString
getNicknameBytes() {
java.lang.Object ref = nickname_;
if (ref instanceof String) {
com.google.protobuf.ByteString b =
com.google.protobuf.ByteString.copyFromUtf8(
(java.lang.String) ref);
nickname_ = b;
return b;
} else {
return (com.google.protobuf.ByteString) ref;
}
}
/**
* <code>string nickname = 3;</code>
* @param value The nickname to set.
* @return This builder for chaining.
*/
public Builder setNickname(
java.lang.String value) {
if (value == null) {
throw new NullPointerException();
}
nickname_ = value;
onChanged();
return this;
}
/**
* <code>string nickname = 3;</code>
* @return This builder for chaining.
*/
public Builder clearNickname() {
nickname_ = getDefaultInstance().getNickname();
onChanged();
return this;
}
/**
* <code>string nickname = 3;</code>
* @param value The bytes for nickname to set.
* @return This builder for chaining.
*/
public Builder setNicknameBytes(
com.google.protobuf.ByteString value) {
if (value == null) {
throw new NullPointerException();
}
checkByteStringIsUtf8(value);
nickname_ = value;
onChanged();
return this;
}
@java.lang.Override
public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
}
@java.lang.Override
public final Builder mergeUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.mergeUnknownFields(unknownFields);
}
// @@protoc_insertion_point(builder_scope:net.sopod.soim.data.msg.user.UserInfo)
}
// @@protoc_insertion_point(class_scope:net.sopod.soim.data.msg.user.UserInfo)
private static final net.sopod.soim.data.msg.user.UserMsg.UserInfo DEFAULT_INSTANCE;
static {
DEFAULT_INSTANCE = new net.sopod.soim.data.msg.user.UserMsg.UserInfo();
}
public static net.sopod.soim.data.msg.user.UserMsg.UserInfo getDefaultInstance() {
return DEFAULT_INSTANCE;
}
private static final com.google.protobuf.Parser<UserInfo>
PARSER = new com.google.protobuf.AbstractParser<UserInfo>() {
@java.lang.Override
public UserInfo parsePartialFrom(
com.google.protobuf.CodedInputStream input,
com.google.protobuf.ExtensionRegistryLite extensionRegistry)
throws com.google.protobuf.InvalidProtocolBufferException {
return new UserInfo(input, extensionRegistry);
}
};
public static com.google.protobuf.Parser<UserInfo> parser() {
return PARSER;
}
@java.lang.Override
public com.google.protobuf.Parser<UserInfo> getParserForType() {
return PARSER;
}
@java.lang.Override
public net.sopod.soim.data.msg.user.UserMsg.UserInfo getDefaultInstanceForType() {
return DEFAULT_INSTANCE;
}
}
private static final com.google.protobuf.Descriptors.Descriptor
internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor;
private static final
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable;
public static com.google.protobuf.Descriptors.FileDescriptor
getDescriptor() {
return descriptor;
}
private static com.google.protobuf.Descriptors.FileDescriptor
descriptor;
static {
java.lang.String[] descriptorData = {
"\n\030proto/user/UserMsg.proto\022\034net.sopod.so" +
"im.data.msg.user\":\n\010UserInfo\022\013\n\003uid\030\001 \001(" +
"\003\022\017\n\007account\030\002 \001(\t\022\020\n\010nickname\030\003 \001(\tB)\n\034" +
"net.sopod.soim.data.msg.userB\007UserMsgP\000b" +
"\006proto3"
};
descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] {
});
internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor =
getDescriptor().getMessageTypes().get(0);
internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor,
new java.lang.String[] { "Uid", "Account", "Nickname", });
}
// @@protoc_insertion_point(outer_class_scope)
}

2
im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto

@ -5,7 +5,7 @@ option java_outer_classname = "AccountSearch";
package net.sopod.soim.data.msg.user;
import "proto/user/UserGroup.proto";
import "proto/user/UserMsg.proto";
message ReqAccountSearch {
string keyword = 1;

14
im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto

@ -1,14 +0,0 @@
syntax="proto3";
option java_multiple_files = false;
option java_outer_classname = "AddFriend";
package net.sopod.soim.data.msg.user;
message ReqAddFriend {
int64 uid = 1;
}
message ResAddFriend {
bool success = 1;
}

26
im-service-api/im-entry-protocol/src/main/resources/proto/user/Friend.proto

@ -0,0 +1,26 @@
syntax="proto3";
option java_multiple_files = false;
option java_outer_classname = "Friend";
package net.sopod.soim.data.msg.user;
import "proto/user/UserMsg.proto";
message ReqAddFriend {
int64 fid = 1;
}
message ResAddFriend {
bool success = 1;
string msg = 2;
}
message ReqFriendList {
}
message ResFriendList {
repeated UserInfo friends = 6;
}

11
im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto

@ -1,9 +1,11 @@
syntax="proto3";
package net.sopod.soim.data.msg.user;
option java_multiple_files = false;
option java_outer_classname = "UserGroup";
option java_package = "net.sopod.soim.data.msg.user";
package net.sopod.soim.data.msg.user;
import "proto/user/UserMsg.proto";
// 线
message ReqOnlineUserList {
@ -14,8 +16,3 @@ message ReqOnlineUserList {
message ResOnlineUserList {
repeated UserInfo users = 2; //
}
message UserInfo {
int64 uid = 1;
string account = 2;
string nickname = 3;
}

12
im-service-api/im-entry-protocol/src/main/resources/proto/user/UserMsg.proto

@ -0,0 +1,12 @@
syntax="proto3";
package net.sopod.soim.data.msg.user;
option java_multiple_files = false;
option java_outer_classname = "UserMsg";
option java_package = "net.sopod.soim.data.msg.user";
message UserInfo {
int64 uid = 1;
string account = 2;
string nickname = 3;
}

32
im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt

@ -1,15 +1,17 @@
net.sopod.soim.data.msg.hello.HelloPB$Hello=10000
net.sopod.soim.data.msg.net.HeartBeat$Ping=10001
net.sopod.soim.data.msg.user.UserGroup$UserInfo=10002
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10003
net.sopod.soim.data.msg.chat.Chat$TextChat=10004
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10005
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10006
net.sopod.soim.data.msg.hello.HelloPB$World=10007
net.sopod.soim.data.msg.user.AddFriend$ReqAddFriend=10008
net.sopod.soim.data.msg.user.AddFriend$ResAddFriend=10009
net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10010
net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10011
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10012
net.sopod.soim.data.msg.net.HeartBeat$Pong=10013
net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10014
net.sopod.soim.data.msg.user.Friend$ResAddFriend=10000
net.sopod.soim.data.msg.chat.Chat$TextChat=10001
net.sopod.soim.data.msg.user.Friend$ReqFriendList=10002
net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10003
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10004
net.sopod.soim.data.msg.hello.HelloPB$World=10005
net.sopod.soim.data.msg.net.HeartBeat$Pong=10006
net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10007
net.sopod.soim.data.msg.net.HeartBeat$Ping=10008
net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10009
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10010
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10011
net.sopod.soim.data.msg.user.UserMsg$UserInfo=10012
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10013
net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10014
net.sopod.soim.data.msg.user.Friend$ResFriendList=10015
net.sopod.soim.data.msg.hello.HelloPB$Hello=10016

27
im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/FriendService.java

@ -0,0 +1,27 @@
package net.sopod.soim.logic.api.user.service;
import net.sopod.soim.logic.common.model.UserInfo;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* FriendService
*
* @author tmy
* @date 2022-05-23 15:42
*/
public interface FriendService {
/**
* 添加好友
* @return 成功返回 null,失败返回失败原因
*/
CompletableFuture<String> addFriend(Long uid, Long fid);
/**
* 获取好友列表
*/
CompletableFuture<List<UserInfo>> listFriend(Long uid);
}

59
im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/FriendServiceImpl.java

@ -0,0 +1,59 @@
package net.sopod.soim.logic.user.service;
import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.FriendDas;
import net.sopod.soim.das.user.api.service.UserDas;
import net.sopod.soim.logic.api.user.service.FriendService;
import net.sopod.soim.logic.common.model.UserInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* FriendServiceImpl
*
* @author tmy
* @date 2022-05-23 15:44
*/
@DubboService
public class FriendServiceImpl implements FriendService {
@DubboReference
private FriendDas friendDas;
@DubboReference
private UserDas userDas;
/**
* TODO 幂等性处理
*/
@Override
public CompletableFuture<String> addFriend(Long uid, Long fid) {
ImUser friend = userDas.getUserById(fid);
CompletableFuture<String> future = new CompletableFuture<>();
if (friend == null) {
return CompletableFuture.completedFuture("不存在的账号");
}
if (Boolean.TRUE.equals(friendDas.isExists(uid, fid))) {
return CompletableFuture.completedFuture("该用户已是你的好友");
}
// 添加好友数据
friendDas.insert(uid, fid);
return CompletableFuture.completedFuture(null);
}
@Override
public CompletableFuture<List<UserInfo>> listFriend(Long uid) {
List<ImUser> imUsers = friendDas.queryAllFriend(uid);
List<UserInfo> userInfos = imUsers.stream().map(imUser -> new UserInfo()
.setUid(imUser.getId())
.setAccount(imUser.getAccount())
.setNickname(imUser.getNickname())
).collect(Collectors.toList());
return CompletableFuture.completedFuture(userInfos);
}
}
Loading…
Cancel
Save