Send Events #
You can send events through the SDK or from Pragma services.
Send from a Pragma service #
Game and social platform services and plugin implementations record events through TelemetryClientNodeService. It routes to the co-located TelemetryService or to a dedicated Telemetry backend transparently, so the caller doesn’t choose.
import java.util.UUID
import pragma.telemetry.client.TelemetryClientEvent
import pragma.telemetry.client.TelemetryClientNodeService
//...
private lateinit var telemetryClient: TelemetryClientNodeService
override suspend fun run() {
telemetryClient = nodeServicesContainer[TelemetryClientNodeService::class]
}
fun recordMenuInteraction(playerId: UUID, data: MenuInteractionPayload) {
// use a playerId as sourceId to identify events by the same player,
// or the service class name for events not tied to one player
telemetryClient.recordEvent(
TelemetryClientEvent(
sourceId = playerId.toString(),
name = "player-open-menu",
data = data,
)
)
}
recordEvent takes a single TelemetryClientEvent; recordEvents takes a List<TelemetryClientEvent>. Each event carries a sourceId, a name, and a data payload that must be a Kotlin data class. Both return a Job: the send happens in the background, and failures are logged rather than surfaced to the caller. For a synchronous call that returns a PragmaResult the caller can react to, use sendEvent/sendEvents instead.
Send from a client using the Unreal SDK #
// defined event data with any structure wanted
USTRUCT()
struct FEventData {
GENERATED_BODY()
UPROPERTY()
FString SelectedHero;
UPROPERTY()
FString SelectedRole;
};
void AUnicornPlayerController::CallTelemetry(const FEventData &Data) {
FString JsonString;
FJsonObjectConverter::UStructToJsonObjectString<FEventData>(Data, JsonString);
const FPragma_Telemetry_TelemetryEvent Event = {
"hero-selected-event",
JsonString
};
const FPragma_Telemetry_PlayerEventV1Request &Request = {Event};
// use PlayerEventsV1 to send batch
Player->Api<UPragmaTelemetryServiceRaw>().PlayerEventV1(
Request, UPragmaTelemetryServiceRaw::FPlayerEventV1Delegate::CreateLambda(
[](TPragmaResult<
FPragma_Telemetry_PlayerEventV1Response> /* Result */,
const FPragmaMessageMetadata & /* Metadata */) {}));
}
Send from a game server using the Unreal SDK #
// a FServerEventData is UStruct defined by you with relevant event data
void AUnicornGameMode::ExampleTelemetryCall(const FServerEventData &Data) {
FString JsonString;
FJsonObjectConverter::UStructToJsonObjectString<FServerEventData>(
Data,
JsonString
);
const FPragma_Telemetry_TelemetryEvent Event = {
"server-event",
JsonString
};
const FPragma_Telemetry_SourcedEvent SourcedEvent = {
"<game-server-id>",
Event
};
const auto Events = new TArray<FPragma_Telemetry_SourcedEvent>();
Events->Add(SourcedEvent);
const FPragma_Telemetry_EventsPartnerV1Request &Request = {*Events};
// Use EventPartnerV1 for single event
const Pragma::FServerPtr PartnerSdk;
PartnerSdk->Api<UPragmaTelemetryPartnerServiceRaw>().EventsPartnerV1(
Request,
UPragmaTelemetryPartnerServiceRaw::FEventsPartnerV1Delegate::CreateLambda(
[](TPragmaResult<
FPragma_Telemetry_EventsPartnerV1Response> /* Result */,
const FPragmaMessageMetadata & /* Metadata */) {}));
}