// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. #include "FriendsAndChatPrivatePCH.h" #include "FriendsUserViewModel.h" class FFriendsUserViewModelImpl : public FFriendsUserViewModel { public: virtual ~FFriendsUserViewModelImpl() override { Uninitialize(); } virtual const EOnlinePresenceState::Type GetOnlineStatus() const override { TSharedPtr ManagerPinned = FriendsAndChatManager.Pin(); if (ManagerPinned.IsValid()) { return ManagerPinned->GetOnlineStatus(); } return EOnlinePresenceState::Offline; } virtual const FString GetClientId() const override { FString ClientId; TSharedPtr ManagerPinned = FriendsAndChatManager.Pin(); if (ManagerPinned.IsValid()) { ClientId = ManagerPinned->GetUserClientId(); } return ClientId; } virtual const FString GetName() const override { FString Nickname; TSharedPtr ManagerPinned = FriendsAndChatManager.Pin(); if (ManagerPinned.IsValid()) { Nickname = ManagerPinned->GetUserNickname(); } return Nickname; } private: void Uninitialize() { if (FriendsAndChatManager.IsValid()) { FriendsAndChatManager.Reset(); } } FFriendsUserViewModelImpl( const TSharedRef& InFriendsAndChatManager ) : FriendsAndChatManager(InFriendsAndChatManager) { } private: TWeakPtr FriendsAndChatManager; private: friend FFriendsUserViewModelFactory; }; TSharedRef< FFriendsUserViewModel > FFriendsUserViewModelFactory::Create(const TSharedRef& FriendsAndChatManager) { TSharedRef< FFriendsUserViewModelImpl > ViewModel(new FFriendsUserViewModelImpl(FriendsAndChatManager)); return ViewModel; }