using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; namespace Multiplayer { public class ClientManager : MonoSingleton { #region Inspector Variables [Header("Client Settings")] [Tooltip("Address server is hosted on")] [SerializeField] private string ServerAddress = "127.0.0.1"; [Tooltip("Port to connect to server on")] [SerializeField] private int Port = 4444; [Tooltip("Connects client to server on awake")] [SerializeField] private bool ConnectOnStart = false; public string LobbyScene; public string GameScene; public string Name; #endregion //Returns if client is current connected to a server public bool IsConnected; public byte ID; //UNET client class which connects to the server; public NetworkClient Client { get; private set;} public ClientLoginManager loginManager; /// /// Call to connect client to host /// [ContextMenu("Start Client")] public void StartClient() { StartClient(ServerAddress, Port); } /// /// Call to connect the client to the host /// /// Server Address to connect to /// Port to connect on public void StartClient(string ServerAddress, int Port) { //If client is already connected to don't continue if (IsConnected) { Debug.Log("Client already connected to a server. Client needs to disconnect before it can connect to a server"); return; } Debug.Log("Attempting to connect to: '" + ServerAddress + "' on port : '" + Port + "'"); Client = new NetworkClient(); loginManager = new ClientLoginManager(this); Client.Configure(ChannelConfig.DefaultTopology()); Client.RegisterHandler(PlayerMsgID.Lobby, StartLobby); Client.Connect(ServerAddress, Port); } /// /// Sends message to server /// /// Message type, used to determin message handler /// The message to send /// Which channel to send on, by deafult sends on Reliable /// If client isn't connected to server add to BackLog, by default true public void SendMessage(short msgType, MessageBase msg, ServerChannel channel = ServerChannel.Reliable) { //if client isn't connected add to backlog if (!IsConnected) Debug.Log("Player not connected to server"); Debug.Log("Sending message to server"); Client.SendByChannel(msgType, msg, (int)channel); } public void SendMessage(short msgType) { SendMessage(msgType, new PlayerMsg(ID)); } public void StartLobby(NetworkMessage msg) { UnityEngine.SceneManagement.SceneManager.LoadScene(LobbyScene); } public void StartGame(NetworkMessage msg) { } } }