-
Notifications
You must be signed in to change notification settings - Fork 459
Expand file tree
/
Copy pathNetworkClient.cs
More file actions
125 lines (104 loc) · 4.14 KB
/
Copy pathNetworkClient.cs
File metadata and controls
125 lines (104 loc) · 4.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
using UnityEngine;
namespace Unity.Netcode
{
/// <summary>
/// A NetworkClient
/// </summary>
public class NetworkClient
{
/// <summary>
/// Returns true if the session instance is considered a server
/// </summary>
internal bool IsServer { get; set; }
/// <summary>
/// Returns true if the session instance is considered a client
/// </summary>
internal bool IsClient { get; set; }
/// <summary>
/// Returns true if the session instance is considered a host
/// </summary>
internal bool IsHost => IsClient && IsServer;
/// <summary>
/// When true, the client is connected, approved, and synchronized with
/// the server.
/// </summary>
internal bool IsConnected { get; set; }
/// <summary>
/// Is true when the client has been approved.
/// </summary>
internal bool IsApproved { get; set; }
/// <summary>
/// Defines the network topology type being used for the current network session
/// </summary>
public NetworkTopologyTypes NetworkTopologyType { get; internal set; }
/// <summary>
/// Indicates whether this client is running in Distributed Authority Host mode
/// </summary>
public bool DAHost { get; internal set; }
/// <summary>
/// Is true when the client has been assigned session ownership in distributed authority mode
/// </summary>
public bool IsSessionOwner { get; internal set; }
/// <summary>
/// The ClientId of the NetworkClient
/// </summary>
public ulong ClientId { get; internal set; }
/// <summary>
/// The PlayerObject of the Client
/// </summary>
public NetworkObject PlayerObject;
/// <summary>
/// The NetworkObject's owned by this client instance
/// </summary>
public NetworkObject[] OwnedObjects => IsConnected ? SpawnManager.GetClientOwnedObjects(ClientId) : new NetworkObject[] { };
internal NetworkSpawnManager SpawnManager { get; private set; }
internal bool SetRole(bool isServer, bool isClient, NetworkManager networkManager = null)
{
ResetClient(isServer, isClient);
IsServer = isServer;
IsClient = isClient;
if (networkManager != null)
{
SpawnManager = networkManager.SpawnManager;
NetworkTopologyType = networkManager.NetworkConfig.NetworkTopology;
if (NetworkTopologyType == NetworkTopologyTypes.DistributedAuthority)
{
DAHost = IsClient && IsServer;
// DANGO-TODO: We might allow a dedicated mock CMB server, but for now do not allow this
if (!IsClient && IsServer)
{
Debug.LogError("You cannot start NetworkManager as a server when operating in distributed authority mode!");
return false;
}
if (DAHost && networkManager.CMBServiceConnection)
{
Debug.LogError("You cannot start a host when connecting to a distributed authority CMB Service!");
return false;
}
}
}
return true;
}
/// <summary>
/// Only to be invoked when setting the role.
/// This resets the current NetworkClient's properties.
/// </summary>
private void ResetClient(bool isServer, bool isClient)
{
// If we are niether client nor server, then reset properties (i.e. client has no role)
if (!IsServer && !IsClient)
{
PlayerObject = null;
ClientId = 0;
IsConnected = false;
IsApproved = false;
SpawnManager = null;
DAHost = false;
}
}
internal void AssignPlayerObject(ref NetworkObject networkObject)
{
PlayerObject = networkObject;
}
}
}