using FishNet; using FishNet.Connection; using FishNet.Transporting; using Managers; using TMPro; using Types.Broadcasts; using UnityEngine; namespace UI { public class NetworkChatUIController : MonoBehaviour { [SerializeField] private TMP_InputField messageInput; // prefab of the message format that is displayed [SerializeField] private GameObject messageDisplayPrefab; [SerializeField] private GameObject messageParentContainer; private void Start() { Debug.Log("NetworkChatUIController Start"); InstanceFinder.ServerManager.OnServerConnectionState += OnServerConnectionState; InstanceFinder.ClientManager.OnClientConnectionState += OnClientConnectionState; } private void OnEnable() { // InstanceFinder.ClientManager.RegisterBroadcast(OnChatBroadcast); } private void OnDisable() { InstanceFinder.ClientManager.UnregisterBroadcast(OnChatBroadcast); } public void OnClick_Send() { var chatBroadcast = new ChatBroadcast { Message = messageInput.text, NetworkTime = Time.time, Username = GameManager.Instance.GetCurrentPlayer().PlayerName, FontColor = Color.white }; Debug.Log("Sending chat message: " + chatBroadcast.Message); InstanceFinder.ClientManager.Broadcast(chatBroadcast); messageInput.text = ""; Debug.Log("Sent message"); } private void OnServerConnectionState(ServerConnectionStateArgs obj) { Debug.Log("Server Connection State Changed " + obj.ConnectionState); if (obj.ConnectionState == LocalConnectionState.Started) { Debug.Log("Registering server broadcast"); InstanceFinder.ServerManager.RegisterBroadcast(OnServerChatBroadcast); } } private void OnServerChatBroadcast(NetworkConnection connection, ChatBroadcast broadcast, Channel channel) { Debug.Log("ChatBroadcast received (server)"); Debug.Log("ChatBroadcast received (server) from: " + broadcast.Username + " at " + broadcast.NetworkTime); InstanceFinder.ServerManager.Broadcast(broadcast); } private void OnClientConnectionState(ClientConnectionStateArgs obj) { Debug.Log("netchat-ui: Client Connection State Changed " + obj.ConnectionState); var clientState = obj.ConnectionState; if (clientState == LocalConnectionState.Started) { Debug.Log("Registering client for broadcast"); InstanceFinder.ClientManager.RegisterBroadcast(OnChatBroadcast); } else if (clientState == LocalConnectionState.Stopped) { Debug.Log("Unregistering client for broadcast"); InstanceFinder.ClientManager.UnregisterBroadcast(OnChatBroadcast); } } private void OnChatBroadcast(ChatBroadcast broadcast, Channel channel) { Debug.Log("ChatBroadcast received"); // Debug.Log(broadcast.Message, broadcast.FontColor, broadcast.Username); Debug.Log("ChatBroadcast received from: " + broadcast.Username + " at " + broadcast.NetworkTime); Debug.Log("ChatBroadcast message: " + broadcast.Message); AddMessageToUI(broadcast); } private void AddMessageToUI(ChatBroadcast broadcast) { var messageDisplay = Instantiate(messageDisplayPrefab, messageParentContainer.transform); var nameText = (TMP_Text)messageDisplay.GetComponentsInChildren(typeof(TMP_Text), true)[0]; nameText.text = broadcast.Username; var messageText = (TMP_Text)messageDisplay.GetComponentsInChildren(typeof(TMP_Text), true)[1]; messageText.text = broadcast.Message; messageText.color = broadcast.FontColor; } } }