|
|
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.Networking;
- using Networking;
-
- namespace Networking.Client
- {
-
- [CreateAssetMenu(menuName = "Major Project/Networking/Client/OtherClientsList", order = 150)]
- public class ConnectedClients : ScriptableObject
- {
-
- #if UNITY_EDITOR
-
- [SerializeField]
- [Multiline]
- private string DevNotes;
-
- #endif
-
- /// <summary>
- /// All Clients which are Currently Connected;
- /// </summary>
- [SerializeField]
- public List<ClientData> AllClients;
-
- /// <summary>
- /// Called when a client connects or disconnet
- /// </summary>
- public System.Action<List<ClientData>> OnClientsChange;
-
- public void SetUp(ClientObject client)
- {
- Reset();
- client.client.RegisterHandler(LoginProtocols.OtherClientConnected, OnClientConnect);
- client.client.RegisterHandler(LoginProtocols.OtherClientDisconnected, OnClientDisconnect);
- }
-
-
- public void Reset()
- {
- AllClients = new List<ClientData>();
-
- OnClientsChange?.Invoke(AllClients);
- }
-
-
- public void OnClientConnect(NetworkMessage msg)
- {
- LoginProtocols.LoginMsg loginMsg;
- if (!msg.TryRead(out loginMsg))
- return;
-
-
- AllClients.Add(new ClientData(loginMsg));
- OnClientsChange?.Invoke(AllClients);
- }
-
- public void OnClientDisconnect(NetworkMessage msg)
- {
- LoginProtocols.LoginMsg loginMsg;
- if (!msg.TryRead(out loginMsg))
- return;
-
- AllClients.RemoveAll(p => (p.Name == loginMsg.Name) && (p.Color == loginMsg.Color) && (p.characterAnimal == loginMsg.Animal));
- OnClientsChange?.Invoke(AllClients);
- }
-
-
- }
-
-
- [System.Serializable]
- public class ClientData
- {
-
- /// <summary>
- /// Client Name
- /// </summary>
- public string Name;
-
- /// <summary>
- /// Color which represents player, picked by player
- /// </summary>
- public Color Color;
-
- /// <summary>
- /// Clients character animal - needed for instantiation
- /// </summary>
- public string characterAnimal = "Bear";
-
- public ClientData(LoginProtocols.LoginMsg msg)
- {
- this.Name = msg.Name;
- this.Color = msg.Color;
- this.characterAnimal = msg.Animal;
- }
- }
-
- }
|