FOnlineAsyncMsgSteam* FOnlineAsyncMsgSteam::Serialize(AActor* Actor, UFunction* Function, void* Params)
{
	// Allocate the message buffer
	MessagePoolElem* Msg = GProtoPool.GetNextFree(Function);

	// Allocate the response buffer if necessary
	MessagePoolElem* ResponseMsg = NULL;
	if (Function->RPCResponseId > 0)
	{
		UFunction* ResponseFunction = FindNetServiceFunctionById(Function->RPCResponseId);
		ResponseMsg = GProtoPool.GetNextFree(ResponseFunction);
	}

	google::protobuf::Message* NewMessage = (*Msg)->Msg;
	if (NewMessage && SerializeRPCParams(NewMessage, Function, Params, CPF_Parm))
	{
		TWeakObjectPtr<AActor> ActorPtr(Actor);
		return new FOnlineAsyncMsgSteam(ActorPtr, Function->RPCId, Function->RPCResponseId, Msg, ResponseMsg);
	}
	else
	{
		GProtoPool.ReturnToPool(Msg);
		GProtoPool.ReturnToPool(ResponseMsg);
	}

	return NULL;
}
示例#2
0
ActorPtr ActorSet::getPtr(OBJECT_ID id)
{
	if(isMember(id))
		return(actors.find(id)->second);
	else
		return ActorPtr();
}
示例#3
0
ActorPtr Actor::forPid(int pid)
{
  smx_actor_t process = SIMIX_process_from_PID(pid);
  if (process != nullptr)
    return ActorPtr(&process->getIface());
  else
    return nullptr;
}
示例#4
0
void GDynamicActor::RenderExtra( dword dwOption )
{
	if( !m_aOrnamentExtra.empty() ) GrpSuper::RenderOrnament( ORO_EXTRALOOP );
	if( m_bVolatileRenderExtraFlag )
	{
		m_bVolatileRenderExtraFlag = false;
	}
	// Render Children
	for( int iAtt=0; iAtt<m_aAttachedActor.Num(); iAtt++ )
	{
		DActor *pActor = ActorPtr( m_aAttachedActor[iAtt] );
		if( pActor ) pActor->Render( ARO_EXTRA );
	}
	// Render Shadow
	RenderShadow();
}
void FLevelScriptEventMenuHelper::FillLevelBlueprintEventsMenu(class FMenuBuilder& MenuBuilder, const TArray<AActor*>& SelectedActors)
{
	AActor* SelectedActor = (1 == SelectedActors.Num()) ? SelectedActors[0] : NULL;

	if (FKismetEditorUtilities::IsActorValidForLevelScript(SelectedActor))
	{
		const bool bAnyEventExists = FKismetEditorUtilities::AnyBoundLevelScriptEventForActor(SelectedActor, false);
		const bool bAnyEventCanBeAdded = FKismetEditorUtilities::AnyBoundLevelScriptEventForActor(SelectedActor, true);

		if (bAnyEventExists || bAnyEventCanBeAdded)
		{
			TWeakObjectPtr<AActor> ActorPtr(SelectedActor);

			MenuBuilder.BeginSection("LevelBlueprintEvents", LOCTEXT("LevelBlueprintEvents", "Level Blueprint Events"));

			if (bAnyEventExists)
			{
				MenuBuilder.AddSubMenu(
					LOCTEXT("JumpEventSubMenu", "Jump to Event"),
					FText::GetEmpty(),
					FNewMenuDelegate::CreateStatic(&FKismetEditorUtilities::AddLevelScriptEventOptionsForActor
					, ActorPtr
					, true
					, false
					, true));
			}

			if (bAnyEventCanBeAdded)
			{
				MenuBuilder.AddSubMenu(
					LOCTEXT("AddEventSubMenu", "Add Event"),
					FText::GetEmpty(),
					FNewMenuDelegate::CreateStatic(&FKismetEditorUtilities::AddLevelScriptEventOptionsForActor
					, ActorPtr
					, false
					, true
					, true));
			}

			MenuBuilder.EndSection();
		}
	}
}
示例#6
0
/** @brief get the receiver (process associated to the mailbox) */
ActorPtr Mailbox::get_receiver()
{
  if (pimpl_->permanent_receiver == nullptr)
    return ActorPtr();
  return pimpl_->permanent_receiver->iface();
}
示例#7
0
        void ActorSerializer::DeserializeActor(std::istream& stream, std::vector<ActorPtr>& actors)
        {
            if (!stream)
                throw Commons::IOException("Stream is not opened");

            ActorPtr curActor;
            int32_t curLevel = 0;

            BigEndianStreamReader reader(stream);

            FileHeaderChunk fileHeader;
            ChunkHeader header;
            while (!reader.isEOF())
            {
                header.read(reader);

                uint32_t lastOffset = reader.tell();

                if (header.getMagic() == FileHeaderChunk::MAGIC)
                {
                    fileHeader.read(reader);                    
                }
                else if (header.getMagic() == ActorNameChunk::MAGIC)
                {
                    curActor = ActorPtr(new Actor());
                    assert(curActor.get());
                    curActor->m_header.read(reader);

                    ++curLevel;
                    printf("%d: %s\n", curLevel, curActor->m_header.m_name.data());
                }
                else if (header.getMagic() == ActorMatrixChunk::MAGIC)
                {
                    assert(curActor.get());
                    curActor->m_matrix.read(reader);
                }
                else if (header.getMagic() == ActorPushChunk::MAGIC)
                {
                    assert(curActor.get());
                    // TODO: push
                }
                else if (header.getMagic() == ActorPopChunk::MAGIC)
                {
                    assert(curActor.get());
                    // TODO: pop
                    --curLevel;
                }
                else if (header.getMagic() == ActorMaterialChunk::MAGIC)
                {
                    assert(curActor.get());
                    curActor->m_materials.read(reader);
                }
                else if (header.getMagic() == ActorModelChunk::MAGIC)
                {
                    assert(curActor.get());
                    curActor->m_models.read(reader);
                }
                else if (header.getMagic() == ActorEmptyChunk::MAGIC)
                {
                    assert(curActor.get());
                    curActor->m_empty.read(reader);
                }
                else if (header.getMagic() == ActorBBoxChunk::MAGIC)
                {
                    assert(curActor.get());
                    curActor->m_bbox.read(reader);
                }
                else if (header.isNULL())
                {
                    if (!curActor.get() || !curActor->isValid())
                        throw Commons::SerializationException("Actor object is incorrect");
                    actors.push_back(curActor);
                    curActor.reset();
                }
                else
                {
                    std::stringstream ss;
                    ss << "Unknown chunk: " << header.getMagic() << " at " << reader.tell();
                    throw Commons::SerializationException(ss.str());
                }

                uint32_t redSize = reader.tell() - lastOffset;
                if (redSize != header.getSize())
                {
                    std::stringstream ss;
                    ss << "Incorrect chunk size red: required: " << header.getSize() << " current " << redSize;
                    //throw SerializationException(ss.str()); // TODO: warning
                    //printf("%s\n", ss.str().data());
                }
            }
        }