package com.jcumulus.server.rtmfp.application;
/**
* 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.Peer;
import com.jcumulus.server.rtmfp.publisher.FlowWriter;
import java.util.*;
import org.apache.log4j.Logger;
public class Streams
{
private static Logger A = Logger.getLogger(Streams.class);
private List D;
private Map C;
Integer B;
public Streams(Map map)
{
D = new ArrayList();
B = Integer.valueOf(0);
C = map;
}
public Integer A()
{
Integer integer = B;
Integer integer1 = B = Integer.valueOf(B.intValue() + 1);
Integer _tmp = integer;
A.info((new StringBuilder()).append("New stream ").append(B).toString());
D.add(B);
return B;
}
public Publication A(String s)
{
Publication b = (Publication)C.get(s);
if(b != null)
{
return b;
} else
{
Publication b1 = new Publication(s);
C.put(s, b1);
return b1;
}
}
public Publication A(Peer p, int i, String s, FlowWriter h)
throws Exception
{
Publication b = A(s);
try
{
b.A(p, i, h);
}
catch(Exception exception)
{
if(b.B() == 0 && b.A().size() == 0)
A(b);
throw exception;
}
return b;
}
public void A(Peer p, int i, String s)
{
Publication b = (Publication)C.get(s);
if(b == null)
{
A.debug((new StringBuilder()).append("The stream '").append(s).append("' with a ").append(i).append(" id doesn't exist, unpublish useless").toString());
return;
}
b.B(p, i);
if(b.B() == 0 && b.A().size() == 0)
A(b);
}
public boolean A(Peer p, int i, String s, FlowWriter h, double d)
{
Publication b = (Publication)C.get(s);
boolean flag = false;
if(b == null)
b = A(s);
if(b != null)
{
flag = b.A(p, i, h, d == -3000D);
if(!flag && b.B() == 0 && b.A().size() == 0)
A(b);
}
return flag;
}
public void B(Peer p, int i, String s)
{
Publication b = (Publication)C.get(s);
if(b == null)
{
A.debug((new StringBuilder()).append("The stream '").append(s).append("' doesn't exists, unsubscribe useless").toString());
return;
}
b.A(p, i);
if(b.B() == 0 && b.A().size() == 0)
A(b);
}
void A(Publication b)
{
C.remove(b.C());
}
public void A(Integer integer)
{
A.debug((new StringBuilder()).append("Stream ").append(integer).append(" deleted").toString());
D.remove(integer);
}
}