int main(int argc, char** argv) {
	Logger::getLogger().setLogLevel(LogLevel::Debug);

	bool client1EventCalled = false;
	bool client2EventCalled = false;

	EventDispatcher eventDispatcher;
	eventDispatcher.registerEventHandler(typeid(RealEvent).hash_code(), [&](Event* e) {
		RealEvent* event = static_cast<RealEvent*>(e);
		switch(event->number) {
			case 1:
				std::cout << "client1's event called" << std::endl;
				client1EventCalled = true;
				break;
			case 2:
				std::cout << "client2's event called" << std::endl;
				client2EventCalled = true;
				break;
		}
	});

	std::thread client1 = std::thread([&](){
		eventDispatcher.dispatchEvent(new RealEvent(1));
	});
	
	client1.join();

	std::thread client2 = std::thread([&](){
		eventDispatcher.dispatchEvent(new RealEvent(2));
	});

	client2.join();

	std::this_thread::sleep_for(std::chrono::seconds(1));
	std::cout << "after sleep" << std::endl;

	assert(client1EventCalled);
	assert(client2EventCalled);

	return 0;
}