29 changed files with 10256 additions and 2350 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -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; |
||||
|
||||
} |
||||
@ -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() { |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -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; |
||||
|
||||
} |
||||
@ -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> { |
||||
|
||||
} |
||||
@ -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> |
||||
@ -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;
|
||||
// }
|
||||
|
||||
} |
||||
@ -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; |
||||
} |
||||
|
||||
} |
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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; |
||||
} |
||||
@ -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; |
||||
} |
||||
@ -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; |
||||
} |
||||
@ -1,14 +1,15 @@
|
||||
net.sopod.soim.data.msg.net.HeartBeat$Ping=10000 |
||||
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10001 |
||||
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10002 |
||||
net.sopod.soim.data.msg.friend.Friend$ResFriendSearch=10003 |
||||
net.sopod.soim.data.msg.hello.HelloPB$Hello=10004 |
||||
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10005 |
||||
net.sopod.soim.data.msg.friend.Friend$ReqFriendSearch=10006 |
||||
net.sopod.soim.data.msg.friend.Friend$UserInfo=10007 |
||||
net.sopod.soim.data.msg.user.UserGroup$UserInfo=10008 |
||||
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10009 |
||||
net.sopod.soim.data.msg.hello.HelloPB$Hello=10000 |
||||
net.sopod.soim.data.msg.net.HeartBeat$Ping=10001 |
||||
net.sopod.soim.data.msg.user.UserGroup$UserInfo=10002 |
||||
net.sopod.soim.data.msg.user.UserGroup$ResOnlineUserList=10003 |
||||
net.sopod.soim.data.msg.chat.Chat$TextChat=10004 |
||||
net.sopod.soim.data.msg.task.Tasks$NetUserDelayCloseTask=10005 |
||||
net.sopod.soim.data.msg.auth.Auth$ResTokenAuth=10006 |
||||
net.sopod.soim.data.msg.hello.HelloPB$World=10007 |
||||
net.sopod.soim.data.msg.user.AddFriend$ReqAddFriend=10008 |
||||
net.sopod.soim.data.msg.user.AddFriend$ResAddFriend=10009 |
||||
net.sopod.soim.data.msg.auth.Auth$ReqTokenAuth=10010 |
||||
net.sopod.soim.data.msg.net.HeartBeat$Pong=10011 |
||||
net.sopod.soim.data.msg.chat.Chat$TextChat=10012 |
||||
net.sopod.soim.data.msg.hello.HelloPB$World=10013 |
||||
net.sopod.soim.data.msg.user.AccountSearch$ReqAccountSearch=10011 |
||||
net.sopod.soim.data.msg.user.UserGroup$ReqOnlineUserList=10012 |
||||
net.sopod.soim.data.msg.net.HeartBeat$Pong=10013 |
||||
net.sopod.soim.data.msg.user.AccountSearch$ResAccountSearch=10014 |
||||
|
||||
@ -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); |
||||
|
||||
} |
||||
@ -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…
Reference in new issue