logo
search
SupportlaunchAPI
menulaunchSign In
close
OverviewConceptsAdmin PanelCloudAPICompliance
Overview
Get StartedAuthorizationMessagingJackpotsMultiplayerGame Client InterfaceErrors Handle
Get StartedAuthorizationGame SessionMessagingBettings and WinningsRandom Numbers GeneratorJackpotsMultiplayerTesting
Overview
Overview
Using the client libraryImplementing an integrationDeploying an integration
Replying to a gamePending Winnings
.NET CoreGoJavaNodeJsPHPPythonRuby
OverviewOverwriting jackpots
launchAPISupport
launchSign In
homeHome

Get Started

Before you begin

Before you can use it, you need to:

  1. Create a Game inside the Fireball Admin panel

Create a new Game Server Function

This section describes how to manually create new Game Function base on .NET 6.0. Alternatively, you can download and use the Slots Sample Game Function.

  1. Create a new directory on your local system for a Game Function
  2. Create a file SlotsSample.csproj with a content:
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <RootNamespace>SampleProject</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Fireball.Game.Server" Version="1.7.4" />
    <PackageReference Include="Google.Cloud.Functions.Hosting" Version="2.2.1" />
    <PackageReference Include="Google.Cloud.PubSub.V1" Version="3.19.0" />
    <PackageReference Include="Google.Events.Protobuf" Version="1.5.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="9.0.0" />
  </ItemGroup>
</Project>
  1. Create a file Function.cs with a content:
using System.Threading;
using System.Threading.Tasks;
using CloudNative.CloudEvents;
using Fireball.Game.Server;
using Fireball.Game.Server.Models;
using Google.Cloud.Functions.Framework;
using Google.Cloud.Functions.Hosting;
using Google.Events.Protobuf.Cloud.PubSub.V1;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace SlotsSample
{
    public class Startup : FunctionsStartup
    {
        public override void ConfigureServices(WebHostBuilderContext context, IServiceCollection services)
        {
            services.AddFireballDependencies();
            base.ConfigureServices(context, services);
        }
    }

    [FunctionsStartup(typeof(Startup))]
    public class Function : ICloudEventFunction<MessagePublishedData>
    {
        private readonly IFireballLogger _logger;
        private readonly IFireball _fireball;

        public Function(ILogger<Function> logger, IFireball fireball)
        {
            _logger = new FireballLogger(nameof(Function), logger); ;
            _fireball = fireball;
        }

        public async Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken)
        {
            string messageJson = data.Message?.TextData;
            ParseResult result = await _fireball.ParseMessage(messageJson);
            _logger.Log($"Message: {result.MessageName}");
        }
    }
}

Create Game script

  1. Create Game.cs script with a content:
using System.Threading.Tasks;
using Fireball.Game.Server;
using Fireball.Game.Server.Models;
using Microsoft.Extensions.Logging;

namespace SampleProject
{
    public interface IGame
    {
        Task<MessageResult> HandleMessage(ParseResult result);
    }

    public class Game : IGame
    {
        private readonly IFireballLogger _logger;
        private readonly IFireball _fireball;

        public Game(ILogger<Game> logger, IFireball fireball)
        {
            _logger = new FireballLogger(nameof(Game), logger);
            _fireball = fireball;
        }

        public async Task<MessageResult> HandleMessage(ParseResult result)
        {
            if (result.IsSuccess)
            {
                // convert a message object to the correct message class
                var message = result.ToMessage<BaseMessage>();

                // here can do appropriate actions with an income message

                // return result of actions
                return MessageResult.SuccessResult(message.Name, message.ActionId);
            }

            return MessageResult.ErrorResult("Error Parse message...");
        }
    }
}
  1. Add Game class into Function.cs startup configuration as singeltion:
    public class Startup : FunctionsStartup
    {
        public override void ConfigureServices(WebHostBuilderContext context, IServiceCollection services)
        {
            services.AddFireballDependencies();
            services.AddSingleton<IGame, SlotsGame>();
            base.ConfigureServices(context, services);
        }
    }
  1. Add Game instance into Function class:
    [FunctionsStartup(typeof(Startup))]
    public class Function : ICloudEventFunction<MessagePublishedData>
    {
        private readonly IFireballLogger _logger;
        private readonly IFireball _fireball;
        private readonly IGame _game;

        public Function(ILogger<Function> logger, IFireball fireball, IGame game)
        {
            _logger = new FireballLogger(nameof(Function), logger); ;
            _fireball = fireball;
            _game = game;
        }

        public async Task HandleAsync(CloudEvent cloudEvent, MessagePublishedData data, CancellationToken cancellationToken)
        {
            string messageJson = data.Message?.TextData;
            ParseResult result = await _fireball.ParseMessage(messageJson);
            _logger.Log($"Message: {result.MessageName}");

            MessageResult messageResult = await _game.HandleMessage(result);
            _logger.Log($"Result: {messageResult?.ToJson()}");
        }
    }

Next Steps

  • Deploy Game Function
  • Authorization
  • Manage Game Session and game state
  • Messaging with Game client
Fireball logo
    HOMEABOUTPRICINGTOUR

COPYRIGHT © 2020–. ALL RIGHTS RESERVED.

v2.0.1