#pragma once
class P4Connection;
class StrPtr;
class P4BridgeServer;
#ifndef time
#include "time.h";
#endif
//forward references
class ConnectionManager;
//#ifdef _DEBUG_MEMORY
//class IdleConnection : public DoublyLinkedListItem, p4base
//#else
//class IdleConnection : public DoublyLinkedListItem
//#endif
//{
//public:
//	unsigned _int64 ReleaseTime;
//	P4Connection* pCon;
//
//#ifdef _DEBUG_MEMORY
//	IdleConnection(P4Connection* pcon, _int64 releaseTime);
//#else
//	IdleConnection(P4Connection* pcon, _int64 releaseTime)
//		: DoublyLinkedListItem(NULL) { pCon = pcon; ReleaseTime = releaseTime;} 
//#endif
//
//	virtual ~IdleConnection(void);
//
//#ifdef _DEBUG_MEMORY
//	    // Simple type identification for registering objects
//	virtual int Type(void) {return tIdleConnection;}
//#endif
//};
#ifdef _DEBUG_MEMORY
class ConnectionManager : public DoublyLinkedList, p4base
#else
class ConnectionManager : public DoublyLinkedList
#endif
{
private:
	char* client;
	char* user;
	char* port;
	char* password;
	char* programName;
	char* programVer;
	char* cwd;
	CharSetApi::CharSet charset;
	CharSetApi::CharSet file_charset;
	P4BridgeServer *pServer;
	ConnectionManager(void);
	DoublyLinkedList* IdleConnections;
	void DiscardConnections();
public:
	int Initialized;
	ConnectionManager(P4BridgeServer *pserver);
	virtual ~ConnectionManager(void);
	P4Connection* GetConnection(int cmdId);
	void ReleaseConnection(int cmdId, unsigned _int64 releaseTime);
	void ReleaseConnection(P4Connection* pCon, unsigned _int64 releaseTime);
	int FreeConnections( unsigned _int64 currentTime );
	P4Connection* NewConnection(int cmdId);
	//P4Connection* DefaultConnection();
	// Set the connection data used
	void SetClient( const char* newVal );
	void SetUser( const char* newVal );
	void SetPort( const char* newVal );
	void SetPassword( const char* newVal );
	void SetProgramName( const char* newVal );
	void SetProgramVer( const char* newVal );
	void SetCwd( const char* newCwd );
	void SetCharset( CharSetApi::CharSet c, CharSetApi::CharSet filec );
	void SetConnection(const char* newPort, const char* newUser, const char* newPassword, const char* newClient)
		{SetClient(newClient); SetUser(newUser);SetPort(newPort);SetPassword(newPassword);}
	const StrPtr* GetCharset( );
	int Disconnect( void );
#ifdef _DEBUG_MEMORY
	    // Simple type identification for registering objects
	virtual int Type(void) {return tConnectionManager;}
#endif
};