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); }); }
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; } }
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); }
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; } }