package com.destinationradiodenver.mobileStreaming.singleton;
import java.io.Serializable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import javax.annotation.PostConstruct;
import javax.ejb.AccessTimeout;
import javax.ejb.ConcurrencyManagement;
import javax.ejb.ConcurrencyManagementType;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;
import org.jboss.logging.Logger;
import org.red5.service.httpstream.SegmentConsumer;
import com.destinationradiodenver.mobileStreaming.FfThread;
@Startup
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@AccessTimeout(value=10, unit=TimeUnit.SECONDS)
public class SegmentConsumers extends ConcurrentHashMap<String, SegmentConsumer> implements Serializable {
/**
* @author cpenhale
*/
private static final long serialVersionUID = -7647887359926613782L;
private Logger log = Logger.getLogger(SegmentConsumers.class);
@Inject
private AvailabilityService availabilityService;
public SegmentConsumers(){
log.info("Creating Ffthreads Singleton");
}
@PostConstruct
private void init(){
log.info("Encoders Ffthreads initialized");
}
public void startSegmentConsumerForFfThread(FfThread ffThread){
// The SegmentConsumer notifies the AvailabilityService of new files generated by FfThread
SegmentConsumer segmentConsumer = new SegmentConsumer();
segmentConsumer.setPipePath(ffThread.getPipePath());
log.infof("Constructing SegmentConsumer - PipePath Name: %s MobileProfile Name: %s", ffThread.getPipePath(), ffThread.getMobileProfile().getName());
segmentConsumer.setStreamName(ffThread.getStreamName()+"_"+ffThread.getMobileProfile().getName());
segmentConsumer.setMobileProfile(ffThread.getMobileProfile());
segmentConsumer.setAvailabilityService(availabilityService);
new Thread(segmentConsumer).start();
super.put(ffThread.getStreamName()+"_"+ffThread.getMobileProfile().getName(), segmentConsumer);
}
public void stopSegmentConsumer(String name){
SegmentConsumer segmentConsumer = super.get(name);
if(segmentConsumer!=null){
segmentConsumer.setInterruptMe(true);
super.remove(name);
}
}
}