package org.bigbluebutton.service.recording; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; import org.bigbluebutton.core.service.recorder.RecordEvent; import com.google.gson.Gson; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; public class RedisListRecorder { private static final int NTHREADS = 1; private static final Executor exec = Executors.newFixedThreadPool(NTHREADS); private static final Executor runExec = Executors.newFixedThreadPool(NTHREADS); private BlockingQueue<RecordEvent> messages = new LinkedBlockingQueue<RecordEvent>(); private volatile boolean recordEvents = false; JedisPool redisPool; public void start() { recordEvents = true; Runnable sender = new Runnable() { public void run() { while (recordEvents) { RecordEvent message; try { message = messages.take(); recordEvent(message); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; exec.execute(sender); } public void stop() { recordEvents = false; } private void recordEvent(final RecordEvent message) { Runnable task = new Runnable() { public void run() { Jedis jedis = redisPool.getResource(); try { String key = "bbb:recording:" + message.getMeetingID(); Gson gson= new Gson(); jedis.rpush(key, gson.toJson(message.toMap())); } finally { redisPool.returnResource(jedis); } } }; runExec.execute(task); } public void record(RecordEvent message) { messages.offer(message); } public JedisPool getRedisPool() { return redisPool; } public void setRedisPool(JedisPool redisPool) { this.redisPool = redisPool; } }