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.
 
 
 
 
 
 

154 lines
4.7 KiB

using UnityEngine;
using UnityEngine.Networking;
namespace Networking.Client
{
[CreateAssetMenu(menuName = "Major Project/Networking/ClientObject", order = 150)]
public class ClientObject : ScriptableObject
{
#region Inspector Fields
[Header("Connection Settings")]
[SerializeField]
[Tooltip("Server Address to Connect to")]
private string ServerIP;
[SerializeField]
[Tooltip("Port to connect on")]
private int Port;
[SerializeField]
[Tooltip("Scene to return to if disconnected from server")]
private string DisconnectScene;
[Header("Player Settings")]
[SerializeField]
[Tooltip("Player Name")]
private string DisplayName;
[SerializeField]
[Tooltip("Player Animal")]
public string PlayerAnimal;
[SerializeField]
[Tooltip("Player Color")]
public Color PlayerColor;
[Header("Run Time Settings")]
[SerializeField]
[Tooltip("Client Inventory")]
protected Inventory Inventory;
[SerializeField]
[Tooltip("Current Time in Round")]
public float RoundTime;
[SerializeField]
[Tooltip("Current Score in Round")]
public float RoundScore;
[SerializeField]
[Tooltip("Remaining Lives")]
public float RemainingLives;
[SerializeField]
[Tooltip("A list of all connected clients")]
public ConnectedClients ConnectedClients;
#endregion Inspector Fields
#region ReadOnly Variables
public NetworkClient client { get; private set; }
public bool isConnected { get { return client != null && client.isConnected; } }
#endregion ReadOnly Variables
public void Connect(string serverAddress,int port)
{
Debug.Log("Connecting to server: " + serverAddress + ", " + port);
this.ServerIP = serverAddress;
this.Port = port;
client = new NetworkClient();
client.Configure(TransportConfigure.CreateConfigure(), 1);
ConnectedClients.SetUp(this);
client.Connect(serverAddress, port);
Inventory.Reset();
client.RegisterHandler(LogicProtocols.SendInventory, RecieveInventory);
client.RegisterHandler(LoginProtocols.SceneChange, RecieveSceneChange);
client.RegisterHandler(MsgType.Disconnect, OnDisconnect);
client.RegisterHandler(LogicProtocols.SendRoundTime, UpdateTime);
client.RegisterHandler(LogicProtocols.SendScore, UpdateScore);
client.RegisterHandler(LogicProtocols.SendLives, UpdateLives);
}
public void Stop()
{
this.Port = 0;
this.ServerIP = "";
client.Disconnect();
}
public void UpdatePlayerDetails(string DisplayName, Color PlayerColor, string PlayerAnimal)
{
this.PlayerAnimal = PlayerAnimal;
this.DisplayName = DisplayName;
this.PlayerColor = PlayerColor;
}
public void RecieveInventory(NetworkMessage msg)
{
Debug.Log("Recieving Inventory");
LogicProtocols.InventoryMsg inventoryMsg;
if (!msg.TryRead(out inventoryMsg))
return;
Inventory.SetItems(inventoryMsg.bagItems);
}
public void RecieveSceneChange(NetworkMessage msg)
{
LoginProtocols.SceneMsg sceneMsg;
if (!msg.TryRead(out sceneMsg))
return;
//Additive or single
UnityEngine.SceneManagement.LoadSceneMode mode = sceneMsg.Additive ? UnityEngine.SceneManagement.LoadSceneMode.Additive : UnityEngine.SceneManagement.LoadSceneMode.Single;
UnityEngine.SceneManagement.SceneManager.LoadScene(sceneMsg.Scene, mode);
}
public void OnDisconnect(NetworkMessage msg)
{
UnityEngine.SceneManagement.SceneManager.LoadScene(DisconnectScene);
ConnectedClients.Reset();
}
public void UpdateTime(NetworkMessage msg)
{
LogicProtocols.FloatMsg floatMsg;
if (!msg.TryRead(out floatMsg))
return;
RoundTime = floatMsg.Float;
}
public void UpdateScore(NetworkMessage msg)
{
LogicProtocols.FloatMsg floatMsg;
if (!msg.TryRead(out floatMsg))
return;
RoundScore = floatMsg.Float;
}
public void UpdateLives(NetworkMessage msg)
{
LogicProtocols.FloatMsg floatMsg;
if (!msg.TryRead(out floatMsg))
return;
RemainingLives = floatMsg.Float;
}
}
}