42 lines
1.1 KiB
C#
42 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Concurrent;
|
|
|
|
namespace UnityEngine.Purchasing.Telemetry
|
|
{
|
|
class TelemetryQueue<TTelemetryEventParams>
|
|
{
|
|
readonly Action<TTelemetryEventParams> m_SendTelemetryEvent;
|
|
ConcurrentQueue<TTelemetryEventParams> m_Queue;
|
|
internal const int k_maxQueueSize = 10;
|
|
|
|
public TelemetryQueue(Action<TTelemetryEventParams> sendTelemetryEvent)
|
|
{
|
|
m_SendTelemetryEvent = sendTelemetryEvent;
|
|
}
|
|
|
|
internal void QueueEvent(TTelemetryEventParams telemetryEvent)
|
|
{
|
|
m_Queue ??= new ConcurrentQueue<TTelemetryEventParams>();
|
|
m_Queue.Enqueue(telemetryEvent);
|
|
|
|
if (m_Queue.Count > k_maxQueueSize)
|
|
{
|
|
m_Queue.TryDequeue(out _);
|
|
}
|
|
}
|
|
|
|
internal void SendQueuedEvents()
|
|
{
|
|
if (m_SendTelemetryEvent == null || m_Queue == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
while (m_Queue.TryDequeue(out var telemetryEvent))
|
|
{
|
|
m_SendTelemetryEvent(telemetryEvent);
|
|
}
|
|
}
|
|
}
|
|
}
|