Scorum
game_object.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <fc/fixed_string.hpp>
3 #include <fc/shared_containers.hpp>
8 
9 #include <boost/multi_index/hashed_index.hpp>
10 #include <boost/multi_index/composite_key.hpp>
11 
12 namespace scorum {
13 namespace chain {
14 
15 using namespace scorum::protocol;
16 
20 
21 struct by_name;
22 struct by_uuid;
23 struct by_start_time;
24 struct by_bets_resolve_time;
25 struct by_auto_resolve_time;
26 
27 class game_uuid_history_object : public object<game_uuid_history_object_type, game_uuid_history_object>
28 {
29 public:
31  CHAINBASE_DEFAULT_CONSTRUCTOR(game_uuid_history_object)
33 
34  id_type id;
35  uuid_type uuid;
36 };
37 
38 class game_object : public object<game_object_type, game_object>
39 {
40 public:
42  CHAINBASE_DEFAULT_DYNAMIC_CONSTRUCTOR(game_object, (json_metadata)(markets)(results))
44 
45  typedef typename object<game_object_type, game_object>::id_type id_type;
46 
47  id_type id;
48  uuid_type uuid;
49 
50  fc::shared_string json_metadata;
51  time_point_sec start_time = time_point_sec::min();
52  time_point_sec original_start_time = time_point_sec::min();
53  time_point_sec last_update = time_point_sec::min();
54  time_point_sec bets_resolve_time = time_point_sec::maximum();
55  time_point_sec auto_resolve_time = time_point_sec::maximum();
56 
57  game_status status = game_status::created;
58 
59  game_type game;
60  fc::shared_flat_set<market_type> markets;
61  fc::shared_flat_set<wincase_type> results;
62 };
63 
65  = shared_multi_index_container<game_uuid_history_object,
66  indexed_by<ordered_unique<tag<by_id>,
70  hashed_unique<tag<by_uuid>,
72  uuid_type,
73  &game_uuid_history_object::uuid>>>>;
74 
76  = shared_multi_index_container<game_object,
77  indexed_by<ordered_unique<tag<by_id>,
78  member<game_object,
79  game_object::id_type,
80  &game_object::id>>,
81 
82  hashed_unique<tag<by_uuid>,
83  member<game_object, uuid_type, &game_object::uuid>>,
84 
85  ordered_unique<tag<by_auto_resolve_time>,
86  composite_key<game_object,
87  member<game_object,
88  time_point_sec,
89  &game_object::auto_resolve_time>,
90  member<game_object,
91  game_object::id_type,
92  &game_object::id>>>,
93 
94  ordered_unique<tag<by_bets_resolve_time>,
95  composite_key<game_object,
96  member<game_object,
97  time_point_sec,
98  &game_object::bets_resolve_time>,
99  member<game_object,
100  game_object::id_type,
101  &game_object::id>>>,
102 
103  ordered_unique<tag<by_start_time>,
104  composite_key<game_object,
105  member<game_object,
106  fc::time_point_sec,
107  &game_object::start_time>,
108  member<game_object,
109  game_object::id_type,
110  &game_object::id>>>>>;
111 }
112 }
113 
114 FC_REFLECT(scorum::chain::game_uuid_history_object, (id)(uuid))
115 
116 CHAINBASE_SET_INDEX_TYPE(scorum::chain::game_uuid_history_object, scorum::chain::game_uuid_history_index)
117 
118 // clang-format off
120  (id)
121  (uuid)
122  (json_metadata)
123  (start_time)
124  (original_start_time)
125  (last_update)
126  (bets_resolve_time)
127  (auto_resolve_time)
128  (status)
129  (game)
130  (markets)
131  (results))
132 // clang-format on
133 
134 CHAINBASE_SET_INDEX_TYPE(scorum::chain::game_object, scorum::chain::game_index)
object< game_object_type, game_object >::id_type id_type
Definition: game_object.hpp:45
FC_REFLECT(appender_args,(appender)(stream)) FC_REFLECT_DERIVED(file_appender_args
Definition: game.cpp:4
shared_multi_index_container< game_uuid_history_object, indexed_by< ordered_unique< tag< by_id >, member< game_uuid_history_object, game_uuid_history_id_type, &game_uuid_history_object::id > >, hashed_unique< tag< by_uuid >, member< game_uuid_history_object, uuid_type, &game_uuid_history_object::uuid > >> > game_uuid_history_index
Definition: game_object.hpp:73
shared_multi_index_container< game_object, indexed_by< ordered_unique< tag< by_id >, member< game_object, game_object::id_type, &game_object::id > >, hashed_unique< tag< by_uuid >, member< game_object, uuid_type, &game_object::uuid > >, ordered_unique< tag< by_auto_resolve_time >, composite_key< game_object, member< game_object, time_point_sec, &game_object::auto_resolve_time >, member< game_object, game_object::id_type, &game_object::id > >>, ordered_unique< tag< by_bets_resolve_time >, composite_key< game_object, member< game_object, time_point_sec, &game_object::bets_resolve_time >, member< game_object, game_object::id_type, &game_object::id > >>, ordered_unique< tag< by_start_time >, composite_key< game_object, member< game_object, fc::time_point_sec, &game_object::start_time >, member< game_object, game_object::id_type, &game_object::id > >> >> game_index
fc::static_variant< result_home::yes, result_home::no, result_draw::yes, result_draw::no, result_away::yes, result_away::no, round_home::yes, round_home::no, handicap::over, handicap::under, correct_score_home::yes, correct_score_home::no, correct_score_draw::yes, correct_score_draw::no, correct_score_away::yes, correct_score_away::no, correct_score::yes, correct_score::no, goal_home::yes, goal_home::no, goal_both::yes, goal_both::no, goal_away::yes, goal_away::no, total::over, total::under, total_goals_home::over, total_goals_home::under, total_goals_away::over, total_goals_away::under > wincase_type
Definition: market.hpp:128
fc::static_variant< soccer_game, hockey_game > game_type
Definition: game.hpp:14
fc::static_variant< result_home, result_draw, result_away, round_home, handicap, correct_score_home, correct_score_draw, correct_score_away, correct_score, goal_home, goal_both, goal_away, total, total_goals_home, total_goals_away > market_type
Definition: market.hpp:97
Definition: asset.cpp:15
boost::uuids::uuid uuid_type
Definition: types.hpp:53