using UnityEngine; using UnityEngine.Networking; namespace Networking.Client { public class ClientLoginManager : MonoBehaviour { #region Inspector Fields [Header("Connection Settings")] [SerializeField] [Tooltip("Server Address to Connect to")] public string ServerIP; [SerializeField] [Tooltip("Port to connect on")] public int Port; [SerializeField] [Tooltip("Try and connect on Play")] private bool StartClientOnAwake; [Header("Player Settings")] [SerializeField] [Tooltip("Player Name")] private string DisplayName; [SerializeField] [Tooltip("Player Animal")] private string PlayerAnimal; [SerializeField] [Tooltip("Player Color")] private Color PlayerColor; [Header("References")] [SerializeField] [Tooltip("Reference to actual Client")] protected ClientObject Client; [Header("Debug")] [SerializeField] [Tooltip("Send prefilled Player settings after connecting")] private bool IdentifyOnConnect = false; ConnectedClients clients; #endregion Inspector Fields #region Events public System.Action OnConnectedToServer; public System.Action OnLoginSucess; public System.Action OnLoginFail; #endregion Events private void Awake() { if (StartClientOnAwake) StartClient(ServerIP, Port); } public void OnEnable() { if (Client.isConnected) RegisterHandlers(); } public void OnDisable() { if(Client.client != null) Client.client.UnregisterHandler(LoginProtocols.RequestLoginDetails); } public void StartClient(string ipAddress, int port) { Client.Connect(ipAddress, Port); RegisterHandlers(); } public void RegisterHandlers() { Client.client.RegisterHandler(LoginProtocols.RequestLoginDetails, ConnectedToServer); Client.client.RegisterHandler(LoginProtocols.LoginSuccess, LoginSucess); Client.client.RegisterHandler(LoginProtocols.LoginFail, LoginFail); } public void ConnectedToServer(NetworkMessage msg) { Debug.Log("Connected to Server."); OnConnectedToServer.Invoke(); if (IdentifyOnConnect) SendPlayerDetails(DisplayName,PlayerColor, PlayerAnimal); } public void SendPlayerNDetails(string name) { DisplayName = name; } public void SendPlayerDetails(string name, Color color, string animal) { Debug.Log("Sending player Details."); DisplayName = name; PlayerColor = color; PlayerAnimal = animal; Client.client.Send(LoginProtocols.SendingLoginDetails, new LoginProtocols.LoginMsg(DisplayName, PlayerColor, PlayerAnimal)); } public void SendPlayerADetails(string animal) { PlayerAnimal = animal; } public void SendPlayerCDetails(Color color) { PlayerColor = color; } public void LoginSucess(NetworkMessage msg) { Debug.Log("Log in successful!"); OnLoginSucess.Invoke(); Client.UpdatePlayerDetails(DisplayName, PlayerColor, PlayerAnimal); } public void LoginFail(NetworkMessage msg) { Debug.Log("Log in failed!"); OnLoginFail.Invoke(); Client.Stop(); } } }