package cn.itcast.server.session; import io.netty.channel.Channel; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class SessionMemoryImpl implements Session { private final Map usernameChannelMap = new ConcurrentHashMap<>(); private final Map channelUsernameMap = new ConcurrentHashMap<>(); private final Map> channelAttributesMap = new ConcurrentHashMap<>(); @Override public void bind(Channel channel, String username) { usernameChannelMap.put(username, channel); channelUsernameMap.put(channel, username); channelAttributesMap.put(channel, new ConcurrentHashMap<>()); } @Override public void unbind(Channel channel) { String username = channelUsernameMap.remove(channel); usernameChannelMap.remove(username); channelAttributesMap.remove(channel); } @Override public Object getAttribute(Channel channel, String name) { return channelAttributesMap.get(channel).get(name); } @Override public void setAttribute(Channel channel, String name, Object value) { channelAttributesMap.get(channel).put(name, value); } @Override public Channel getChannel(String username) { return usernameChannelMap.get(username); } @Override public String toString() { return usernameChannelMap.toString(); } }