11#include " networking/logic/life_cycle/life_cycle_handler_matchmaking_arbitration.hpp"
22
3+ #include " cseries/cseries_events.hpp"
34#include " memory/module.hpp"
45#include " networking/session/network_session.hpp"
56
@@ -34,16 +35,59 @@ void c_life_cycle_state_handler_matchmaking_arbitration::exit(c_life_cycle_state
3435 INVOKE_CLASS_MEMBER (0x004947E0 , c_life_cycle_state_handler_matchmaking_arbitration, exit, to);
3536}
3637
38+ // .text:00494930 ;
39+ // .text:00494940 ;
40+
41+ void c_life_cycle_state_handler_matchmaking_arbitration::get_progress (s_life_cycle_matchmaking_progress* progress_out)
42+ {
43+ INVOKE_CLASS_MEMBER (0x00494950 , c_life_cycle_state_handler_matchmaking_arbitration, get_progress, progress_out);
44+
45+ // c_life_cycle_state_handler::get_matchmaking_progress_for_setting_up_match(progress_out);
46+ }
47+
3748void c_life_cycle_state_handler_matchmaking_arbitration::handle_missing_required_session_parameter (e_network_session_type session_type)
3849{
3950 INVOKE_CLASS_MEMBER (0x00494960 , c_life_cycle_state_handler_matchmaking_arbitration, handle_missing_required_session_parameter, session_type);
51+
52+ // ASSERT(session_type == _network_session_type_group);
53+ // event(_event_warning, "networking:logic:life_cycle:matchmaking_arbitration: became host without required session parameters, restarting matchmaking");
54+ // c_life_cycle_state_handler::disband_group_session();
55+ }
56+
57+ void c_life_cycle_state_handler_matchmaking_arbitration::initial_stats_write_mark_complete ()
58+ {
59+ // INVOKE_CLASS_MEMBER(0x00494980, c_life_cycle_state_handler_matchmaking_arbitration, initial_stats_write_mark_complete);
60+
61+ ASSERT (!m_flags.test (_matchmaking_arbitration_start_match_initial_stats_write_completed_bit));
62+ network_session_interface_set_peer_status_flag (_network_session_peer_properties_status_match_initial_stats_written_bit, true );
63+ m_flags.set (_matchmaking_arbitration_start_match_initial_stats_write_completed_bit, true );
64+ }
65+
66+ void c_life_cycle_state_handler_matchmaking_arbitration::initial_stats_write_mark_failed ()
67+ {
68+ // INVOKE_CLASS_MEMBER(0x004949A0, c_life_cycle_state_handler_matchmaking_arbitration, initial_stats_write_mark_failed);
69+
70+ ASSERT (!m_flags.test (_matchmaking_arbitration_start_match_initial_stats_write_failed_bit));
71+ c_life_cycle_state_handler_matchmaking_arbitration::start_match_mark_complete ();
72+ network_session_interface_set_peer_status_flag (_network_session_peer_properties_status_match_initial_stats_write_failed_bit, true );
73+ m_flags.set (_matchmaking_arbitration_start_match_initial_stats_write_failed_bit, true );
4074}
4175
4276void c_life_cycle_state_handler_matchmaking_arbitration::initialize (c_life_cycle_state_manager* manager)
4377{
44- INVOKE_CLASS_MEMBER (0x004949D0 , c_life_cycle_state_handler_matchmaking_arbitration, initialize, manager);
78+ // INVOKE_CLASS_MEMBER(0x004949D0, c_life_cycle_state_handler_matchmaking_arbitration, initialize, manager);
79+
80+ c_life_cycle_state_handler_flags parent_flags;
81+ parent_flags.set (_life_cycle_state_handler_requires_squad_session_bit, true );
82+ parent_flags.set (_life_cycle_state_handler_requires_group_session_bit, true );
83+ parent_flags.set (_life_cycle_state_handler_allows_group_session_bit, true );
84+ parent_flags.set (_life_cycle_state_handler_group_session_disconnect_leaves_squad_bit, true );
85+ parent_flags.set (_life_cycle_state_handler_live_disconnection_returns_to_pre_game_bit, true );
86+ c_life_cycle_state_handler::initialize (manager, _life_cycle_state_matchmaking_assemble_match, &parent_flags, 0ULL , 0xAE0004C80ULL );
4587}
4688
89+ // .text:00494A00 ;
90+
4791void c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_complete ()
4892{
4993 // INVOKE_CLASS_MEMBER(0x00494A10, c_life_cycle_state_handler_matchmaking_arbitration, mark_arbitration_complete);
@@ -60,51 +104,62 @@ void c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_comple
60104 }
61105}
62106
63- bool c_life_cycle_state_handler_matchmaking_arbitration::ready_to_start ()
107+ void c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_failed ()
64108{
65- return INVOKE_CLASS_MEMBER (0x00494AF0 , c_life_cycle_state_handler_matchmaking_arbitration, ready_to_start );
109+ // INVOKE_CLASS_MEMBER(0x00494A40 , c_life_cycle_state_handler_matchmaking_arbitration, mark_arbitration_failed );
66110
67- c_network_session* group_session = get_manager ()->get_group_session ();
68- bool arbitration_completed = 0 ;
69- bool all_players_have_initial_participants = 0 ;
70- bool all_players_session_started = 0 ;
71- bool stats_written = 0 ;
111+ ASSERT (!m_flags.test (_matchmaking_arbitration_failed_bit));
112+
113+ c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_complete ();
114+ network_session_interface_set_peer_status_flag (_network_session_peer_properties_status_match_arbitration_failed_bit, true );
115+ m_flags.set (_matchmaking_arbitration_failed_bit, true );
116+ }
117+
118+ // .text:00494A90 ;
119+ // .text:00494AA0 ;
120+ // .text:00494AC0 ;
121+ // .text:00494AD0 ;
122+
123+ bool c_life_cycle_state_handler_matchmaking_arbitration::ready_to_start ()
124+ {
125+ // return INVOKE_CLASS_MEMBER(0x00494AF0, c_life_cycle_state_handler_matchmaking_arbitration, ready_to_start);
72126
73127 c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: c_life_cycle_state_handler_matchmaking_arbitration::ready_to_start" );
74128
75- const c_network_session_membership* session_membership = group_session->get_session_membership ();
129+ c_network_session* group_session = get_manager ()->get_group_session ();
130+ c_network_session_membership const * session_membership = group_session->get_session_membership ();
76131
132+ bool arbitration_completed = false ;
77133 if (m_flags.test (_matchmaking_arbitration_complete_bit))
78134 {
79135 arbitration_completed = !m_flags.test (_matchmaking_arbitration_failed_bit);
80136 }
81137
138+ bool initial_participants_transmitted_to_peers = false ;
82139 if (m_flags.test (_matchmaking_arbitration_set_initial_participants_bit))
83140 {
84141 c_network_session_parameters* session_parameters = group_session->get_session_parameters ();
85- all_players_have_initial_participants = session_parameters->parameters_transmitted_to_peers (FLAG (_network_session_parameter_type_initial_participants)) != 0 ;
86- if (!all_players_have_initial_participants )
142+ initial_participants_transmitted_to_peers = session_parameters->parameters_transmitted_to_peers (FLAG (_network_session_parameter_type_initial_participants)) != 0 ;
143+ if (!initial_participants_transmitted_to_peers )
87144 {
88145 c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Warning! It seems a player hasn't got initial participants!" );
89146 }
90147 }
91148
149+ bool match_started_for_peers = false ;
92150 if (m_flags.test (_matchmaking_arbitration_start_match_session_completed_bit) && !m_flags.test (_matchmaking_arbitration_start_match_session_failed_bit))
93151 {
94- all_players_session_started = session_membership->peer_property_flag_test (_peer_property_flag_test_all_peers, _network_session_peer_properties_status_match_started_bit);
95- if (!all_players_session_started )
152+ match_started_for_peers = session_membership->peer_property_flag_test (_peer_property_flag_test_all_peers, _network_session_peer_properties_status_match_started_bit);
153+ if (!match_started_for_peers )
96154 {
97155 c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Warning! It seems a peer hasn't finished starting their session!" );
98156 }
99157 }
100158
159+ bool stats_written_for_peers = false ;
101160 if (m_flags.test (_matchmaking_arbitration_start_match_initial_stats_write_completed_bit) && !m_flags.test (_matchmaking_arbitration_start_match_initial_stats_write_failed_bit))
102161 {
103- stats_written = session_membership->peer_property_flag_test (_peer_property_flag_test_all_peers, _network_session_peer_properties_status_match_initial_stats_written_bit);
104- }
105- else
106- {
107- stats_written = 0 ;
162+ stats_written_for_peers = session_membership->peer_property_flag_test (_peer_property_flag_test_all_peers, _network_session_peer_properties_status_match_initial_stats_written_bit);
108163 }
109164
110165 if (m_flags.test (_matchmaking_arbitration_start_match_session_failed_bit))
@@ -117,13 +172,20 @@ bool c_life_cycle_state_handler_matchmaking_arbitration::ready_to_start()
117172 c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Warning! Stats write has failed!" );
118173 }
119174
175+ bool ready = arbitration_completed && initial_participants_transmitted_to_peers && match_started_for_peers && stats_written_for_peers;
176+
120177 c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Arbitration completed? %s" , arbitration_completed ? " YES" : " NO" );
121- c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Peers have initial participants? %s" , all_players_have_initial_participants ? " YES" : " NO" );
122- c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Session started? %s" , all_players_session_started ? " YES" : " NO" );
123- c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Stats written? %s" , stats_written ? " YES" : " NO" );
124- c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Are we ready? %s" , arbitration_completed && all_players_have_initial_participants && all_players_session_started && stats_written ? " YES" : " NO" );
178+ c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Peers have initial participants? %s" , initial_participants_transmitted_to_peers ? " YES" : " NO" );
179+ c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Session started? %s" , match_started_for_peers ? " YES" : " NO" );
180+ c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Stats written? %s" , stats_written_for_peers ? " YES" : " NO" );
181+ c_console::write_line (" donkey:networking:logic:life_cycle:matchmaking_arbitration: Are we ready? %s" , ready ? " YES" : " NO" );
125182
126- return arbitration_completed && all_players_have_initial_participants && all_players_session_started && stats_written;
183+ return ready;
184+ }
185+
186+ bool c_life_cycle_state_handler_matchmaking_arbitration::ready_to_update_repeated_play ()
187+ {
188+ return INVOKE_CLASS_MEMBER (0x00494BF0 , c_life_cycle_state_handler_matchmaking_arbitration, ready_to_update_repeated_play);
127189}
128190
129191bool c_life_cycle_state_handler_matchmaking_arbitration::session_membership_matches_arbitration_registration_results ()
@@ -133,6 +195,29 @@ bool c_life_cycle_state_handler_matchmaking_arbitration::session_membership_matc
133195 return true ;
134196}
135197
198+ // .text:00494E50 ;
199+
200+ void c_life_cycle_state_handler_matchmaking_arbitration::start_match_mark_complete ()
201+ {
202+ // INVOKE_CLASS_MEMBER(0x00494E80, c_life_cycle_state_handler_matchmaking_arbitration, start_match_mark_complete);
203+
204+ ASSERT (!m_flags.test (_matchmaking_arbitration_start_match_session_completed_bit));
205+ network_session_interface_set_peer_status_flag (_network_session_peer_properties_status_match_started_bit, true );
206+ m_flags.set (_matchmaking_arbitration_start_match_session_completed_bit, true );
207+ }
208+
209+ void c_life_cycle_state_handler_matchmaking_arbitration::start_match_mark_failed ()
210+ {
211+ // INVOKE_CLASS_MEMBER(0x00494EA0, c_life_cycle_state_handler_matchmaking_arbitration, start_match_mark_failed);
212+
213+ ASSERT (!m_flags.test (_matchmaking_arbitration_start_match_session_failed_bit));
214+ c_life_cycle_state_handler_matchmaking_arbitration::start_match_mark_complete ();
215+ network_session_interface_set_peer_status_flag (_network_session_peer_properties_status_match_start_failed_bit, true );
216+ m_flags.set (_matchmaking_arbitration_start_match_session_failed_bit, true );
217+ }
218+
219+ // .text:00494ED0 ;
220+
136221void c_life_cycle_state_handler_matchmaking_arbitration::update ()
137222{
138223 // INVOKE_CLASS_MEMBER(0x00494EF0, c_life_cycle_state_handler_matchmaking_arbitration, update);
@@ -157,10 +242,116 @@ void c_life_cycle_state_handler_matchmaking_arbitration::update()
157242void c_life_cycle_state_handler_matchmaking_arbitration::update_arbitration ()
158243{
159244 INVOKE_CLASS_MEMBER (0x004952F0 , c_life_cycle_state_handler_matchmaking_arbitration, update_arbitration);
245+
246+ // c_life_cycle_state_manager* manager = get_manager();
247+ // c_network_session* group_session = manager->get_group_session();
248+ // int32 managed_session_index = group_session->m_managed_session_index;
249+ //
250+ // ASSERT(!m_flags.test(_matchmaking_arbitration_complete_bit));
251+ //
252+ // if (!m_flags.test(_matchmaking_arbitration_initiated_bit))
253+ // {
254+ // if (network_arbitration_get_status() == _network_arbitration_status_registration_in_progress)
255+ // {
256+ // if (!m_flags.test(_matchmaking_arbitration_blocked_bit))
257+ // {
258+ // event(_event_warning, "networking:logic:life_cycle:arbitration: arbitration blocked, can't initiate");
259+ // m_flags.set(_matchmaking_arbitration_blocked_bit, true);
260+ // }
261+ // }
262+ // else
263+ // {
264+ // c_network_session_parameters* session_parameters = group_session->get_session_parameters();
265+ // uns64 arbitration_nonce = *session_parameters->matchmaking_arbitration_nonce.get();
266+ // if (m_flags.test(_matchmaking_arbitration_blocked_bit))
267+ // {
268+ // event(_event_warning, "networking:logic:life_cycle:arbitration: arbitration unblocked, starting...");
269+ // m_flags.set(_matchmaking_arbitration_blocked_bit, false);
270+ // }
271+ //
272+ // if (!network_arbitration_initiate(managed_session_index, arbitration_nonce))
273+ // {
274+ // event(_event_error, "networking:logic:life_cycle:arbitration: failed to initiate arbitration for managed session 0x%08X",
275+ // managed_session_index);
276+ // c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_failed();
277+ // }
278+ //
279+ // m_flags.set(_matchmaking_arbitration_initiated_bit, true);
280+ // }
281+ // }
282+ //
283+ // if (m_flags.test(_matchmaking_arbitration_initiated_bit) && m_flags.test(_matchmaking_arbitration_failed_bit))
284+ // {
285+ // e_network_arbitration_status status = network_arbitration_get_status();
286+ // switch (status)
287+ // {
288+ // case _network_arbitration_status_none:
289+ // {
290+ // event(_event_error, "networking:logic:life_cycle:arbitration: found arbitration in bad state for managed session 0x%08X",
291+ // managed_session_index);
292+ // c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_failed();
293+ // }
294+ // break;
295+ // //case _network_arbitration_status_registration_in_progress:
296+ // //{
297+ // //}
298+ // //break;
299+ // case _network_arbitration_status_registered:
300+ // {
301+ // if (!network_arbitration_get_results(managed_session_index, &m_registration_result))
302+ // {
303+ // event(_event_error, "networking:logic:life_cycle:arbitration: failed to get arbitration results for managed session 0x%08X",
304+ // managed_session_index);
305+ // c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_failed();
306+ // break;
307+ // }
308+ //
309+ // event(_event_message, "networking:logic:life_cycle:arbitration: arbitration completed successfully");
310+ // c_life_cycle_state_handler_matchmaking_arbitration::mark_arbitration_complete();
311+ // }
312+ // break;
313+ // case _network_arbitration_status_registration_failed:
314+ // {
315+ // event(_event_error, "networking:logic:life_cycle:arbitration: arbitration failed for managed session 0x%08X",
316+ // managed_session_index);
317+ // }
318+ // break;
319+ // }
320+ // }
160321}
161322
162323e_life_cycle_state_transition_type c_life_cycle_state_handler_matchmaking_arbitration::update_for_state_transition ()
163324{
164325 return INVOKE_CLASS_MEMBER (0x004952F0 , c_life_cycle_state_handler_matchmaking_arbitration, update_for_state_transition);
165326}
166327
328+ void c_life_cycle_state_handler_matchmaking_arbitration::update_initial_stats_write ()
329+ {
330+ INVOKE_CLASS_MEMBER (0x00495550 , c_life_cycle_state_handler_matchmaking_arbitration, update_initial_stats_write);
331+ }
332+
333+ void c_life_cycle_state_handler_matchmaking_arbitration::update_progress ()
334+ {
335+ INVOKE_CLASS_MEMBER (0x00495700 , c_life_cycle_state_handler_matchmaking_arbitration, update_progress);
336+
337+ // c_life_cycle_state_manager* manager = get_manager();
338+ // c_network_session* group_session = manager->get_group_session();
339+ // c_network_session_parameters* session_parameters = group_session->get_session_parameters();
340+ //
341+ // ASSERT(group_session->is_host());
342+ //
343+ // s_replicated_life_cycle_matchmaking_progress replicated_progress{};
344+ // replicated_progress.progress_type = _life_cycle_matchmaking_progress_setting_up_match;
345+ // session_parameters->matchmaking_progress.set(&replicated_progress);
346+ }
347+
348+ void c_life_cycle_state_handler_matchmaking_arbitration::update_repeated_play ()
349+ {
350+ INVOKE_CLASS_MEMBER (0x00495750 , c_life_cycle_state_handler_matchmaking_arbitration, update_repeated_play);
351+ }
352+
353+ void c_life_cycle_state_handler_matchmaking_arbitration::update_start_match ()
354+ {
355+ INVOKE_CLASS_MEMBER (0x00495900 , c_life_cycle_state_handler_matchmaking_arbitration, update_start_match);
356+ }
357+
0 commit comments