package org.mconf.bbb.deskshare;
import java.util.List;
import java.util.Map;
import org.jboss.netty.channel.Channel;
import org.mconf.bbb.BigBlueButtonClient;
import org.mconf.bbb.RtmpConnection;
import org.red5.server.api.IAttributeStore;
import org.red5.server.api.so.IClientSharedObject;
import org.red5.server.api.so.ISharedObjectBase;
import org.red5.server.api.so.ISharedObjectListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.flazr.rtmp.client.ClientOptions;
import com.flazr.rtmp.message.Video;
import com.flazr.util.Utils;
public class BbbDeskShareReceiver implements ISharedObjectListener {
protected class DeskShareConnection extends DeskShareReceiverConnection {
public DeskShareConnection(ClientOptions options,
BigBlueButtonClient context) {
super(options, context);
}
@Override
protected void onVideo(Video video) {
BbbDeskShareReceiver.this.onVideo(video);
}
@Override
protected void onConnected(RtmpConnection handler, Channel channel) {
BbbDeskShareReceiver.this.onConnected(handler, channel);
}
}
private static final Logger log = LoggerFactory.getLogger(BbbDeskShareReceiver.class);
private String streamName;
private DeskShareConnection deskShareConnection;
private IClientSharedObject deskShareSO;
public BbbDeskShareReceiver(BigBlueButtonClient context) {
ClientOptions opt = new ClientOptions();
opt.setClientVersionToUse(Utils.fromHex("00000000"));
opt.setHost(context.getJoinService().getApplicationService().getServerUrl());
opt.setAppName("deskShare/");
streamName = context.getJoinService().getJoinedMeeting().getRoom();
opt.setWriterToSave(null);
opt.setStreamName(context.getJoinService().getJoinedMeeting().getConference());
deskShareConnection = new DeskShareConnection(opt, context);
}
protected void onVideo(Video video) {
log.debug("received video package: {}", video.getHeader().getTime());
}
protected void onConnected(RtmpConnection handler, Channel channel) {
deskShareSO = deskShareConnection.getSharedObject(handler.getContext().getJoinService().getJoinedMeeting().getRoom()+"-deskSO", false);
deskShareSO.addSharedObjectListener(this);
deskShareSO.connect(channel);
}
public void start() {
if (deskShareConnection != null)
deskShareConnection.connect();
}
public void stop() {
if (deskShareConnection != null)
deskShareConnection.disconnect();
}
public String getStreamName() {
return streamName;
}
@Override
public void onSharedObjectConnect(ISharedObjectBase so) {
log.debug("onSharedObjectConnect");
}
@Override
public void onSharedObjectDisconnect(ISharedObjectBase so) {
log.debug("onSharedObjectDisconnect");
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so, String key,
Object value) {
log.debug("onSharedObjectUpdate");
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so,
IAttributeStore values) {
log.debug("onSharedObjectUpdate");
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so,
Map<String, Object> values) {
log.debug("onSharedObjectUpdate");
}
@Override
public void onSharedObjectDelete(ISharedObjectBase so, String key) {
log.debug("onSharedObjectDelete");
}
@Override
public void onSharedObjectClear(ISharedObjectBase so) {
log.debug("onSharedObjectClear");
}
@Override
public void onSharedObjectSend(ISharedObjectBase so, String method,
List<?> params) {
log.debug("onSharedObjectSend: method "+method);
if (method.equals("startViewing")) {
log.info("Desk share started sharing");
} else if (method.equals("deskshareStreamStopped")) {
log.info("Desk share stopped sharing");
}
}
}