public void TopicMessageList(INTopicId topic, NTopicMessagesListMessage.Builder message, bool appendList = false, uint maxMessages = 100) { _client.Send(message.Build(), messages => { if (!appendList) { StateManager.Instance.ChatMessages[topic].Clear(); } foreach (var chatMessage in messages.Results) { // check to see if ChatMessages has 'maxMessages' messages. if (StateManager.Instance.ChatMessages[topic].Count >= maxMessages) { return; } StateManager.Instance.ChatMessages[topic].Add(chatMessage.MessageId, chatMessage); } // Recursively fetch the next set of groups and append if (messages.Cursor != null && messages.Cursor.Value != "") { message.Cursor(messages.Cursor); TopicMessageList(topic, message, true); } }, ErrorHandler); }
private void FetchHistoricMessages() { var topic = StateManager.Instance.Topics[RoomName]; var builder = new NTopicMessagesListMessage.Builder(); builder.TopicRoom(RoomName); NakamaManager.Instance.TopicMessageList(topic, builder); }
private void FetchHistoricMessages(INUser user) { var topic = StateManager.Instance.Topics[user.Id]; var builder = new NTopicMessagesListMessage.Builder(); builder.TopicDirectMessage(user.Id); NakamaManager.Instance.TopicMessageList(topic, builder); }
private void GetPreviousMatchesFromRoom() { ManualResetEvent historyEvent = new ManualResetEvent(false); client = NakamaData.Singleton.Client; byte[] roomByte = Encoding.UTF8.GetBytes("match-list"); IList <INTopicMessage> msgsReturned = null; var message = new NTopicMessagesListMessage.Builder() .TopicRoom(roomByte) .Forward(false) .Limit(100) .Build(); client.Send(message, (INResultSet <INTopicMessage> msgs) => { // Each message in the result set is a `INTopicMessage` identical // to messages received through `OnTopicMessage` realtime delivery. msgsReturned = msgs.Results; Debug.Log("Successfully listed messages from topic. msgs.Results.Count: " + msgs.Results.Count + " msgsReturned.Count: " + msgsReturned.Count); historyEvent.Set(); }, (INError error) => { Debug.LogErrorFormat("Could not list messages from topic: '{0}'.", error.Message); historyEvent.Set(); }); historyEvent.WaitOne(1000, false); if (msgsReturned.Count < 1) { return; } //GO through the messages as if they were just recieved foreach (INTopicMessage topicMessage in msgsReturned) { Debug.Log("topicMessage.Data.ToString(): " + topicMessage.Data.ToString()); var bytesAsString = Encoding.ASCII.GetString(topicMessage.Data); var chatJson = JsonUtility.FromJson <MatchRoomClass>(bytesAsString); Guid tempMatchID = new Guid(chatJson.matchIDGUID); MatchSettings newSettings = new MatchSettings(); newSettings.matchCreator = chatJson.userName; newSettings.maxHealth = chatJson.matchMaxHealth; newSettings.matchName = chatJson.matchName; if (chatJson.addRemove == "add") { Debug.Log("Adding previous match: " + chatJson.matchName); newSettings.matchStatus = "open"; //matchNameMatchGuid.Add(chatJson.matchName, tempMatchID.ToByteArray()); if (matchGuidMatchSettings.ContainsKey(tempMatchID)) { return; } matchGuidMatchSettings.Add(tempMatchID, newSettings); Debug.Log("Added matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); //match matchNameMatchGuid.Count: " + matchNameMatchGuid.Count + " matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); } else { Debug.Log("Removing matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); //match matchNameMatchGuid.Count: " + matchNameMatchGuid.Count + " matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); //matchNameMatchGuid.Remove(chatJson.matchName); //matchGuidMatchSettings.Remove(chatJson.matchName); if (matchGuidMatchSettings.ContainsKey(tempMatchID)) { matchGuidMatchSettings[tempMatchID].matchStatus = "closed"; } else { newSettings.matchStatus = "closed"; matchGuidMatchSettings.Add(tempMatchID, newSettings); //Only reason we add, is so if it comes up again in message } Debug.Log("Removed matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); //match matchNameMatchGuid.Count: " + matchNameMatchGuid.Count + " matchGuidMatchSettings.Count: " + matchGuidMatchSettings.Count); } } }