void ConnectionGraph2::GetParticipantList(DataStructures::OrderedList<RakNetGUID, RakNetGUID> &participantList) { participantList.Clear(true, _FILE_AND_LINE_); unsigned int i; for (i=0; i < remoteSystems.Size(); i++) participantList.InsertAtEnd(remoteSystems[i]->guid, _FILE_AND_LINE_); }
void AutoRPC::OnRPCRemoteIndex(SystemAddress systemAddress, unsigned char *data, unsigned int lengthInBytes) { // A remote system has given us their internal index for a particular function. // Store it and use it from now on, to save bandwidth and search time bool objectExists; char strIdentifier[512]; unsigned int insertionIndex; unsigned int remoteIndex; RemoteRPCFunction newRemoteFunction; RakNet::BitStream bs(data,lengthInBytes,false); RPCIdentifier identifier; bs.Read(identifier.isObjectMember); bs.ReadCompressed(remoteIndex); stringCompressor->DecodeString(strIdentifier,512,&bs,0); identifier.uniqueIdentifier=strIdentifier; if (strIdentifier[0]==0) return; DataStructures::OrderedList<RPCIdentifier, RemoteRPCFunction, AutoRPC::RemoteRPCFunctionComp> *theList; if (remoteFunctions.Has(systemAddress)) { theList = remoteFunctions.Get(systemAddress); insertionIndex=theList->GetIndexFromKey(identifier, &objectExists); if (objectExists==false) { newRemoteFunction.functionIndex=remoteIndex; newRemoteFunction.identifier.isObjectMember=identifier.isObjectMember; newRemoteFunction.identifier.uniqueIdentifier = (char*) rakMalloc_Ex(strlen(strIdentifier)+1, __FILE__, __LINE__); strcpy(newRemoteFunction.identifier.uniqueIdentifier, strIdentifier); theList->InsertAtIndex(newRemoteFunction, insertionIndex, __FILE__, __LINE__); } } else { theList = RakNet::OP_NEW<DataStructures::OrderedList<RPCIdentifier, RemoteRPCFunction, AutoRPC::RemoteRPCFunctionComp> >( __FILE__, __LINE__ ); newRemoteFunction.functionIndex=remoteIndex; newRemoteFunction.identifier.isObjectMember=identifier.isObjectMember; newRemoteFunction.identifier.uniqueIdentifier = (char*) rakMalloc_Ex(strlen(strIdentifier)+1, __FILE__, __LINE__); strcpy(newRemoteFunction.identifier.uniqueIdentifier, strIdentifier); theList->InsertAtEnd(newRemoteFunction, __FILE__, __LINE__); remoteFunctions.SetNew(systemAddress,theList); } }