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

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

@ -4,7 +4,7 @@
"avatar": "", "avatar": "",
"version": "4.1.1", "version": "4.1.1",
"createdTime": "2022-3-7 15:11:08", "createdTime": "2022-3-7 15:11:08",
"updatedTime": "2022-5-22 23:29:40", "updatedTime": "2022-5-23 17:31:56",
"profile": { "profile": {
"default": { "default": {
"db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273", "db": "8FE7C65E-40EB-41B6-B60E-79063AFF6273",
@ -1145,7 +1145,7 @@
}, },
{ {
"defKey": "status", "defKey": "status",
"defName": "状态:1.正常,2.禁用,3删除", "defName": "状态:0删除,1.正常,2.禁用",
"comment": "", "comment": "",
"type": "", "type": "",
"len": "", "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 com.google.inject.Singleton;
import net.sopod.soim.client.logger.Logger; import net.sopod.soim.client.logger.Logger;
import net.sopod.soim.client.session.MessageHandler; 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.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -15,11 +17,11 @@ import java.util.stream.Collectors;
* @date 2022-05-17 23:41 * @date 2022-05-17 23:41
*/ */
@Singleton @Singleton
public class ResFriendSearchHandler implements MessageHandler<Friend.ResFriendSearch> { public class ResFriendSearchHandler implements MessageHandler<AccountSearch.ResAccountSearch> {
@Override @Override
public void handleMsg(Friend.ResFriendSearch msg) { public void handleMsg(AccountSearch.ResAccountSearch msg) {
List<Friend.UserInfo> usersList = msg.getUsersList(); List<UserMsg.UserInfo> usersList = msg.getUsersList();
List<String> userLines = usersList.stream() List<String> userLines = usersList.stream()
.map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname()) .map(u -> u.getUid() + "|" + u.getAccount() + "|" + u.getNickname())
.collect(Collectors.toList()); .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 { public interface LogicConsts {
Integer STATUS_DELETED = 0;
Integer STATUS_NORMAL = 1; Integer STATUS_NORMAL = 1;
Integer STATUS_DISABLED = 2; 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) @TableId(value = "id", type= IdType.INPUT)
private Long id; private Long id;
/** 状态:1.正常,2.禁用,3删除 */ /** 状态:0删除,1.正常,2.禁用 */
@TableField(value = "status") @TableField(value = "status")
private Integer 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 com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.sopod.soim.das.user.api.model.entity.ImFriend; import net.sopod.soim.das.user.api.model.entity.ImFriend;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List;
/** /**
* FriendMapper * FriendMapper
* *
@ -13,4 +16,6 @@ import org.springframework.stereotype.Repository;
@Repository @Repository
public interface FriendMapper extends BaseMapper<ImFriend> { 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 @Override
public ImUser getUserById(Long id) { 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 @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} spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.props.algorithm-expression=im_user_$->{id % 4}
# im_friend # im_friend
spring.shardingsphere.rules.sharding.tables.im_friend.actual-data-nodes=ds1.im_user_$->{0..7} 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.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.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.im-friend-inline.props.algorithm-expression=im-friend-_$->{uid % 8} 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" > <!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"> <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> </mapper>

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

@ -1,9 +1,6 @@
package net.sopod.soim.entry; package net.sopod.soim.entry;
import com.alibaba.nacos.api.exception.NacosException;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; 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.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; 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 com.google.protobuf.MessageLite;
import net.sopod.soim.data.msg.user.AccountSearch; import net.sopod.soim.data.msg.user.AccountSearch;
import net.sopod.soim.data.msg.user.UserGroup; 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.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account; import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.user.service.AccountService; 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) { public MessageLite handle(Account account, AccountSearch.ReqAccountSearch msg) {
CompletableFuture<List<UserInfo>> future = accountService.searchAccountLikely(msg.getKeyword()); CompletableFuture<List<UserInfo>> future = accountService.searchAccountLikely(msg.getKeyword());
future.thenAccept(userInfos -> { future.thenAccept(userInfos -> {
List<UserGroup.UserInfo> infos = userInfos.stream().map( List<UserMsg.UserInfo> infos = userInfos.stream().map(
acc -> UserGroup.UserInfo.newBuilder() acc -> UserMsg.UserInfo.newBuilder()
.setAccount(acc.getAccount()) .setAccount(acc.getAccount())
.setNickname(acc.getNickname()) .setNickname(acc.getNickname())
.setUid(acc.getUid()) .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; package net.sopod.soim.entry.handlers.user;
import com.google.protobuf.MessageLite; 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.entry.server.session.Account;
import net.sopod.soim.data.msg.user.UserGroup; import net.sopod.soim.data.msg.user.UserGroup;
import net.sopod.soim.entry.server.handler.AccountMessageHandler; 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) { public MessageLite handle(Account account, UserGroup.ReqOnlineUserList msg) {
List<UserInfo> userInfos = userBizService.onlineUserList(msg.getKeyword()); 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()) .setUid(user.getUid())
.setAccount(user.getAccount()) .setAccount(user.getAccount())
.build()) .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> { public abstract class AccountMessageHandler<T> implements MessageHandler<T> {
@Override @Override
public final void exec(NetUser netUser, T msg) { public final void exec(NetUser netUser, T req) {
if (!netUser.isAccount()) { if (!netUser.isAccount()) {
throw new IllegalStateException("NetUser is not account!" + netUser); throw new IllegalStateException("NetUser is not account!" + netUser);
} }
MessageLite res = handle((Account) netUser, msg); MessageLite res = handle((Account) netUser, req);
if (res != null) { if (res != null) {
netUser.writeNow(res); 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> * <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(); getUsersList();
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <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> * <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> * <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(); getUsersOrBuilderList();
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <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); int index);
} }
/** /**
@ -659,11 +659,11 @@ public final class AccountSearch {
break; break;
case 66: { case 66: {
if (!((mutable_bitField0_ & 0x00000001) != 0)) { 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; mutable_bitField0_ |= 0x00000001;
} }
users_.add( 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; break;
} }
default: { default: {
@ -702,19 +702,19 @@ public final class AccountSearch {
} }
public static final int USERS_FIELD_NUMBER = 8; 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> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
@java.lang.Override @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_; return users_;
} }
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
@java.lang.Override @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() { getUsersOrBuilderList() {
return users_; return users_;
} }
@ -729,14 +729,14 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
@java.lang.Override @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); return users_.get(index);
} }
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
@java.lang.Override @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) { int index) {
return users_.get(index); return users_.get(index);
} }
@ -1083,22 +1083,22 @@ public final class AccountSearch {
} }
private int bitField0_; 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(); java.util.Collections.emptyList();
private void ensureUsersIsMutable() { private void ensureUsersIsMutable() {
if (!((bitField0_ & 0x00000001) != 0)) { 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; bitField0_ |= 0x00000001;
} }
} }
private com.google.protobuf.RepeatedFieldBuilderV3< 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> * <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) { if (usersBuilder_ == null) {
return java.util.Collections.unmodifiableList(users_); return java.util.Collections.unmodifiableList(users_);
} else { } else {
@ -1118,7 +1118,7 @@ public final class AccountSearch {
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <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) { if (usersBuilder_ == null) {
return users_.get(index); return users_.get(index);
} else { } else {
@ -1129,7 +1129,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder setUsers( 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 (usersBuilder_ == null) {
if (value == null) { if (value == null) {
throw new NullPointerException(); throw new NullPointerException();
@ -1146,7 +1146,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder setUsers( 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) { if (usersBuilder_ == null) {
ensureUsersIsMutable(); ensureUsersIsMutable();
users_.set(index, builderForValue.build()); 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> * <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 (usersBuilder_ == null) {
if (value == null) { if (value == null) {
throw new NullPointerException(); throw new NullPointerException();
@ -1176,7 +1176,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder addUsers( 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 (usersBuilder_ == null) {
if (value == null) { if (value == null) {
throw new NullPointerException(); throw new NullPointerException();
@ -1193,7 +1193,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder addUsers( 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) { if (usersBuilder_ == null) {
ensureUsersIsMutable(); ensureUsersIsMutable();
users_.add(builderForValue.build()); users_.add(builderForValue.build());
@ -1207,7 +1207,7 @@ public final class AccountSearch {
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder addUsers( 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) { if (usersBuilder_ == null) {
ensureUsersIsMutable(); ensureUsersIsMutable();
users_.add(index, builderForValue.build()); 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> * <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code>
*/ */
public Builder addAllUsers( 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) { if (usersBuilder_ == null) {
ensureUsersIsMutable(); ensureUsersIsMutable();
com.google.protobuf.AbstractMessageLite.Builder.addAll( 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> * <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) { int index) {
return getUsersFieldBuilder().getBuilder(index); return getUsersFieldBuilder().getBuilder(index);
} }
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <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) { int index) {
if (usersBuilder_ == null) { if (usersBuilder_ == null) {
return users_.get(index); } else { 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> * <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() { getUsersOrBuilderList() {
if (usersBuilder_ != null) { if (usersBuilder_ != null) {
return usersBuilder_.getMessageOrBuilderList(); return usersBuilder_.getMessageOrBuilderList();
@ -1289,31 +1289,31 @@ public final class AccountSearch {
/** /**
* <code>repeated .net.sopod.soim.data.msg.user.UserInfo users = 8;</code> * <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( 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> * <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) { int index) {
return getUsersFieldBuilder().addBuilder( 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> * <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() { getUsersBuilderList() {
return getUsersFieldBuilder().getBuilderList(); return getUsersFieldBuilder().getBuilderList();
} }
private com.google.protobuf.RepeatedFieldBuilderV3< 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() { getUsersFieldBuilder() {
if (usersBuilder_ == null) { if (usersBuilder_ == null) {
usersBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< 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_, users_,
((bitField0_ & 0x00000001) != 0), ((bitField0_ & 0x00000001) != 0),
getParentForChildren(), getParentForChildren(),
@ -1395,16 +1395,16 @@ public final class AccountSearch {
static { static {
java.lang.String[] descriptorData = { java.lang.String[] descriptorData = {
"\n\036proto/user/AccountSearch.proto\022\034net.so" + "\n\036proto/user/AccountSearch.proto\022\034net.so" +
"pod.soim.data.msg.user\032\032proto/user/UserG" + "pod.soim.data.msg.user\032\030proto/user/UserM" +
"roup.proto\"#\n\020ReqAccountSearch\022\017\n\007keywor" + "sg.proto\"#\n\020ReqAccountSearch\022\017\n\007keyword\030" +
"d\030\001 \001(\t\"I\n\020ResAccountSearch\0225\n\005users\030\010 \003" + "\001 \001(\t\"I\n\020ResAccountSearch\0225\n\005users\030\010 \003(\013" +
"(\0132&.net.sopod.soim.data.msg.user.UserIn" + "2&.net.sopod.soim.data.msg.user.UserInfo" +
"foB\021B\rAccountSearchP\000b\006proto3" "B\021B\rAccountSearchP\000b\006proto3"
}; };
descriptor = com.google.protobuf.Descriptors.FileDescriptor descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData, .internalBuildGeneratedFileFrom(descriptorData,
new com.google.protobuf.Descriptors.FileDescriptor[] { 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 = internal_static_net_sopod_soim_data_msg_user_ReqAccountSearch_descriptor =
getDescriptor().getMessageTypes().get(0); getDescriptor().getMessageTypes().get(0);
@ -1418,7 +1418,7 @@ public final class AccountSearch {
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor, internal_static_net_sopod_soim_data_msg_user_ResAccountSearch_descriptor,
new java.lang.String[] { "Users", }); 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) // @@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; package net.sopod.soim.data.msg.user;
import "proto/user/UserGroup.proto"; import "proto/user/UserMsg.proto";
message ReqAccountSearch { message ReqAccountSearch {
string keyword = 1; 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"; syntax="proto3";
package net.sopod.soim.data.msg.user;
option java_multiple_files = false; option java_multiple_files = false;
option java_outer_classname = "UserGroup"; 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 { message ReqOnlineUserList {
@ -14,8 +16,3 @@ message ReqOnlineUserList {
message ResOnlineUserList { message ResOnlineUserList {
repeated UserInfo users = 2; // 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.user.Friend$ResAddFriend=10000
net.sopod.soim.data.msg.net.HeartBeat$Ping=10001 net.sopod.soim.data.msg.chat.Chat$TextChat=10001
net.sopod.soim.data.msg.user.UserGroup$UserInfo=10002 net.sopod.soim.data.msg.user.Friend$ReqFriendList=10002
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10003 net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10003
net.sopod.soim.data.msg.chat.Chat$TextChat=10004 net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10004
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10005 net.sopod.soim.data.msg.hello.HelloPB$World=10005
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10006 net.sopod.soim.data.msg.net.HeartBeat$Pong=10006
net.sopod.soim.data.msg.hello.HelloPB$World=10007 net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10007
net.sopod.soim.data.msg.user.AddFriend$ReqAddFriend=10008 net.sopod.soim.data.msg.net.HeartBeat$Ping=10008
net.sopod.soim.data.msg.user.AddFriend$ResAddFriend=10009 net.sopod.soim.data.msg.user.Friend$ReqAddFriend=10009
net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10010 net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10010
net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10011 net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10011
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10012 net.sopod.soim.data.msg.user.UserMsg$UserInfo=10012
net.sopod.soim.data.msg.net.HeartBeat$Pong=10013 net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10013
net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10014 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