79 lines
2.7 KiB
Lua
79 lines
2.7 KiB
Lua
local AnalyticsService = game:GetService("RbxAnalyticsService")
|
|
local RunService = game:GetService("RunService")
|
|
local UserInputService = game:GetService("UserInputService")
|
|
|
|
local SETTINGS_HUB_INVITE_RELEASE_STREAM_TIME = 10
|
|
|
|
local function getPlatformTarget()
|
|
local platformTarget = "unknownLua"
|
|
local platformEnum = Enum.Platform.None
|
|
|
|
-- the call to GetPlatform is wrapped in a pcall() because the Testing Service
|
|
-- executes the scripts in the wrong authorization level
|
|
pcall(function()
|
|
platformEnum = UserInputService:GetPlatform()
|
|
end)
|
|
|
|
-- bucket the platform based on consumer platform
|
|
local isDesktopClient = (platformEnum == Enum.Platform.Windows) or (platformEnum == Enum.Platform.OSX)
|
|
|
|
local isMobileClient = (platformEnum == Enum.Platform.IOS) or (platformEnum == Enum.Platform.Android)
|
|
isMobileClient = isMobileClient or (platformEnum == Enum.Platform.UWP)
|
|
|
|
local isConsole = (platformEnum == Enum.Platform.XBox360) or (platformEnum == Enum.Platform.XBoxOne)
|
|
isConsole = isConsole or (platformEnum == Enum.Platform.PS3) or (platformEnum == Enum.Platform.PS4)
|
|
isConsole = isConsole or (platformEnum == Enum.Platform.WiiU)
|
|
|
|
-- assign a target based on the form factor
|
|
if isDesktopClient then
|
|
platformTarget = "client"
|
|
elseif isMobileClient then
|
|
platformTarget = "mobile"
|
|
elseif isConsole then
|
|
platformTarget = "console"
|
|
else
|
|
-- if we don't have a name for the form factor, report it here so that we can eventually track it down
|
|
platformTarget = platformTarget .. tostring(platformEnum)
|
|
end
|
|
|
|
return platformTarget
|
|
end
|
|
|
|
local EventStream = {}
|
|
EventStream.__index = EventStream
|
|
|
|
function EventStream.new(overridePlatformTarget, overrideAnalyticsImpl)
|
|
local self = {}
|
|
setmetatable(self, EventStream)
|
|
|
|
self._analyticsImpl = overrideAnalyticsImpl or AnalyticsService
|
|
self._platformTarget = overridePlatformTarget or getPlatformTarget()
|
|
|
|
return self
|
|
end
|
|
|
|
function EventStream:setRBXEventStream(eventContext, eventName, additionalArgs)
|
|
additionalArgs = additionalArgs or {}
|
|
-- this function sends reports to the server in batches, not real-time
|
|
self._analyticsImpl:SetRBXEventStream(self._platformTarget, eventContext, eventName, additionalArgs)
|
|
|
|
if not self.timerSteppedConnection then
|
|
local lastGameTime = time()
|
|
self.timerSteppedConnection = RunService.Stepped:Connect(function(gameTime)
|
|
if gameTime - lastGameTime > SETTINGS_HUB_INVITE_RELEASE_STREAM_TIME then
|
|
self:releaseRBXEventStream()
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function EventStream:releaseRBXEventStream()
|
|
self._analyticsImpl:ReleaseRBXEventStream(self._platformTarget)
|
|
if self.timerSteppedConnection then
|
|
self.timerSteppedConnection:Disconnect()
|
|
self.timerSteppedConnection = nil
|
|
end
|
|
end
|
|
|
|
return EventStream
|