Git Product home page Git Product logo

ue4gameliftclientsdk's Introduction

GameLift Client SDK for Unreal Engine 4

What is Amazon GameLift?

Amazon GameLift is a managed service for deploying, operating, and scaling dedicated game servers for session-based multiplayer games. Amazon GameLift makes it easy to manage server infrastructure, scale capacity to lower latency and cost, match players into available game sessions, and defend from distributed denial-of-service (DDoS) attacks. You pay for the compute resources and bandwidth your games actually use, without monthly or annual contracts.

Epic Games announced Amazon GameLift support for Unreal Engine 4 but only the server plugin is available. We have made a client plugin for Unreal Engine 4 including Blueprint support that can Create Game Sessions, Describe Game Sessions and Create Player Sessions.

Whats Included?

This repository includes source files for the plugin as well as pre-built binaries of Core, GameLift and Cognito Identity from AWS SDK for C++. To know the version of AWS, please check the VersionName in GameLiftClientSDK.uplugin.

How to update the AWS binaries

Since the AWSK SDK constantly changes, it may be beneficial to generate the binaries yourself and replace the ones currently in the plugin. To do this, go to the repository for the AWS SDK for C++ and clone it. Then, run these commands in the AWS SDK directory and make sure the file path of your cloned repository isn't too long!

cmake -DBUILD_ONLY="core;gamelift;cognito-identity" -DCMAKE_BUILD_TYPE="release"
msbuild INSTALL.vcxproj /p:Configuration=Release

Ignore the errors if you get any. Now go to the "bin" folder, then the "Release" folder, and copy the files, aws-cpp-sdk-cognito-identity.dll, aws-cpp-sdk-core.dll, and aws-cpp-sdk-gamelift.dll to a separate folder. After that, go back to the main directory, and go to the "aws-cpp-sdk-cognito-identity" folder, then the "Release" folder and copy the file, "aws-cpp-sdk-cognito-identity.lib to the folder with the dll files. Repeat this last step for the "aws-cpp-sdk-core" and aws-cpp-sdk-gamelift" folders.

Once those dll and lib files have been gathered, go to the cloned version of this repository, the GameLift Client SDK, and navigate to the GameLiftClientSDK -> ThirdParty -> GameLiftClientSDK -> Win64 folder and replace the dll and lib files with the ones you just made. Then edit the "GameLiftClientSDK.uplugin" file in the first/top GameLiftClientSDK folder and replace the "VersionName" with the version of AWS that you are using.

{
  "FileVersion": 3,
  "Version": 1,
  "VersionName": "1.7.157", <---- CHANGE THIS
  "FriendlyName": "GameLift Client SDK",
  "Description": "GameLift plugin for creating Game Sessions, Player Sessions etc.",
  ...
}

For Linux, navigate to the GameLiftClientSDK -> ThirdParty -> GameLiftClientSDK -> Linux folder and replace the same dll and lib files with the ones you just made. To replace the .so files, go back to the cloned AWS SDK repository, and delete these files: CMakeCache.txt, .deps/CMakeCache.txt, and the .deps/build/src folder. Go back to the top level of the directory and run these commands,

cmake -DBUILD_ONLY="core;gamelift;cognito-identity" -DCMAKE_BUILD_TYPE="release"
sudo make install

Ignore the errors if you get any. Now, you will find a libaws-cpp-sdk-cognito-identity.so file in the "aws-cpp-sdk-cognito-identity" folder. Copy this .so file as well as the corresponding .so files from the "aws-cpp-sdk-core" and "aws-cpp-sdk-gamelift" folders. Go back to the Client SDK cloned repository and replace the .so files in the GameLiftClientSDK -> ThirdParty -> GameLiftClientSDK -> Linux folder with the ones you just generated.

Sounds cool, I'm In! What should I do?

If you are using Blueprint-Only project then open your project and add a dummy C++ class from File->New C++ class. This is required to generate project files.

  • Download or clone this repository into your Project/Plugin folder.
  • Add "GameLiftClientSDK" as a public dependency in your ProjectName.Build.cs file
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftClientSDK" });
  • Right click on your project file and select Generate Visual Studio project files.
  • Open your projects solution file (*.sln) and build your project.
  • Now if you start your project and go to Edit->Plugins you should see the GameLift Client SDK under Installed->YetiTech Studios category.

Dealing with building error C4577

If your build output throws some C4577 errors when building your project after implementing the plugin, there is one thing you can do to work around it. Open the file GameLiftClientSDK.Build.cs located at YourProject/Plugins/GameLiftClientSDK/Source/GameLiftClientSDK/ and after line 9, add the following code fragment:

bEnableExceptions = true;

The final code would look like this:

public class GameLiftClientSDK : ModuleRules
{
	public GameLiftClientSDK(ReadOnlyTargetRules Target) : base(Target)
	{
        	bEnableExceptions = true;

		// ...
	}
}

Then, save the file and build your game again and probably you'll be fine.

How to use GameLift Client Plugin

You can use this plugin either in Blueprints or C++. In any method, you must first create the GameLift client before accessing it. This is done inside the GameLiftObject. After initializing the GameLiftObject you can access GameLift Client functions. GameLiftObject can be created from any Blueprint. For the sake of this tutorial we will do all this inside our custom GameInstance class.

Blueprints

  • Open your custom GameInstance Blueprint class.
  • Then add an Event Init node.
  • Now connect the init node to Create Game Lift Object node. In this node don't forget to type your access key and secret key. See Managing Access Keys for your AWS Account for more information. Image
  • Once the above node is created, you are good to create game sessions, player sessions etc. Here is an example network. NOTE: This is only an example. Implementation might differ according to your project. Imgur

C++

4.17 Users: If you are getting an error message like in the below picture, make sure you select No. This is a bug in 4.17 and was resolved in 4.18.

Imgur

More information here: https://issues.unrealengine.com/issue/UE-49007

Header file.

#pragma once

#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "ExampleGameInstance.generated.h"


UCLASS()
class GAMELIFTPLUGINTEST_API UExampleGameInstance : public UGameInstance
{
	GENERATED_BODY()
	
private:
	UPROPERTY()
	class UGameLiftClientObject* GameLiftClientObject;

public:

	virtual void Init() override;

	// Create Game Session ///////////////////////////////////////////////////
	void CreateGameSession();
	UFUNCTION()
	void OnGameCreationSuccess(const FString& GameSessionID);
	UFUNCTION()
	void OnGameCreationFailed(const FString& ErrorMessage);

	// Describe Game Session /////////////////////////////////////////////////
	void DescribeGameSession(const FString& GameSessionID);
	UFUNCTION()
	void OnDescribeGameSessionSuccess(const FString& SessionID, EGameLiftGameSessionStatus SessionState);
	UFUNCTION()
	void OnDescribeGameSessionFailed(const FString& ErrorMessage);

	// Create Player Session /////////////////////////////////////////////////
	void CreatePlayerSession(const FString& GameSessionID, const FString UniquePlayerID);
	UFUNCTION()
	void OnPlayerSessionCreateSuccess(const FString& IPAddress, const FString& Port, const FString& PlayerSessionID);
	UFUNCTION()
	void OnPlayerSessionCreateFail(const FString& ErrorMessage);
};

Source file.

#include "ExampleGameInstance.h"
#include "Kismet/GameplayStatics.h"
#if WITH_GAMELIFTCLIENTSDK
#include "GameLiftClientSDK/Public/GameLiftClientObject.h"
#include "GameLiftClientSDK/Public/GameLiftClientApi.h"
#endif

void UExampleGameInstance::Init()
{
	Super::Init();
#if WITH_GAMELIFTCLIENTSDK
    // Create the game lift object. This is required before calling any GameLift functions.
	GameLiftClientObject = UGameLiftClientObject::CreateGameLiftObject("Your Access Key", "Your Secret Key");
#endif
}

void UExampleGameInstance::CreateGameSession()
{
#if WITH_GAMELIFTCLIENTSDK
	FGameLiftGameSessionConfig MySessionConfig;
	MySessionConfig.SetAliasID("Your Alias ID");
	MySessionConfig.SetMaxPlayers(10);
	UGameLiftCreateGameSession* MyGameSessionObject = GameLiftClientObject->CreateGameSession(MySessionConfig);
	MyGameSessionObject->OnCreateGameSessionSuccess.AddDynamic(this, &UExampleGameInstance::OnGameCreationSuccess);
	MyGameSessionObject->OnCreateGameSessionFailed.AddDynamic(this, &UExampleGameInstance::OnGameCreationFailed);
	MyGameSessionObject->Activate();
#endif
}

void UExampleGameInstance::OnGameCreationSuccess(const FString& GameSessionID)
{
	DescribeGameSession(GameSessionID);
}

void UExampleGameInstance::OnGameCreationFailed(const FString& ErrorMessage)
{
#if WITH_GAMELIFTCLIENTSDK
	// Do stuff...
#endif
}

void UExampleGameInstance::DescribeGameSession(const FString& GameSessionID)
{
#if WITH_GAMELIFTCLIENTSDK
	UGameLiftDescribeGameSession* MyDescribeGameSessionObject = GameLiftClientObject->DescribeGameSession(GameSessionID);
	MyDescribeGameSessionObject->OnDescribeGameSessionStateSuccess.AddDynamic(this, &UExampleGameInstance::OnDescribeGameSessionSuccess);
	MyDescribeGameSessionObject->OnDescribeGameSessionStateFailed.AddDynamic(this, &UExampleGameInstance::OnDescribeGameSessionFailed);
	MyDescribeGameSessionObject->Activate();
#endif
}

void UExampleGameInstance::OnDescribeGameSessionSuccess(const FString& SessionID, EGameLiftGameSessionStatus SessionState)
{
	// Player sessions can only be created on ACTIVE instance.
	if (SessionState == EGameLiftGameSessionStatus::STATUS_Active)
	{
		CreatePlayerSession(SessionID, "Your Unique Player ID");
	}
}

void UExampleGameInstance::OnDescribeGameSessionFailed(const FString& ErrorMessage)
{
#if WITH_GAMELIFTCLIENTSDK
	// Do stuff...
#endif
}

void UExampleGameInstance::CreatePlayerSession(const FString& GameSessionID, const FString UniquePlayerID)
{
#if WITH_GAMELIFTCLIENTSDK
	UGameLiftCreatePlayerSession* MyCreatePlayerSessionObject = GameLiftClientObject->CreatePlayerSession(GameSessionID, UniquePlayerID);
	MyCreatePlayerSessionObject->OnCreatePlayerSessionSuccess.AddDynamic(this, &UExampleGameInstance::OnPlayerSessionCreateSuccess);
	MyCreatePlayerSessionObject->OnCreatePlayerSessionFailed.AddDynamic(this, &UExampleGameInstance::OnPlayerSessionCreateFail);
	MyCreatePlayerSessionObject->Activate();
#endif
}

void UExampleGameInstance::OnPlayerSessionCreateSuccess(const FString& IPAddress, const FString& Port, const FString& PlayerSessionID)
{
#if WITH_GAMELIFTCLIENTSDK
	const FString TravelURL = IPAddress + ":" + Port;
	UGameplayStatics::GetPlayerController(this, 0)->ClientTravel(TravelURL, ETravelType::TRAVEL_Absolute);
#endif
}

void UExampleGameInstance::OnPlayerSessionCreateFail(const FString& ErrorMessage)
{
#if WITH_GAMELIFTCLIENTSDK
	// Do stuff...
#endif
}

ue4gameliftclientsdk's People

Contributors

chiefgui avatar chris-gong avatar ryanjon2040 avatar yetitechstudios avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ue4gameliftclientsdk's Issues

Finding GameSessions

What is the preferred way to find a game session on a fleet? I have a Fleet setup by Alias and there is a running game session on that Fleet. I'd like my clients to be able to search a fleet (by the alias) to find one ore more game session.

Is this currently possible? I'm not sure how else to find game sessions without my testers needing to enter it manually each time.
Thanks!

Access violation when starting Aws::InitAPI()

Hi
I'm getting access violation error when trying to open Unreal Editor with GameLiftClientSDK attached. It occurs at AWS Core module startup.

I have added all needed dependencies:
aws-c-common,
aws-c-eventstream,
aws-checksums,
aws-cpp-sdk-cognito-identity

I have successfully compiled the GameLiftClientSDK in Visual. Still can't open the Editor. Am I missing something here?

Here is the Editor crash location:

LogWindows: Error: [Callstack] 0x00007ff8c98b399f aws-cpp-sdk-core.dll!Aws::Monitoring::InitMonitoring() [D:\Biblioteki_SDK\AWS\AWS_SDK\aws-cpp-sdk-core\source\monitoring\MonitoringManager.cpp:109]
LogWindows: Error: [Callstack] 0x00007ff8c98591d2 aws-cpp-sdk-core.dll!Aws::InitAPI() [D:\Biblioteki_SDK\AWS\AWS_SDK\aws-cpp-sdk-core\source\Aws.cpp:115]

Here you can find the more logs:
TestGame.log

Server process started correctly but did not call InitSDK() within 5 minutes

I managed to upload a linux build to the gamelift but on fleet creation in the ACTIVATING stage i get this error:

Server process started correctly but did not call InitSDK() within 5 minutes, launchPath(/local/game/Mul/Binaries/Linux/MulServer), arguments(null), instanceId(i-0758a58563c9fc6df)

I searched for the solution very hard but in the end I had to ask you guys here. Are you familliar with this error?
Most of the solutions that I have found online were inputting correct "launchPath", but as you can see from the error, it is a correct path.

Thanks in advance

Unable to install plugin

Hi there,

I have the source version of UE4 (4.24.1) - and I have downloaded your plugin.

I am using the latest AWS Server SDK (3.3.0) and the client CPP SDK is v.1.7.251 - the latest as per their GitHub.

When I initially dragged the ClientSDK files into the Plugins/ folder of my project, I was getting UE4 warnings that the plugin would not work even though it had compiled and UE4 was launching - there is a similar issue for this already.

I then updated the AWS Core, Cognito Identity & GameLift libraries and DLLs, and edited the uPlugin file to use the latest version of AWS as instructed in your README.

However, when I try to launch UE4 and recompile - it fails and asks me to recompile from source. When I do this, I am met with many errors and the plugin will not build.

Do you know if there are any issues supporting UE4 4.24.1 or the latest version of AWS SDK?

If so, what resources did you use to create this plugin? I am quite happy to investigate either fixing your plugin or creating a new one from scratch (depending on the complexity) - however I have no idea how the SDK works and the AWS documentation online is lackluster at best.

Kind Regards,

Luke J

YetiClient Error Msgs: "aws-cpp-sdk-core" Failed to load

After installing YetiTech awsclient plugin those messages appears in launching the project, Play Level and in package the project.. :
1st message : "Failed to load aws-cpp-sdk-core. Plugin will not be functional"
2nd message: "Failed to load aws-cpp-sdk-gamelift."
3rd Message: "Failed to load aws-cpp-sdk-cognito-identity. plugin will not be functional."

I ignored them and continued with the rest of the tutorial. Eventually these cause Packaging to Fail, with following errors:

UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: begin: stack for UAT
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: === Critical error: ===
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error:
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: Fatal error!
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error:
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: Unhandled Exception: 0xc06d007e
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error:
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffd157ea839 KERNELBASE.dll!UnknownFunction []
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffc8bb77fbe UE4Editor-AWSCore.dll!__delayLoadHelper2() [d:\agent_work\2\s\src\vctools\delayimp\delayhlp.cpp:323]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffc8bb758b1 UE4Editor-AWSCore.dll!_tailMerge_aws_cpp_sdk_core_dll() []
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffc8bb73cbf UE4Editor-AWSCore.dll!FAWSCoreModule::ShutdownModule() [d:\projects\nectar\plugins\gameliftclientsdk\source\awscore\private\awscoremodule.cpp:40]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffcb4be61e7 UE4Editor-Core.dll!FModuleManager::UnloadModulesAtShutdown() [d:\unrealengine-release\engine\source\runtime\core\private\modules\modulemanager.cpp:730]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ff70beb4be0 UE4Editor-Cmd.exe!FEngineLoop::Exit() [d:\unrealengine-release\engine\source\runtime\launch\private\launchengineloop.cpp:3483]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ff70beb5581 UE4Editor-Cmd.exe!GuardedMain() [d:\unrealengine-release\engine\source\runtime\launch\private\launch.cpp:179]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ff70beb55ca UE4Editor-Cmd.exe!GuardedMainWrapper() [d:\unrealengine-release\engine\source\runtime\launch\private\windows\launchwindows.cpp:145]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ff70bec316c UE4Editor-Cmd.exe!WinMain() [d:\unrealengine-release\engine\source\runtime\launch\private\windows\launchwindows.cpp:275]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ff70bec4cb6 UE4Editor-Cmd.exe!__scrt_common_main_seh() [d:\agent_work\2\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffd168b7bd4 KERNEL32.DLL!UnknownFunction []
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: [Callstack] 0x00007ffd17d8ce71 ntdll.dll!UnknownFunction []
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error:
UATHelper: Packaging (Windows (64-bit)): LogWindows: Error: end: stack for UAT
UATHelper: Packaging (Windows (64-bit)): Took 563.7799446s to run UE4Editor-Cmd.exe, ExitCode=-1073741819
UATHelper: Packaging (Windows (64-bit)): ERROR: Cook failed.

Am I making some mistake?
I also read the part where you mentioned that the dll have been recently modified and you will be working on the same. Just thought you might want to know this as well.

All Player Sessions Timing Out

I'm not sure what is causing this, but after successfully establishing a new player session and connecting the client to the server, the Player Session Status in the Game Lift console shows it times out after 1 min. This happens even though the client is in the game and things seem to be working property. This happens 100% of the time and I never see an Active status.

After the Activate() gets called on the player session, is there another call I need to make to confirm the reservation, or is pushing the PlayerController to the returned IP and Port enough?

Update client for UE4.19

Thanks to YetiTech Studios for this awesome plugin.

However would it be possible to update the plugin for UE4.19?

Error cause aws custom memory management

aws-sdk-cpp version 1.7.240

aws-sdk-cpp/aws-cpp-sdk-core/CMakeLists.txt

if(CUSTOM_MEMORY_MANAGEMENT OR (BUILD_SHARED_LIBS AND NOT DEFINED CUSTOM_MEMORY_MANAGEMENT))
    set(USE_AWS_MEMORY_MANAGEMENT ON)
    message(STATUS "Custom memory management enabled; stl objects now using custom allocators")
else()
    set(USE_AWS_MEMORY_MANAGEMENT OFF)
    message(STATUS "Custom memory management disabled")
endif()

Can't build CUSTOM_MEMORY_MANAGEMENT ON.
AWSCore.cpp

.
.
Aws::InitSDK(options); // Error allocation memory

Can't compile when CUSTOM_MEMORY_MANAGEMENT OFF.

1>Building 2 actions with 12 processes...
1>  [1/2] UE4Editor-GameLiftClientSDK.dll
1>     Creating library D:\Projects\UnrealProjects\OnlineGame\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Development\GameLiftClientSDK\UE4Editor-GameLiftClientSDK.suppressed.lib and object D:\Projects\UnrealProjects\OnlineGame\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Development\GameLiftClientSDK\UE4Editor-GameLiftClientSDK.suppressed.exp
1>Module.GameLiftClientSDK.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __cdecl Aws::GameLift::Model::DescribeGameSessionQueuesRequest::SetNames(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class Aws::Allocator<char> >,class Aws::Allocator<class std::basic_string<char,struct std::char_traits<char>,class Aws::Allocator<char> > > > const &)" (__imp_?SetNames@DescribeGameSessionQueuesRequest@Model@GameLift@Aws@@QEAAXAEBV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$Allocator@D@Aws@@@std@@V?$Allocator@V?$basic_string@DU?$char_traits@D@std@@V?$Allocator@D@Aws@@@std@@@Aws@@@std@@@Z) referenced in function "public: enum EActivateStatus __cdecl UGameLiftDescribeGameSessionQueues::Activate(void)" (?Activate@UGameLiftDescribeGameSessionQueues@@QEAA?AW4EActivateStatus@@XZ)
1>D:\Projects\UnrealProjects\OnlineGame\Plugins\GameLiftClientSDK\Binaries\Win64\UE4Editor-GameLiftClientSDK.dll : fatal error LNK1120: 1 unresolved externals
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.MakeFile.Targets(44,5): error MSB3075: The command ""C:\Program Files\Epic Games\UE_4.22\Engine\Build\BatchFiles\Build.bat" OnlineGameEditor Win64 Development -Project="D:\Projects\UnrealProjects\OnlineGame\OnlineGame.uproject" -WaitMutex -FromMsBuild" exited with code 5. Please verify that you have sufficient rights to run this command.
1>Done building project "OnlineGame.vcxproj" -- FAILED.

unresolved external symbol Aws::Malloc

Hi everyone,

I followed these wonderful tutorials to get a game session running on AWS GameLift and got clients to connect to it successfully.
I did have to rollback the GameLift Client SDK commit to the one in the video (commit 14), as I encountered something similar to this issue
I am on Windows using Unreal 4.21.

However I have hit what appears to be a missing some dependencies within the Client SDK. I was trying to use Aws::Vector which is part of AWSCore but upon build I get the following linker errors:

error LNK2019: unresolved external symbol "void * __cdecl Aws::Malloc(char const *,unsigned __int64)" (?Malloc@Aws@@YAPEAXPEBD_K@Z) referenced in function "private: bool __cdecl std::vector<class Aws::GameLift::Model::GameSessionQueueDestination,class Aws::Allocator<class Aws::GameLift::Model::GameSessionQueueDestination> >::_Buy(unsigned __int64)" (?_Buy@?$vector@VGameSessionQueueDestination@Model@GameLift@Aws@@V?$Allocator@VGameSessionQueueDestination@Model@GameLift@Aws@@@4@@std@@AEAA_N_K@Z)

error LNK2019: unresolved external symbol "void __cdecl Aws::Free(void *)" (?Free@Aws@@YAXPEAX@Z) referenced in function "public: __cdecl std::vector<class Aws::GameLift::Model::GameSessionQueueDestination,class Aws::Allocator<class Aws::GameLift::Model::GameSessionQueueDestination> >::~vector<class Aws::GameLift::Model::GameSessionQueueDestination,class Aws::Allocator<class Aws::GameLift::Model::GameSessionQueueDestination> >(void)" (??1?$vector@VGameSessionQueueDestination@Model@GameLift@Aws@@V?$Allocator@VGameSessionQueueDestination@Model@GameLift@Aws@@@4@@std@@QEAA@XZ)

These linker errors are usually encountered when the linker cannot find the correct function definition for a used function declaration. The Client SDKs that I cloned has the AWSCore header files and I also have the aws-cpp-sdk-core dll and lib files in Plugins\GameLiftClientSDK\ThirdParty\GameLiftClientSDK\Win64, like the tutorial instructed, so it should have the correct function definitions.

AWS::Vector is using AWS::Allocator, which is then using Malloc and Free.

AWSVector.h:
template< typename T > using Vector = std::vector< T, Aws::Allocator< T > >;
AWSAllocator.h:

typename Base::pointer allocate(size_type n, const void *hint = nullptr)
{
AWS_UNREFERENCED_PARAM(hint);
return reinterpret_cast<typename Base::pointer>(Malloc("AWSSTL", n * sizeof(T)));
}

AWSMemory.h:
AWS_CORE_API void* Malloc(const char* allocationTag, size_t allocationSize);

In the aws-cpp-sdk github repo I can see the AWSMemory.cpp file

I can see that it has a #include <aws/common/common.h> from the aws-c-common library, but I believe that was only added recently and since I am using an older commit of the client sdk I dont think I should have encountered this error. AWS says ." "Starting from version 1.7.0, we added several third party dependencies, including aws-c-common, aws-checksums and aws-c-event-stream

Either way, in attempt to solve this I added AWSMemory.cpp to AWSCore, then downloaded aws-c-common, built it, copied its lib and dll to ThirdParty and added all the headers to AWSCore/Public/common. Then edited AWSCore.Build.cs and AWSCoreModule.h/.cpp to add the lib and dll dependencies, but I end up hitting a wall of macro error like:

aws/common/assert.h(57): error C4668: '__clang_analyzer__' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
aws/common/predicates.h(21): error C4668: 'AWS_DEEP_CHECKS' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'
AWSMemory.cpp(129): error C4668: '__GNUC__' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif'

I have also tried to build aws-c-common from source as a new unreal module, but ended up with even more errors.

I just want to use a damn AWS::Vector.
Anyone know if I am missing something or is there a defect with the client sdk?

@chris-gong, did you ever encounter this?

Linux support

Tell me please, is there any support for Linux? I can not build my project with your GameLiftClient plugin from VS2017 for Linux :(

Issues with the last gamelift sdk

Hi,

Thank you very much for this plugin !

I try to update your project with the last Gamelift C++ SDK. I have followed this steps:

mkdir out
cd out
cmake -G "Visual Studio 15 2017 Win64" .. -DCMAKE_BUILD_TYPE=Release -DBUILD_ONLY="gamelift"

When builded these files are generated:

out\bin\Release\aws-cpp-sdk-gamelift.dll
out\bin\Release\aws-cpp-sdk-core.dll
out\aws-cpp-sdk-gamelift\Release\aws-cpp-sdk-gamelift.lib
out\aws-cpp-sdk-core\Release\aws-cpp-sdk-core.lib

I have added this files to my UE4 project in the plugin folder. All seems ok but when I try to compile I have this errors:
2> [4/7] Module.AWSCore.cpp
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(10): error C2039: 'clock_t': is not a member of 'global namespace'' 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(10): error C2873: 'clock_t': symbol cannot be used in a using-declaration 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2039: 'asctime': is not a member of 'global namespace''
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2873: 'asctime': symbol cannot be used in a using-declaration
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2039: 'clock': is not a member of 'global namespace'' 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2873: 'clock': symbol cannot be used in a using-declaration 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2039: 'ctime': is not a member of 'global namespace''
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(12): error C2873: 'ctime': symbol cannot be used in a using-declaration
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2039: 'difftime': is not a member of 'global namespace'' 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2873: 'difftime': symbol cannot be used in a using-declaration 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2039: 'gmtime': is not a member of 'global namespace''
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2873: 'gmtime': symbol cannot be used in a using-declaration
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2039: 'localtime': is not a member of 'global namespace'' 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(13): error C2873: 'localtime': symbol cannot be used in a using-declaration 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2039: 'mktime': is not a member of 'global namespace''
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2873: 'mktime': symbol cannot be used in a using-declaration
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2039: 'strftime': is not a member of 'global namespace'' 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2873: 'strftime': symbol cannot be used in a using-declaration 2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2039: 'time': is not a member of 'global namespace''
2>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\INCLUDE\ctime(14): error C2873: 'time': symbol cannot be used in a using-declaration
2>UnrealBuildTool : error : UBT ERROR: Failed to produce item: D:\Projects\Unreal\DedicatedServerDemos\Game\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Development\AWSCore\UE4Editor-AWSCore.lib

Have I missed something ? It should be awesome if you can share the steps to compile the client.

Best regards,
Régis

Need to add a license?

Hi there,

Came across this plugin, and seems like a great starting point for GameLift integration :)

One thing that might be good though is to add a License file (or mention the license in the README), since if no license is explicitly specified then someone isn't technically allowed to include your code in their project (since you have the copyright by default).

Were you treating this as something people can freely use, eg. MIT license?
Eg. https://github.com/davevill/UE4-GameLift/blob/master/LICENSE

Thanks!

Update

Hey man, will there be updates?

Solution: building error C4577

Hey there!

First of all, thank you @ryanjon2040 for this amazing plug-in.

One problem I was facing when building UE4GameLiftClientSDK plug-in for UE 4.18.3 and VS 2017 is the error C4577 which I think it might be common in this environment.

For those facing the same problem, one easy solution--not sure about its dirtiness--is to add bEnableExceptions = true; to one line below line 9, on GameLiftClientSDK.Build.cs file. After doing this, probably you'll build your game successfully.

Crash when starting Client

Thanks for this plug-in first.

I managed to build this plug-in into my test project.
When I open the local test server and blank test client with plug-in, it crashes.
I made GameInstance BP exactly same as InstanceBP shown in tutorial.
I found that the reason of crash is GameSession Activate function.
How can I fix this problem?

Questions on GameLift Plugin Nodes

Hello! I love this plugin but I have a few questions.

A. Should I run these nodes as a server or as a client? (Via The Has Authority? Node.)
B. What should I input into the pins where it says, “Key” and “Value”?
https://imgur.com/a/7ObZUAj
C. I see that you have made custom events such as, “OnCreateGameSessionSuccess_Event” and “OnCreateGameSessionFailded_Event”. How did you guys get the string values of error message and Game Session ID on your custom event node?
D. And my last question is that if I would implement a party system where you can play with friends, is this possible with the nodes or would I have to use C++. I would rather use blueprints because I am more comfortable with them.

Help is appreciated! Thanks so much!

Search Game Sessions

are you guys planning on adding a search game sessions functions to the gamelift object? It'd be very useful if it's there!

Alias (alias-****) not found

Hello!

I've a problem. Everything looks good, nice plugin but I'm having some troubles with.

I get this error: Alias (alias-****) not found.

In my AWS account I've created my Access Keys for my account. Then in GameLift service I've created a Sample Build, with Sample Fleet and then added an Alias to this build but I get this error... There's something I'm doing wrong?

LogGameLiftClient: Error: [UGameLiftDescribeGameSession::OnDescribeGameSessionState] Received OnDescribeGameSessionState with failed outcome. Error: Unable to parse ExceptionName: ApiNotSupportedException Message: API GameLift.DescribeGameSessionDetails is not recognized by GameLift Local.

Hi guys, im testing my client and server with gamelift.
Followed your guide to integrate it in my client.

I've configured gamelift for local testing using gamelift local
(https://docs.aws.amazon.com/gamelift/latest/developerguide/integration-testing-local.html)
But when i call DescribeSession node from blueprint i get an error:
LogGameLiftClient: Error: [UGameLiftDescribeGameSession::OnDescribeGameSessionState] Received OnDescribeGameSessionState with failed outcome. Error: Unable to parse ExceptionName: ApiNotSupportedException Message: API GameLift.DescribeGameSessionDetails is not recognized by GameLift Local.

Here is Gamelift Local Console output
default

Failed to load aws-cpp-sdk-cognito-identity, core and gamelift

So, I built the aws-cpp-sdk and replaced the DLLs and libs for the three dependencies, and changed the version number in the Build.cs. When I try to launch the game, none of the DLLs are able to load. The Plugin still shows up in the editor, but when I try to launch the game, those errors popup again and stop the game from connecting to AWS gamelift.

Any help is appreciated.

@chris-gong, any ideas?

Android Build

ProcessResult.StdOut: D:/Projects/MyGame/Plugins/GameLiftClientSDK/Source/GameLiftClientSDK/Public\aws/gamelift/model/OperatingSystem.h(35,1): error: variable has incomplete type 'Aws::GameLift::Model::__declspec'
ProcessResult.StdOut: AWS_GAMELIFT_API OperatingSystem GetOperatingSystemForName(const Aws::String& name);
ProcessResult.StdOut: ^
ProcessResult.StdOut: D:/Projects/MyGame/Plugins/GameLiftClientSDK/Source/GameLiftClientSDK/Public\aws/gamelift/GameLift_EXPORTS.h(38,41): note: expanded from macro 'AWS_GAMELIFT_API'
ProcessResult.StdOut: #define AWS_GAMELIFT_API __declspec(dllimport)
ProcessResult.StdOut: ^
ProcessResult.StdOut: D:/Projects/MyGame/Plugins/GameLiftClientSDK/Source/GameLiftClientSDK/Public\aws/gamelift/model/AcceptMatchResult.h(35,9): note: forward declaration of 'Aws::GameLift::Model::__declspec'
ProcessResult.StdOut: class AWS_GAMELIFT_API AcceptMatchResult
ProcessResult.StdOut: ^
ProcessResult.StdOut: D:/Projects/MyGame/Plugins/GameLiftClientSDK/Source/GameLiftClientSDK/Public\aws/gamelift/GameLift_EXPORTS.h(38,30): note: expanded from macro 'AWS_GAMELIFT_API'
ProcessResult.StdOut: #define AWS_GAMELIFT_API __declspec(dllimport)
ProcessResult.StdOut: ^
ProcessResult.StdOut: fatal error: too many errors emitted, stopping now [-ferror-limit=]

I think I am missing something here.

Can someone please help or I am in a completely wrong place to even ask this question.?

Modifying any cpp causes compile errors

First off, thanks for the great plugin, has the barebones required to get anyone started right away with AWS GameLift.

I need to improve a bit on the functionality of the GameliftClientApi.cpp but every time I make any modification whatsoever to it (i.e. adding a random space in the file, save and compile) I will get a whole bunch of errors in

1>Using Visual Studio 2019 14.24.28314 toolchain (C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.24.28314) and Windows 10.0.18362.0 SDK (C:\Program Files (x86)\Windows Kits\10). 1>Building 5 actions with 8 processes... 1> [1/5] Module.GameLiftClientSDK.cpp 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(12): error C2079: 'Credentials' uses undefined class 'Aws::Auth::AWSCredentials' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(26): error C3861: 'LOG_WARNING': identifier not found 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(29): error C2027: use of undefined type 'Aws::Auth::AWSCredentials' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Public\aws/gamelift/GameLiftClient.h(116): note: see declaration of 'Aws::Auth::AWSCredentials' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(30): error C2664: 'Aws::GameLift::GameLiftClient::GameLiftClient(const Aws::GameLift::GameLiftClient &)': cannot convert argument 1 from 'int' to 'const Aws::Auth::AWSCredentials &' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(30): note: Reason: cannot convert from 'int' to 'const Aws::Auth::AWSCredentials' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(30): note: use of undefined type 'Aws::Auth::AWSCredentials' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Public\aws/gamelift/GameLiftClient.h(116): note: see declaration of 'Aws::Auth::AWSCredentials' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Public\aws/gamelift/GameLiftClient.h(586): note: see declaration of 'Aws::GameLift::GameLiftClient::GameLiftClient' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(47): error C2027: use of undefined type 'UGameLiftCreateGameSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(14): note: see declaration of 'UGameLiftCreateGameSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(47): error C2660: 'UGameLiftClientObject::CreateGameSession': function does not take 2 arguments 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(44): note: see declaration of 'UGameLiftClientObject::CreateGameSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(48): error C2027: use of undefined type 'UGameLiftCreateGameSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(14): note: see declaration of 'UGameLiftCreateGameSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(57): error C2027: use of undefined type 'UGameLiftDescribeGameSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(12): note: see declaration of 'UGameLiftDescribeGameSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(58): error C2027: use of undefined type 'UGameLiftDescribeGameSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(12): note: see declaration of 'UGameLiftDescribeGameSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(67): error C2027: use of undefined type 'UGameLiftCreatePlayerSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(11): note: see declaration of 'UGameLiftCreatePlayerSession' 1>D:\Workspaces\Master\Plugins\GameLiftClientSDK\Source\GameLiftClientSDK\Private\GameLiftClientObject.cpp(68): error C2027: use of undefined type 'UGameLiftCreatePlayerSession' 1> D:\Workspaces\Master\Plugins\GameLiftClientSDK\Intermediate\Build\Win64\UE4Editor\Inc\GameLiftClientSDK\GameLiftClientObject.generated.h(11): note: see declaration of 'UGameLiftCreatePlayerSession' 1> [2/5] GameLiftClientApi.cpp 1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.MakeFile.Targets(41,5): error MSB3075: The command "D:\Source\UnrealEngine-R\Engine\Build\BatchFiles\Build.bat -Target="ShaderCompileWorker Win64 Development" -Target="MyProjectEditor Win64 Development -Project=\"D:\Workspaces\Master\MyProject.uproject\"" -WaitMutex -FromMsBuild" exited with code 5. Please verify that you have sufficient rights to run this command.

The only way to fix this, is to revert the .cpp file back to the previous revision.

These errors also pop up if I change the GameLiftClientSDK.Build.cs to have bFasterWithoutUnity = true;

Tried getting rid of the Intermediates, Binaries, re-generating project files, nothing seems to work. Modifying the .h files does not have any of these issues, only the .cpp ones. I've tested making modifications only to one or the other (just adding a space to them).

Any idea what could be causing this?

AWSCoreModule.cpp linker errors

I'm getting the following linker errors when trying to build on 4.21.2 with VS2017 15.9.7:

AWSCoreModule.cpp.obj : error LNK2001: unresolved external symbol "void __cdecl Aws::InitAPI(struct Aws::SDKOptions const &)" (?InitAPI@Aws@@YAXAEBUSDKOptions@1@@Z)
AWSCoreModule.cpp.obj : error LNK2001: unresolved external symbol "void __cdecl Aws::ShutdownAPI(struct Aws::SDKOptions const &)" (?ShutdownAPI@Aws@@YAXAEBUSDKOptions@1@@Z)

It was building successfully prior to upgrading to VS2017 15.9.7.

aws-cpp core and gamelift DLLs not loading on packaged game

Hi all,

There may be a problem with the paths for packaged game dlls, as my gameliftclient plugin crashes the exe when I run a packaged version (editor version and standalone are working). Any pointers as to where the error might be? The dlls are in the packaged game plugin folder, but I have yet to check the paths for them in the plugin.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.