Professional Documents
Culture Documents
DH ClientRequestAPI
DH ClientRequestAPI
CLIENT REQUEST
API Documentation
Version 1.3
14/12/2017
Dwarven Hoard RGS – Client Request API Documentation
Disclaimer
This document is confidential and proprietary to Games Incorporated Limited and/or its
partners and is provided for information purposes only. No part of this publication may be
reproduced, stored in a retrieval system, or transmitted in any form or by any means,
electronic, mechanical, photocopying, recording, or otherwise, without the prior written
permission of Games Incorporated Limited.
This document is provided ‘as is’ without any warranty concerning its accuracy or quality. In
no event will Games Incorporated Limited be liable for direct or indirect damages resulting
from incidental defects of inaccuracies in this document.
Games Incorporated Limited reserves the right to review and modify digital copies of this
document at any time without prior notice.
Any trademarks, company names or products referenced within this document are
recognised as the property of their respective owners.
Contents
1 Team .................................................................................................................. 5
2 Terminologies Used ..................................................................................... 6
3 Full Response Data View Overview ....................................................... 7
4 Basic Response Structure ........................................................................12
5 Element Definitions ....................................................................................13
5.1 Game (game) .......................................................................................................................... 13
5.2 Game View (game.view) ..................................................................................................... 13
5.3 Base Persistent Feature Properties (game.view.pf[x]).............................................. 14
5.4 Pattern Trail Persistent Feature (game.view.pf[x]) .................................................... 15
5.5 Rage Trail Persistent Feature (game.view.pf[x])......................................................... 16
5.6 Base Consumable Feature (game.view.cf[x]) .............................................................. 17
5.7 Cascade Consumable Feature (game.view.cf[x]) ....................................................... 17
5.8 Symbol Replace Consumable Feature (game.view.cf[x])........................................ 18
5.9 Multiplier Consumable Feature (game.view.cf[x]) .................................................... 20
5.10 Spin (game.view.rsc[x])........................................................................................................ 20
5.11 Reel (game.view.rsc[x].reels[y]) ........................................................................................ 22
5.12 Bet (game.view.bets[x]) ....................................................................................................... 22
5.13 Base Win (game.view.bets[x].wins[y]) ............................................................................ 24
5.14 Reel Win (game.view.bets[x].wins[y])............................................................................. 24
5.15 Reel Award (game.view.bets[x].wins[y].award) .......................................................... 26
5.16 Prize Win (game.view.bets[x].wins[y])............................................................................ 26
5.17 Initial Reel Setup (game.view.irs) .................................................................................... 27
5.18 Game Configuration (game.view.gc) ............................................................................. 28
5.19 Stake Configuration (game.view.gc.stake)................................................................... 30
5.20 Winline (game.view.gc.wl[x])............................................................................................. 31
5.21 Game Details (game.details) ............................................................................................. 32
5.22 Base Promotion (game.promo[x]) .................................................................................. 33
5.23 Free Game Promotion (game.promo[x]) ...................................................................... 33
5.24 Customer (cust)...................................................................................................................... 34
5.25 Currency (cust.curr) .............................................................................................................. 35
5.26 Error (error).............................................................................................................................. 36
6 Scenario Samples........................................................................................37
7 Freespins ........................................................................................................66
7.1.1 Update Request ................................................................................................................................ 66
7.1.2 Update Response ............................................................................................................................. 66
7.1.3 Terminate Request & Response ................................................................................................ 71
7.1.4 Pattern Trail Initialization - Init Response .............................................................................. 73
7.1.5 Pattern Trail Point Completion - Start & Update Response ........................................... 74
8 Resume Scenarios.......................................................................................76
9 Promotions ....................................................................................................77
10 Error and Fail Handling.............................................................................79
11 Heartbeat .......................................................................................................80
12 Revision history ...........................................................................................81
1 Team
2 Terminologies Used
Game Cycle This refers to a cycle invoked by a spin of the reels through
to completing any features that were activated during the
spin - initiation, update and end.
{
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"p": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"pc": [
1
],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 10,
"ma": 20
}
],
"cf": [
{
"fi": 1,
"pt": "REEL_PRE_WIN",
"ft": "REPLACE",
"rs": [
{
"p": [
[
0,
0
],
[
1,
0
]
],
"rs": 1
}
],
"fc": []
},
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": true,
"pr": [
[
0,
0
],
[
2,
0
]
],
"fc": [
{
"fi": 3,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 1
}
]
}
],
"rsc": [
{
"ar": [
4
],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
5
],
"id": 1
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 3,
"si": 0
},
{
"ri": 4,
"si": 0
}
]
}
],
"twca": 1,
"twco": 10,
"ts": 1
}
],
"ctwca": 1
}
{
"fail": null,
"game": {
"view": {},
"details": {},
"promo": [],
"resume": false
},
"success": true,
"type": "responseType",
"error": null,
"cust": {
"curr": {}
}
}
5 Element Definitions
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"p": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"pc": [
2
],
"levels": [ 1 ]
}
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 10,
"ma": 20
}
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": true,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"fc": []
}
{
"fi": 1,
"pt": "REEL_PRE_WIN",
"ft": "REPLACE",
"rs": [
{
"p": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"si": 1
}
],
"fc": []
}
{
"fi": 3,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 1,
"fc": []
}
{
"ar": [
4
],
"si": 0,
"lb": 0,
"ub": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
5
],
"id": 1
}
]
}
{
"si": [
3
],
"id": 0
}
{
"wins": [
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 3,
"si": 0
},
{
"ri": 4,
"si": 0
}
]
}
],
"twca": 1,
"twco": 10,
"ts": 1
}
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 3,
"si": 0
},
{
"ri": 4,
"si": 0
}
]
}
{
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
}
{
"wi": -1,
"type": "PRIZE_WIN",
"fi": 2,
"cash": 1,
"coin": 10
}
{
"lb": 0,
"ub": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
5
],
"id": 1
}
]
}
{
"stake": {
"cv": 1,
"values": [
0.2,
0.4,
0.6,
1,
2,
4,
6,
10,
20,
40,
60,
100,
200
],
"cl": 0,
"levels": [
1
]
},
"wl": [
{
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"id": 0
},
{
"pos": [
{
"ri": 2,
"si": 0
},
{
"ri": 3,
"si": 0
}
],
"id": 1
}
]
}
{
"cv": 1,
"values": [
0.2,
0.4,
0.6,
1,
2,
4,
6,
10,
20,
40,
60,
100,
200
]
}
{
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"id": 0
}
{
"id": 5,
"type": "Slot",
"title": "Dwarven Hoard",
"drtp": 97.3
}
{
"id": "daw82j3ghd83l",
"type": "FREE_GAME",
"name": "My Test Promotion",
"ga": 10,
"gc": 0,
"sv": 0.1,
"sl": 1,
"sd": true,
"wa": 0,
"cons": 0,
"status": "ACTIVE"
}
{
"pbal": 1000,
"bal": 1000,
"curr": {
"maj": "%E2%82%AC",
"gp": 3,
"code": "eur",
"min": "",
"dp": 2,
"ds": ",",
"msp": true,
"scale": 1,
"gs": "."
}
}
{
"maj": "%E2%82%AC",
"gp": 3,
"code": "eur",
"min": "",
"dp": 2,
"ds": ",",
"msp": true,
"scale": 1,
"gs": "."
}
{
"mes": "We apologise but a technical fault has occurred with the
game. This error cannot be resolved at this time. Please try again.",
"sev": 0
}
6 Scenario Samples
{
"type": "init",
"freeplay": "false",
"playToken": "2244",
"game": {"code":"bs007_dhs", "version":"1.0.1" },
"vendor": "bs",
"requestId": ""
}
{
"fail": null,
"game": {
"view": {
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"p": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"pc": [],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 0,
"ma": 20
}
],
"irs": {
"lb": 0,
"ub": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
5
],
"id": 1
}
]
},
"gc": {
"stake": {
"cv": 12,
"values": [
0.2,
0.4,
0.6,
1,
2,
4,
6,
10,
20,
40,
60,
100,
200
],
"cl": 0,
"levels": [
1
]
},
"wl": [
{
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"id": 0
},
{
"pos": [
{
"ri": 2,
"si": 0
},
{
"ri": 3,
"si": 0
}
],
"id": 1
}
]
},
"twco": 0,
"bets": [],
"twca": 0
},
"details": {
"id": 5,
"type": "Slot",
"title": "Dwarven Hoard",
"drtp": 97.3
}
},
"success": true,
"type": "initResponse",
"error": null,
"cust": {
"pbal": 1000,
"bal": 1000,
"curr": {
"maj": "%E2%82%AC",
"gp": 3,
"code": "eur",
"min": "",
"dp": 2,
"ds": ",",
"msp": true,
"scale": 1,
"gs": "."
}
}
}
{
"type": "start",
"bet": {
"stake": {
"cv": 3,
"cl": 0
}
}
}
{
"fail": null,
"game": {
"view": {
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 0,
"ma": 20
}
],
"rsc": [
{
"ar": [],
"si": 0,
"lb": 0,
"ub": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
5
],
"id": 1
}
]
}
],
"twco": 0,
"bets": [
{
"wins": [],
"twca": 0,
"twco": 0,
"ts": 1
}
],
"twca": 0
}
},
"success": true,
"type": "startResponse",
"error": null,
"cust": {
"pbal": 999,
"bal": 999,
"curr": {
"maj": "%E2%82%AC",
"gp": 3,
"code": "eur",
"min": "",
"dp": 2,
"ds": ",",
"msp": true,
"scale": 1,
"gs": "."
}
}
}
Example of response:
{
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [
],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 0,
"ma": 20
}
],
"cf": [
{
"rs": [
{
"p": [
[
1,
0
]
],
"rs": 16
}
],
"fi": 1,
"pt": "REEL_PRE_WIN",
"ft": "REPLACE"
}
],
"rsc": [
{
"si": 0,
"ar": [],
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
3
],
"id": 0
},
{
"si": [
3
],
"id": 1
},
{
"si": [
5
],
"id": 1
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [],
"twca": 0,
"twco": 0,
"ts": 1
}
],
"ctwca": 0
}
{
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [
],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 10,
"ma": 20
}
],
"cf": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": true,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"fc": [
{
"fi": 3,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 1
}
]
}
],
"rsc": [
{
"ar": [
4
],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
1
],
"id": 0
},
{
"si": [
1
],
"id": 1
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
]
}
],
"twca": 1,
"twco": 10,
"ts": 1
}
],
"ctwca": 1
}
"cf": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": true,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
]
}
]
Example where the feature is finished and a complete event must be initiated.
"cf": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": false,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
]
}
]
In order to receive the next event sequence the client sends update requests, seen
as thus:
{
"type": "update",
"subType": 3,
}
{
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [
],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 10,
"ma": 20
}
],
"cf": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": true,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"fc": [
{
"fi": 3,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 1
}
]
}
],
"rsc": [
{
"ar": [
4
],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
1
],
"id": 0
},
{
"si": [
1
],
"id": 1
}
]
},
{
"ar": [],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
-1
],
"id": 0
},
{
"si": [
-1
],
"id": 1
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
]
}
],
"twca": 1,
"twco": 10,
"ts": 1
}
],
"ctwca": 1
}
Example of request
{
"type":"update",
"subType":4
}
The client will get updated with a complete feature response containing an updated
balance; as seen from the full model breakdown above.
{
"type":"end"
}
{
"pf": [
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [
],
"levels": [ 1 ]
},
{
"ft": "TRAIL_RAGE",
"pt": "REEL_POST_WIN",
"wa": 10,
"ma": 20
}
],
"pc": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": false,
"pr": [],
"fc": [
{
"fi": 3,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 2
},
{
"P": {
"amount": 8,
"fi": 5,
"id": 0,
"type": "FREESPIN"
},
"fi": 4,
"pt": "REEL_POST_WIN",
"ft": "INSTANT"
}
]
},
{
"fi": 5,
"pt": "OFF_REEL",
"fsr": 8,
"fsa": 8,
"ft": "FREESPIN",
"fc": []
}
],
"rsc": [
{
"ar": [],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
1
],
"id": 0
},
{
"si": [
1
],
"id": 1
}
]
},
{
"ar": [],
"si": 0,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
-1
],
"id": 0
},
{
"si": [
-1
],
"id": 1
}
]
},
{
"ar": [],
"si": 1,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
2
],
"id": 0
},
{
"si": [
3
],
"id": 1
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [
{
"wi": -1,
"award": {
"fi": -1,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 1,
"coin": 10,
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
]
}
],
"twca": 1,
"twco": 10,
"ts": 1
}
],
"ctwca": 1
}
7 Freespins
Request Example
{
"type": "update",
"subType": 3,
}
Response Example
{
"pf": [],
"cf": [
{
"fi": 5,
"pt": "OFF_REEL",
"fsr": 7,
"fsa": 8,
"ft": "FREESPIN",
"fc": [
{
"fi": 2,
"pt": "REEL_POST_WIN",
"ft": "CASCADE",
"cascade": false,
"pr": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
}
],
"fc": [
{
"fi": 11,
"ft": "MULTIPLIER",
"pt": "REEL_PRE_WIN",
"multi": 1
}
]
}
]
}
],
"rsc": [
{
"ar": [],
"si": 4,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
5
],
"id": 0
},
{
"si": [
5
],
"id": 1
},
{
"si": [
5
],
"id": 2
}
]
},
{
"ar": [],
"si": 5,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
-1
],
"id": 0
},
{
"si": [
-1
],
"id": 1
},
{
"si": [
5
],
"id": 2
}
]
}
],
"ctwco": 20,
"bets": [
{
"wins": [
{
"wi": 1,
"award": {
"fi": 11,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 2,
"coin": 20,
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
},
{
"ri": 2,
"si": 0
}
]
}
],
"twca": 2,
"twco": 20,
"ts": 1
}
],
"ctwca": 2
}
Example of request
{
"type":"update",
"subType":4
}
Example of response
{
"pf": [],
"cf": [
{
"fi": 5,
"pt": "OFF_REEL",
"fsr": 0,
"fsa": 8,
"ft": "FREESPIN",
"fc": []
}
],
"rsc": [
{
"ar": [],
"si": 6,
"sipli": 0,
"sipui": 1,
"reels": [
{
"si": [
5
],
"id": 0
},
{
"si": [
5
],
"id": 1
},
{
"si": [
5
],
"id": 2
}
]
}
],
"ctwco": 0,
"bets": [
{
"wins": [],
"twca": 0,
"twco": 0,
"ts": 1
}
],
"ctwca": 0
}
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"p": [
{
"ri": 0,
"si": 0
},
{
"ri": 3,
"si": 0
}
],
"pc": [],
"levels": [ 1 ]
}
The pattern trail object initially contains the points of the trail. These points should
be stored by the client in preparation for updates to the trail in the start and update
response.
{
"wi": 1,
"award": {
"fi": 11,
"pt": 0,
"jp": false,
"type": "WINLINE"
},
"type": "REEL_WIN",
"cash": 2,
"coin": 20,
"pos": [
{
"ri": 0,
"si": 0
},
{
"ri": 1,
"si": 0
},
{
"ri": 2,
"si": 0
}
]
}
{
"ft": "TRAIL_PATTERN",
"pt": "REEL_POST_WIN",
"pc": [
0
],
"levels": [ 1 ]
}
8 Resume Scenarios
In the event of a resume scenario the RGS will set the “res” property of the game object to
true as part of the initResponse. The client should recognize this occurrence and interrogate
the persistent and consumable feature arrays to present the resumed feature state to the
user.
9 Promotions
{
"id": "daw82j3ghd83l",
"type": "FREE_GAME",
"name": "My Test Promotion",
"ga": 10,
"gc": 0,
"sv": 0.1,
"sl": 1,
"sd": true,
"wa": 0,
"cons": 0,
"status": "ACTIVE"
}
Promotion objects contain details of the state of promotions that are applicable to
the user. If a promotion object is present (that wasn't present before) in either the
Init Response or End Response event and the status property is set to “ACTIVE”,
then the user has been deemed eligible and therefore activated the promotion. The
client would typically convey the promotion activation to the user and display any
progress bars or win meters as part of the promotion presentation. Alternatively, if
a promotion object is present and the status property is set to “EXPIRED”, then the
promotion has expired and can no longer be consumed by the user. This should
also be conveyed to the user appropriately within the client.
Upon initiating a bet and specifying to consume a given promotion, the Start
Response and subsequent End Response shall contain updated game count, win
amount and consumed properties which can be used to visually update any
progress bars or win meters on-screen. If the status property has changed to
"COMPLETE" on the End Response then the promotion has been fully consumed.
At this point the client typically would present a summary panel to present the total
winnings from the promotion to the user.
{
"mes": "We apologise but a technical fault has occurred with the
game. This error cannot be resolved at this time. Please try again.",
"sev": 0
}
The error property (error) is used by the RGS to convey an error condition to the
client. In the interest of clarity, error conditions are restricted to occurrences that
are unexpected by RGS e.g. technical malfunctions. The severity code allows for
non-fatal errors to be conveyed, but currently the only type of error that will be
transmitted by the RGS will match the sample above. In response, the client should
display an error message and prevent the user from continuing the gameplay
session.
Fail conditions are dictated by the game logic. Therefore, as with the game view,
fail objects are abstract to the RGS. The game logic is free to determine the structure
and contents of the fail object - the RGS merely recognizes the existence of a fail
object in the response from the game logic and returns the fail object in the JSON
response to the client. An example of a type of fail condition that is typically
implemented by the game logic would be the condition of insufficient funds. By
recognizing a fail object with a distinct id or code the client can handle this type of
scenario gracefully.
11 Heartbeat
In additional to the various request types that are accepted by the RGS, the client
is also required to periodically transmit a heartbeat message to prevent the RGS
from inferring a timeout scenario. The heartbeat message consists of a single
character 'h' and should be sent on an interval of around 10 seconds. This interval
can be reset when a request is sent as the RGS considers the requests to be a form
of heartbeat.
12 Revision history