Before you can send a messages from Client Game to Server Game function, you need to:
Communication between any Fireball components is done by sending and receiving messages type of 'BaseMessage' class or their child. Same messages using to communicate between Game Client and Game Server Function. Any message required to have the unique Name
to register the current action. Some names are taken by reserved by Fireball and can't be used (as "authenticate", "session" e.t.c.)
GameMessages.cs
script with registring custom messages names as const variables: public class GameMessages
{
public const string SPIN_REQUEST = "spin-request";
public const string SPIN_RESULT = "spin-result";
....
}
public class SampleSpinRequest : BaseMessage
{
public string GameType;
public long BetAmount;
public SampleSpinRequest()
{
Name = GameMessages.SPIN_REQUEST;
}
}
public class SampleSpinResult : BaseMessage
{
public string GameType;
public long WinAmount;
public SampleSpinResult(string gameType, long winAmount, BaseMessage baseMessage)
{
CopyBaseParams(baseMessage);
Name = GameMessages.SPIN_RESULT;
GameType = gameType;
WinAmount = winAmount;
}
}
...
public async Task<MessageResult> HandleMessage(ParseResult result)
{
if (result.IsSuccess)
{
switch (result.MessageName)
{
...
case GameMessages.SPIN_REQUEST:
return await MakeSpin(result.ToMessage<CustomSpinRequest>());
...
}
}
...
}
private async Task<MessageResult> MakeSpin(SampleSpinRequest message)
{
// example of custom calculation
long winAmount = 0;
var random = await _fireballRng.NextDouble(0, 1);
if (random > 0.5f)
{
winAmount = message.BetAmount * 2;
}
// create a response message
var response = new SampleSpinResult(message.GameType, winAmount, message);
// send the response message to the game client
return await _fireball.SendMessageToClient(response);
}