void FMessageTracer::TraceRemovedRecipient( const FMessageAddress& Address )
{
	if (!Running)
	{
		return;
	}

	double Timestamp = FPlatformTime::Seconds();

	Traces.Enqueue([=]() {
		FMessageTracerEndpointInfoPtr EndpointInfo = AddressesToEndpointInfos.FindRef(Address);

		if (!EndpointInfo.IsValid())
		{
			return;
		}

		// update endpoint information
		FMessageTracerAddressInfoPtr AddressInfo = EndpointInfo->AddressInfos.FindRef(Address);

		if (AddressInfo.IsValid())
		{
			AddressInfo->TimeUnregistered = Timestamp;
		}
	});
}
void FMessageTracer::TraceHandledMessage( const IMessageContextRef& Context, const IReceiveMessagesRef& Recipient )
{
	if (!Running)
	{
		return;
	}

	double Timestamp = FPlatformTime::Seconds();

	Traces.Enqueue([=]() {
		// look up message & endpoint info
		FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context);

		if (!MessageInfo.IsValid())
		{
			return;
		}

		FMessageTracerEndpointInfoPtr EndpointInfo = RecipientsToEndpointInfos.FindRef(Recipient->GetRecipientId());

		if (!EndpointInfo.IsValid())
		{
			return;
		}

		// update message information
		FMessageTracerDispatchStatePtr DispatchState = MessageInfo->DispatchStates.FindRef(EndpointInfo);

		if (DispatchState.IsValid())
		{
			DispatchState->TimeHandled = Timestamp;
		}
	});
}
void FMessageTracer::TraceSentMessage(const IMessageContextRef& Context)
{
	if (!Running)
	{
		return;
	}

	double Timestamp = FPlatformTime::Seconds();

	Traces.Enqueue([=]() {
		// look up endpoint info
		FMessageTracerEndpointInfoPtr EndpointInfo = AddressesToEndpointInfos.FindRef(Context->GetSender());

		if (!EndpointInfo.IsValid())
		{
			return;
		}

		// create message info
		FMessageTracerMessageInfoRef MessageInfo = MakeShareable(new FMessageTracerMessageInfo());
		{
			MessageInfo->Context = Context;
			MessageInfo->Intercepted = false;
			MessageInfo->SenderInfo = EndpointInfo;
			MessageInfo->TimeRouted = 0.0;
			MessageInfo->TimeSent = Timestamp;
			MessageInfos.Add(Context, MessageInfo);
		}

		// add message type
		FMessageTracerTypeInfoPtr& TypeInfo = MessageTypes.FindOrAdd(Context->GetMessageType());

		if (!TypeInfo.IsValid())
		{
			TypeInfo = MakeShareable(new FMessageTracerTypeInfo());
			TypeInfo->TypeName = Context->GetMessageType();

			TypeAddedDelegate.Broadcast(TypeInfo.ToSharedRef());
		}

		TypeInfo->Messages.Add(MessageInfo);

		// update database
		EndpointInfo->SentMessages.Add(MessageInfo);
		MessageInfo->TypeInfo = TypeInfo;

		MessagesAddedDelegate.Broadcast(MessageInfo);
	});
}
Beispiel #4
0
void FMessageTracer::ProcessRemovedRecipient( FMessageAddress Address, double TimeSeconds )
{
	FMessageTracerEndpointInfoPtr EndpointInfo = AddressesToEndpointInfos.FindRef(Address);

	if (!EndpointInfo.IsValid())
	{
		return;
	}

	// update endpoint information
	FMessageTracerAddressInfoPtr AddressInfo = EndpointInfo->AddressInfos.FindRef(Address);

	if (AddressInfo.IsValid())
	{
		AddressInfo->TimeUnregistered = TimeSeconds;
	}
}
Beispiel #5
0
void FMessageTracer::ProcessSentMessage( IMessageContextRef Context, double TimeSeconds )
{
	FMessageTracerEndpointInfoPtr EndpointInfo = AddressesToEndpointInfos.FindRef(Context->GetSender());

	if (!EndpointInfo.IsValid())
	{
		return;
	}

	// create message info
	FMessageTracerMessageInfoRef MessageInfo = MakeShareable(new FMessageTracerMessageInfo());
	
	MessageInfo->Context = Context;
	MessageInfo->SenderInfo = EndpointInfo;
	MessageInfo->TimeRouted = 0.0;
	MessageInfo->TimeSent = TimeSeconds;
	MessageInfos.Add(Context, MessageInfo);

	// add message type
	FMessageTracerTypeInfoPtr& TypeInfo = MessageTypes.FindOrAdd(Context->GetMessageType());

	if (!TypeInfo.IsValid())
	{
		TypeInfo = MakeShareable(new FMessageTracerTypeInfo());
		TypeInfo->TypeName = Context->GetMessageType();

		TypeAddedDelegate.Broadcast(TypeInfo.ToSharedRef());
	}

	TypeInfo->Messages.Add(MessageInfo);

	// update database
	EndpointInfo->SentMessages.Add(MessageInfo);
	MessageInfo->TypeInfo = TypeInfo;

	MessagesAddedDelegate.Broadcast(MessageInfo);
}
Beispiel #6
0
void FMessageTracer::ProcessHandledMessage( IMessageContextRef Context, double TimeSeconds, FGuid RecipientId )
{
	FMessageTracerMessageInfoPtr MessageInfo = MessageInfos.FindRef(Context);

	if (!MessageInfo.IsValid())
	{
		return;
	}

	FMessageTracerEndpointInfoPtr EndpointInfo = RecipientsToEndpointInfos.FindRef(RecipientId);

	if (!EndpointInfo.IsValid())
	{
		return;
	}

	// update message information
	FMessageTracerDispatchStatePtr DispatchState = MessageInfo->DispatchStates.FindRef(EndpointInfo);

	if (DispatchState.IsValid())
	{
		DispatchState->TimeHandled = TimeSeconds;
	}
}