|
|
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.Networking;
-
- namespace Multiplayer
- {
-
- public class ClientManager : MonoBehaviour
- {
-
- #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 Name;
- #endregion
-
- //Returns if client is current connected to a server
- public bool IsConnected { get; private set; }
- public byte ID { get; private set; }
-
- //UNET client class which connects to the server;
- private NetworkClient uNetClient;
-
- /// <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 + "'");
-
- uNetClient = new NetworkClient();
- RegisterHandlers(uNetClient);
-
- uNetClient.Configure(ChannelConfig.DefaultTopology());
- uNetClient.Connect(ServerAddress, Port);
- }
-
- /// <summary>
- /// Helper function which sets up all necessary handlers for message types
- /// </summary>
- /// <param name="client"></param>
- private void RegisterHandlers(NetworkClient client)
- {
- client.RegisterHandler(MsgType.Connect, OnConnected);
- client.RegisterHandler(MsgType.Disconnect, OnDisconnected);
- client.RegisterHandler(LoginMsgID.QueryName, OnRecieveID);
- }
-
-
- private void OnConnected(NetworkMessage msg)
- {
- IsConnected = true;
- ID = (byte)msg.conn.connectionId;
- Debug.Log("Successfully connected to server");
- }
-
- private void OnDisconnected(NetworkMessage msg)
- {
- IsConnected = false;
- Debug.Log("Disconnected from Server");
- }
-
- private void OnRecieveID(NetworkMessage msg)
- {
- PlayerMsg playerMsg;
- if (!Utility.ReadMessage<PlayerMsg>(msg, out playerMsg))
- return;
-
- Debug.Log("Recieved ID from server: " + playerMsg.ID);
-
- ID = playerMsg.ID;
- SendMessage(LoginMsgID.Name, new StringMsg(ID, Name));
- }
-
-
- /// <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");
- }
-
- uNetClient.SendByChannel(msgType, msg, (int)channel);
- }
- }
- }
|