#include <iostream>
using namespace std;

struct IService {
	virtual ~IService() = default;
    virtual void DoWork() = 0;
    virtual bool IsRunning() = 0;
};

class ClientA : public IService {
    void DoWork() {
        std::cout << "Work in progress inside A" << endl;
    }
    bool IsRunning() { 
        return true; 
    }
};

class ClientB : public IService {
    void DoWork() {
        std::cout << "Work in progress inside B" << endl;
    }
    bool IsRunning() {
        return true;
    }
};

class Server {
    IService* _service;
public:
    Server(IService* service) : _service(service)
    { }

    void doStuff() {
    	_service->DoWork();
    }
};

int main() {

	ClientA a;
	ClientB b;
	Server sa(&a), sb(&b);
	cout << "ServerA: " << endl;
	sa.doStuff();
	cout << "ServerB: " << endl;
	sb.doStuff();
	return 0;
}