package rfx.server.http.websocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPubSub;
import rfx.server.configs.RedisPoolConfigs;
import rfx.server.util.StringUtil;
/**
*
* the data manager from Subscribed Redis Channel
*
* @author trieu
*
*/
public class SubscribedChannelManager extends JedisPubSub {
public static final String CHANNEL_FULL_STATS = "fullStats";
public static final String CHANNEL_COMPACT_STATS = "compactStats";
private static Logger logger = LoggerFactory.getLogger(SubscribedChannelManager.class);
WebSocketChannelManager wsChannelManager;
String channelName;
String message = "";
public synchronized String getMessage() {
return message;
}
public synchronized void setMessage(String fullStatsMessage) {
this.message = fullStatsMessage;
}
public SubscribedChannelManager(String channelName) {
super();
this.channelName = channelName;
init();
}
void init() {
wsChannelManager = WebSocketChannelManager.get(this.channelName);
RedisPoolConfigs redisPoolConfigs = RedisPoolConfigs.load();
String host = redisPoolConfigs.getRealtimePubSub().get("host");
int port = StringUtil.safeParseInt(redisPoolConfigs.getRealtimePubSub().get("port"));
JedisPool jedisPool = new JedisPool(redisPoolConfigs.getJedisPoolConfig(), host, port, 0);
final Jedis subscriberJedis = jedisPool.getResource();
new Thread(new Runnable() {
@Override
public void run() {
try {
logger.info("--- Subscribing to channelName: \""+channelName+"\"");
subscriberJedis.subscribe(SubscribedChannelManager.this, channelName);
logger.info("Subscription ended.");
} catch (Exception e) {
logger.error("Subscribing failed.", e);
}
}
}).start();
}
@Override
public void onMessage(String channel, String message) {
logger.info("Message received. Channel: {}, Msg: {}", channel, message);
//wsChannelManager.broadcastMessage(message);
setMessage(message);
wsChannelManager.broadcastMessageToAllChannels(this.channelName,message);
}
@Override
public void onPMessage(String pattern, String channel, String message) {
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
}
@Override
public void onPUnsubscribe(String pattern, int subscribedChannels) {
}
@Override
public void onPSubscribe(String pattern, int subscribedChannels) {
}
}