00001 
#ifndef PROXYCLIENTWRAPPERFACTORY_H
00002 
#define PROXYCLIENTWRAPPERFACTORY_H
00003 
00004 
#include "MNString.h"
00005 
#include "ProxyClientWrapper.h"
00006 
#include "RTSPProxySession.h"
00007 
#include <map>
00008 
00009 
class ServerSideReflectorGM;
00014 class ProxyClientWrapperFactory
00015 {
00016 
private:
00017     
static ProxyClientWrapperFactory*                   _instance;
00018     std::multimap<MNString, ProxyClientWrapper*>        _reflectingSessions;
00019     std::map<RTSPProxySession*, ProxyClientWrapper*>    _nonReflectingSessions;
00020    
00021     
00022 
protected:
00023     
ProxyClientWrapperFactory();
00024     
00025 
public:
00026     
static ProxyClientWrapperFactory* 
getInstance();
00027     
virtual ~ProxyClientWrapperFactory();
00028     
00033     
ProxyClientWrapper* 
getProxyClientWrapper( 
RTSPProxySession* session, 
MNString url, 
00034                                                
MNSelector& selector, ProxyServer* proxyServer, 
00035                                                
bool dynReflection);
00036     
00040     
ProxyClientWrapper* 
getDynReflectionProxyClient(
RTSPProxySession* session, 
MNString url,
00041                                                     
MNSelector& selector, ProxyServer* proxyServer,
00042                                                     
int presentationTime, 
bool& isNew);
00043                                                     
00045     
ProxyClientWrapper* 
getAssociatedProxyClientWrapper(ProxyClient* pc);
00046     
00051     
void releaseProxyClientWrapper(
ProxyClientWrapper* pcw);
00052     
00054     
unsigned int getSessionMemberCount(
MNString url);
00055 
00056 
private:
00057     
ProxyClientWrapper* getProxyClientWrapperWithTime(
ProxyClientWrapper* oldPcw, 
MNString& url, 
int presentationTime);
00058     
bool isPresentationAtThatTime(
ProxyClientWrapper* pcw, 
int presentationTime);
00059 };
00060 
00061 
#endif