Package org.bigbluebutton.service.recording

Source Code of org.bigbluebutton.service.recording.RedisListRecorder

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.conference.service.recorder.RecordEvent;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;

import com.google.gson.Gson;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class RedisListRecorder {
  private static Logger log = Red5LoggerFactory.getLogger(RedisListRecorder.class, "bigbluebutton");
  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;
  }
}
TOP

Related Classes of org.bigbluebutton.service.recording.RedisListRecorder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.