chris-gong / gamelift-example-ue4

Sample project integrating AWS GameLift with Unreal Engine

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Create a new branch for additional features added outside of the tutorial series

chris-gong opened this issue · comments

I am not exactly sure what my plans are with this yet. I know that I will want to add on to this project. However, I also don't want to touch the master branch because I want anyone who watches the tutorial series to be able to refer to the original code base of this repository. I do have ideas, but I will comment them on this issue once I am actually actively working on those new features.

If anyone else has any suggestions for useful features for better learning GameLift that can possibly be added on to this project, please leave a comment on this issue!

--------- New feature ideas and modifications ----------

  • Have code reviews with the Discord community before making major videos.
  • For lambda functions coded in Javascript/NodeJs, learn how to use async/await or promises properly.
  • Add a check for when InitSDK fails (link)
  • Replace nullptr checks with just plain checks, for e.g. if (Ptr != nullptr) can be if (Ptr)
  • Remove GetPlayerSessionsCount method that I added in the GameLift Server SDK since GetPlayerSessions sets an integer parameter passed in addition to returning a pointer to a collection of player sessions in the result from a call to DescribePlayerSessions.
  • Look into Session Interface as well as the rest of the Online Subsystem.
  • Look into GameInstance Subsystem instead of the GameMode class for GameLift related code/functionality
  • Look into initializer lists for constructors instead of assigning the Status bool in the structs in the constructor as well as make a simple state struct that the other structs inherit from
  • Add logic to automatically find a free port and assign it to the server process, link, of manually adding it through the command line parameters (PORT=7777 does it automatically, but would still have to get the port via GetWorld()->URL.Port and assign it to ProcessParameters passed to ProcessReady so still not scalable) <- apparently Unreal handles port assignment automatically and all you have to do is GetWorld()->URL.Port?
  • Use the Project Launcher in Unreal Engine for deployments
  • Lower the queue timeout value (maybe make it 60 seconds)
  • Consider using async threads and events like how this PlayFab GSDK plugin does it
  • Modify TrackEvents lambda function to gracefully handle non-final state result event notifications instead of erroring out of the lambda function
  • Make a custom class/library/framework wrapper around HTTP requests to API Gateway methods
  • Use AWS_IAM authorizers instead of Cognito authorizers for API Gateway methods and use Identity Pools instead of User Pools (Check this discord message for more information on how to start going about this). Note that the difficult part will be the signing of creds in the HTTP request to the AWS_IAM authorized API endpoint.
  • Make a custom UI for signing in instead of using the web browser widget
  • Update Chromium in the Unreal Engine source code
  • Handle multiple clients logging into the same account at the same time. Try to prevent this from happening and deal with this scenario anyway just in case it ever happens. This forum post has a good suggestion, which is check in the start matchmaking lambda function whether or not a player id has any active game sessions associated with it. If so, then, we know the player is already in a game and shouldn't be able to make a new matchmaking request.
  • Remove request body validation code from the lambda code and use API Gateway instead
  • Remove dummy password check and replace it with a private vpc rest api or vpc peering
  • Replace player count check in manual backfill approach with a call to describe player sessions while passing the game session
    id to check if there are any player sessions in reserved status. If there are none, then we are no longer "waiting" for players to join.
  • Replace simple polling for matchmaking updates with web socket apis and dynamodb stream functionality (consider using redis/elasticsearch or other kind of in-memory database instead for this functionality <- actually this makes more sense for leaderboards or chat application, for receiving matchmaking updates; it may be better to just have sns publish messages to web socket api directly, example of ue4 web socket code here and here)
  • Replace REST API with HTTP API (API Gateway v1 vs API Gateway v2)
  • Add auto scaling and FleetIQ functionality (EC2, ECS, EKS, AWS Shield, etc., check out this article for more information)
  • Add friend system
  • Add party system
  • Enable TLS certificate generation and actually use the certificate to encrypt client-server communication
  • Add large match functionality
  • Add logic to keep track of user sessions and prevent people from logging into an account that has an active session currently, or kick out the original session out of the game client.
  • Add cross regional functionality such as route53/cloudfront to the API
  • Add ddos protection measures such as waf/cloudfront/cloudformation/etc.
  • Add Steam or any online subsystem integration
  • Add everything needed for an Android client and potentially adding the project to the Google Play Store (extend this to other client platforms such as Mac, Linux, iOS, Xbox, PS4, Nintendo, etc.)
  • Test with VR