package org.red5.client;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.RandomStringUtils;
import org.red5.client.net.rtmp.ClientExceptionHandler;
import org.red5.client.net.rtmp.RTMPClient;
import org.red5.io.utils.ObjectMap;
import org.red5.server.api.IAttributeStore;
import org.red5.server.api.Red5;
import org.red5.server.api.service.IPendingServiceCall;
import org.red5.server.api.service.IPendingServiceCallback;
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;
public class SharedObjectClient extends RTMPClient implements IPendingServiceCallback, ISharedObjectListener, ClientExceptionHandler {
private static Logger log = LoggerFactory.getLogger(SharedObjectClient.class);
private IClientSharedObject obj;
private String soName;
public SharedObjectClient(String server, int port, String app, String soName) {
// set shared object name
this.soName = soName;
// if we'll be handling onBWChecks etc, add a service provider
this.setServiceProvider(this);
this.setExceptionHandler(this);
// standard connect without params
//this.connect(server, port, app, this);
// connect with params
String username = RandomStringUtils.randomAlphabetic(8);
String room = soName;
String param2 = "m";
boolean webcam = false;
int param4 = 0;
int param5 = 1;
String message = "Testing";
boolean param7 = false;
String link = "http://www.example.com";
int param9 = 0;
Object[] connectCallArguments = new Object[] { username, room, param2, webcam, param4, param5, message, param7, link, param9 };
this.connectionParams = this.makeDefaultConnectionParams(server, port, app);
this.connect(server, port, connectionParams, this, connectCallArguments);
}
@Override
public void resultReceived(IPendingServiceCall call) {
log.debug("Received pending call: {}", call);
Object result = call.getResult();
if (result instanceof ObjectMap) {
obj = getSharedObject(soName, false);
obj.connect(Red5.getConnectionLocal());
obj.addSharedObjectListener(this);
}
}
@Override
public void handleException(Throwable throwable) {
log.error("{}", new Object[] { throwable.getCause() });
}
/**
* @return the obj
*/
public IClientSharedObject getSharedObject() {
return obj;
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so, String key, Object value) {
log.debug("onSharedObjectUpdate - key: {} value: {}", key, value.toString());
}
@Override
public void onSharedObjectClear(ISharedObjectBase so) {
log.debug("onSharedObjectClear");
}
@Override
public void onSharedObjectConnect(ISharedObjectBase so) {
log.debug("onSharedObjectConnect");
}
@Override
public void onSharedObjectDelete(ISharedObjectBase so, String arg1) {
log.debug("onSharedObjectDelete - arg1: {}", arg1);
}
@Override
public void onSharedObjectDisconnect(ISharedObjectBase so) {
log.debug("onSharedObjectDisconnect");
}
@Override
public void onSharedObjectSend(ISharedObjectBase so, String arg1, List<?> list) {
log.debug("onSharedObjectSend - arg1: {} list: {}", arg1, list);
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so, IAttributeStore attrs) {
log.debug("onSharedObjectUpdate - attrs: {}", attrs);
}
@Override
public void onSharedObjectUpdate(ISharedObjectBase so, Map<String, Object> map) {
log.debug("onSharedObjectUpdate - map: {}", map);
}
}