package com.google.sitebricks.channel;
import javax.inject.Inject;
import javax.inject.Singleton;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
@Singleton
class ChannelSwitchboard implements Switchboard {
private final Map<String, ObserverWrapper> handlers;
private final ConcurrentMap<String, Channel> channels =
new ConcurrentHashMap<String, Channel>();
@Inject
ChannelSwitchboard(@Handlers Map<String, ObserverWrapper> handlers) {
this.handlers = handlers;
}
public void receive(String data) {
String[] split = data.split(":", 1);
if (split.length > 1)
handlers.get(split[0]).dispatch(split[0], split[1]);
else
handlers.get(ObserverWrapper.DEFAULT).dispatch(null, split[0]);
}
@Override
public Channel named(String name) {
return channels.get(name);
}
public void connect(String socketId, Channel channel) {
channels.put(socketId, channel);
}
public void disconnect(String socketId) {
channels.remove(socketId);
}
}