using PlayFab.ServerModels; using PlayFab.Json; using PlayFab; using strange.extensions.mediation.impl; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Networking.NetworkSystem; using System.Collections; using System.Collections.Generic; public class ArenaMediator : EventMediator { // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Local Defines // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ const string KEY_TITLE_ARENA = "arena"; const string KEY_USER_PROGRESS = "progress"; public const int MaxCannons = 5; public const int MaxFlowers = 5; public const float PreppingTime = 30f; enum Enqueue { IntroDelayToBack, ImmediateToBack, ImmediateToFront }; int[] m_MatchCriteria = new int[] { 3, 5, 10, 15, 20, 35, 50, 75, 100, 125, 150, 175, 200, 250 }; // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Dependency Injections // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ [Inject] public ServerSettingsData ServerSettingsData { get; set; } [Inject] public PlayFabServerShutdownSignal ShutdownSignal { get; set; } // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Variables // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ bool m_GatheringTitleData = false; TitleArena m_TitleArena = new TitleArena(); List m_PlayersBoarding = new List(); List m_PlayersBattling = new List(); // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Debug // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ static ArenaMediator m_This; static public int TotalBoarding { get { return m_This != null ? m_This.m_PlayersBoarding.Count : 0; } } static public int TotalBattling { get { return m_This != null ? m_This.m_PlayersBattling.Count : 0; } } // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Mediator Overrides // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ public override void OnRegister() { m_This = this; NetworkServer.RegisterHandler( ServerMsgType.Connect, OnConnect ); NetworkServer.RegisterHandler( ServerMsgType.Authenticate, OnAuthenticate ); NetworkServer.RegisterHandler( ServerMsgType.MatchConfirm, OnMatchConfirm ); NetworkServer.RegisterHandler( ServerMsgType.PlayerLoaded, OnPlayerLoaded ); NetworkServer.RegisterHandler( ServerMsgType.PlayerPrepped, OnPlayerPrepped ); NetworkServer.RegisterHandler( ServerMsgType.PlayerUnprepped, OnPlayerUnprepped ); NetworkServer.RegisterHandler( ServerMsgType.PlayerLoadout, OnPlayerLoadout ); NetworkServer.RegisterHandler( ServerMsgType.PlayerStatus, OnPlayerStatus ); NetworkServer.RegisterHandler( ServerMsgType.PlayerEvent, OnPlayerEvent ); NetworkServer.RegisterHandler( ServerMsgType.PlayerReconnecting, OnPlayerReconnecting ); NetworkServer.RegisterHandler( ServerMsgType.RequestRematch, OnRequestRematch ); NetworkServer.RegisterHandler( ServerMsgType.Disconnect, OnDisconnect ); NetworkServer.RegisterHandler( ServerMsgType.Error, OnError ); NetworkServer.RegisterHandler( ServerMsgType.Taunt, OnTaunt ); StartCoroutine( GatherTitleData() ); } // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Utility // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ // various game-specific utility functions excluded to consolidate // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Cloudscript // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ // cloudscript error handling excluded to consolidate // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Networking // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ void OnConnect( NetworkMessage netMsg ) { // IMPORTANT - THIS FUNCTION IS NEVER HIT - I ADDED CODE TO SET A KVP IN THE GAME'S TITLE DATA IF THIS IS HIT AND THAT NEVER OCCURS if( DebugManager.Exists ) DebugManager.Log( string.Format( "A new connection was made: ID {0}.", netMsg.conn.connectionId ) ); ArenaPlayer player = new ArenaPlayer() { State = PlayerState.Connected, Connection = netMsg.conn }; m_PlayersBoarding.Add( player ); StartCoroutine( CheckAuthentication( player ) ); } // various network handlers excluded to consolidate // ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗ // Co-Routines // ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ // various coroutines to manage match states exluded to consolidate }