Send Events #
You can send events through the SDK or from Pragma services.
Sending from a service on the same backend #
suspend fun telemetryEventExample() {
// create events with wanted data
val eventData = mapOf(
"menuClicked" to "shopkeeper",
"durationMenuOpenSeconds" to "43",
"interactionsInMenu" to "7",
"transactions" to 2
)
// put data on request
val sourcedEvent = SourcedEvent
.newBuilder()
// use the service class name
// or player id if you want identify events by the same player
.setSourceId(playerId)
.setEvent(
TelemetryEvent.newBuilder()
.setName("player-open-menu",)
.setJson(PragmaSerializationUtils.toJsonString(eventData))
.build()
)
.build()
val telemetryRequest = EventsServiceV1Request.newBuilder()
.addAllEvents(listOf(sourcedEvent))
.build()
// send request to Telemetry Service
val result = requestRpcV2(telemetryRequest, EventsServiceV1Response::parseFrom)
result.onFailure {
// the service to service call failed
// handle error as wanted: log, throw another error, etc ...
}
result.onSuccess {
// the call was successful and event was stored
}
}
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 */) {}));
}