// ---------------------------------------------------------------------------------------------------------------------- // The Photon Chat Api enables clients to connect to a chat server and communicate with other clients. // ChatClient is the main class of this api. // Photon Chat Api - Copyright (C) 2014 Exit Games GmbH // ---------------------------------------------------------------------------------------------------------------------- #if UNITY_4_7 || UNITY_5 || UNITY_5_0 || UNITY_5_1 || UNITY_2017 #define UNITY #endif namespace ExitGames.Client.Photon.Chat { using System.Collections.Generic; using System.Text; #if UNITY || NETFX_CORE using Hashtable = ExitGames.Client.Photon.Hashtable; using SupportClass = ExitGames.Client.Photon.SupportClass; #endif /// /// A channel of communication in Photon Chat, updated by ChatClient and provided as READ ONLY. /// /// /// Contains messages and senders to use (read!) and display by your GUI. /// Access these by: /// ChatClient.PublicChannels /// ChatClient.PrivateChannels /// public class ChatChannel { /// Name of the channel (used to subscribe and unsubscribe). public readonly string Name; /// Senders of messages in chronoligical order. Senders and Messages refer to each other by index. Senders[x] is the sender of Messages[x]. public readonly List Senders = new List(); /// Messages in chronoligical order. Senders and Messages refer to each other by index. Senders[x] is the sender of Messages[x]. public readonly List Messages = new List(); /// If greater than 0, this channel will limit the number of messages, that it caches locally. public int MessageLimit; /// Is this a private 1:1 channel? public bool IsPrivate { get; internal protected set; } /// Count of messages this client still buffers/knows for this channel. public int MessageCount { get { return this.Messages.Count; } } /// Used internally to create new channels. This does NOT create a channel on the server! Use ChatClient.Subscribe. public ChatChannel(string name) { this.Name = name; } /// Used internally to add messages to this channel. public void Add(string sender, object message) { this.Senders.Add(sender); this.Messages.Add(message); this.TruncateMessages(); } /// Used internally to add messages to this channel. public void Add(string[] senders, object[] messages) { this.Senders.AddRange(senders); this.Messages.AddRange(messages); this.TruncateMessages(); } /// Reduces the number of locally cached messages in this channel to the MessageLimit (if set). public void TruncateMessages() { if (this.MessageLimit <= 0 || this.Messages.Count <= this.MessageLimit) { return; } int excessCount = this.Messages.Count - this.MessageLimit; this.Senders.RemoveRange(0, excessCount); this.Messages.RemoveRange(0, excessCount); } /// Clear the local cache of messages currently stored. This frees memory but doesn't affect the server. public void ClearMessages() { this.Senders.Clear(); this.Messages.Clear(); } /// Provides a string-representation of all messages in this channel. /// All known messages in format "Sender: Message", line by line. public string ToStringMessages() { StringBuilder txt = new StringBuilder(); for (int i = 0; i < this.Messages.Count; i++) { txt.AppendLine(string.Format("{0}: {1}", this.Senders[i], this.Messages[i])); } return txt.ToString(); } } }