// +++ event handler ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void OnMatchPresence(INMatchPresence presences) { Debug.Log("Match Players updated"); // Remove all users who left. foreach (var user in presences.Leave) { connectedOpponents.Remove( connectedOpponents.SingleOrDefault(x => x.Handle == user.Handle) ); } // Add all users who joined. foreach (var user in presences.Join) { if (connectedOpponents.Where(x => x.Handle == user.Handle).Count() > 0) { // already in list continue; } else { connectedOpponents.Add(user); } } // lock(connectedOpponents){ // LogOpponents(connectedOpponents, localPlayerId, "updated"); // } if (connectedOpponents.Count == 2) { OnInitMatchComplete(); } }
private void OnMatchPresencesUpdated(INMatchPresence presences) { _matchPresencesUpdated = true; foreach (var user in presences.Leave) { nakamaMatchPresences.Remove(nakamaMatchPresences.Single(x => x.Handle == user.Handle)); } foreach (var user in presences.Join) { nakamaMatchPresences.Add(user); var playerCount = nakamaMatchPresences.Count(); if (playerCount >= minNumberOfPlayers && playerCount <= maxNumberOfPlayers) { Debug.Log("Game is ready"); Enqueue( () => nvp_EventManager_scr.INSTANCE.InvokeEvent(GameEvents.OnMatchIsReady, this, nakamaMatchPresences) ); } else { var matchIsFullMessage = NMatchDataSendMessage.Default( nakamaMatchId, 99L, System.Text.Encoding.UTF8.GetBytes(user.Handle)); _nakama.SendDataMessage(matchIsFullMessage); } } }
internal NMatchPresenceEventArgs(INMatchPresence matchPresence) { MatchPresence = matchPresence; }
// +++ event handler ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private void OnMatchPresence(INMatchPresence presences) { OnMatchPresencesUpdated(presences); }