Overview
As we all know, many of games have a requirement of incorporating multiplayer. Though to be able to have multiplayer, clients have to be able to find hosted matches. The most common way this is done is with a master server that coordinates users and matches. Generally how this goes, users query the master server and are provided a list of available matches. That leads to a major problem if you have no master server. This plugin aims to solve that problem. It is a basic lightweight online subsystem or Bloss for short. The files required to setup your own RESTful master server are included with the plugin. After setting up the master server, the Bloss Plugin allows easy integration of projects/games with the master server api using either blueprints or C++.
Key Features
- Multiple API endpoints(register, login, host, search, join, logout, username, moderation, friends, notifications, achievements, stats)
- Blueprint node endpoint integration
- Administrative panel
- Configurable back end
- Assignable user types with different moderation and administrative permissions
- Listen server, dedicated server, and instanced server compatible
- Optional email verification
API Endpoint Descriptions
Register: Allows users to register an account with a username, email address, and password. An additional ‘subscribe’ parameter is also submitted, which allows you to keep track of who opted in to be subscribed to receive emails about promotions, updates, and other information related to your game. This can be especially useful for early development games trying to build a user base and email list. For anyone that does not wish to require email addresses from their user, there is a configuration option in the administrative panel that allows email addresses to not be required for registration.
Login: This is the endpoint that is queried for users to obtain their user information including their credentials, which consists of a user id and session key, for their use with other api endpoints. An option in the administrative panel exists to deny logins when users have not verified their email address by visiting the link sent to their email.
Host: The primary endpoint for users or servers to create/end matches, keep their matches alive, and update player/game mode information.
Search: Allows users to get a list of running matches. Search parameters include gamemode, server type(either listen or dedicated), server name, and player count.
Join: Although users can retrieve lists of matches, the IP address and port for matches are kept hidden until users intend to join the match. Querying this endpoint informs the master server of the user’s intent to join a given match based on host id. If the host is not full, the joining user will be issued a match key and given the host’s IP address and port. The joining user must then connect to the host and provide their user id and match key to the host. Those can then be used by the host to verify with the master server, using the host endpoint, that the player is a valid user. Users can also use this endpoint to join the matches of friends.
Moderation: Allows users to be kicked, muted, or banned. Kick, mute, and ban permissions are based on the querying user’s type.
Logout: Ends the session for a user or server instance, invalidating their session key.
Username: Used to check whether or not a username is taken.
Friends: This endpoint allows users to perform friend related actions such as getting a list of friends/requests, add/accept/remove friends, or invite friends to the match they’re in.
Notifications: Due to the RESTful nature of the master server, users have to poll for any changes that occur on the server. This endpoint serves to notify users of changes that occur after they’ve logged in so that they may adjust the state of their client game or query the corresponding endpoint to get more information. These changes include friends logging in/out, friends joining/starting/ending matches, new friend requests, friends removed from friends list, and achievements being unlocked.
Achievements: Achievements and their status for users can be obtained from this endpoint. Achievements can also be unlocked/locked or have their progress set.
Stats: User stats can be retrieved, set, or cleared using this endpoint. Public stats can also be viewed by other users.
Blueprint Node Endpoint Integration
That's right, no need to muck around in C++ if you don't want to. All endpoint requests have a blueprint node implementation that can be used in place of C++ function calls and event bindings.Administrative panel
The master server has an administration panel that gives easy access to various information about your users and matches. As well as the ability to create, edit, and delete stats and achievements.Configurable Back End
Easily configure your master server however it suits your game best.User Types
Create and assign your own user types giving them their own permissions to do only what you want them to.Dedicated Server and Instanced Server Compatibility
Want everything to only happen on your servers where you control the game logic? No problem. Players can be denied hosting permissions on a per-user or per-user-type basis while still being able to view and access your game servers. If your game servers are operating on a cloud based system like AWS or Azure, then there's good news for you. You only need one game server up at a time now. When that server is full have it spool up another instanced game server. No need to waste server time when it's not needed. Maybe you want both player servers and dedicated servers all at the same time, well that's possible too.Security
The master server only accepts certain predefined parameters from the requests it receives. These parameters are validated and verified safe through php-based filters then functions that are defined in a special validator class. These validation functions can easily be modified to suit your game’s needs if they are over or under restrictive.
In conjuction with validating user inputs, all user inputs that are used in sql queries are passed through prepared statements. The prepared statements reduce potential points of sql injection.
In addition, the master server is SSL compatible, most endpoints require user based credentials, and all user passwords are saved as an encrypted hash on the master server.
FAQ
Will this instantaneously make my game multiplayer?
In short, no. Your game will still have to be set up in a way that allows multiplayer to occur through networking and replication between your [listen/dedicated] server and its clients. This will not handle that for you. The master server, set up using the provided files on a host machine, primarily allows players to host or find others’ matches. The plugin itself is a streamlined set of classes and blueprints that make integrating your game with the API easy and straightfoward.
Is the plugin compatible with my game, project, or platform?
This plugin is compatible with any game, project, or platform that is supported by the HTTP module.
Does this perform NAT punch-through or UDP forwarding?
No, unfortunately these are not currently features of the master server. Due to their complexity/scope there are also currently no plans on implementing them in the future. As such, users of your game will have to configure their local network firewall accordingly if they wish to host a listen server.