示例#1
0
	IEnumerator AddMoney(Player player)
	{
		if (m_applying)
		{
			yield break;
		}

		m_applying = true;
		var task = new MetagameTask<InstanceResponse<User>>();
		var changeRequest = new ChangeRequest("grantCurrencyInsecure", new { currency = Value });
		yield return StartCoroutine(Collection.Users.ApplyChange(task, player.User.ID, changeRequest));
		m_applying = false;

		if (task.Error == null)
		{
			player.LoadProfile(task.Data.Instance);
			gameObject.SetActive(false);
		}
	}
示例#2
0
	IEnumerator Logout()
	{
		var task = new MetagameTask<AuthResponse>();
		yield return StartCoroutine(m_metagame.Logout(task));
		m_state = MenuState.LoginScreen;
	}
示例#3
0
	void LeaveSession()
	{
		StopCoroutine(m_pingLoop);
		m_pingLoop = null;
		var task = new MetagameTask<MatchmakingLeaveResponse>();
		StartCoroutine(m_metagame.LeaveMatchmakingSession(task, MatchmakingPool, m_partyID, m_currentSessionID));
	}
示例#4
0
	IEnumerator PingLoop(int ttl)
	{
		var task = new MetagameTask<MatchmakingPingResponse>();
		while (true)
		{
			yield return StartCoroutine(m_metagame.PingMatchmakingSession(task, MatchmakingPool, m_partyID, m_currentSessionID));
			yield return new WaitForSeconds(ttl / 2);
		}
	}
示例#5
0
	IEnumerator Matchmake()
	{
		m_state = MenuState.MatchmakingInProgress;
		var task = new MetagameTask<MatchmakingSearchResponse>();
		yield return StartCoroutine(m_metagame.Matchmake(task, MatchmakingPool, m_partyID, new string[0], m_badTickets.ToArray(), new Dictionary<string, string>()));

		if (task.Error != null)
		{
			m_state = MenuState.MatchmakingScreen;
		}
		else
		{
			m_currentSessionID = task.Data.SessionID;
			m_hosting = task.Data.Action == MatchmakingSearchAction.Create;
			if (!m_hosting)
			{
				var ip = task.Data.HostPartyID.Split('|')[0].Replace(',', '.');
				m_netManager.networkAddress = ip;
				m_netManager.StartClient();
			}
			else
			{
				m_netManager.StartHost();
			}

			m_state = MenuState.SessionConnectionInProgress;
			m_netManager.ClientConnected += OnClientConnect;
			m_netManager.ClientDisconnected += OnClientDisconnect;
			m_pingLoop = StartCoroutine(PingLoop(task.Data.TTL));
		}
	}
示例#6
0
	IEnumerator DownloadData()
	{
		m_state = MenuState.DownloadingData;
		yield return StartCoroutine(Collection.Init(m_metagame));

		var task = new MetagameTask<InstanceResponse<User>>();
		yield return Collection.Users.DownloadInstance(task, UserID);

		m_state = MenuState.MatchmakingScreen;
	}
示例#7
0
	IEnumerator Login()
	{
		m_state = MenuState.LoginInProgress;
		var task = new MetagameTask<AuthResponse>();
		yield return StartCoroutine(m_metagame.AuthenticateDebug(task, m_userNameText));
		if (task.Error != null)
		{
			m_loginErrorText = task.Error.Name;
			m_state = MenuState.LoginScreen;
		}
		else
		{
			// hack to generate party IDs for debug platforms
			m_partyID = task.Data.IP.Replace('.', ',') + "|" + Process.GetCurrentProcess().Id;
			UserID = task.Data.ID;
			yield return StartCoroutine(DownloadData());
		}
	}
示例#8
0
	IEnumerator Connect()
	{
		m_state = MenuState.Connecting;
		var task = new MetagameTask<ConnectResponse>();
		yield return StartCoroutine(m_metagame.Connect(task, MetagameUrl));
		if (task.Error != null)
		{
			m_connectErrorText = task.Error.Name;
			m_state = MenuState.ConnectScreen;
		}
		else
		{
			m_state = MenuState.LoginScreen;
		}
	}
示例#9
0
		public static IEnumerator Logout(this MetagameClient metagame, MetagameTask<AuthResponse> task)
		{
			return metagame.MetagameSend(task, "/auth/logout", false);
		}
示例#10
0
		public static IEnumerator AuthenticateDebug(this MetagameClient metagame, MetagameTask<AuthResponse> task, string userID, string client = "game")
		{
			var request = new { client, userID };
			return metagame.MetagameSend(task, "/auth/login", request);
		}