package im.actor.core.modules.calls.peers;
import org.jetbrains.annotations.NotNull;
import im.actor.core.modules.ModuleContext;
import im.actor.core.modules.calls.CallViewModels;
import im.actor.core.modules.ModuleActor;
import im.actor.runtime.WebRTC;
import im.actor.runtime.actors.Actor;
import im.actor.runtime.actors.ActorCreator;
import im.actor.runtime.actors.ActorRef;
import im.actor.runtime.webrtc.WebRTCMediaStream;
import im.actor.runtime.webrtc.WebRTCMediaTrack;
import im.actor.runtime.webrtc.WebRTCPeerConnection;
public abstract class AbsCallActor extends ModuleActor implements CallBusCallback {
protected final PeerSettings selfSettings;
protected final CallViewModels callViewModels;
protected final ActorRef callManager;
protected CallBusInt callBus;
public AbsCallActor(ModuleContext context) {
super(context);
this.callManager = context.getCallsModule().getCallManager();
this.callViewModels = context().getCallsModule().getCallViewModels();
this.selfSettings = new PeerSettings();
this.selfSettings.setIsPreConnectionEnabled(WebRTC.isSupportsPreConnections());
}
@Override
public void preStart() {
super.preStart();
callBus = new CallBusInt(system().actorOf(getPath() + "/bus", () -> {
return new CallBusActor(new CallBusCallbackWrapper(), selfSettings, context());
}));
}
public void onAudioEnableChanged(boolean enabled) {
callBus.changeAudioEnabled(enabled);
}
public void onVideoEnableChanged(boolean enabled) {
callBus.changeVideoEnabled(enabled);
}
//
// Messages
//
@Override
public void onReceive(Object message) {
if (message instanceof AudioEnabled) {
onAudioEnableChanged(((AudioEnabled) message).isEnabled());
} else if (message instanceof VideoEnabled) {
onVideoEnableChanged(((VideoEnabled) message).isEnabled());
} else {
super.onReceive(message);
}
}
public static class AudioEnabled {
private boolean enabled;
public AudioEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isEnabled() {
return enabled;
}
}
public static class VideoEnabled {
private boolean enabled;
public VideoEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isEnabled() {
return enabled;
}
}
//
// Wrapper
//
private class CallBusCallbackWrapper implements CallBusCallback {
@Override
public void onBusStarted(@NotNull final String busId) {
self().post(() -> AbsCallActor.this.onBusStarted(busId));
}
@Override
public void onBusStopped() {
self().post(() -> AbsCallActor.this.onBusStopped());
}
@Override
public void onCallConnected() {
self().post(() -> AbsCallActor.this.onCallConnected());
}
@Override
public void onCallEnabled() {
self().post(() -> AbsCallActor.this.onCallEnabled());
}
@Override
public void onTrackAdded(long deviceId, WebRTCMediaTrack track) {
self().post(() -> AbsCallActor.this.onTrackAdded(deviceId, track));
}
@Override
public void onTrackRemoved(long deviceId, WebRTCMediaTrack track) {
self().post(() -> AbsCallActor.this.onTrackRemoved(deviceId, track));
}
@Override
public void onOwnTrackAdded(WebRTCMediaTrack track) {
self().post(() -> AbsCallActor.this.onOwnTrackAdded(track));
}
@Override
public void onOwnTrackRemoved(WebRTCMediaTrack track) {
self().post(() -> AbsCallActor.this.onOwnTrackRemoved(track));
}
}
}