#ifndef CONNECTOR_H
#define CONNECTOR_H
#include <vector>
#include <string>
#include <time.h>
#include "Connection.h"
#include "InputConnection.h"
#include "OutputConnection.h"
#include "FilterConnection.h"
#include "ConnectionFactory.h"
#include "ConnectionWrap.h"
#include "MessageExecutor.h"

class Connector {
	public:
		Connector();
		~Connector();
		Connector(int start);
		Connector(int inputPort,int outputPort,int filterPort, int configPort);
		int lastUpdate();
		void updated();
		vector<ConnectionWrap *> * getConnectionList();
		void disconnect(int fd);
		void unPatch(int fhFrom, int fhTo);
		void patch(int fhFrom,int fhTo);
		void sendUpdate();
		void process();
	private:
		void * messageExecutor;
		vector<ConnectionWrap *> * allConnections; //FilterConnections and subclasses
		vector<ConfigConnection *> * configConnections; //ConfigConnections
		void init(int inputPort,int outputPort,int filterPort, int configPort);
		int lastUpdated;
		ConfigConnection * currentConfig;
		ConnectionFactory * connectionFactory;
};
class ConnectorSingleton {
	public:
		inline static Connector * getConnector() {
			return connector;
		}
		static Connector * connector;
};
#endif

