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 groupMap = new ConcurrentHashMap<>(); @Override public Group createGroup(String name, Set 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 getMembers(String name) { // return groupMap.getOrDefault(name, Group.EMPTY_GROUP).getMembers(); return null; } @Override public List getMembersChannel(String name) { return getMembers(name).stream() .map(member -> SessionFactory.getSession().getChannel(member)) .filter(Objects::nonNull) .collect(Collectors.toList()); } }