TEST(ReplicateStateMessage, ReplicatesNetworkComponentDirtyStatesWhenDirtyReplicationIsTrue)
		{
			REGISTER_MESSAGE(ReplicateInstanceMessage);
			REGISTER_MESSAGE(ReplicateStateMessage);
			REGISTER_CONSTRUCTOR(MockNetworkGameObjectWithState);

			MockNetworkGameObjectWithState gameObject;
			gameObject.setInstanceId(1);

			gameObject.variable1 = 1;
			gameObject.variable2 = 2;

			serverManager->sendMessage(ReplicateInstanceMessage(&gameObject, Role_None), clientAddress1);
			clientManager1->update();

			//First replicate all variables
			serverManager->sendMessage(ReplicateStateMessage(&gameObject), clientAddress1);
			clientManager1->update();

			gameObject.variable1 = 3;
			gameObject.variable2 = 4;

			gameObject.variable1.setDirty(false);
			gameObject.variable2.setDirty(true);

			serverManager->sendMessage(ReplicateStateMessage(&gameObject, true), clientAddress1);
			clientManager1->update();

			auto replicatedObject = dynamic_cast<MockNetworkGameObjectWithState *> (clientManager1->findNetworkGameObject(gameObject.getInstanceId()));

			CHECK_EQUAL(1, replicatedObject->variable1.getValue());
			CHECK_EQUAL(4, replicatedObject->variable2.getValue());
		}
		TEST(ReplicateInstanceMessage, CorrectlySetRoleInReplicatedObject)
		{
			REGISTER_MESSAGE(ReplicateInstanceMessage);
			REGISTER_CONSTRUCTOR(MockNetworkGameObject);

			int arbitraryID = 3;
			MockNetworkGameObject networkObject;
			networkObject.setInstanceId(arbitraryID);

			serverManager->sendMessage(ReplicateInstanceMessage(&networkObject, Role_Proxy), clientAddress1);
			serverManager->sendMessage(ReplicateInstanceMessage(&networkObject, Role_Simulated), clientAddress2);

			clientManager1->update();
			clientManager2->update();

			auto replicatedObject1 = dynamic_cast<const MockNetworkGameObject *> (clientManager1->findNetworkGameObject(networkObject.getInstanceId()));
			auto replicatedObject2 = dynamic_cast<const MockNetworkGameObject *> (clientManager2->findNetworkGameObject(networkObject.getInstanceId()));

			CHECK_EQUAL(Role_Proxy, replicatedObject1->getRole());
			CHECK_EQUAL(Role_Simulated, replicatedObject2->getRole());
		}
void mog::network::ServerNetworkManager::processInstanceReplications()
{
	for (auto clientRep : clientReplicationInfos)
	{
		while (!clientRep->isToBeReplicatedEmpty())
		{
			auto instanceId = clientRep->getToBeReplicatedInstance();
			auto obj = findNetworkGameObject(instanceId);
			Role role = Role_None;
			if (*clientRep->getClient() == *obj->getClient())
				role = Role_Proxy;
			else
				role = Role_Simulated;

			sendMessage(ReplicateInstanceMessage(obj, role), *(clientRep->getAddress()));
			sendMessage(ReplicateStateMessage(obj), *(clientRep->getAddress()));
			clientRep->eraseToBeReplicatedInstance(instanceId);
		}
	}
}