void UDPProxyCoordinator::ForwardingRequest::OrderRemainingServersToTry(void)
{
	DataStructures::Multilist<ML_ORDERED_LIST,UDPProxyCoordinator::ServerWithPing,unsigned short> swpList;
	swpList.SetSortOrder(true);
	if (sourceServerPings.GetSize()==0 && targetServerPings.GetSize()==0)
		return;

	DataStructures::DefaultIndexType idx;
	UDPProxyCoordinator::ServerWithPing swp;
	for (idx=0; idx < remainingServersToTry.GetSize(); idx++)
	{
		swp.serverAddress=remainingServersToTry[idx];
		swp.ping=0;
		if (sourceServerPings.GetSize())
			swp.ping+=(unsigned short) sourceServerPings[idx].ping;
		else
			swp.ping+=(unsigned short) DEFAULT_CLIENT_UNRESPONSIVE_PING_TIME;
		if (targetServerPings.GetSize())
			swp.ping+=(unsigned short) targetServerPings[idx].ping;
		else
			swp.ping+=(unsigned short) DEFAULT_CLIENT_UNRESPONSIVE_PING_TIME;
		swpList.Push(swp, swp.ping, _FILE_AND_LINE_);
	}
	remainingServersToTry.Clear(true, _FILE_AND_LINE_ );
	for (idx=0; idx < swpList.GetSize(); idx++)
	{
		remainingServersToTry.Push(swpList[idx].serverAddress, _FILE_AND_LINE_ );
	}
}
}

std::vector<ReplicaObject*> NetworkingManager::getReplicas(string name) {
    DataStructures::Multilist<ML_STACK, Replica3*> replicaList;
    DataStructures::DefaultIndexType index;
    replicaManager.GetReferencedReplicaList(replicaList);

    std::vector<ReplicaObject*> replicas = std::vector<ReplicaObject*>();
    try {
        for (index=0; index < replicaList.GetSize(); index++) {
            ReplicaObject * temp = ((ReplicaObject *) replicaList[index]);
            if (temp->GetName().StrCmp(RakNet::RakString(name.c_str())) == 0) replicas.push_back(temp);
        }
    }
    catch (...) { return std::vector<ReplicaObject*>();}
}

ReplicaObject* NetworkingManager::getReplica(string name, bool blocking) {
    DataStructures::Multilist<ML_STACK, Replica3*> replicaList; 
    DataStructures::DefaultIndexType index;
    replicaManager.GetReferencedReplicaList(replicaList);

    while (true) {
        try {
            for (index=0; index < replicaList.GetSize(); index++) {
                ReplicaObject * temp = ((ReplicaObject *) replicaList[index]);
                if (temp->GetName().StrCmp(RakNet::RakString(name.c_str())) == 0) return temp;
            }
        }
        catch (...) {

        }
        if (!blocking) return 0;
        this->tick();
        replicaManager.GetReferencedReplicaList(replicaList);