You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

106 lines
3.3 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace Multiplayer
{
public class ClientManager : MonoSingleton<ClientManager>
{
#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;
/// <summary>
/// Call to connect client to host
/// </summary>
[ContextMenu("Start Client")]
public void StartClient()
{
StartClient(ServerAddress, Port);
}
/// <summary>
/// Call to connect the client to the host
/// </summary>
/// <param name="ServerAddress">Server Address to connect to</param>
/// <param name="Port">Port to connect on</param>
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);
}
/// <summary>
/// Sends message to server
/// </summary>
/// <param name="msgType">Message type, used to determin message handler</param>
/// <param name="msg">The message to send</param>
/// <param name="channel">Which channel to send on, by deafult sends on Reliable</param>
/// <param name="BackLog">If client isn't connected to server add to BackLog, by default true</param>
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)
{
}
}
}