56 lines
1.6 KiB
Java
56 lines
1.6 KiB
Java
package cn.itcast.server.session;
|
|
|
|
import io.netty.channel.Channel;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Objects;
|
|
import java.util.Set;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.stream.Collectors;
|
|
|
|
public class GroupSessionMemoryImpl implements GroupSession {
|
|
private final Map<String, Group> groupMap = new ConcurrentHashMap<>();
|
|
|
|
@Override
|
|
public Group createGroup(String name, Set<String> members) {
|
|
Group group = new Group(name, members);
|
|
return groupMap.putIfAbsent(name, group);
|
|
}
|
|
|
|
@Override
|
|
public Group joinMember(String name, String member) {
|
|
return groupMap.computeIfPresent(name, (key, value) -> {
|
|
// value.getMembers().add(member);
|
|
return value;
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public Group removeMember(String name, String member) {
|
|
return groupMap.computeIfPresent(name, (key, value) -> {
|
|
// value.getMembers().remove(member);
|
|
return value;
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public Group removeGroup(String name) {
|
|
return groupMap.remove(name);
|
|
}
|
|
|
|
@Override
|
|
public Set<String> getMembers(String name) {
|
|
// return groupMap.getOrDefault(name, Group.EMPTY_GROUP).getMembers();
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public List<Channel> getMembersChannel(String name) {
|
|
return getMembers(name).stream()
|
|
.map(member -> SessionFactory.getSession().getChannel(member))
|
|
.filter(Objects::nonNull)
|
|
.collect(Collectors.toList());
|
|
}
|
|
}
|