// Copyright Epic Games, Inc. All Rights Reserved. #include "zencore/session.h" #include #include namespace zen { static Oid GlobalSessionId; static Oid::String_t GlobalSessionString; static std::once_flag SessionInitFlag; static Oid GlobalParentSessionId; static Oid::String_t GlobalParentSessionString; static std::mutex GlobalParentSessionMutex; Oid GetSessionId() { std::call_once(SessionInitFlag, [&] { GlobalSessionId.Generate(); GlobalSessionId.ToString(GlobalSessionString); }); return GlobalSessionId; } std::string_view GetSessionIdString() { // Ensure we actually have a generated session identifier std::ignore = GetSessionId(); return std::string_view(GlobalSessionString, Oid::StringLength); } void SetParentSessionId(const Oid& ParentSessionId) { std::lock_guard Lock(GlobalParentSessionMutex); GlobalParentSessionId = ParentSessionId; GlobalParentSessionId.ToString(GlobalParentSessionString); } Oid GetParentSessionId() { std::lock_guard Lock(GlobalParentSessionMutex); return GlobalParentSessionId; } std::string_view GetParentSessionIdString() { std::lock_guard Lock(GlobalParentSessionMutex); if (GlobalParentSessionId == Oid::Zero) { return {}; } return std::string_view(GlobalParentSessionString, Oid::StringLength); } } // namespace zen