Browse Source

friend api

master
tangmingyou 4 years ago
parent
commit
58a8f9880c
  1. 1
      .gitignore
  2. 2293
      doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json
  3. 2293
      doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json
  4. 2293
      doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json
  5. 492
      doc/db/so-im.chnr.json
  6. 20
      im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java
  7. 4
      im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java
  8. 23
      im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java
  9. 5
      im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java
  10. 46
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java
  11. 16
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/dao/FriendMapper.java
  12. 13
      im-das/im-das-user/src/main/resources/application.properties
  13. 5
      im-das/im-das-user/src/main/resources/mapper/FriendMapper.xml
  14. 59
      im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java
  15. 48
      im-entry/src/main/java/net/sopod/soim/entry/handlers/user/ReqAccountSearchHandler.java
  16. 2225
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/friend/Friend.java
  17. 1425
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AccountSearch.java
  18. 1038
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/AddFriend.java
  19. 159
      im-service-api/im-entry-protocol/src/main/java/net/sopod/soim/data/msg/user/UserGroup.java
  20. 19
      im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto
  21. 15
      im-service-api/im-entry-protocol/src/main/resources/proto/user/AccountSearch.proto
  22. 14
      im-service-api/im-entry-protocol/src/main/resources/proto/user/AddFriend.proto
  23. 2
      im-service-api/im-entry-protocol/src/main/resources/proto/user/UserGroup.proto
  24. 27
      im-service-api/im-entry-protocol/src/main/resources/protoSerialNoTable.txt
  25. 2
      im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java
  26. 18
      im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java
  27. 8
      im-service-api/pom.xml
  28. 2
      im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java
  29. 39
      im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java

1
.gitignore vendored

@ -55,3 +55,4 @@ yarn-debug.log*
yarn-error.log* yarn-error.log*
/log /log
*/.back_so-im

2293
doc/db/.back_so-im/so-im-backup-2022522232935.pdma.json

File diff suppressed because one or more lines are too long

2293
doc/db/.back_so-im/so-im-backup-2022522232938.pdma.json

File diff suppressed because one or more lines are too long

2293
doc/db/.back_so-im/so-im-backup-2022522232940.pdma.json

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

20
im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsAddFriend.java

@ -0,0 +1,20 @@
package net.sopod.soim.client.cmd.args;
import com.beust.jcommander.Parameter;
import lombok.Data;
import java.util.List;
/**
* ArgsAddFriend
*
* @author tmy
* @date 2022-05-21 19:28
*/
@Data
public class ArgsAddFriend {
@Parameter
private List<String> parameters;
}

4
im-client/src/main/java/net/sopod/soim/client/cmd/args/ArgsSearch.java

@ -1,6 +1,7 @@
package net.sopod.soim.client.cmd.args; package net.sopod.soim.client.cmd.args;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import lombok.Data;
import java.util.List; import java.util.List;
@ -10,12 +11,13 @@ import java.util.List;
* @author tmy * @author tmy
* @date 2022-05-17 23:10 * @date 2022-05-17 23:10
*/ */
@Data
public class ArgsSearch { public class ArgsSearch {
@Parameter @Parameter
private List<String> parameters; private List<String> parameters;
@Parameter(names = {"-u", "-account"}, required = false, description = "账号") @Parameter(names = {"-u", "-account"}, required = true, description = "账号")
private String account; private String account;
} }

23
im-client/src/main/java/net/sopod/soim/client/handler/cmd/AddFriendHandler.java

@ -0,0 +1,23 @@
package net.sopod.soim.client.handler.cmd;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import net.sopod.soim.client.session.SoImSession;
/**
* AddFriendHandler
*
* @author tmy
* @date 2022-05-21 19:29
*/
@Singleton
public class AddFriendHandler {
@Inject
private SoImSession soImSession;
public void a() {
}
}

5
im-client/src/main/java/net/sopod/soim/client/handler/cmd/SearchHandler.java

@ -5,7 +5,7 @@ import com.google.inject.Singleton;
import net.sopod.soim.client.cmd.args.ArgsSearch; import net.sopod.soim.client.cmd.args.ArgsSearch;
import net.sopod.soim.client.cmd.handler.CmdHandler; import net.sopod.soim.client.cmd.handler.CmdHandler;
import net.sopod.soim.client.session.SoImSession; import net.sopod.soim.client.session.SoImSession;
import net.sopod.soim.data.msg.friend.Friend; import net.sopod.soim.data.msg.user.AccountSearch;
/** /**
* SearchHandler * SearchHandler
@ -26,7 +26,8 @@ public class SearchHandler implements CmdHandler<ArgsSearch> {
@Override @Override
public void handleArgs(ArgsSearch args) { public void handleArgs(ArgsSearch args) {
Friend.ReqFriendSearch reqSearch = Friend.ReqFriendSearch.newBuilder().setKeyword("").build(); AccountSearch.ReqAccountSearch reqSearch = AccountSearch.ReqAccountSearch
.newBuilder().setKeyword(args.getAccount()).build();
soImSession.send(reqSearch); soImSession.send(reqSearch);
} }

46
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/model/entity/ImFriend.java

@ -0,0 +1,46 @@
package net.sopod.soim.das.user.api.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* ImFriend
* 好友关系表
*
* @author tmy
* @date 2022-05-22 23:22
*/
@Data
@Accessors(chain = true)
@TableName("im_friend")
public class ImFriend implements Serializable {
private static final long serialVersionUID = -4703347353944742873L;
/** */
@TableId(value = "id")
private Long id;
/** 用户id */
@TableField(value = "uid")
private Long uid;
/** 好友id */
@TableField(value = "fid")
private Long fid;
/** 状态:0删除1正常 */
@TableField(value = "status")
private Integer status;
/** 创建时间 */
@TableField(value = "create_time")
private Date createTime;
}

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

@ -0,0 +1,16 @@
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.springframework.stereotype.Repository;
/**
* FriendMapper
*
* @author tmy
* @date 2022-05-22 23:24
*/
@Repository
public interface FriendMapper extends BaseMapper<ImFriend> {
}

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

@ -17,12 +17,19 @@ spring.shardingsphere.datasource.ds1.password=sopod@2347#
# 5.1.0 ·Ö±í # 5.1.0 ·Ö±í
# https://github.com/apache/shardingsphere/blob/master/examples/shardingsphere-jdbc-example/single-feature-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-tables.yaml # https://github.com/apache/shardingsphere/blob/master/examples/shardingsphere-jdbc-example/single-feature-example/sharding-example/sharding-raw-jdbc-example/src/main/resources/META-INF/sharding-tables.yaml
spring.shardingsphere.rules.sharding.tables.im_user.actual-data-nodes=ds1.im_user_$->{0..2} # im_user
spring.shardingsphere.rules.sharding.binding-tables=im_user,im_friend
spring.shardingsphere.rules.sharding.tables.im_user.actual-data-nodes=ds1.im_user_$->{0..3}
spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-column=id spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-column=id
spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-algorithm-name=im-user-inline spring.shardingsphere.rules.sharding.tables.im_user.table-strategy.standard.sharding-algorithm-name=im-user-inline
spring.shardingsphere.rules.sharding.binding-tables=im_user
spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.type=INLINE spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.im-user-inline.props.algorithm-expression=im_user_$->{id % 3} 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-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}
# ´ò¿ªsharding-jdbc sqlÊä³öÈÕÖ¾ # ´ò¿ªsharding-jdbc sqlÊä³öÈÕÖ¾
spring.shardingsphere.props.sql-show=true spring.shardingsphere.props.sql-show=true

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

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-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">
</mapper>

59
im-entry/src/main/java/net/sopod/soim/entry/handlers/friend/ReqFriendSearchHandler.java

@ -1,59 +0,0 @@
package net.sopod.soim.entry.handlers.friend;
import com.google.protobuf.MessageLite;
import lombok.extern.slf4j.Slf4j;
import net.sopod.soim.data.msg.friend.Friend;
import net.sopod.soim.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account;
//import net.sopod.soim.logic.api.friend.search.AccountInfo;
//import net.sopod.soim.logic.api.friend.search.AccountSearchService;
//import net.sopod.soim.logic.api.friend.search.ReqAccountSearch;
//import net.sopod.soim.logic.api.friend.search.ResAccountSearch;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* ReqFriendSearchHandler
* 账号搜索服务
*
* @author tmy
* @date 2022-05-17 22:54
*/
@Slf4j
@Service
public class ReqFriendSearchHandler extends AccountMessageHandler<Friend.ReqFriendSearch> {
@Override
public MessageLite handle(Account account, Friend.ReqFriendSearch msg) {
return null;
}
// @DubboReference
// private AccountSearchService accountSearchService;
//
// @Override
// public MessageLite handle(Account account, Friend.ReqFriendSearch msg) {
// msg.getKeyword();
// ReqAccountSearch search = ReqAccountSearch.newBuilder().setKeyword(msg.getKeyword()).build();
// CompletableFuture<ResAccountSearch> future = accountSearchService.searchAccountLikelyAsync(search);
// future.thenAccept(res -> {
// log.info("用户搜索开始...");
// List<AccountInfo> accounts = res.getAccountsList();
// List<Friend.UserInfo> userInfos = accounts.stream().map(
// acc -> Friend.UserInfo.newBuilder()
// .setAccount(acc.getAccount())
// .setNickname(acc.getNickname())
// .setUid(acc.getUid())
// .build()
// ).collect(Collectors.toList());
// Friend.ResFriendSearch resSearch = Friend.ResFriendSearch.newBuilder().addAllUsers(userInfos).build();
// account.writeNow(resSearch);
// });
// return null;
// }
}

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

@ -0,0 +1,48 @@
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.entry.server.handler.AccountMessageHandler;
import net.sopod.soim.entry.server.session.Account;
import net.sopod.soim.logic.api.user.service.AccountService;
import net.sopod.soim.logic.common.model.UserInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
* ReqAccountSearchHandler
*
* @author tmy
* @date 2022-05-21 19:41
*/
@Service
public class ReqAccountSearchHandler extends AccountMessageHandler<AccountSearch.ReqAccountSearch> {
@DubboReference
private AccountService accountService;
@Override
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()
.setAccount(acc.getAccount())
.setNickname(acc.getNickname())
.setUid(acc.getUid())
.build()
).collect(Collectors.toList());
AccountSearch.ResAccountSearch resSearch = AccountSearch.ResAccountSearch
.newBuilder()
.addAllUsers(infos).build();
account.writeNow(resSearch);
});
return null;
}
}

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

File diff suppressed because it is too large Load Diff

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

File diff suppressed because it is too large Load Diff

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

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

@ -1560,6 +1560,18 @@ public final class UserGroup {
*/ */
com.google.protobuf.ByteString com.google.protobuf.ByteString
getAccountBytes(); 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} * Protobuf type {@code net.sopod.soim.data.msg.user.UserInfo}
@ -1575,6 +1587,7 @@ public final class UserGroup {
} }
private UserInfo() { private UserInfo() {
account_ = ""; account_ = "";
nickname_ = "";
} }
@java.lang.Override @java.lang.Override
@ -1618,6 +1631,12 @@ public final class UserGroup {
account_ = s; account_ = s;
break; break;
} }
case 26: {
java.lang.String s = input.readStringRequireUtf8();
nickname_ = s;
break;
}
default: { default: {
if (!parseUnknownField( if (!parseUnknownField(
input, unknownFields, extensionRegistry, tag)) { input, unknownFields, extensionRegistry, tag)) {
@ -1699,6 +1718,44 @@ public final class UserGroup {
} }
} }
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; private byte memoizedIsInitialized = -1;
@java.lang.Override @java.lang.Override
public final boolean isInitialized() { public final boolean isInitialized() {
@ -1719,6 +1776,9 @@ public final class UserGroup {
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) {
com.google.protobuf.GeneratedMessageV3.writeString(output, 2, 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); unknownFields.writeTo(output);
} }
@ -1735,6 +1795,9 @@ public final class UserGroup {
if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) { if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(account_)) {
size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, 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(); size += unknownFields.getSerializedSize();
memoizedSize = size; memoizedSize = size;
return size; return size;
@ -1754,6 +1817,8 @@ public final class UserGroup {
!= other.getUid()) return false; != other.getUid()) return false;
if (!getAccount() if (!getAccount()
.equals(other.getAccount())) return false; .equals(other.getAccount())) return false;
if (!getNickname()
.equals(other.getNickname())) return false;
if (!unknownFields.equals(other.unknownFields)) return false; if (!unknownFields.equals(other.unknownFields)) return false;
return true; return true;
} }
@ -1770,6 +1835,8 @@ public final class UserGroup {
getUid()); getUid());
hash = (37 * hash) + ACCOUNT_FIELD_NUMBER; hash = (37 * hash) + ACCOUNT_FIELD_NUMBER;
hash = (53 * hash) + getAccount().hashCode(); hash = (53 * hash) + getAccount().hashCode();
hash = (37 * hash) + NICKNAME_FIELD_NUMBER;
hash = (53 * hash) + getNickname().hashCode();
hash = (29 * hash) + unknownFields.hashCode(); hash = (29 * hash) + unknownFields.hashCode();
memoizedHashCode = hash; memoizedHashCode = hash;
return hash; return hash;
@ -1907,6 +1974,8 @@ public final class UserGroup {
account_ = ""; account_ = "";
nickname_ = "";
return this; return this;
} }
@ -1935,6 +2004,7 @@ public final class UserGroup {
net.sopod.soim.data.msg.user.UserGroup.UserInfo result = new net.sopod.soim.data.msg.user.UserGroup.UserInfo(this); net.sopod.soim.data.msg.user.UserGroup.UserInfo result = new net.sopod.soim.data.msg.user.UserGroup.UserInfo(this);
result.uid_ = uid_; result.uid_ = uid_;
result.account_ = account_; result.account_ = account_;
result.nickname_ = nickname_;
onBuilt(); onBuilt();
return result; return result;
} }
@ -1990,6 +2060,10 @@ public final class UserGroup {
account_ = other.account_; account_ = other.account_;
onChanged(); onChanged();
} }
if (!other.getNickname().isEmpty()) {
nickname_ = other.nickname_;
onChanged();
}
this.mergeUnknownFields(other.unknownFields); this.mergeUnknownFields(other.unknownFields);
onChanged(); onChanged();
return this; return this;
@ -2125,6 +2199,82 @@ public final class UserGroup {
onChanged(); onChanged();
return this; 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 @java.lang.Override
public final Builder setUnknownFields( public final Builder setUnknownFields(
final com.google.protobuf.UnknownFieldSet unknownFields) { final com.google.protobuf.UnknownFieldSet unknownFields) {
@ -2206,9 +2356,10 @@ public final class UserGroup {
"soim.data.msg.user\"$\n\021ReqOnlineUserList\022" + "soim.data.msg.user\"$\n\021ReqOnlineUserList\022" +
"\017\n\007keyword\030\002 \001(\t\"J\n\021ResOnlineUserList\0225\n" + "\017\n\007keyword\030\002 \001(\t\"J\n\021ResOnlineUserList\0225\n" +
"\005users\030\002 \003(\0132&.net.sopod.soim.data.msg.u" + "\005users\030\002 \003(\0132&.net.sopod.soim.data.msg.u" +
"ser.UserInfo\"(\n\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n" + "ser.UserInfo\":\n\010UserInfo\022\013\n\003uid\030\001 \001(\003\022\017\n" +
"\007account\030\002 \001(\tB+\n\034net.sopod.soim.data.ms" + "\007account\030\002 \001(\t\022\020\n\010nickname\030\003 \001(\tB+\n\034net." +
"g.userB\tUserGroupP\000b\006proto3" "sopod.soim.data.msg.userB\tUserGroupP\000b\006p" +
"roto3"
}; };
descriptor = com.google.protobuf.Descriptors.FileDescriptor descriptor = com.google.protobuf.Descriptors.FileDescriptor
.internalBuildGeneratedFileFrom(descriptorData, .internalBuildGeneratedFileFrom(descriptorData,
@ -2231,7 +2382,7 @@ public final class UserGroup {
internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable = new internal_static_net_sopod_soim_data_msg_user_UserInfo_fieldAccessorTable = new
com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor, internal_static_net_sopod_soim_data_msg_user_UserInfo_descriptor,
new java.lang.String[] { "Uid", "Account", }); new java.lang.String[] { "Uid", "Account", "Nickname", });
} }
// @@protoc_insertion_point(outer_class_scope) // @@protoc_insertion_point(outer_class_scope)

19
im-service-api/im-entry-protocol/src/main/resources/proto/friend/Friend.proto

@ -1,19 +0,0 @@
syntax="proto3";
option java_multiple_files = false;
option java_outer_classname = "Friend";
option java_package = "net.sopod.soim.data.msg.friend";
package net.sopod.soim.data.msg.friend;
message ReqFriendSearch {
string keyword = 1;
}
message ResFriendSearch {
repeated UserInfo users = 8;
}
message UserInfo {
int64 uid = 1;
string account = 2;
string nickname = 3;
}

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

@ -0,0 +1,15 @@
syntax="proto3";
option java_multiple_files = false;
option java_outer_classname = "AccountSearch";
package net.sopod.soim.data.msg.user;
import "proto/user/UserGroup.proto";
message ReqAccountSearch {
string keyword = 1;
}
message ResAccountSearch {
repeated UserInfo users = 8;
}

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

@ -0,0 +1,14 @@
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;
}

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

@ -14,8 +14,8 @@ message ReqOnlineUserList {
message ResOnlineUserList { message ResOnlineUserList {
repeated UserInfo users = 2; // repeated UserInfo users = 2; //
} }
message UserInfo { message UserInfo {
int64 uid = 1; int64 uid = 1;
string account = 2; string account = 2;
string nickname = 3;
} }

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

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

2
im-service-api/im-logic-common/src/main/java/net/sopod/soim/logic/common/model/UserInfo.java

@ -21,4 +21,6 @@ public class UserInfo implements Serializable {
private String account; private String account;
private String nickname;
} }

18
im-service-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/api/user/service/AccountService.java

@ -0,0 +1,18 @@
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;
/**
* AccountService
*
* @author tmy
* @date 2022-05-21 19:07
*/
public interface AccountService {
CompletableFuture<List<UserInfo>> searchAccountLikely(String keyword);
}

8
im-service-api/pom.xml

@ -46,16 +46,16 @@
</dependency> </dependency>
</dependencies> </dependencies>
<build> <!-- <build>
<extensions> <extensions>
<extension> <extension>
<groupId>kr.motd.maven</groupId> <groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId><!--引入操作系统os设置的属性插件,否则${os.detected.classifier} 操作系统版本会找不到 --> <artifactId>os-maven-plugin</artifactId><!- -引入操作系统os设置的属性插件,否则${os.detected.classifier} 操作系统版本会找不到 - ->
<version>1.6.1</version> <version>1.6.1</version>
</extension> </extension>
</extensions> </extensions>
<plugins> <plugins>
<!--添加编译proto文件的编译程序和对应的编译插件--> <!- -添加编译proto文件的编译程序和对应的编译插件- ->
<plugin> <plugin>
<groupId>org.xolstice.maven.plugins</groupId> <groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId> <artifactId>protobuf-maven-plugin</artifactId>
@ -94,7 +94,7 @@
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>-->
</project> </project>

2
im-service/im-logic-friend/src/main/java/net/sopod/soim/logic/friend/service/UserSearchServiceImpl.java

@ -27,7 +27,7 @@ public class UserSearchServiceImpl implements AccountSearchService {
@Override @Override
public ResAccountSearch searchAccountLikely(ReqAccountSearch request) { public ResAccountSearch searchAccountLikely(ReqAccountSearch request) {
// 查询在线用户列表 // 查询用户账户列表
List<ImUser> imUsers = userDas.searchImUser(request.getKeyword(), 10); List<ImUser> imUsers = userDas.searchImUser(request.getKeyword(), 10);
List<AccountInfo> userInfos = imUsers.stream().map( List<AccountInfo> userInfos = imUsers.stream().map(
imUser -> AccountInfo.newBuilder(). imUser -> AccountInfo.newBuilder().

39
im-service/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/AccountServiceImpl.java

@ -0,0 +1,39 @@
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.UserDas;
import net.sopod.soim.logic.api.user.service.AccountService;
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;
/**
* AccountServiceImpl
*
* @author tmy
* @date 2022-05-21 19:08
*/
@DubboService
public class AccountServiceImpl implements AccountService {
@DubboReference
private UserDas userDas;
@Override
public CompletableFuture<List<UserInfo>> searchAccountLikely(String keyword) {
// 查询用户账户列表
List<ImUser> imUsers = userDas.searchImUser(keyword, 10);
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