Add Platform.Users to handle users per-platform
This commit is contained in:
@@ -956,12 +956,6 @@ String AndroidPlatform::GetComputerName()
|
|||||||
return DeviceModel;
|
return DeviceModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
String AndroidPlatform::GetUserName()
|
|
||||||
{
|
|
||||||
// TODO: add support for username on Android
|
|
||||||
return String::Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AndroidPlatform::GetHasFocus()
|
bool AndroidPlatform::GetHasFocus()
|
||||||
{
|
{
|
||||||
return HasFocus;
|
return HasFocus;
|
||||||
|
|||||||
@@ -110,7 +110,6 @@ public:
|
|||||||
static ScreenOrientationType GetScreenOrientationType();
|
static ScreenOrientationType GetScreenOrientationType();
|
||||||
static String GetUserLocaleName();
|
static String GetUserLocaleName();
|
||||||
static String GetComputerName();
|
static String GetComputerName();
|
||||||
static String GetUserName();
|
|
||||||
static bool GetHasFocus();
|
static bool GetHasFocus();
|
||||||
static bool GetIsPaused();
|
static bool GetIsPaused();
|
||||||
static bool CanOpenUrl(const StringView& url);
|
static bool CanOpenUrl(const StringView& url);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "Engine/Platform/MemoryStats.h"
|
#include "Engine/Platform/MemoryStats.h"
|
||||||
#include "Engine/Platform/MessageBox.h"
|
#include "Engine/Platform/MessageBox.h"
|
||||||
#include "Engine/Platform/FileSystem.h"
|
#include "Engine/Platform/FileSystem.h"
|
||||||
|
#include "Engine/Platform/User.h"
|
||||||
#include "Engine/Core/Log.h"
|
#include "Engine/Core/Log.h"
|
||||||
#include "Engine/Core/Types/DateTime.h"
|
#include "Engine/Core/Types/DateTime.h"
|
||||||
#include "Engine/Core/Types/TimeSpan.h"
|
#include "Engine/Core/Types/TimeSpan.h"
|
||||||
@@ -40,6 +41,9 @@ static_assert(sizeof(float) == 4, "Invalid float type size.");
|
|||||||
static_assert(sizeof(double) == 8, "Invalid double type size.");
|
static_assert(sizeof(double) == 8, "Invalid double type size.");
|
||||||
|
|
||||||
float PlatformBase::CustomDpiScale = 1.0f;
|
float PlatformBase::CustomDpiScale = 1.0f;
|
||||||
|
Array<User*, FixedAllocation<8>> PlatformBase::Users;
|
||||||
|
Delegate<User*> PlatformBase::UserAdded;
|
||||||
|
Delegate<User*> PlatformBase::UserRemoved;
|
||||||
|
|
||||||
const Char* ToString(NetworkConnectionType value)
|
const Char* ToString(NetworkConnectionType value)
|
||||||
{
|
{
|
||||||
@@ -102,6 +106,22 @@ const Char* ToString(ThreadPriority value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserBase::UserBase(const String& name)
|
||||||
|
: UserBase(SpawnParams(Guid::New(), TypeInitializer), name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
UserBase::UserBase(const SpawnParams& params, const String& name)
|
||||||
|
: PersistentScriptingObject(params)
|
||||||
|
, _name(name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
String UserBase::GetName() const
|
||||||
|
{
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
|
||||||
bool PlatformBase::Init()
|
bool PlatformBase::Init()
|
||||||
{
|
{
|
||||||
#if BUILD_DEBUG
|
#if BUILD_DEBUG
|
||||||
@@ -462,6 +482,11 @@ ScreenOrientationType PlatformBase::GetScreenOrientationType()
|
|||||||
return ScreenOrientationType::Unknown;
|
return ScreenOrientationType::Unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String PlatformBase::GetUserName()
|
||||||
|
{
|
||||||
|
return Users.Count() != 0 ? Users[0]->GetName() : String::Empty;
|
||||||
|
}
|
||||||
|
|
||||||
bool PlatformBase::GetIsPaused()
|
bool PlatformBase::GetIsPaused()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -595,7 +595,7 @@ public:
|
|||||||
API_PROPERTY() static ScreenOrientationType GetScreenOrientationType();
|
API_PROPERTY() static ScreenOrientationType GetScreenOrientationType();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current locale culture (eg. "pl-PL" or "en-US").
|
/// Gets the current locale culture (eg. "pl-PL" or "en-US").
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_PROPERTY() static String GetUserLocaleName() = delete;
|
API_PROPERTY() static String GetUserLocaleName() = delete;
|
||||||
|
|
||||||
@@ -607,7 +607,7 @@ public:
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the user name.
|
/// Gets the user name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_PROPERTY() static String GetUserName() = delete;
|
API_PROPERTY() static String GetUserName();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns true if app has user focus.
|
/// Returns true if app has user focus.
|
||||||
@@ -625,6 +625,23 @@ public:
|
|||||||
/// <param name="result">The result.</param>
|
/// <param name="result">The result.</param>
|
||||||
static void CreateGuid(Guid& result);
|
static void CreateGuid(Guid& result);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of users.
|
||||||
|
/// </summary>
|
||||||
|
API_FIELD(ReadOnly) static Array<User*, FixedAllocation<8>> Users;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event called when user gets added (eg. logged in).
|
||||||
|
/// </summary>
|
||||||
|
API_EVENT() static Delegate<User*> UserAdded;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event called when user gets removed (eg. logged out).
|
||||||
|
/// </summary>
|
||||||
|
API_EVENT() static Delegate<User*> UserRemoved;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
20
Source/Engine/Platform/Base/PlatformUtils.h
Normal file
20
Source/Engine/Platform/Base/PlatformUtils.h
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Engine/Platform/Platform.h"
|
||||||
|
#include "Engine/Platform/User.h"
|
||||||
|
#include "Engine/Core/Collections/Array.h"
|
||||||
|
|
||||||
|
inline void OnPlatformUserAdd(User* user)
|
||||||
|
{
|
||||||
|
Platform::Users.Add(user);
|
||||||
|
Platform::UserAdded(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void OnPlatformUserRemove(User* user)
|
||||||
|
{
|
||||||
|
Platform::Users.Remove(user);
|
||||||
|
Platform::UserRemoved(user);
|
||||||
|
Delete(user);
|
||||||
|
}
|
||||||
29
Source/Engine/Platform/Base/UserBase.h
Normal file
29
Source/Engine/Platform/Base/UserBase.h
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Engine/Core/Types/String.h"
|
||||||
|
#include "Engine/Scripting/ScriptingObject.h"
|
||||||
|
|
||||||
|
API_INJECT_CPP_CODE("#include \"Engine/Platform/User.h\"");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native platform user object.
|
||||||
|
/// </summary>
|
||||||
|
API_CLASS(NoSpawn, NoConstructor, Sealed, Name="User") class FLAXENGINE_API UserBase : public PersistentScriptingObject
|
||||||
|
{
|
||||||
|
DECLARE_SCRIPTING_TYPE_NO_SPAWN(UserBase);
|
||||||
|
protected:
|
||||||
|
|
||||||
|
const String _name;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UserBase(const String& name);
|
||||||
|
UserBase(const SpawnParams& params, const String& name);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the username.
|
||||||
|
/// </summary>
|
||||||
|
API_PROPERTY() String GetName() const;
|
||||||
|
};
|
||||||
@@ -8,6 +8,7 @@
|
|||||||
#include "Engine/Platform/WindowsManager.h"
|
#include "Engine/Platform/WindowsManager.h"
|
||||||
#include "Engine/Platform/MemoryStats.h"
|
#include "Engine/Platform/MemoryStats.h"
|
||||||
#include "Engine/Platform/BatteryInfo.h"
|
#include "Engine/Platform/BatteryInfo.h"
|
||||||
|
#include "Engine/Platform/Base/PlatformUtils.h"
|
||||||
#include "Engine/Profiler/ProfilerCPU.h"
|
#include "Engine/Profiler/ProfilerCPU.h"
|
||||||
#include "Engine/Core/Log.h"
|
#include "Engine/Core/Log.h"
|
||||||
#include "Engine/Core/Collections/Array.h"
|
#include "Engine/Core/Collections/Array.h"
|
||||||
@@ -30,26 +31,6 @@ void* GDKPlatform::Instance = nullptr;
|
|||||||
Delegate<> GDKPlatform::OnSuspend;
|
Delegate<> GDKPlatform::OnSuspend;
|
||||||
Delegate<> GDKPlatform::OnResume;
|
Delegate<> GDKPlatform::OnResume;
|
||||||
|
|
||||||
struct User
|
|
||||||
{
|
|
||||||
XUserHandle UserHandle;
|
|
||||||
XUserLocalId LocalId;
|
|
||||||
Array<APP_LOCAL_DEVICE_ID, FixedAllocation<32>> AssociatedDevices;
|
|
||||||
|
|
||||||
void Set(XUserHandle userHandle, XUserLocalId localId)
|
|
||||||
{
|
|
||||||
UserHandle = userHandle;
|
|
||||||
LocalId = localId;
|
|
||||||
AssociatedDevices.Clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Unset()
|
|
||||||
{
|
|
||||||
XUserCloseHandle(UserHandle);
|
|
||||||
AssociatedDevices.Clear();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
bool IsSuspended = false;
|
bool IsSuspended = false;
|
||||||
@@ -58,11 +39,24 @@ namespace
|
|||||||
PAPPSTATE_REGISTRATION Plm = {};
|
PAPPSTATE_REGISTRATION Plm = {};
|
||||||
String UserLocale, ComputerName;
|
String UserLocale, ComputerName;
|
||||||
XTaskQueueHandle TaskQueue = nullptr;
|
XTaskQueueHandle TaskQueue = nullptr;
|
||||||
Array<User, FixedAllocation<8>> Users;
|
|
||||||
XTaskQueueRegistrationToken UserChangeEventCallbackToken;
|
XTaskQueueRegistrationToken UserChangeEventCallbackToken;
|
||||||
XTaskQueueRegistrationToken UserDeviceAssociationChangedCallbackToken;
|
XTaskQueueRegistrationToken UserDeviceAssociationChangedCallbackToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
User* FindUser(const XUserLocalId& id)
|
||||||
|
{
|
||||||
|
User* result = nullptr;
|
||||||
|
for (auto& user : Platform::Users)
|
||||||
|
{
|
||||||
|
if (user->LocalId.value == id.value)
|
||||||
|
{
|
||||||
|
result = user;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
switch (msg)
|
switch (msg)
|
||||||
@@ -76,7 +70,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
// Complete deferral
|
// Complete deferral
|
||||||
SetEvent(PlmSuspendComplete);
|
SetEvent(PlmSuspendComplete);
|
||||||
|
|
||||||
(void)WaitForSingleObject(PlmSignalResume, INFINITE);
|
WaitForSingleObject(PlmSignalResume, INFINITE);
|
||||||
|
|
||||||
IsSuspended = false;
|
IsSuspended = false;
|
||||||
LOG(Info, "Resuming application");
|
LOG(Info, "Resuming application");
|
||||||
@@ -100,23 +94,20 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK UserChangeEventCallback(_In_opt_ void* context,_In_ XUserLocalId userLocalId, _In_ XUserChangeEvent event)
|
void CALLBACK UserChangeEventCallback(_In_opt_ void* context, _In_ XUserLocalId userLocalId, _In_ XUserChangeEvent event)
|
||||||
{
|
{
|
||||||
LOG(Info, "User event (userLocalId: {0}, event: {1})", userLocalId.value, (int32)event);
|
LOG(Info, "User event (userLocalId: {0}, event: {1})", userLocalId.value, (int32)event);
|
||||||
|
|
||||||
|
auto user = FindUser(userLocalId);
|
||||||
switch (event)
|
switch (event)
|
||||||
{
|
{
|
||||||
case XUserChangeEvent::SignedInAgain:
|
case XUserChangeEvent::SignedInAgain:
|
||||||
break;
|
break;
|
||||||
case XUserChangeEvent::SignedOut:
|
case XUserChangeEvent::SignedOut:
|
||||||
for (int32 i = 0; i < Users.Count(); i++)
|
if (user)
|
||||||
{
|
{
|
||||||
if (Users[i].LocalId.value == userLocalId.value)
|
// Logout
|
||||||
{
|
OnPlatformUserRemove(user);
|
||||||
Users[i].Unset();
|
|
||||||
Users.RemoveAt(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default: ;
|
default: ;
|
||||||
@@ -136,20 +127,6 @@ String ToString(const APP_LOCAL_DEVICE_ID& deviceId)
|
|||||||
*reinterpret_cast<const unsigned int*>(&deviceId.value[28]));
|
*reinterpret_cast<const unsigned int*>(&deviceId.value[28]));
|
||||||
}
|
}
|
||||||
|
|
||||||
User* FindUser(const XUserLocalId& id)
|
|
||||||
{
|
|
||||||
User* result = nullptr;
|
|
||||||
for (auto& user : Users)
|
|
||||||
{
|
|
||||||
if (user.LocalId.value == id.value)
|
|
||||||
{
|
|
||||||
result = &user;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CALLBACK UserDeviceAssociationChangedCallback(_In_opt_ void* context,_In_ const XUserDeviceAssociationChange* change)
|
void CALLBACK UserDeviceAssociationChangedCallback(_In_opt_ void* context,_In_ const XUserDeviceAssociationChange* change)
|
||||||
{
|
{
|
||||||
LOG(Info, "User device association event (deviceId: {0}, oldUser: {1}, newUser: {2})", ToString(change->deviceId), change->oldUser.value, change->newUser.value);
|
LOG(Info, "User device association event (deviceId: {0}, oldUser: {1}, newUser: {2})", ToString(change->deviceId), change->oldUser.value, change->newUser.value);
|
||||||
@@ -185,7 +162,7 @@ void OnMainWindowCreated(HWND hWnd)
|
|||||||
PostMessage(reinterpret_cast<HWND>(context), WM_USER, 0, 0);
|
PostMessage(reinterpret_cast<HWND>(context), WM_USER, 0, 0);
|
||||||
|
|
||||||
// To defer suspend, you must wait to exit this callback
|
// To defer suspend, you must wait to exit this callback
|
||||||
(void)WaitForSingleObject(PlmSuspendComplete, INFINITE);
|
WaitForSingleObject(PlmSuspendComplete, INFINITE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -209,9 +186,9 @@ void CALLBACK AddUserComplete(_In_ XAsyncBlock* ab)
|
|||||||
|
|
||||||
if (FindUser(localId) == nullptr)
|
if (FindUser(localId) == nullptr)
|
||||||
{
|
{
|
||||||
// Add user
|
// Login
|
||||||
auto& user = Users.AddOne();
|
auto user = New<User>(userHandle, userLocalId, String::Empty);
|
||||||
user.Set(userHandle, userLocalId);
|
OnPlatformUserAdd(user);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -506,11 +483,6 @@ String GDKPlatform::GetComputerName()
|
|||||||
return ComputerName;
|
return ComputerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
String GDKPlatform::GetUserName()
|
|
||||||
{
|
|
||||||
return String::Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GDKPlatform::GetHasFocus()
|
bool GDKPlatform::GetHasFocus()
|
||||||
{
|
{
|
||||||
return !IsSuspended;
|
return !IsSuspended;
|
||||||
@@ -524,7 +496,7 @@ bool GDKPlatform::CanOpenUrl(const StringView& url)
|
|||||||
void GDKPlatform::OpenUrl(const StringView& url)
|
void GDKPlatform::OpenUrl(const StringView& url)
|
||||||
{
|
{
|
||||||
const StringAsANSI<> urlANSI(url.Get(), url.Length());
|
const StringAsANSI<> urlANSI(url.Get(), url.Length());
|
||||||
XLaunchUri(Users[0].UserHandle, urlANSI.Get());
|
XLaunchUri(Users[0]->UserHandle, urlANSI.Get());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GetMonitorBoundsData
|
struct GetMonitorBoundsData
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ public:
|
|||||||
static int32 GetDpi();
|
static int32 GetDpi();
|
||||||
static String GetUserLocaleName();
|
static String GetUserLocaleName();
|
||||||
static String GetComputerName();
|
static String GetComputerName();
|
||||||
static String GetUserName();
|
|
||||||
static bool GetHasFocus();
|
static bool GetHasFocus();
|
||||||
static bool CanOpenUrl(const StringView& url);
|
static bool CanOpenUrl(const StringView& url);
|
||||||
static void OpenUrl(const StringView& url);
|
static void OpenUrl(const StringView& url);
|
||||||
|
|||||||
38
Source/Engine/Platform/GDK/GDKUser.h
Normal file
38
Source/Engine/Platform/GDK/GDKUser.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if PLATFORM_GDK
|
||||||
|
|
||||||
|
#include "Engine/Platform/Base/UserBase.h"
|
||||||
|
#include "Engine/Core/Collections/Array.h"
|
||||||
|
#include "Engine/Platform/Win32/IncludeWindowsHeaders.h"
|
||||||
|
#include <XGameRuntime.h>
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Implementation of the user for GDK platform.
|
||||||
|
/// </summary>
|
||||||
|
class FLAXENGINE_API GDKUser : public UserBase
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
GDKUser(XUserHandle userHandle, XUserLocalId localId, const String& name)
|
||||||
|
: UserBase(name)
|
||||||
|
{
|
||||||
|
UserHandle = userHandle;
|
||||||
|
LocalId = localId;
|
||||||
|
}
|
||||||
|
|
||||||
|
~GDKUser()
|
||||||
|
{
|
||||||
|
XUserCloseHandle(UserHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
XUserHandle UserHandle;
|
||||||
|
XUserLocalId LocalId;
|
||||||
|
Array<APP_LOCAL_DEVICE_ID, FixedAllocation<32>> AssociatedDevices;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
#include "Engine/Platform/WindowsManager.h"
|
#include "Engine/Platform/WindowsManager.h"
|
||||||
#include "Engine/Platform/Clipboard.h"
|
#include "Engine/Platform/Clipboard.h"
|
||||||
#include "Engine/Platform/IGuiData.h"
|
#include "Engine/Platform/IGuiData.h"
|
||||||
|
#include "Engine/Platform/Base/PlatformUtils.h"
|
||||||
#include "Engine/Utilities/StringConverter.h"
|
#include "Engine/Utilities/StringConverter.h"
|
||||||
#include "Engine/Threading/Threading.h"
|
#include "Engine/Threading/Threading.h"
|
||||||
#include "Engine/Engine/Engine.h"
|
#include "Engine/Engine/Engine.h"
|
||||||
@@ -51,7 +52,7 @@
|
|||||||
CPUInfo UnixCpu;
|
CPUInfo UnixCpu;
|
||||||
int ClockSource;
|
int ClockSource;
|
||||||
Guid DeviceId;
|
Guid DeviceId;
|
||||||
String UserLocale, ComputerName, UserName, HomeDir;
|
String UserLocale, ComputerName, HomeDir;
|
||||||
byte MacAddress[6];
|
byte MacAddress[6];
|
||||||
|
|
||||||
#define UNIX_APP_BUFF_SIZE 256
|
#define UNIX_APP_BUFF_SIZE 256
|
||||||
@@ -2014,6 +2015,10 @@ bool LinuxPlatform::Init()
|
|||||||
UnixCpu.CacheLineSize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
|
UnixCpu.CacheLineSize = sysconf(_SC_LEVEL1_DCACHE_LINESIZE);
|
||||||
ASSERT(UnixCpu.CacheLineSize && Math::IsPowerOfTwo(UnixCpu.CacheLineSize));
|
ASSERT(UnixCpu.CacheLineSize && Math::IsPowerOfTwo(UnixCpu.CacheLineSize));
|
||||||
|
|
||||||
|
// Get user name string
|
||||||
|
getlogin_r(buffer, UNIX_APP_BUFF_SIZE);
|
||||||
|
OnPlatformUserAdd(New<User>(String(buffer));
|
||||||
|
|
||||||
UnixGetMacAddress(MacAddress);
|
UnixGetMacAddress(MacAddress);
|
||||||
|
|
||||||
// Generate unique device ID
|
// Generate unique device ID
|
||||||
@@ -2054,10 +2059,6 @@ bool LinuxPlatform::Init()
|
|||||||
gethostname(buffer, UNIX_APP_BUFF_SIZE);
|
gethostname(buffer, UNIX_APP_BUFF_SIZE);
|
||||||
ComputerName = String(buffer);
|
ComputerName = String(buffer);
|
||||||
|
|
||||||
// Get user name string
|
|
||||||
getlogin_r(buffer, UNIX_APP_BUFF_SIZE);
|
|
||||||
UserName = String(buffer);
|
|
||||||
|
|
||||||
// Get home dir
|
// Get home dir
|
||||||
struct passwd pw;
|
struct passwd pw;
|
||||||
struct passwd* result = NULL;
|
struct passwd* result = NULL;
|
||||||
@@ -2603,11 +2604,6 @@ String LinuxPlatform::GetComputerName()
|
|||||||
return ComputerName;
|
return ComputerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
String LinuxPlatform::GetUserName()
|
|
||||||
{
|
|
||||||
return UserName;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LinuxPlatform::GetHasFocus()
|
bool LinuxPlatform::GetHasFocus()
|
||||||
{
|
{
|
||||||
// Check if any window is focused
|
// Check if any window is focused
|
||||||
|
|||||||
@@ -113,7 +113,6 @@ public:
|
|||||||
static int32 GetDpi();
|
static int32 GetDpi();
|
||||||
static String GetUserLocaleName();
|
static String GetUserLocaleName();
|
||||||
static String GetComputerName();
|
static String GetComputerName();
|
||||||
static String GetUserName();
|
|
||||||
static bool GetHasFocus();
|
static bool GetHasFocus();
|
||||||
static bool CanOpenUrl(const StringView& url);
|
static bool CanOpenUrl(const StringView& url);
|
||||||
static void OpenUrl(const StringView& url);
|
static void OpenUrl(const StringView& url);
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ class WindowsWindow;
|
|||||||
typedef WindowsWindow Window;
|
typedef WindowsWindow Window;
|
||||||
class Win32Network;
|
class Win32Network;
|
||||||
typedef Win32Network Network;
|
typedef Win32Network Network;
|
||||||
|
class UserBase;
|
||||||
|
typedef UserBase User;
|
||||||
|
|
||||||
#elif PLATFORM_UWP
|
#elif PLATFORM_UWP
|
||||||
|
|
||||||
@@ -47,6 +49,8 @@ class UWPWindow;
|
|||||||
typedef UWPWindow Window;
|
typedef UWPWindow Window;
|
||||||
class Win32Network;
|
class Win32Network;
|
||||||
typedef Win32Network Network;
|
typedef Win32Network Network;
|
||||||
|
class UserBase;
|
||||||
|
typedef UserBase User;
|
||||||
|
|
||||||
#elif PLATFORM_LINUX
|
#elif PLATFORM_LINUX
|
||||||
|
|
||||||
@@ -70,6 +74,8 @@ class LinuxWindow;
|
|||||||
typedef LinuxWindow Window;
|
typedef LinuxWindow Window;
|
||||||
class UnixNetwork;
|
class UnixNetwork;
|
||||||
typedef UnixNetwork Network;
|
typedef UnixNetwork Network;
|
||||||
|
class UserBase;
|
||||||
|
typedef UserBase User;
|
||||||
|
|
||||||
#elif PLATFORM_PS4
|
#elif PLATFORM_PS4
|
||||||
|
|
||||||
@@ -93,6 +99,8 @@ class PS4Window;
|
|||||||
typedef PS4Window Window;
|
typedef PS4Window Window;
|
||||||
class PS4Network;
|
class PS4Network;
|
||||||
typedef PS4Network Network;
|
typedef PS4Network Network;
|
||||||
|
class PS4User;
|
||||||
|
typedef PS4User User;
|
||||||
|
|
||||||
#elif PLATFORM_PS5
|
#elif PLATFORM_PS5
|
||||||
|
|
||||||
@@ -116,6 +124,8 @@ class PS5Window;
|
|||||||
typedef PS5Window Window;
|
typedef PS5Window Window;
|
||||||
class PS5Network;
|
class PS5Network;
|
||||||
typedef PS5Network Network;
|
typedef PS5Network Network;
|
||||||
|
class PS5User;
|
||||||
|
typedef PS5User User;
|
||||||
|
|
||||||
#elif PLATFORM_XBOX_ONE
|
#elif PLATFORM_XBOX_ONE
|
||||||
|
|
||||||
@@ -139,6 +149,8 @@ class GDKWindow;
|
|||||||
typedef GDKWindow Window;
|
typedef GDKWindow Window;
|
||||||
class NetworkBase;
|
class NetworkBase;
|
||||||
typedef NetworkBase Network;
|
typedef NetworkBase Network;
|
||||||
|
class GDKUser;
|
||||||
|
typedef GDKUser User;
|
||||||
|
|
||||||
#elif PLATFORM_XBOX_SCARLETT
|
#elif PLATFORM_XBOX_SCARLETT
|
||||||
|
|
||||||
@@ -162,6 +174,8 @@ class GDKWindow;
|
|||||||
typedef GDKWindow Window;
|
typedef GDKWindow Window;
|
||||||
class NetworkBase;
|
class NetworkBase;
|
||||||
typedef NetworkBase Network;
|
typedef NetworkBase Network;
|
||||||
|
class GDKUser;
|
||||||
|
typedef GDKUser User;
|
||||||
|
|
||||||
#elif PLATFORM_ANDROID
|
#elif PLATFORM_ANDROID
|
||||||
|
|
||||||
@@ -185,6 +199,8 @@ class AndroidWindow;
|
|||||||
typedef AndroidWindow Window;
|
typedef AndroidWindow Window;
|
||||||
class UnixNetwork;
|
class UnixNetwork;
|
||||||
typedef UnixNetwork Network;
|
typedef UnixNetwork Network;
|
||||||
|
class UserBase;
|
||||||
|
typedef UserBase User;
|
||||||
|
|
||||||
#elif PLATFORM_SWITCH
|
#elif PLATFORM_SWITCH
|
||||||
|
|
||||||
@@ -208,6 +224,8 @@ class SwitchWindow;
|
|||||||
typedef SwitchWindow Window;
|
typedef SwitchWindow Window;
|
||||||
class SwitchNetwork;
|
class SwitchNetwork;
|
||||||
typedef SwitchNetwork Network;
|
typedef SwitchNetwork Network;
|
||||||
|
class UserBase;
|
||||||
|
typedef UserBase User;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
String UserLocale, ComputerName, UserName;
|
String UserLocale, ComputerName;
|
||||||
Vector2 VirtualScreenSize = Vector2(0.0f);
|
Vector2 VirtualScreenSize = Vector2(0.0f);
|
||||||
int32 SystemDpi = 96;
|
int32 SystemDpi = 96;
|
||||||
}
|
}
|
||||||
@@ -58,9 +58,6 @@ bool UWPPlatform::Init()
|
|||||||
ComputerName = String(buffer);
|
ComputerName = String(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cannot access user name with a direct API
|
|
||||||
UserName = String::Empty;
|
|
||||||
|
|
||||||
SystemDpi = CUWPPlatform->GetDpi();
|
SystemDpi = CUWPPlatform->GetDpi();
|
||||||
Input::Mouse = Impl::Mouse = New<UWPWindow::UWPMouse>();
|
Input::Mouse = Impl::Mouse = New<UWPWindow::UWPMouse>();
|
||||||
Input::Keyboard = Impl::Keyboard = New<UWPWindow::UWPKeyboard>();
|
Input::Keyboard = Impl::Keyboard = New<UWPWindow::UWPKeyboard>();
|
||||||
@@ -145,11 +142,6 @@ String UWPPlatform::GetComputerName()
|
|||||||
return ComputerName;
|
return ComputerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
String UWPPlatform::GetUserName()
|
|
||||||
{
|
|
||||||
return UserName;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UWPPlatform::GetHasFocus()
|
bool UWPPlatform::GetHasFocus()
|
||||||
{
|
{
|
||||||
// TODO: impl this
|
// TODO: impl this
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ public:
|
|||||||
static int32 GetDpi();
|
static int32 GetDpi();
|
||||||
static String GetUserLocaleName();
|
static String GetUserLocaleName();
|
||||||
static String GetComputerName();
|
static String GetComputerName();
|
||||||
static String GetUserName();
|
|
||||||
static bool GetHasFocus();
|
static bool GetHasFocus();
|
||||||
static bool CanOpenUrl(const StringView& url);
|
static bool CanOpenUrl(const StringView& url);
|
||||||
static void OpenUrl(const StringView& url);
|
static void OpenUrl(const StringView& url);
|
||||||
|
|||||||
15
Source/Engine/Platform/User.h
Normal file
15
Source/Engine/Platform/User.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#if PLATFORM_XBOX_ONE || PLATFORM_XBOX_SCARLETT
|
||||||
|
#include "GDK/GDKUser.h"
|
||||||
|
#elif PLATFORM_PS4
|
||||||
|
#include "Platforms/PS4/Engine/Platform/PS4User.h"
|
||||||
|
#elif PLATFORM_PS5
|
||||||
|
#include "Platforms/PS5/Engine/Platform/PS5User.h"
|
||||||
|
#else
|
||||||
|
#include "Base/UserBase.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "Types.h"
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "Engine/Platform/WindowsManager.h"
|
#include "Engine/Platform/WindowsManager.h"
|
||||||
#include "Engine/Platform/MemoryStats.h"
|
#include "Engine/Platform/MemoryStats.h"
|
||||||
#include "Engine/Platform/BatteryInfo.h"
|
#include "Engine/Platform/BatteryInfo.h"
|
||||||
|
#include "Engine/Platform/Base/PlatformUtils.h"
|
||||||
#include "Engine/Engine/Globals.h"
|
#include "Engine/Engine/Globals.h"
|
||||||
#include "Engine/Core/Log.h"
|
#include "Engine/Core/Log.h"
|
||||||
#include "Engine/Core/Collections/Dictionary.h"
|
#include "Engine/Core/Collections/Dictionary.h"
|
||||||
@@ -55,9 +56,9 @@ void DbgHelpUnlock()
|
|||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
String UserLocale, ComputerName, UserName, WindowsName;
|
String UserLocale, ComputerName, WindowsName;
|
||||||
HANDLE EngineMutex = nullptr;
|
HANDLE EngineMutex = nullptr;
|
||||||
Rectangle VirtualScreenBounds = Rectangle(0.0f, 0.0f, 0.0f, 0.0f);
|
Rectangle VirtualScreenBounds(0.0f, 0.0f, 0.0f, 0.0f);
|
||||||
int32 VersionMajor = 0;
|
int32 VersionMajor = 0;
|
||||||
int32 VersionMinor = 0;
|
int32 VersionMinor = 0;
|
||||||
int32 VersionBuild = 0;
|
int32 VersionBuild = 0;
|
||||||
@@ -647,10 +648,12 @@ bool WindowsPlatform::Init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get user name string
|
// Get user name string
|
||||||
|
String userName;
|
||||||
if (GetUserNameW(buffer, &tmp))
|
if (GetUserNameW(buffer, &tmp))
|
||||||
{
|
{
|
||||||
UserName = String(buffer);
|
userName = String(buffer);
|
||||||
}
|
}
|
||||||
|
OnPlatformUserAdd(New<User>(userName));
|
||||||
|
|
||||||
WindowsInput::Init();
|
WindowsInput::Init();
|
||||||
|
|
||||||
@@ -794,11 +797,6 @@ String WindowsPlatform::GetComputerName()
|
|||||||
return ComputerName;
|
return ComputerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
String WindowsPlatform::GetUserName()
|
|
||||||
{
|
|
||||||
return UserName;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WindowsPlatform::GetHasFocus()
|
bool WindowsPlatform::GetHasFocus()
|
||||||
{
|
{
|
||||||
DWORD foregroundProcess;
|
DWORD foregroundProcess;
|
||||||
|
|||||||
@@ -68,7 +68,6 @@ public:
|
|||||||
static int32 GetDpi();
|
static int32 GetDpi();
|
||||||
static String GetUserLocaleName();
|
static String GetUserLocaleName();
|
||||||
static String GetComputerName();
|
static String GetComputerName();
|
||||||
static String GetUserName();
|
|
||||||
static bool GetHasFocus();
|
static bool GetHasFocus();
|
||||||
static bool CanOpenUrl(const StringView& url);
|
static bool CanOpenUrl(const StringView& url);
|
||||||
static void OpenUrl(const StringView& url);
|
static void OpenUrl(const StringView& url);
|
||||||
|
|||||||
Reference in New Issue
Block a user