package com.jcumulus.server.rtmfp;
/**
* jCumulus is a Java port of Cumulus OpenRTMP
*
* Copyright 2011 OpenRTMFP
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License received along this program for more
* details (or else see http://www.gnu.org/licenses/).
*
*
* This file is a part of jCumulus.
*/
import com.jcumulus.server.rtmfp.application.Publication;
import com.jcumulus.server.rtmfp.application.Listener;
import com.jcumulus.server.rtmfp.client.ClientHandler;
import com.jcumulus.server.rtmfp.publisher.FlowWriter;
import com.jcumulus.server.rtmfp.flow.B;
import com.jcumulus.server.rtmfp.flow.F;
import java.lang.reflect.Method;
import java.net.SocketAddress;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
public class Peer extends Client
{
private static final Logger L = Logger.getLogger(Peer.class);
private SocketAddress J;
private List N;
private ClientHandler K;
private boolean M;
public Peer()
{
N = new ArrayList();
}
public void A(ClientHandler a)
{
K = a;
}
public boolean A(B b, com.jcumulus.server.rtmfp.flow.A a)
{
if(!M)
M = K == null || K.onConnection(this, b, a);
else
L.error((new StringBuilder()).append("Client ").append(B).append(" seems already connected!").toString());
return M;
}
public void E(String s)
{
if(M && K != null)
K.onFailed(this, s);
}
public void O()
{
if(M)
{
M = false;
if(K != null)
K.onDisconnection(this);
}
}
public boolean A(String s, B b)
{
if(M && K != null)
{
try
{
Method method = K.getClass().getMethod(s, new Class[] {
com.jcumulus.server.rtmfp.Client.class, b.getClass()
});
Object obj = method.invoke(K, new Object[] {
this, b
});
F f = F.J();
f.A(obj);
return true;
}
catch(Throwable throwable)
{
L.error(throwable.getMessage(), throwable);
}
return false;
} else
{
L.warn("RPC client before connection");
F.B("Call.Failed", "Client must be connected before remote procedure calling");
return true;
}
}
public boolean A(Publication b)
{
if(M)
{
return K == null || K.onPublish(this, b);
} else
{
L.warn("Publication client before connection");
return false;
}
}
public void B(Publication b)
{
if(M)
{
if(K != null)
K.onUnpublish(this, b);
return;
} else
{
L.warn("Unpublication client before connection");
return;
}
}
public boolean B(Listener i)
{
if(M)
{
return K == null || K.onSubscribe(this, i);
} else
{
L.warn("Subscription client before connection");
return false;
}
}
public void A(Listener i)
{
if(M)
{
if(K != null)
K.onUnsubscribe(this, i);
return;
} else
{
L.warn("Unsubscription client before connection");
return;
}
}
public void A(Publication b, String s, com.jcumulus.server.rtmfp.packet.Packet a)
{
if(M)
{
if(K != null)
K.onDataPacket(this, b, s, a);
return;
} else
{
L.warn("DataPacket client before connection");
return;
}
}
public void B(Publication b, int i, com.jcumulus.server.rtmfp.packet.Packet a)
{
if(M)
{
if(K != null)
K.onPacket(this, b, i, a);
return;
} else
{
L.warn("Packet client before connection");
return;
}
}
public void A(Publication b, int i, com.jcumulus.server.rtmfp.packet.Packet a)
{
if(M)
{
if(K != null)
K.onVideoPacket(this, b, i, a);
return;
} else
{
L.warn("VideoPacket client before connection");
return;
}
}
public void J()
{
}
public List N()
{
return N;
}
public void A(FlowWriter h)
{
F = h;
}
public boolean K()
{
return A;
}
public SocketAddress L()
{
return J;
}
public void A(SocketAddress socketaddress)
{
J = socketaddress;
}
public boolean M()
{
return M;
}
}