// +++ handler for nakama events ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ async void OnChannelPresence(object sender, IChannelPresenceEvent presenceChange) { _connectedUsers.AddRange(presenceChange.Joins); foreach (var leave in presenceChange.Leaves) { _connectedUsers.RemoveAll(item => item.SessionId.Equals(leave.SessionId)); } ; // Print connected presences. var presences = _connectedUsers.Select(x => x.Username).ToArray(); Debug.Log(presences); IApiUsers result = await _client.GetUsersAsync(_session, null, presences, null); this.OnChannelPresencesChanged(this, result.Users.ToList()); }
// ------------------------------------------- /* * OnReceivedChannelPresence */ private async void OnReceivedChannelPresence(IChannelPresenceEvent m) { if (m.Leaves.ToArray().Length == 0) { m_isInLobby = true; if (DEBUG) { Debug.LogError("RECEIVED CHANNEL PRESENCE::ChannelId=" + m.ChannelId + "::SENDING ROOMS=" + RoomsBuffer); } if (NakamaConnection.ConnectedToMainChat) { await NakamaConnection.SendMainChatMessage(ROOMS_CHAT_MESSAGE, RoomsBuffer); } else { BasicSystemEventController.Instance.DelayBasicSystemEvent(EVENT_NAKAMACONTROLLER_SEND_INITIAL_ROOMS, 1); } } }
private void _socket_OnChannelPresence(object sender, IChannelPresenceEvent e) { Debug.Log("Call to socket_OnChannelPresence"); }
/// <summary> /// Dispatches <see cref="ReceiveChannelPresence(string, IEnumerable{IUserPresence}, IEnumerable{IUserPresence})"/> to be runned in main thread /// </summary> private void ReceiveChannelPresence(IChannelPresenceEvent presenceEvent) { UnityMainThreadDispatcher.Instance().Enqueue(() => ReceiveChannelPresence(presenceEvent.ChannelId, presenceEvent.Joins, presenceEvent.Leaves)); }
private void ActionReceivedChannelPresence(IChannelPresenceEvent m) { m_mainThread.Enqueue(() => OnReceivedChannelPresence(m)); }