fix in qnet

This commit is contained in:
Mister_Nebula 2021-06-18 22:39:21 +01:00
parent a0286c3c74
commit 2ea7c56ce3
24 changed files with 316 additions and 0 deletions

View File

@ -51,11 +51,13 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
CheckSendRate(); CheckSendRate();
if (!CheckAnimStateChanged(out var stateHash, out var normalizedTime)) if (!CheckAnimStateChanged(out var stateHash, out var normalizedTime))
{ {
return; return;
} }
var animationMessage = new QAnimationMessage var animationMessage = new QAnimationMessage
{ {
netId = NetId, netId = NetId,
@ -77,6 +79,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
QNetworkServer.SendToReady(gameObject, 40, animationMessage); QNetworkServer.SendToReady(gameObject, 40, animationMessage);
} }
} }
@ -92,20 +95,24 @@ namespace QuantumUNET.Components
{ {
return false; return false;
} }
m_TransitionHash = animatorTransitionInfo.fullPathHash; m_TransitionHash = animatorTransitionInfo.fullPathHash;
m_AnimationHash = 0; m_AnimationHash = 0;
return true; return true;
} }
var animatorStateInfo = m_Animator.GetCurrentAnimatorStateInfo(0); var animatorStateInfo = m_Animator.GetCurrentAnimatorStateInfo(0);
if (animatorStateInfo.fullPathHash == m_AnimationHash) if (animatorStateInfo.fullPathHash == m_AnimationHash)
{ {
return false; return false;
} }
if (m_AnimationHash != 0) if (m_AnimationHash != 0)
{ {
stateHash = animatorStateInfo.fullPathHash; stateHash = animatorStateInfo.fullPathHash;
normalizedTime = animatorStateInfo.normalizedTime; normalizedTime = animatorStateInfo.normalizedTime;
} }
m_TransitionHash = 0; m_TransitionHash = 0;
m_AnimationHash = animatorStateInfo.fullPathHash; m_AnimationHash = animatorStateInfo.fullPathHash;
return true; return true;
@ -117,6 +124,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
m_SendTimer = Time.time + GetNetworkSendInterval(); m_SendTimer = Time.time + GetNetworkSendInterval();
var parametersMessage = new QAnimationParametersMessage var parametersMessage = new QAnimationParametersMessage
{ {
@ -146,10 +154,12 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
if (msg.stateHash != 0) if (msg.stateHash != 0)
{ {
m_Animator.Play(msg.stateHash, 0, msg.normalizedTime); m_Animator.Play(msg.stateHash, 0, msg.normalizedTime);
} }
ReadParameters(reader, false); ReadParameters(reader, false);
} }
@ -159,6 +169,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
ReadParameters(reader, true); ReadParameters(reader, true);
} }
@ -200,6 +211,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
switch (parameter.type) switch (parameter.type)
{ {
case AnimatorControllerParameterType.Int: case AnimatorControllerParameterType.Int:
@ -227,6 +239,7 @@ namespace QuantumUNET.Components
{ {
return false; return false;
} }
if (m_Animator.IsInTransition(0)) if (m_Animator.IsInTransition(0))
{ {
var animatorStateInfo = m_Animator.GetNextAnimatorStateInfo(0); var animatorStateInfo = m_Animator.GetNextAnimatorStateInfo(0);
@ -239,6 +252,7 @@ namespace QuantumUNET.Components
writer.Write(animatorStateInfo.fullPathHash); writer.Write(animatorStateInfo.fullPathHash);
writer.Write(animatorStateInfo.normalizedTime); writer.Write(animatorStateInfo.normalizedTime);
} }
WriteParameters(writer, false); WriteParameters(writer, false);
return true; return true;
} }
@ -249,6 +263,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
var stateNameHash = reader.ReadInt32(); var stateNameHash = reader.ReadInt32();
var normalizedTime = reader.ReadSingle(); var normalizedTime = reader.ReadSingle();
ReadParameters(reader, false); ReadParameters(reader, false);
@ -270,11 +285,13 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
var readyConnection = QClientScene.readyConnection; var readyConnection = QClientScene.readyConnection;
if (readyConnection == null) if (readyConnection == null)
{ {
return; return;
} }
readyConnection.Send(42, animationTriggerMessage); readyConnection.Send(42, animationTriggerMessage);
} }
else else
@ -283,6 +300,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
QNetworkServer.SendToReady(gameObject, 42, animationTriggerMessage); QNetworkServer.SendToReady(gameObject, 42, animationTriggerMessage);
} }
} }
@ -295,6 +313,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
var component = localObject.GetComponent<QNetworkAnimator>(); var component = localObject.GetComponent<QNetworkAnimator>();
var reader = new QNetworkReader(AnimationMessage.parameters); var reader = new QNetworkReader(AnimationMessage.parameters);
component?.HandleAnimMsg(AnimationMessage, reader); component?.HandleAnimMsg(AnimationMessage, reader);
@ -309,6 +328,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
var component = localObject.GetComponent<QNetworkAnimator>(); var component = localObject.GetComponent<QNetworkAnimator>();
var reader = new QNetworkReader(ParametersMessage.parameters); var reader = new QNetworkReader(ParametersMessage.parameters);
component?.HandleAnimParamsMsg(ParametersMessage, reader); component?.HandleAnimParamsMsg(ParametersMessage, reader);
@ -323,6 +343,7 @@ namespace QuantumUNET.Components
{ {
return; return;
} }
var component = localObject.GetComponent<QNetworkAnimator>(); var component = localObject.GetComponent<QNetworkAnimator>();
component?.HandleAnimTriggerMsg(TriggersMessage.hash); component?.HandleAnimTriggerMsg(TriggersMessage.hash);
QNetworkServer.SendToReady(localObject, 42, TriggersMessage); QNetworkServer.SendToReady(localObject, 42, TriggersMessage);

View File

@ -46,6 +46,7 @@ namespace QuantumUNET.Components
{ {
RootIdentity.RemoveSubIdentity(this); RootIdentity.RemoveSubIdentity(this);
} }
RootIdentity = newRoot; RootIdentity = newRoot;
RootIdentity.AddSubIndentity(this); RootIdentity.AddSubIndentity(this);
} }
@ -74,6 +75,7 @@ namespace QuantumUNET.Components
{ {
QLog.Error("SetClientOwner m_ClientAuthorityOwner already set!"); QLog.Error("SetClientOwner m_ClientAuthorityOwner already set!");
} }
ClientAuthorityOwner = conn; ClientAuthorityOwner = conn;
ClientAuthorityOwner.AddOwnedObject(this); ClientAuthorityOwner.AddOwnedObject(this);
} }
@ -109,6 +111,7 @@ namespace QuantumUNET.Components
{ {
result = new ReadOnlyCollection<QNetworkConnection>(m_Observers); result = new ReadOnlyCollection<QNetworkConnection>(m_Observers);
} }
return result; return result;
} }
} }
@ -192,6 +195,7 @@ namespace QuantumUNET.Components
{ {
HasAuthority = true; HasAuthority = true;
} }
m_Observers = new List<QNetworkConnection>(); m_Observers = new List<QNetworkConnection>();
m_ObserverConnections = new HashSet<int>(); m_ObserverConnections = new HashSet<int>();
CacheBehaviours(); CacheBehaviours();
@ -204,6 +208,7 @@ namespace QuantumUNET.Components
QLog.Warning($"Object has non-zero netId {NetId} for {gameObject}"); QLog.Warning($"Object has non-zero netId {NetId} for {gameObject}");
return; return;
} }
QNetworkServer.instance.SetLocalObjectOnServer(NetId, gameObject); QNetworkServer.instance.SetLocalObjectOnServer(NetId, gameObject);
foreach (var networkBehaviour in m_NetworkBehaviours) foreach (var networkBehaviour in m_NetworkBehaviours)
{ {
@ -216,11 +221,13 @@ namespace QuantumUNET.Components
QLog.FatalError($"Exception in OnStartServer:{ex.Message} {ex.StackTrace}"); QLog.FatalError($"Exception in OnStartServer:{ex.Message} {ex.StackTrace}");
} }
} }
if (QNetworkClient.active && QNetworkServer.localClientActive) if (QNetworkClient.active && QNetworkServer.localClientActive)
{ {
QClientScene.SetLocalObject(NetId, gameObject); QClientScene.SetLocalObject(NetId, gameObject);
OnStartClient(); OnStartClient();
} }
if (HasAuthority) if (HasAuthority)
{ {
OnStartAuthority(); OnStartAuthority();
@ -234,6 +241,7 @@ namespace QuantumUNET.Components
{ {
IsClient = true; IsClient = true;
} }
CacheBehaviours(); CacheBehaviours();
QLog.Debug($"OnStartClient {gameObject} GUID:{NetId} localPlayerAuthority:{LocalPlayerAuthority}"); QLog.Debug($"OnStartClient {gameObject} GUID:{NetId} localPlayerAuthority:{LocalPlayerAuthority}");
foreach (var networkBehaviour in m_NetworkBehaviours) foreach (var networkBehaviour in m_NetworkBehaviours)
@ -346,6 +354,7 @@ namespace QuantumUNET.Components
break; break;
} }
} }
bool result; bool result;
if (networkBehaviour == null) if (networkBehaviour == null)
{ {
@ -360,6 +369,7 @@ namespace QuantumUNET.Components
invokeComponent = networkBehaviour; invokeComponent = networkBehaviour;
result = true; result = true;
} }
return result; return result;
} }
@ -470,6 +480,7 @@ namespace QuantumUNET.Components
num |= 1U << dirtyChannel; num |= 1U << dirtyChannel;
} }
} }
if (num != 0U) if (num != 0U)
{ {
var j = 0; var j = 0;
@ -494,6 +505,7 @@ namespace QuantumUNET.Components
networkBehaviour.ClearAllDirtyBits(); networkBehaviour.ClearAllDirtyBits();
flag = true; flag = true;
} }
var maxPacketSize = QNetworkServer.maxPacketSize; var maxPacketSize = QNetworkServer.maxPacketSize;
if (s_UpdateWriter.Position - position > maxPacketSize) if (s_UpdateWriter.Position - position > maxPacketSize)
{ {
@ -502,12 +514,14 @@ namespace QuantumUNET.Components
} }
} }
} }
if (flag) if (flag)
{ {
s_UpdateWriter.FinishMessage(); s_UpdateWriter.FinishMessage();
QNetworkServer.SendWriterToReady(gameObject, s_UpdateWriter, j); QNetworkServer.SendWriterToReady(gameObject, s_UpdateWriter, j);
} }
} }
j++; j++;
} }
} }
@ -535,6 +549,7 @@ namespace QuantumUNET.Components
{ {
HasAuthority = true; HasAuthority = true;
} }
foreach (var networkBehaviour in m_NetworkBehaviours) foreach (var networkBehaviour in m_NetworkBehaviours)
{ {
networkBehaviour.OnStartLocalPlayer(); networkBehaviour.OnStartLocalPlayer();
@ -562,6 +577,7 @@ namespace QuantumUNET.Components
networkBehaviour.OnNetworkDestroy(); networkBehaviour.OnNetworkDestroy();
num++; num++;
} }
m_IsServer = false; m_IsServer = false;
} }
@ -575,6 +591,7 @@ namespace QuantumUNET.Components
var networkConnection = m_Observers[i]; var networkConnection = m_Observers[i];
networkConnection.RemoveFromVisList(this, true); networkConnection.RemoveFromVisList(this, true);
} }
m_Observers.Clear(); m_Observers.Clear();
m_ObserverConnections.Clear(); m_ObserverConnections.Clear();
} }
@ -621,6 +638,7 @@ namespace QuantumUNET.Components
{ {
flag2 |= networkBehaviour.OnRebuildObservers(hashSet, initialize); flag2 |= networkBehaviour.OnRebuildObservers(hashSet, initialize);
} }
if (!flag2) if (!flag2)
{ {
if (initialize) if (initialize)
@ -666,6 +684,7 @@ namespace QuantumUNET.Components
} }
} }
} }
foreach (var networkConnection4 in hashSet2) foreach (var networkConnection4 in hashSet2)
{ {
if (!hashSet.Contains(networkConnection4)) if (!hashSet.Contains(networkConnection4))
@ -675,6 +694,7 @@ namespace QuantumUNET.Components
flag = true; flag = true;
} }
} }
if (initialize) if (initialize)
{ {
foreach (var connection in QNetworkServer.localConnections) foreach (var connection in QNetworkServer.localConnections)
@ -685,6 +705,7 @@ namespace QuantumUNET.Components
} }
} }
} }
if (flag) if (flag)
{ {
m_Observers = new List<QNetworkConnection>(hashSet); m_Observers = new List<QNetworkConnection>(hashSet);
@ -720,6 +741,7 @@ namespace QuantumUNET.Components
QLog.Warning($"RemoveClientAuthority for {gameObject} has different owner."); QLog.Warning($"RemoveClientAuthority for {gameObject} has different owner.");
return false; return false;
} }
ClientAuthorityOwner.RemoveOwnedObject(this); ClientAuthorityOwner.RemoveOwnedObject(this);
ClientAuthorityOwner = null; ClientAuthorityOwner = null;
ForceAuthority(true); ForceAuthority(true);
@ -754,6 +776,7 @@ namespace QuantumUNET.Components
QLog.Warning($"AssignClientAuthority for {gameObject} owner cannot be null. Use RemoveClientAuthority() instead."); QLog.Warning($"AssignClientAuthority for {gameObject} owner cannot be null. Use RemoveClientAuthority() instead.");
return false; return false;
} }
ClientAuthorityOwner = conn; ClientAuthorityOwner = conn;
ClientAuthorityOwner.AddOwnedObject(this); ClientAuthorityOwner.AddOwnedObject(this);

View File

@ -57,6 +57,7 @@ namespace QuantumUNET.Components
{ {
m_ConnectionConfig = new ConnectionConfig(); m_ConnectionConfig = new ConnectionConfig();
} }
return m_ConnectionConfig; return m_ConnectionConfig;
} }
} }
@ -69,6 +70,7 @@ namespace QuantumUNET.Components
{ {
m_GlobalConfig = new GlobalConfig(); m_GlobalConfig = new GlobalConfig();
} }
return m_GlobalConfig; return m_GlobalConfig;
} }
} }
@ -91,6 +93,7 @@ namespace QuantumUNET.Components
} }
} }
} }
return num; return num;
} }
} }
@ -109,6 +112,7 @@ namespace QuantumUNET.Components
Destroy(gameObject); Destroy(gameObject);
return; return;
} }
QLog.Log("NetworkManager created singleton (DontDestroyOnLoad)"); QLog.Log("NetworkManager created singleton (DontDestroyOnLoad)");
singleton = this; singleton = this;
if (Application.isPlaying) if (Application.isPlaying)
@ -121,6 +125,7 @@ namespace QuantumUNET.Components
QLog.Log("NetworkManager created singleton (ForScene)"); QLog.Log("NetworkManager created singleton (ForScene)");
singleton = this; singleton = this;
} }
if (networkAddress != "") if (networkAddress != "")
{ {
s_Address = networkAddress; s_Address = networkAddress;
@ -152,12 +157,14 @@ namespace QuantumUNET.Components
{ {
Application.runInBackground = true; Application.runInBackground = true;
} }
QNetworkCRC.scriptCRCCheck = scriptCRCCheck; QNetworkCRC.scriptCRCCheck = scriptCRCCheck;
QNetworkServer.useWebSockets = useWebSockets; QNetworkServer.useWebSockets = useWebSockets;
if (m_GlobalConfig != null) if (m_GlobalConfig != null)
{ {
NetworkTransport.Init(m_GlobalConfig); NetworkTransport.Init(m_GlobalConfig);
} }
if (customConfig && m_ConnectionConfig != null && config == null) if (customConfig && m_ConnectionConfig != null && config == null)
{ {
m_ConnectionConfig.Channels.Clear(); m_ConnectionConfig.Channels.Clear();
@ -165,12 +172,15 @@ namespace QuantumUNET.Components
{ {
m_ConnectionConfig.AddChannel(channel); m_ConnectionConfig.AddChannel(channel);
} }
QNetworkServer.Configure(m_ConnectionConfig, this.maxConnections); QNetworkServer.Configure(m_ConnectionConfig, this.maxConnections);
} }
if (config != null) if (config != null)
{ {
QNetworkServer.Configure(config, maxConnections); QNetworkServer.Configure(config, maxConnections);
} }
if (serverBindToIP && !string.IsNullOrEmpty(serverBindAddress)) if (serverBindToIP && !string.IsNullOrEmpty(serverBindAddress))
{ {
if (!QNetworkServer.Listen(serverBindAddress, networkPort)) if (!QNetworkServer.Listen(serverBindAddress, networkPort))
@ -184,6 +194,7 @@ namespace QuantumUNET.Components
QLog.FatalError("StartServer listen failed."); QLog.FatalError("StartServer listen failed.");
return false; return false;
} }
RegisterServerMessages(); RegisterServerMessages();
QLog.Log($"NetworkManager StartServer port:{networkPort}"); QLog.Log($"NetworkManager StartServer port:{networkPort}");
isNetworkActive = true; isNetworkActive = true;
@ -196,6 +207,7 @@ namespace QuantumUNET.Components
{ {
QNetworkServer.SpawnObjects(); QNetworkServer.SpawnObjects();
} }
return true; return true;
} }
@ -210,6 +222,7 @@ namespace QuantumUNET.Components
{ {
QClientScene.RegisterPrefab(playerPrefab); QClientScene.RegisterPrefab(playerPrefab);
} }
foreach (var gameObject in spawnPrefabs) foreach (var gameObject in spawnPrefabs)
{ {
if (gameObject != null) if (gameObject != null)
@ -225,6 +238,7 @@ namespace QuantumUNET.Components
{ {
Application.runInBackground = true; Application.runInBackground = true;
} }
if (externalClient != null) if (externalClient != null)
{ {
client = externalClient; client = externalClient;
@ -243,6 +257,7 @@ namespace QuantumUNET.Components
ClientChangeScene(offlineScene, false); ClientChangeScene(offlineScene, false);
} }
} }
s_Address = networkAddress; s_Address = networkAddress;
} }
@ -253,11 +268,13 @@ namespace QuantumUNET.Components
{ {
Application.runInBackground = true; Application.runInBackground = true;
} }
isNetworkActive = true; isNetworkActive = true;
if (m_GlobalConfig != null) if (m_GlobalConfig != null)
{ {
NetworkTransport.Init(m_GlobalConfig); NetworkTransport.Init(m_GlobalConfig);
} }
client = new QNetworkClient client = new QNetworkClient
{ {
hostPort = hostPort hostPort = hostPort
@ -268,6 +285,7 @@ namespace QuantumUNET.Components
{ {
throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform"); throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform");
} }
client.Configure(config, 1); client.Configure(config, 1);
} }
else if (customConfig && m_ConnectionConfig != null) else if (customConfig && m_ConnectionConfig != null)
@ -277,18 +295,22 @@ namespace QuantumUNET.Components
{ {
m_ConnectionConfig.AddChannel(channel); m_ConnectionConfig.AddChannel(channel);
} }
if (m_ConnectionConfig.UsePlatformSpecificProtocols && Application.platform != RuntimePlatform.PS4 && Application.platform != RuntimePlatform.PSP2) if (m_ConnectionConfig.UsePlatformSpecificProtocols && Application.platform != RuntimePlatform.PS4 && Application.platform != RuntimePlatform.PSP2)
{ {
throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform"); throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform");
} }
client.Configure(m_ConnectionConfig, maxConnections); client.Configure(m_ConnectionConfig, maxConnections);
} }
RegisterClientMessages(client); RegisterClientMessages(client);
if (string.IsNullOrEmpty(networkAddress)) if (string.IsNullOrEmpty(networkAddress))
{ {
QLog.Error("Must set the Network Address field in the manager"); QLog.Error("Must set the Network Address field in the manager");
return null; return null;
} }
client.Connect(networkAddress, networkPort); client.Connect(networkAddress, networkPort);
OnStartClient(client); OnStartClient(client);
s_Address = networkAddress; s_Address = networkAddress;
@ -314,6 +336,7 @@ namespace QuantumUNET.Components
{ {
result = null; result = null;
} }
return result; return result;
} }
@ -331,6 +354,7 @@ namespace QuantumUNET.Components
{ {
result = null; result = null;
} }
return result; return result;
} }
@ -362,6 +386,7 @@ namespace QuantumUNET.Components
{ {
ServerChangeScene(offlineScene); ServerChangeScene(offlineScene);
} }
CleanupNetworkIdentities(); CleanupNetworkIdentities();
} }
} }
@ -377,11 +402,13 @@ namespace QuantumUNET.Components
client.Shutdown(); client.Shutdown();
client = null; client = null;
} }
QClientScene.DestroyAllClientObjects(); QClientScene.DestroyAllClientObjects();
if (!string.IsNullOrEmpty(offlineScene)) if (!string.IsNullOrEmpty(offlineScene))
{ {
ClientChangeScene(offlineScene, false); ClientChangeScene(offlineScene, false);
} }
CleanupNetworkIdentities(); CleanupNetworkIdentities();
} }
@ -427,6 +454,7 @@ namespace QuantumUNET.Components
return; return;
} }
} }
s_LoadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName); s_LoadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName);
networkSceneName = newSceneName; networkSceneName = newSceneName;
} }
@ -447,11 +475,13 @@ namespace QuantumUNET.Components
{ {
QLog.Error("FinishLoadScene client is null"); QLog.Error("FinishLoadScene client is null");
} }
if (QNetworkServer.active) if (QNetworkServer.active)
{ {
QNetworkServer.SpawnObjects(); QNetworkServer.SpawnObjects();
OnServerSceneChanged(networkSceneName); OnServerSceneChanged(networkSceneName);
} }
if (IsClientConnected() && client != null) if (IsClientConnected() && client != null)
{ {
RegisterClientMessages(client); RegisterClientMessages(client);
@ -499,6 +529,7 @@ namespace QuantumUNET.Components
netMsg.Connection.SetChannelOption(i, ChannelOption.MaxPendingBuffers, m_MaxBufferedPackets); netMsg.Connection.SetChannelOption(i, ChannelOption.MaxPendingBuffers, m_MaxBufferedPackets);
} }
} }
if (!m_AllowFragmentation) if (!m_AllowFragmentation)
{ {
for (var j = 0; j < QNetworkServer.numChannels; j++) for (var j = 0; j < QNetworkServer.numChannels; j++)
@ -506,11 +537,13 @@ namespace QuantumUNET.Components
netMsg.Connection.SetChannelOption(j, ChannelOption.AllowFragmentation, 0); netMsg.Connection.SetChannelOption(j, ChannelOption.AllowFragmentation, 0);
} }
} }
if (networkSceneName != "" && networkSceneName != offlineScene) if (networkSceneName != "" && networkSceneName != offlineScene)
{ {
var msg = new QStringMessage(networkSceneName); var msg = new QStringMessage(networkSceneName);
netMsg.Connection.Send(39, msg); netMsg.Connection.Send(39, msg);
} }
OnServerConnect(netMsg.Connection); OnServerConnect(netMsg.Connection);
} }
@ -580,6 +613,7 @@ namespace QuantumUNET.Components
{ {
ClientChangeScene(offlineScene, false); ClientChangeScene(offlineScene, false);
} }
OnClientDisconnect(netMsg.Connection); OnClientDisconnect(netMsg.Connection);
} }
@ -626,6 +660,7 @@ namespace QuantumUNET.Components
{ {
QLog.Warning("Ready with no player object"); QLog.Warning("Ready with no player object");
} }
QNetworkServer.SetClientReady(conn); QNetworkServer.SetClientReady(conn);
} }
@ -714,10 +749,12 @@ namespace QuantumUNET.Components
break; break;
} }
} }
if (!flag2) if (!flag2)
{ {
flag = true; flag = true;
} }
if (flag) if (flag)
{ {
QClientScene.AddPlayer(0); QClientScene.AddPlayer(0);

View File

@ -27,12 +27,15 @@ namespace QuantumUNET.Components
{ {
Manager.StartHost(); Manager.StartHost();
} }
yOffset += 20; yOffset += 20;
} }
if (GUI.Button(new Rect(xOffset, yOffset, 105f, 20f), "Connect")) if (GUI.Button(new Rect(xOffset, yOffset, 105f, 20f), "Connect"))
{ {
Manager.StartClient(); Manager.StartClient();
} }
Manager.networkAddress = GUI.TextField(new Rect(xOffset + 100, yOffset, 95f, 20f), Manager.networkAddress); Manager.networkAddress = GUI.TextField(new Rect(xOffset + 100, yOffset, 95f, 20f), Manager.networkAddress);
yOffset += 20; yOffset += 20;
} }
@ -56,15 +59,18 @@ namespace QuantumUNET.Components
{ {
text += " (using WebSockets)"; text += " (using WebSockets)";
} }
GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), text); GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), text);
yOffset += 20; yOffset += 20;
} }
if (Manager.IsClientConnected()) if (Manager.IsClientConnected())
{ {
GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), $"Connected to {Manager.networkAddress}, port {Manager.networkPort}"); GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), $"Connected to {Manager.networkAddress}, port {Manager.networkPort}");
yOffset += 20; yOffset += 20;
} }
} }
if (Manager.IsClientConnected() && !QClientScene.ready) if (Manager.IsClientConnected() && !QClientScene.ready)
{ {
if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Client Ready")) if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Client Ready"))
@ -75,14 +81,17 @@ namespace QuantumUNET.Components
QClientScene.AddPlayer(0); QClientScene.AddPlayer(0);
} }
} }
yOffset += 20; yOffset += 20;
} }
if (QNetworkServer.active || Manager.IsClientConnected()) if (QNetworkServer.active || Manager.IsClientConnected())
{ {
if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Stop")) if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Stop"))
{ {
Manager.StopHost(); Manager.StopHost();
} }
yOffset += 20; yOffset += 20;
} }
} }

View File

@ -34,8 +34,10 @@ namespace QuantumUNET.Components
writer.WritePackedUInt32(0U); writer.WritePackedUInt32(0U);
return false; return false;
} }
writer.WritePackedUInt32(1U); writer.WritePackedUInt32(1U);
} }
SerializeTransform(writer); SerializeTransform(writer);
return true; return true;
} }
@ -51,6 +53,7 @@ namespace QuantumUNET.Components
return; return;
} }
} }
DeserializeTransform(reader); DeserializeTransform(reader);
} }
} }
@ -71,6 +74,7 @@ namespace QuantumUNET.Components
DeserializeRotation(reader); DeserializeRotation(reader);
return; return;
} }
transform.position = reader.ReadVector3(); transform.position = reader.ReadVector3();
transform.rotation = DeserializeRotation(reader); transform.rotation = DeserializeRotation(reader);
} }

View File

@ -63,8 +63,10 @@ namespace QuantumUNET.Components
writer.WritePackedUInt32(0U); writer.WritePackedUInt32(0U);
return false; return false;
} }
writer.WritePackedUInt32(1U); writer.WritePackedUInt32(1U);
} }
SerializeModeTransform(writer); SerializeModeTransform(writer);
return true; return true;
} }
@ -88,6 +90,7 @@ namespace QuantumUNET.Components
return; return;
} }
} }
UnserializeModeTransform(reader, initialState); UnserializeModeTransform(reader, initialState);
LastSyncTime = Time.time; LastSyncTime = Time.time;
} }
@ -115,6 +118,7 @@ namespace QuantumUNET.Components
{ {
FixedUpdateServer(); FixedUpdateServer();
} }
if (IsClient) if (IsClient)
{ {
FixedUpdateClient(); FixedUpdateClient();
@ -141,6 +145,7 @@ namespace QuantumUNET.Components
return; return;
} }
} }
SetDirtyBit(1U); SetDirtyBit(1U);
} }
} }
@ -208,6 +213,7 @@ namespace QuantumUNET.Components
num = Quaternion.Angle(m_Target.localRotation, m_PrevRotation); num = Quaternion.Angle(m_Target.localRotation, m_PrevRotation);
result = num > 1E-05f; result = num > 1E-05f;
} }
return result; return result;
} }

View File

@ -24,6 +24,7 @@
{ {
return; return;
} }
UnityEngine.Debug.Log($"DEBUG : {message}"); UnityEngine.Debug.Log($"DEBUG : {message}");
} }
@ -33,6 +34,7 @@
{ {
return; return;
} }
UnityEngine.Debug.Log($"LOG : {message}"); UnityEngine.Debug.Log($"LOG : {message}");
} }
@ -42,6 +44,7 @@
{ {
return; return;
} }
UnityEngine.Debug.LogWarning($"WARN : {message}"); UnityEngine.Debug.LogWarning($"WARN : {message}");
} }
@ -51,6 +54,7 @@
{ {
return; return;
} }
UnityEngine.Debug.LogError($"ERROR : {message}"); UnityEngine.Debug.LogError($"ERROR : {message}");
} }
@ -60,6 +64,7 @@
{ {
return; return;
} }
UnityEngine.Debug.LogError($"FATAL : {message}"); UnityEngine.Debug.LogError($"FATAL : {message}");
} }
} }

View File

@ -16,8 +16,10 @@
{ {
text = $"[{value}]"; text = $"[{value}]";
} }
result = text; result = text;
} }
return result; return result;
} }

View File

@ -58,6 +58,7 @@ namespace QuantumUNET
player = localPlayers[playerControllerId]; player = localPlayers[playerControllerId];
result = player.Gameobject != null; result = player.Gameobject != null;
} }
return result; return result;
} }
@ -73,6 +74,7 @@ namespace QuantumUNET
localPlayers.Add(new QPlayerController()); localPlayers.Add(new QPlayerController());
} }
} }
var playerController = new QPlayerController var playerController = new QPlayerController
{ {
Gameobject = view.gameObject, Gameobject = view.gameObject,
@ -106,10 +108,12 @@ namespace QuantumUNET
{ {
Debug.LogWarning($"ClientScene::AddPlayer: playerControllerId of {playerControllerId} is unusually high"); Debug.LogWarning($"ClientScene::AddPlayer: playerControllerId of {playerControllerId} is unusually high");
} }
while (playerControllerId >= localPlayers.Count) while (playerControllerId >= localPlayers.Count)
{ {
localPlayers.Add(new QPlayerController()); localPlayers.Add(new QPlayerController());
} }
if (readyConn == null) if (readyConn == null)
{ {
if (!ready) if (!ready)
@ -123,6 +127,7 @@ namespace QuantumUNET
ready = true; ready = true;
readyConnection = readyConn; readyConnection = readyConn;
} }
if (readyConnection.GetPlayerController(playerControllerId, out var playerController)) if (readyConnection.GetPlayerController(playerControllerId, out var playerController))
{ {
if (playerController.IsValid && playerController.Gameobject != null) if (playerController.IsValid && playerController.Gameobject != null)
@ -131,6 +136,7 @@ namespace QuantumUNET
return false; return false;
} }
} }
Debug.Log($"ClientScene::AddPlayer() for ID {playerControllerId} called with connection [{readyConnection}]"); Debug.Log($"ClientScene::AddPlayer() for ID {playerControllerId} called with connection [{readyConnection}]");
var addPlayerMessage = new QAddPlayerMessage var addPlayerMessage = new QAddPlayerMessage
{ {
@ -143,9 +149,11 @@ namespace QuantumUNET
addPlayerMessage.msgData = networkWriter.ToArray(); addPlayerMessage.msgData = networkWriter.ToArray();
addPlayerMessage.msgSize = networkWriter.Position; addPlayerMessage.msgSize = networkWriter.Position;
} }
readyConnection.Send(37, addPlayerMessage); readyConnection.Send(37, addPlayerMessage);
result = true; result = true;
} }
return result; return result;
} }
@ -170,6 +178,7 @@ namespace QuantumUNET
Debug.LogError($"Failed to find player ID {playerControllerId}"); Debug.LogError($"Failed to find player ID {playerControllerId}");
result = false; result = false;
} }
return result; return result;
} }
@ -199,6 +208,7 @@ namespace QuantumUNET
result = false; result = false;
} }
} }
return result; return result;
} }
@ -261,6 +271,7 @@ namespace QuantumUNET
{ {
result = null; result = null;
} }
return result; return result;
} }
@ -288,6 +299,7 @@ namespace QuantumUNET
client.RegisterHandlerSafe(QMsgType.Animation, QNetworkAnimator.OnAnimationClientMessage); client.RegisterHandlerSafe(QMsgType.Animation, QNetworkAnimator.OnAnimationClientMessage);
client.RegisterHandlerSafe(QMsgType.AnimationParameters, QNetworkAnimator.OnAnimationParametersClientMessage); client.RegisterHandlerSafe(QMsgType.AnimationParameters, QNetworkAnimator.OnAnimationParametersClientMessage);
} }
client.RegisterHandlerSafe(QMsgType.Rpc, OnRPCMessage); client.RegisterHandlerSafe(QMsgType.Rpc, OnRPCMessage);
client.RegisterHandlerSafe(QMsgType.SyncEvent, OnSyncEventMessage); client.RegisterHandlerSafe(QMsgType.SyncEvent, OnSyncEventMessage);
client.RegisterHandlerSafe(QMsgType.AnimationTrigger, QNetworkAnimator.OnAnimationTriggerClientMessage); client.RegisterHandlerSafe(QMsgType.AnimationTrigger, QNetworkAnimator.OnAnimationTriggerClientMessage);
@ -331,12 +343,14 @@ namespace QuantumUNET
{ {
uv.gameObject.SetActive(true); uv.gameObject.SetActive(true);
} }
uv.transform.position = position; uv.transform.position = position;
if (payload != null && payload.Length > 0) if (payload != null && payload.Length > 0)
{ {
var reader = new QNetworkReader(payload); var reader = new QNetworkReader(payload);
uv.OnUpdateVars(reader, true); uv.OnUpdateVars(reader, true);
} }
if (newGameObject != null) if (newGameObject != null)
{ {
newGameObject.SetActive(true); newGameObject.SetActive(true);
@ -448,6 +462,7 @@ namespace QuantumUNET
CheckForOwner(networkIdentity); CheckForOwner(networkIdentity);
} }
} }
s_IsSpawnFinished = true; s_IsSpawnFinished = true;
} }
} }
@ -471,6 +486,7 @@ namespace QuantumUNET
SpawnableObjects[networkIdentity.SceneId] = networkIdentity; SpawnableObjects[networkIdentity.SceneId] = networkIdentity;
} }
} }
s_NetworkScene.RemoveLocalObject(s_ObjectDestroyMessage.NetId); s_NetworkScene.RemoveLocalObject(s_ObjectDestroyMessage.NetId);
networkIdentity.MarkForReset(); networkIdentity.MarkForReset();
} }
@ -594,6 +610,7 @@ namespace QuantumUNET
{ {
playerController.UnetView.SetNotLocalPlayer(); playerController.UnetView.SetNotLocalPlayer();
} }
if (s_NetworkScene.GetNetworkIdentity(s_OwnerMessage.NetId, out var networkIdentity)) if (s_NetworkScene.GetNetworkIdentity(s_OwnerMessage.NetId, out var networkIdentity))
{ {
networkIdentity.SetConnectionToServer(netMsg.Connection); networkIdentity.SetConnectionToServer(netMsg.Connection);
@ -627,6 +644,7 @@ namespace QuantumUNET
Debug.LogError("Owner message received on a local client."); Debug.LogError("Owner message received on a local client.");
break; break;
} }
InternalAddPlayer(uv, pendingOwner.playerControllerId); InternalAddPlayer(uv, pendingOwner.playerControllerId);
s_PendingOwnerIds.RemoveAt(i); s_PendingOwnerIds.RemoveAt(i);
break; break;

View File

@ -15,6 +15,7 @@ namespace QuantumUNET
PostInternalMessage(33); PostInternalMessage(33);
m_Connected = false; m_Connected = false;
} }
m_AsyncConnect = ConnectState.Disconnected; m_AsyncConnect = ConnectState.Disconnected;
m_LocalServer.RemoveLocalClient(m_Connection); m_LocalServer.RemoveLocalClient(m_Connection);
} }
@ -30,6 +31,7 @@ namespace QuantumUNET
m_FreeMessages.Push(t); m_FreeMessages.Push(t);
} }
} }
m_LocalServer = QNetworkServer.instance; m_LocalServer = QNetworkServer.instance;
m_Connection = new QULocalConnectionToServer(m_LocalServer); m_Connection = new QULocalConnectionToServer(m_LocalServer);
SetHandlers(m_Connection); SetHandlers(m_Connection);
@ -41,6 +43,7 @@ namespace QuantumUNET
{ {
PostInternalMessage(32); PostInternalMessage(32);
} }
m_Connected = true; m_Connected = true;
} }
@ -57,6 +60,7 @@ namespace QuantumUNET
QClientScene.SetLocalObject(unetView.NetId, localPlayer.Gameobject); QClientScene.SetLocalObject(unetView.NetId, localPlayer.Gameobject);
unetView.SetConnectionToServer(m_Connection); unetView.SetConnectionToServer(m_Connection);
} }
QClientScene.InternalAddPlayer(unetView, localPlayer.PlayerControllerId); QClientScene.InternalAddPlayer(unetView, localPlayer.PlayerControllerId);
} }
@ -92,6 +96,7 @@ namespace QuantumUNET
{ {
s_InternalMessage.Reader.Replace(msg.buffer); s_InternalMessage.Reader.Replace(msg.buffer);
} }
s_InternalMessage.Reader.ReadInt16(); s_InternalMessage.Reader.ReadInt16();
s_InternalMessage.ChannelId = msg.channelId; s_InternalMessage.ChannelId = msg.channelId;
s_InternalMessage.Connection = connection; s_InternalMessage.Connection = connection;
@ -100,12 +105,14 @@ namespace QuantumUNET
m_FreeMessages.Push(msg); m_FreeMessages.Push(msg);
connection.lastMessageTime = Time.time; connection.lastMessageTime = Time.time;
} }
m_InternalMsgs = internalMsgs; m_InternalMsgs = internalMsgs;
m_InternalMsgs.Clear(); m_InternalMsgs.Clear();
foreach (var msg in m_InternalMsgs2) foreach (var msg in m_InternalMsgs2)
{ {
m_InternalMsgs.Add(msg); m_InternalMsgs.Add(msg);
} }
m_InternalMsgs2.Clear(); m_InternalMsgs2.Clear();
} }
} }

View File

@ -37,6 +37,7 @@ namespace QuantumUNET
QLog.FatalError($"Trying to get QNetworkIdentity of a null gameobject?"); QLog.FatalError($"Trying to get QNetworkIdentity of a null gameobject?");
return null; return null;
} }
if (m_MyView == null) if (m_MyView == null)
{ {
m_MyView = GetComponent<QNetworkIdentity>(); m_MyView = GetComponent<QNetworkIdentity>();
@ -44,12 +45,14 @@ namespace QuantumUNET
{ {
QLog.FatalError($"There is no QNetworkIdentity on this object (name={name}). Please add one."); QLog.FatalError($"There is no QNetworkIdentity on this object (name={name}). Please add one.");
} }
myView = m_MyView; myView = m_MyView;
} }
else else
{ {
myView = m_MyView; myView = m_MyView;
} }
return myView; return myView;
} }
} }
@ -94,6 +97,7 @@ namespace QuantumUNET
QLog.Warning("ClientRpc call on un-spawned object"); QLog.Warning("ClientRpc call on un-spawned object");
return; return;
} }
writer.FinishMessage(); writer.FinishMessage();
QNetworkServer.SendWriterToReady(gameObject, writer, channelId); QNetworkServer.SendWriterToReady(gameObject, writer, channelId);
} }
@ -105,6 +109,7 @@ namespace QuantumUNET
QLog.Warning("TargetRpc call on un-spawned object"); QLog.Warning("TargetRpc call on un-spawned object");
return; return;
} }
writer.FinishMessage(); writer.FinishMessage();
conn.SendWriter(writer, channelId); conn.SendWriter(writer, channelId);
} }
@ -118,6 +123,7 @@ namespace QuantumUNET
QLog.Error($"Tried to send event {eventName} on channel {channelId} but QSBNetworkServer isn't active."); QLog.Error($"Tried to send event {eventName} on channel {channelId} but QSBNetworkServer isn't active.");
return; return;
} }
writer.FinishMessage(); writer.FinishMessage();
QNetworkServer.SendWriterToReady(gameObject, writer, channelId); QNetworkServer.SendWriterToReady(gameObject, writer, channelId);
} }
@ -194,6 +200,7 @@ namespace QuantumUNET
var invoker = s_CmdHandlerDelegates[cmdHash]; var invoker = s_CmdHandlerDelegates[cmdHash];
result = invoker.DebugString(); result = invoker.DebugString();
} }
return result; return result;
} }
@ -239,6 +246,7 @@ namespace QuantumUNET
invokeFunction = invoker.invokeFunction; invokeFunction = invoker.invokeFunction;
result = true; result = true;
} }
return result; return result;
} }
@ -277,10 +285,12 @@ namespace QuantumUNET
return false; return false;
} }
} }
invoker.invokeFunction(this, reader); invoker.invokeFunction(this, reader);
result = true; result = true;
} }
} }
return result; return result;
} }
@ -307,10 +317,12 @@ namespace QuantumUNET
return false; return false;
} }
} }
invoker.invokeFunction(this, reader); invoker.invokeFunction(this, reader);
result = true; result = true;
} }
} }
return result; return result;
} }
@ -334,6 +346,7 @@ namespace QuantumUNET
result = true; result = true;
} }
} }
return result; return result;
} }
@ -361,6 +374,7 @@ namespace QuantumUNET
result = true; result = true;
} }
} }
return result; return result;
} }
@ -376,6 +390,7 @@ namespace QuantumUNET
var invoker = s_CmdHandlerDelegates[cmdHash]; var invoker = s_CmdHandlerDelegates[cmdHash];
result = $"{invoker.invokeType}:{invoker.invokeFunction.GetMethodName()}"; result = $"{invoker.invokeType}:{invoker.invokeFunction.GetMethodName()}";
} }
return result; return result;
} }
@ -395,8 +410,10 @@ namespace QuantumUNET
{ {
text = text.Substring(prefix.Length); text = text.Substring(prefix.Length);
} }
result = text; result = text;
} }
return result; return result;
} }
@ -430,11 +447,13 @@ namespace QuantumUNET
} }
} }
} }
NetworkInstanceId networkInstanceId2 = default; NetworkInstanceId networkInstanceId2 = default;
if (gameObjectField != null) if (gameObjectField != null)
{ {
networkInstanceId2 = gameObjectField.GetComponent<QNetworkIdentity>().NetId; networkInstanceId2 = gameObjectField.GetComponent<QNetworkIdentity>().NetId;
} }
if (networkInstanceId != networkInstanceId2) if (networkInstanceId != networkInstanceId2)
{ {
QLog.Log( QLog.Log(
@ -489,6 +508,7 @@ namespace QuantumUNET
return GetNetworkChannel(); return GetNetworkChannel();
} }
} }
return -1; return -1;
} }
@ -498,6 +518,7 @@ namespace QuantumUNET
{ {
writer.WritePackedUInt32(0U); writer.WritePackedUInt32(0U);
} }
return false; return false;
} }

View File

@ -14,6 +14,7 @@ namespace QuantumUNET
{ {
s_Singleton = new QNetworkCRC(); s_Singleton = new QNetworkCRC();
} }
return s_Singleton; return s_Singleton;
} }
} }
@ -68,6 +69,7 @@ namespace QuantumUNET
return false; return false;
} }
} }
if (crcmessageEntry.channel >= numChannels) if (crcmessageEntry.channel >= numChannels)
{ {
Debug.LogError( Debug.LogError(
@ -76,8 +78,10 @@ namespace QuantumUNET
return false; return false;
} }
} }
result = true; result = true;
} }
return result; return result;
} }
@ -87,6 +91,7 @@ namespace QuantumUNET
{ {
Debug.Log($"CRC Local Dump {text} : {scripts[text]}"); Debug.Log($"CRC Local Dump {text} : {scripts[text]}");
} }
foreach (var crcmessageEntry in remoteScripts) foreach (var crcmessageEntry in remoteScripts)
{ {
Debug.Log($"CRC Remote Dump {crcmessageEntry.name} : {crcmessageEntry.channel}"); Debug.Log($"CRC Remote Dump {crcmessageEntry.name} : {crcmessageEntry.channel}");

View File

@ -73,10 +73,12 @@ namespace QuantumUNET
{ {
throw new ArgumentException("Port must not be a negative number."); throw new ArgumentException("Port must not be a negative number.");
} }
if (value > 65535) if (value > 65535)
{ {
throw new ArgumentException("Port must not be greater than 65535."); throw new ArgumentException("Port must not be greater than 65535.");
} }
m_HostPort = value; m_HostPort = value;
} }
} }
@ -142,6 +144,7 @@ namespace QuantumUNET
connectionConfig.UsePlatformSpecificProtocols = false; connectionConfig.UsePlatformSpecificProtocols = false;
hostTopology = new HostTopology(connectionConfig, 8); hostTopology = new HostTopology(connectionConfig, 8);
} }
hostId = NetworkTransport.AddHost(hostTopology, m_HostPort); hostId = NetworkTransport.AddHost(hostTopology, m_HostPort);
} }
@ -218,6 +221,7 @@ namespace QuantumUNET
QLog.Error("NetworkClient Send with no connection"); QLog.Error("NetworkClient Send with no connection");
result = false; result = false;
} }
return result; return result;
} }
@ -241,6 +245,7 @@ namespace QuantumUNET
QLog.Error("NetworkClient SendWriter with no connection"); QLog.Error("NetworkClient SendWriter with no connection");
result = false; result = false;
} }
return result; return result;
} }
@ -264,6 +269,7 @@ namespace QuantumUNET
QLog.Error("NetworkClient SendBytes with no connection"); QLog.Error("NetworkClient SendBytes with no connection");
result = false; result = false;
} }
return result; return result;
} }
@ -287,6 +293,7 @@ namespace QuantumUNET
QLog.Error("NetworkClient SendUnreliable with no connection"); QLog.Error("NetworkClient SendUnreliable with no connection");
result = false; result = false;
} }
return result; return result;
} }
@ -310,6 +317,7 @@ namespace QuantumUNET
QLog.Error("NetworkClient SendByChannel with no connection"); QLog.Error("NetworkClient SendByChannel with no connection");
result = false; result = false;
} }
return result; return result;
} }
@ -333,6 +341,7 @@ namespace QuantumUNET
NetworkTransport.RemoveHost(hostId); NetworkTransport.RemoveHost(hostId);
hostId = -1; hostId = -1;
} }
RemoveClient(this); RemoveClient(this);
if (allClients.Count == 0) if (allClients.Count == 0)
{ {
@ -359,6 +368,7 @@ namespace QuantumUNET
m_AsyncConnect = ConnectState.Disconnected; m_AsyncConnect = ConnectState.Disconnected;
return; return;
} }
if (m_Connection != null) if (m_Connection != null)
{ {
if ((int)Time.time != m_StatResetTime) if ((int)Time.time != m_StatResetTime)
@ -367,6 +377,7 @@ namespace QuantumUNET
m_StatResetTime = (int)Time.time; m_StatResetTime = (int)Time.time;
} }
} }
var num = 0; var num = 0;
byte b; byte b;
for (; ; ) for (; ; )
@ -376,6 +387,7 @@ namespace QuantumUNET
{ {
m_Connection.LastError = (NetworkError)b; m_Connection.LastError = (NetworkError)b;
} }
switch (networkEventType) switch (networkEventType)
{ {
case NetworkEventType.DataEvent: case NetworkEventType.DataEvent:
@ -383,6 +395,7 @@ namespace QuantumUNET
{ {
goto Block_11; goto Block_11;
} }
m_MsgReader.SeekZero(); m_MsgReader.SeekZero();
m_Connection.TransportReceive(m_MsgBuffer, numBytes, channelId); m_Connection.TransportReceive(m_MsgBuffer, numBytes, channelId);
break; break;
@ -393,6 +406,7 @@ namespace QuantumUNET
{ {
goto Block_10; goto Block_10;
} }
m_AsyncConnect = ConnectState.Connected; m_AsyncConnect = ConnectState.Connected;
m_Connection.InvokeHandlerNoData(32); m_Connection.InvokeHandlerNoData(32);
break; break;
@ -407,6 +421,7 @@ namespace QuantumUNET
GenerateDisconnectError(b); GenerateDisconnectError(b);
} }
} }
QClientScene.HandleClientDisconnect(m_Connection); QClientScene.HandleClientDisconnect(m_Connection);
m_Connection?.InvokeHandlerNoData(33); m_Connection?.InvokeHandlerNoData(33);
break; break;
@ -418,19 +433,23 @@ namespace QuantumUNET
QLog.Error($"Unknown network message type received: {networkEventType}"); QLog.Error($"Unknown network message type received: {networkEventType}");
break; break;
} }
if (++num >= 500) if (++num >= 500)
{ {
goto Block_17; goto Block_17;
} }
if (hostId == -1) if (hostId == -1)
{ {
goto Block_19; goto Block_19;
} }
if (networkEventType == NetworkEventType.Nothing) if (networkEventType == NetworkEventType.Nothing)
{ {
goto IL_2C6; goto IL_2C6;
} }
} }
Block_10: Block_10:
GenerateConnectError(b); GenerateConnectError(b);
return; return;
@ -559,6 +578,7 @@ namespace QuantumUNET
} }
} }
} }
return dictionary; return dictionary;
} }
@ -587,6 +607,7 @@ namespace QuantumUNET
{ {
allClients[0].Shutdown(); allClients[0].Shutdown();
} }
allClients = new List<QNetworkClient>(); allClients = new List<QNetworkClient>();
active = false; active = false;
QClientScene.Shutdown(); QClientScene.Shutdown();
@ -598,6 +619,7 @@ namespace QuantumUNET
{ {
NetworkTransport.Init(); NetworkTransport.Init();
} }
active = state; active = state;
} }

View File

@ -38,6 +38,7 @@ namespace QuantumUNET
{ {
throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform"); throw new ArgumentOutOfRangeException("Platform specific protocols are not supported on this platform");
} }
m_Channels = new QChannelBuffer[channelCount]; m_Channels = new QChannelBuffer[channelCount];
for (var i = 0; i < channelCount; i++) for (var i = 0; i < channelCount; i++)
{ {
@ -47,6 +48,7 @@ namespace QuantumUNET
{ {
bufferSize = hostTopology.DefaultConfig.FragmentSize * 128; bufferSize = hostTopology.DefaultConfig.FragmentSize * 128;
} }
m_Channels[i] = new QChannelBuffer(this, bufferSize, (byte)i, IsReliableQoS(channelQOS.QOS), IsSequencedQoS(channelQOS.QOS)); m_Channels[i] = new QChannelBuffer(this, bufferSize, (byte)i, IsReliableQoS(channelQOS.QOS), IsSequencedQoS(channelQOS.QOS));
} }
} }
@ -71,6 +73,7 @@ namespace QuantumUNET
channel.Dispose(); channel.Dispose();
} }
} }
m_Channels = null; m_Channels = null;
if (ClientOwnedObjects != null) if (ClientOwnedObjects != null)
{ {
@ -83,6 +86,7 @@ namespace QuantumUNET
} }
} }
} }
ClientOwnedObjects = null; ClientOwnedObjects = null;
m_Disposed = true; m_Disposed = true;
} }
@ -139,6 +143,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -155,6 +160,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -183,6 +189,7 @@ namespace QuantumUNET
{ {
PlayerControllers.Add(new QPlayerController()); PlayerControllers.Add(new QPlayerController());
} }
PlayerControllers[player.PlayerControllerId] = player; PlayerControllers[player.PlayerControllerId] = player;
} }
@ -196,6 +203,7 @@ namespace QuantumUNET
return; return;
} }
} }
QLog.Error($"RemovePlayer player at playerControllerId {playerControllerId} not found"); QLog.Error($"RemovePlayer player at playerControllerId {playerControllerId} not found");
} }
@ -220,6 +228,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -275,6 +284,7 @@ namespace QuantumUNET
break; break;
} }
} }
QLog.Log( QLog.Log(
$"ConnectionSend con:{connectionId} bytes:{num} msgId:{num2} {stringBuilder}"); $"ConnectionSend con:{connectionId} bytes:{num} msgId:{num2} {stringBuilder}");
} }
@ -297,6 +307,7 @@ namespace QuantumUNET
{ {
result = true; result = true;
} }
return result; return result;
} }
@ -323,11 +334,13 @@ namespace QuantumUNET
{ {
networkMessageDelegate = m_MessageHandlersDict[num2]; networkMessageDelegate = m_MessageHandlersDict[num2];
} }
if (networkMessageDelegate == null) if (networkMessageDelegate == null)
{ {
QLog.Error($"Unknown message ID {num2} connId:{connectionId}"); QLog.Error($"Unknown message ID {num2} connId:{connectionId}");
break; break;
} }
m_NetMsg.MsgType = num2; m_NetMsg.MsgType = num2;
m_NetMsg.Reader = reader2; m_NetMsg.Reader = reader2;
m_NetMsg.Connection = this; m_NetMsg.Connection = this;
@ -387,6 +400,7 @@ namespace QuantumUNET
{ {
networkIdentity.RemoveObserverInternal(this); networkIdentity.RemoveObserverInternal(this);
} }
VisList.Clear(); VisList.Clear();
} }
@ -400,6 +414,7 @@ namespace QuantumUNET
{ {
ClientOwnedObjects = new HashSet<NetworkInstanceId>(); ClientOwnedObjects = new HashSet<NetworkInstanceId>();
} }
ClientOwnedObjects.Add(obj.NetId); ClientOwnedObjects.Add(obj.NetId);
} }

View File

@ -41,6 +41,7 @@ namespace QuantumUNET
QLog.Log($"RegisterHandler replacing {msgType}"); QLog.Log($"RegisterHandler replacing {msgType}");
_msgHandlers.Remove(msgType); _msgHandlers.Remove(msgType);
} }
QLog.Debug($"RegisterHandler id:{msgType} handler:{handler.GetMethodName()}"); QLog.Debug($"RegisterHandler id:{msgType} handler:{handler.GetMethodName()}");
_msgHandlers.Add(msgType, handler); _msgHandlers.Add(msgType, handler);
} }

View File

@ -34,11 +34,13 @@ namespace QuantumUNET
{ {
networkIdentity = localObjects[netId]; networkIdentity = localObjects[netId];
} }
if (networkIdentity == null) if (networkIdentity == null)
{ {
networkIdentity = obj.GetComponent<QNetworkIdentity>(); networkIdentity = obj.GetComponent<QNetworkIdentity>();
localObjects[netId] = networkIdentity; localObjects[netId] = networkIdentity;
} }
networkIdentity.UpdateClientServer(isClient, isServer); networkIdentity.UpdateClientServer(isClient, isServer);
} }
} }
@ -53,6 +55,7 @@ namespace QuantumUNET
return networkIdentity.gameObject; return networkIdentity.gameObject;
} }
} }
return null; return null;
} }
@ -69,6 +72,7 @@ namespace QuantumUNET
uv = null; uv = null;
result = false; result = false;
} }
return result; return result;
} }
@ -87,6 +91,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -143,6 +148,7 @@ namespace QuantumUNET
prefab = null; prefab = null;
result = false; result = false;
} }
return result; return result;
} }
@ -221,6 +227,7 @@ namespace QuantumUNET
handler = null; handler = null;
result = false; result = false;
} }
return result; return result;
} }
@ -237,6 +244,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -261,6 +269,7 @@ namespace QuantumUNET
} }
} }
} }
ClearLocalObjects(); ClearLocalObjects();
} }

View File

@ -60,6 +60,7 @@ namespace QuantumUNET
} }
} }
} }
return s_Instance; return s_Instance;
} }
} }
@ -101,8 +102,10 @@ namespace QuantumUNET
{ {
s_Instance.m_SimpleServerSimple.Stop(); s_Instance.m_SimpleServerSimple.Stop();
} }
s_Instance = null; s_Instance = null;
} }
dontListen = false; dontListen = false;
active = false; active = false;
} }
@ -160,6 +163,7 @@ namespace QuantumUNET
{ {
return false; return false;
} }
maxPacketSize = hostTopology.DefaultConfig.PacketSize; maxPacketSize = hostTopology.DefaultConfig.PacketSize;
active = true; active = true;
RegisterMessageHandlers(); RegisterMessageHandlers();
@ -195,6 +199,7 @@ namespace QuantumUNET
m_LocalConnection.InvokeHandlerNoData(32); m_LocalConnection.InvokeHandlerNoData(32);
result = 0; result = 0;
} }
return result; return result;
} }
@ -208,12 +213,14 @@ namespace QuantumUNET
break; break;
} }
} }
if (m_LocalConnection != null) if (m_LocalConnection != null)
{ {
m_LocalConnection.Disconnect(); m_LocalConnection.Disconnect();
m_LocalConnection.Dispose(); m_LocalConnection.Dispose();
m_LocalConnection = null; m_LocalConnection = null;
} }
m_LocalClientActive = false; m_LocalClientActive = false;
m_SimpleServerSimple.RemoveConnectionAtIndex(0); m_SimpleServerSimple.RemoveConnectionAtIndex(0);
} }
@ -252,6 +259,7 @@ namespace QuantumUNET
flag &= networkConnection.Send(msgType, msg); flag &= networkConnection.Send(msgType, msg);
} }
} }
return flag; return flag;
} }
@ -273,8 +281,10 @@ namespace QuantumUNET
var networkConnection = component.Observers[i]; var networkConnection = component.Observers[i];
flag &= networkConnection.Send(msgType, msg); flag &= networkConnection.Send(msgType, msg);
} }
result = flag; result = flag;
} }
return result; return result;
} }
@ -313,9 +323,11 @@ namespace QuantumUNET
flag &= networkConnection2.Send(msgType, msg); flag &= networkConnection2.Send(msgType, msg);
} }
} }
result = flag; result = flag;
} }
} }
return result; return result;
} }
@ -326,6 +338,7 @@ namespace QuantumUNET
{ {
throw new UnityException("NetworkWriter used buffer is too big!"); throw new UnityException("NetworkWriter used buffer is too big!");
} }
SendBytesToReady(contextObj, arraySegment.Array, arraySegment.Count, channelId); SendBytesToReady(contextObj, arraySegment.Array, arraySegment.Count, channelId);
} }
@ -344,6 +357,7 @@ namespace QuantumUNET
} }
} }
} }
if (!flag) if (!flag)
{ {
QLog.Error("SendBytesToReady failed"); QLog.Error("SendBytesToReady failed");
@ -367,6 +381,7 @@ namespace QuantumUNET
} }
} }
} }
if (!flag2) if (!flag2)
{ {
QLog.Error($"SendBytesToReady failed for {contextObj}"); QLog.Error($"SendBytesToReady failed for {contextObj}");
@ -408,6 +423,7 @@ namespace QuantumUNET
flag &= networkConnection.SendUnreliable(msgType, msg); flag &= networkConnection.SendUnreliable(msgType, msg);
} }
} }
return flag; return flag;
} }
@ -440,8 +456,10 @@ namespace QuantumUNET
flag &= networkConnection2.SendUnreliable(msgType, msg); flag &= networkConnection2.SendUnreliable(msgType, msg);
} }
} }
result = flag; result = flag;
} }
return result; return result;
} }
@ -456,6 +474,7 @@ namespace QuantumUNET
flag &= networkConnection.SendByChannel(msgType, msg, channelId); flag &= networkConnection.SendByChannel(msgType, msg, channelId);
} }
} }
return flag; return flag;
} }
@ -488,8 +507,10 @@ namespace QuantumUNET
flag &= networkConnection2.SendByChannel(msgType, msg, channelId); flag &= networkConnection2.SendByChannel(msgType, msg, channelId);
} }
} }
result = flag; result = flag;
} }
return result; return result;
} }
@ -504,6 +525,7 @@ namespace QuantumUNET
m_LocalConnection.Dispose(); m_LocalConnection.Dispose();
m_LocalConnection = null; m_LocalConnection = null;
} }
m_LocalClientActive = false; m_LocalClientActive = false;
} }
@ -524,6 +546,7 @@ namespace QuantumUNET
{ {
} }
} }
if (m_RemoveListCount++ % 100 == 0) if (m_RemoveListCount++ % 100 == 0)
{ {
CheckForNullObjects(); CheckForNullObjects();
@ -540,12 +563,14 @@ namespace QuantumUNET
m_RemoveList.Add(networkInstanceId); m_RemoveList.Add(networkInstanceId);
} }
} }
if (m_RemoveList.Count > 0) if (m_RemoveList.Count > 0)
{ {
foreach (var key in m_RemoveList) foreach (var key in m_RemoveList)
{ {
objects.Remove(key); objects.Remove(key);
} }
m_RemoveList.Clear(); m_RemoveList.Clear();
} }
} }
@ -557,6 +582,7 @@ namespace QuantumUNET
{ {
m_SimpleServerSimple.UpdateConnections(); m_SimpleServerSimple.UpdateConnections();
} }
UpdateServerObjects(); UpdateServerObjects();
} }
@ -578,6 +604,7 @@ namespace QuantumUNET
QLog.Warning("Player not destroyed when connection disconnected."); QLog.Warning("Player not destroyed when connection disconnected.");
} }
} }
QLog.Log($"Server lost client:{conn.connectionId}"); QLog.Log($"Server lost client:{conn.connectionId}");
conn.RemoveObservers(); conn.RemoveObservers();
conn.Dispose(); conn.Dispose();
@ -676,6 +703,7 @@ namespace QuantumUNET
} }
} }
} }
QLog.Error($"Failed to send message to player object '{player.name}, not found in connection list"); QLog.Error($"Failed to send message to player object '{player.name}, not found in connection list");
} }
@ -690,6 +718,7 @@ namespace QuantumUNET
return; return;
} }
} }
QLog.Error($"Failed to send message to connection ID '{connectionId}, not found in connection list"); QLog.Error($"Failed to send message to connection ID '{connectionId}, not found in connection list");
} }
@ -718,6 +747,7 @@ namespace QuantumUNET
{ {
x = playerController.Gameobject; x = playerController.Gameobject;
} }
if (x != null) if (x != null)
{ {
QLog.Log( QLog.Log(
@ -743,11 +773,13 @@ namespace QuantumUNET
{ {
networkIdentity.SetClientOwner(conn); networkIdentity.SetClientOwner(conn);
} }
result = true; result = true;
} }
} }
} }
} }
return result; return result;
} }
@ -770,8 +802,10 @@ namespace QuantumUNET
{ {
QLog.Warning($"AddPlayer: playerControllerId of {playerControllerId} is unusually high"); QLog.Warning($"AddPlayer: playerControllerId of {playerControllerId} is unusually high");
} }
result = true; result = true;
} }
return result; return result;
} }
@ -786,6 +820,7 @@ namespace QuantumUNET
{ {
uv.OnStartServer(true); uv.OnStartServer(true);
} }
uv.RebuildObservers(true); uv.RebuildObservers(true);
SendSpawnMessage(uv, null); SendSpawnMessage(uv, null);
ulocalConnectionToClient.LocalClient.AddLocalPlayer(newPlayerController); ulocalConnectionToClient.LocalClient.AddLocalPlayer(newPlayerController);
@ -798,6 +833,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -807,6 +843,7 @@ namespace QuantumUNET
{ {
Spawn(playerGameObject); Spawn(playerGameObject);
} }
conn.Send(4, new QOwnerMessage conn.Send(4, new QOwnerMessage
{ {
NetId = uv.NetId, NetId = uv.NetId,
@ -827,6 +864,7 @@ namespace QuantumUNET
{ {
result = true; result = true;
} }
return result; return result;
} }
@ -845,6 +883,7 @@ namespace QuantumUNET
{ {
QLog.Warning("Ready with no player object"); QLog.Warning("Ready with no player object");
} }
conn.isReady = true; conn.isReady = true;
if (conn is QULocalConnectionToClient) if (conn is QULocalConnectionToClient)
{ {
@ -858,6 +897,7 @@ namespace QuantumUNET
{ {
networkIdentity.AddObserver(conn); networkIdentity.AddObserver(conn);
} }
if (!networkIdentity.IsClient) if (!networkIdentity.IsClient)
{ {
QLog.Log("LocalClient.SetSpawnObject calling OnStartClient"); QLog.Log("LocalClient.SetSpawnObject calling OnStartClient");
@ -891,6 +931,7 @@ namespace QuantumUNET
} }
} }
} }
objectSpawnFinishedMessage.State = 1U; objectSpawnFinishedMessage.State = 1U;
conn.Send(12, objectSpawnFinishedMessage); conn.Send(12, objectSpawnFinishedMessage);
} }
@ -988,6 +1029,7 @@ namespace QuantumUNET
break; break;
} }
} }
if (!flag) if (!flag)
{ {
if (component.ClientAuthorityOwner != netMsg.Connection) if (component.ClientAuthorityOwner != netMsg.Connection)
@ -996,6 +1038,7 @@ namespace QuantumUNET
return; return;
} }
} }
QLog.Log($"OnCommandMessage for netId={networkInstanceId} conn={netMsg.Connection}"); QLog.Log($"OnCommandMessage for netId={networkInstanceId} conn={netMsg.Connection}");
component.HandleCommand(cmdHash, netMsg.Reader); component.HandleCommand(cmdHash, netMsg.Reader);
} }
@ -1040,6 +1083,7 @@ namespace QuantumUNET
{ {
objectSpawnMessage.Payload = networkWriter.ToArray(); objectSpawnMessage.Payload = networkWriter.ToArray();
} }
if (conn != null) if (conn != null)
{ {
conn.Send(3, objectSpawnMessage); conn.Send(3, objectSpawnMessage);
@ -1063,6 +1107,7 @@ namespace QuantumUNET
{ {
objectSpawnSceneMessage.Payload = networkWriter2.ToArray(); objectSpawnSceneMessage.Payload = networkWriter2.ToArray();
} }
if (conn != null) if (conn != null)
{ {
conn.Send(10, objectSpawnSceneMessage); conn.Send(10, objectSpawnSceneMessage);
@ -1091,6 +1136,7 @@ namespace QuantumUNET
DestroyObject(gameObject); DestroyObject(gameObject);
} }
} }
foreach (var playerController in conn.PlayerControllers) foreach (var playerController in conn.PlayerControllers)
{ {
if (playerController.IsValid) if (playerController.IsValid)
@ -1099,9 +1145,11 @@ namespace QuantumUNET
{ {
DestroyObject(playerController.UnetView, true); DestroyObject(playerController.UnetView, true);
} }
playerController.Gameobject = null; playerController.Gameobject = null;
} }
} }
conn.PlayerControllers.Clear(); conn.PlayerControllers.Clear();
} }
} }
@ -1152,10 +1200,12 @@ namespace QuantumUNET
uv.OnNetworkDestroy(); uv.OnNetworkDestroy();
QClientScene.SetLocalObject(objectDestroyMessage.NetId, null); QClientScene.SetLocalObject(objectDestroyMessage.NetId, null);
} }
if (destroyServerObject) if (destroyServerObject)
{ {
UnityEngine.Object.Destroy(uv.gameObject); UnityEngine.Object.Destroy(uv.gameObject);
} }
uv.MarkForReset(); uv.MarkForReset();
} }
@ -1183,6 +1233,7 @@ namespace QuantumUNET
{ {
result = true; result = true;
} }
return result; return result;
} }
@ -1204,6 +1255,7 @@ namespace QuantumUNET
{ {
result = SpawnWithClientAuthority(obj, component.ConnectionToClient); result = SpawnWithClientAuthority(obj, component.ConnectionToClient);
} }
return result; return result;
} }
@ -1221,6 +1273,7 @@ namespace QuantumUNET
var component = obj.GetComponent<QNetworkIdentity>(); var component = obj.GetComponent<QNetworkIdentity>();
result = !(component == null) && component.IsServer && component.AssignClientAuthority(conn); result = !(component == null) && component.IsServer && component.AssignClientAuthority(conn);
} }
return result; return result;
} }
@ -1239,6 +1292,7 @@ namespace QuantumUNET
{ {
networkIdentity.SetDynamicAssetId(assetId); networkIdentity.SetDynamicAssetId(assetId);
} }
instance.SpawnObject(obj); instance.SpawnObject(obj);
} }
} }
@ -1262,6 +1316,7 @@ namespace QuantumUNET
{ {
result = false; result = false;
} }
return result; return result;
} }
@ -1281,6 +1336,7 @@ namespace QuantumUNET
QLog.Error($"Local invoke: Failed to find local connection to invoke handler on [connectionId={conn.connectionId}] for MsgId:{msgType}"); QLog.Error($"Local invoke: Failed to find local connection to invoke handler on [connectionId={conn.connectionId}] for MsgId:{msgType}");
result = false; result = false;
} }
return result; return result;
} }
@ -1308,6 +1364,7 @@ namespace QuantumUNET
networkIdentity.gameObject.SetActive(true); networkIdentity.gameObject.SetActive(true);
} }
} }
foreach (var networkIdentity2 in objectsOfTypeAll) foreach (var networkIdentity2 in objectsOfTypeAll)
{ {
if (ValidateSceneObject(networkIdentity2)) if (ValidateSceneObject(networkIdentity2))
@ -1316,8 +1373,10 @@ namespace QuantumUNET
networkIdentity2.ForceAuthority(true); networkIdentity2.ForceAuthority(true);
} }
} }
result = true; result = true;
} }
return result; return result;
} }
@ -1337,6 +1396,7 @@ namespace QuantumUNET
channel = (byte)QNetworkCRC.singleton.scripts[text] channel = (byte)QNetworkCRC.singleton.scripts[text]
}); });
} }
crcmessage.scripts = list.ToArray(); crcmessage.scripts = list.ToArray();
targetConnection.Send(14, crcmessage); targetConnection.Send(14, crcmessage);
} }

View File

@ -49,6 +49,7 @@ namespace QuantumUNET
connectionConfig.AddChannel(QosType.Unreliable); connectionConfig.AddChannel(QosType.Unreliable);
hostTopology = new HostTopology(connectionConfig, 8); hostTopology = new HostTopology(connectionConfig, 8);
} }
Debug.Log("NetworkServerSimple initialize."); Debug.Log("NetworkServerSimple initialize.");
} }
} }
@ -82,6 +83,7 @@ namespace QuantumUNET
Debug.Log($"NetworkServerSimple listen: {ipAddress}:{listenPort}"); Debug.Log($"NetworkServerSimple listen: {ipAddress}:{listenPort}");
result = true; result = true;
} }
return result; return result;
} }
@ -105,6 +107,7 @@ namespace QuantumUNET
Debug.Log($"NetworkServerSimple listen {listenPort}"); Debug.Log($"NetworkServerSimple listen {listenPort}");
result = true; result = true;
} }
return result; return result;
} }
@ -154,15 +157,18 @@ namespace QuantumUNET
{ {
Debug.Log($"NetGroup event:{networkEventType}"); Debug.Log($"NetGroup event:{networkEventType}");
} }
if (networkEventType == NetworkEventType.ConnectEvent) if (networkEventType == NetworkEventType.ConnectEvent)
{ {
Debug.Log("NetGroup server connected"); Debug.Log("NetGroup server connected");
} }
if (networkEventType == NetworkEventType.DisconnectEvent) if (networkEventType == NetworkEventType.DisconnectEvent)
{ {
Debug.Log("NetGroup server disconnected"); Debug.Log("NetGroup server disconnected");
} }
} }
do do
{ {
networkEventType = NetworkTransport.ReceiveFromHost(serverHostId, out var connectionId, out var channelId, messageBuffer, messageBuffer.Length, out var receivedSize, out var b); networkEventType = NetworkTransport.ReceiveFromHost(serverHostId, out var connectionId, out var channelId, messageBuffer, messageBuffer.Length, out var receivedSize, out var b);
@ -170,6 +176,7 @@ namespace QuantumUNET
{ {
Debug.Log($"Server event: host={serverHostId} event={networkEventType} error={b}"); Debug.Log($"Server event: host={serverHostId} event={networkEventType} error={b}");
} }
switch (networkEventType) switch (networkEventType)
{ {
case NetworkEventType.DataEvent: case NetworkEventType.DataEvent:
@ -208,6 +215,7 @@ namespace QuantumUNET
{ {
result = m_Connections[connectionId]; result = m_Connections[connectionId];
} }
return result; return result;
} }
@ -217,6 +225,7 @@ namespace QuantumUNET
{ {
m_Connections.Add(null); m_Connections.Add(null);
} }
bool result; bool result;
if (m_Connections[conn.connectionId] != null) if (m_Connections[conn.connectionId] != null)
{ {
@ -228,6 +237,7 @@ namespace QuantumUNET
conn.SetHandlers(m_MessageHandlers); conn.SetHandlers(m_MessageHandlers);
result = true; result = true;
} }
return result; return result;
} }
@ -243,6 +253,7 @@ namespace QuantumUNET
m_Connections[connectionId] = null; m_Connections[connectionId] = null;
result = true; result = true;
} }
return result; return result;
} }
@ -264,6 +275,7 @@ namespace QuantumUNET
{ {
m_Connections.Add(null); m_Connections.Add(null);
} }
m_Connections[connectionId] = networkConnection; m_Connections[connectionId] = networkConnection;
OnConnected(networkConnection); OnConnected(networkConnection);
} }
@ -287,6 +299,7 @@ namespace QuantumUNET
return; return;
} }
} }
networkConnection.Disconnect(); networkConnection.Disconnect();
m_Connections[connectionId] = null; m_Connections[connectionId] = null;
Debug.Log($"Server lost client:{connectionId}"); Debug.Log($"Server lost client:{connectionId}");

View File

@ -33,6 +33,7 @@ namespace QuantumUNET
{ {
result = m_LocalServer.InvokeBytes(this, bytes, numBytes, channelId); result = m_LocalServer.InvokeBytes(this, bytes, numBytes, channelId);
} }
return result; return result;
} }

View File

@ -80,9 +80,11 @@ namespace QuantumUNET.Transport
_freePackets.Add(item); _freePackets.Add(item);
} }
} }
_pendingPackets.Clear(); _pendingPackets.Clear();
} }
} }
_disposed = true; _disposed = true;
} }
@ -141,6 +143,7 @@ namespace QuantumUNET.Transport
_maxPendingPacketCount = value; _maxPendingPacketCount = value;
result = true; result = true;
} }
return result; return result;
} }
@ -151,6 +154,7 @@ namespace QuantumUNET.Transport
SendInternalBuffer(); SendInternalBuffer();
_lastFlushTime = Time.realtimeSinceStartup; _lastFlushTime = Time.realtimeSinceStartup;
} }
if (Time.realtimeSinceStartup - _lastBufferedMessageCountTimer > 1f) if (Time.realtimeSinceStartup - _lastBufferedMessageCountTimer > 1f)
{ {
LastBufferedPerSecond = NumBufferedPerSecond; LastBufferedPerSecond = NumBufferedPerSecond;
@ -184,6 +188,7 @@ namespace QuantumUNET.Transport
_fragmentBuffer.SeekZero(); _fragmentBuffer.SeekZero();
_readingFragment = true; _readingFragment = true;
} }
var array = reader.ReadBytesAndSize(); var array = reader.ReadBytesAndSize();
_fragmentBuffer.WriteBytes(array, (ushort)array.Length); _fragmentBuffer.WriteBytes(array, (ushort)array.Length);
result = false; result = false;
@ -193,6 +198,7 @@ namespace QuantumUNET.Transport
_readingFragment = false; _readingFragment = false;
result = true; result = true;
} }
return result; return result;
} }
@ -212,6 +218,7 @@ namespace QuantumUNET.Transport
num += num2; num += num2;
bytesToSend -= num2; bytesToSend -= num2;
} }
_fragmentWriter.StartMessage(17); _fragmentWriter.StartMessage(17);
_fragmentWriter.Write(1); _fragmentWriter.Write(1);
_fragmentWriter.FinishMessage(); _fragmentWriter.FinishMessage();
@ -255,6 +262,7 @@ namespace QuantumUNET.Transport
{ {
QueuePacket(); QueuePacket();
} }
_currentPacket.Write(bytes, bytesToSend); _currentPacket.Write(bytes, bytesToSend);
result = true; result = true;
} }
@ -264,6 +272,7 @@ namespace QuantumUNET.Transport
{ {
Debug.LogError($"ChannelBuffer buffer limit of {_pendingPackets.Count} packets reached."); Debug.LogError($"ChannelBuffer buffer limit of {_pendingPackets.Count} packets reached.");
} }
_isBroken = true; _isBroken = true;
result = false; result = false;
} }
@ -290,6 +299,7 @@ namespace QuantumUNET.Transport
_currentPacket.Write(bytes, bytesToSend); _currentPacket.Write(bytes, bytesToSend);
result = MaxDelay != 0f || SendInternalBuffer(); result = MaxDelay != 0f || SendInternalBuffer();
} }
return result; return result;
} }
@ -314,6 +324,7 @@ namespace QuantumUNET.Transport
channelPacket.Reset(); channelPacket.Reset();
result = channelPacket; result = channelPacket;
} }
return result; return result;
} }
@ -338,6 +349,7 @@ namespace QuantumUNET.Transport
_pendingPackets.Enqueue(channelPacket); _pendingPackets.Enqueue(channelPacket);
break; break;
} }
_pendingPacketCount--; _pendingPacketCount--;
FreePacket(channelPacket); FreePacket(channelPacket);
if (_isBroken && _pendingPackets.Count < _maxPendingPacketCount / 2) if (_isBroken && _pendingPackets.Count < _maxPendingPacketCount / 2)
@ -346,12 +358,14 @@ namespace QuantumUNET.Transport
_isBroken = false; _isBroken = false;
} }
} }
result = true; result = true;
} }
else else
{ {
result = _currentPacket.SendToTransport(_connection, _channelId); result = _currentPacket.SendToTransport(_connection, _channelId);
} }
return result; return result;
} }
} }

View File

@ -40,15 +40,18 @@ namespace QuantumUNET.Transport
result = false; result = false;
} }
} }
if (b != 0) if (b != 0)
{ {
if (m_IsReliable && b == 4) if (m_IsReliable && b == 4)
{ {
return false; return false;
} }
Debug.LogError($"Send Error: {(NetworkError)b} channel:{channelId} bytesToSend:{m_Position}"); Debug.LogError($"Send Error: {(NetworkError)b} channel:{channelId} bytesToSend:{m_Position}");
result = false; result = false;
} }
m_Position = 0; m_Position = 0;
return result; return result;
} }

View File

@ -18,6 +18,7 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"NetworkReader:ReadByte out of range:{ToString()}"); throw new IndexOutOfRangeException($"NetworkReader:ReadByte out of range:{ToString()}");
} }
return m_Buffer[(int)(UIntPtr)Position++]; return m_Buffer[(int)(UIntPtr)Position++];
} }
@ -27,12 +28,14 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"NetworkReader:ReadBytes out of range: ({count}) {ToString()}"); throw new IndexOutOfRangeException($"NetworkReader:ReadBytes out of range: ({count}) {ToString()}");
} }
ushort num = 0; ushort num = 0;
while (num < count) while (num < count)
{ {
buffer[num] = m_Buffer[(int)(UIntPtr)(Position + num)]; buffer[num] = m_Buffer[(int)(UIntPtr)(Position + num)];
num += 1; num += 1;
} }
Position += count; Position += count;
} }
@ -92,6 +95,7 @@ namespace QuantumUNET.Transport
m_Buffer[targetOffset + i] = buffer[i]; m_Buffer[targetOffset + i] = buffer[i];
} }
} }
if (num > Position) if (num > Position)
{ {
Position = num; Position = num;
@ -112,6 +116,7 @@ namespace QuantumUNET.Transport
m_Buffer[(int)checked(unchecked(Position + (ulong)i))] = buffer[i]; m_Buffer[(int)checked(unchecked(Position + (ulong)i))] = buffer[i];
} }
} }
Position += count; Position += count;
} }
@ -128,6 +133,7 @@ namespace QuantumUNET.Transport
Debug.LogWarning($"NetworkBuffer size is {num} bytes!"); Debug.LogWarning($"NetworkBuffer size is {num} bytes!");
} }
} }
var array = new byte[num]; var array = new byte[num];
m_Buffer.CopyTo(array, 0); m_Buffer.CopyTo(array, 0);
m_Buffer = array; m_Buffer = array;

View File

@ -78,11 +78,13 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"ReadPackedUInt32() failure: {b}"); throw new IndexOutOfRangeException($"ReadPackedUInt32() failure: {b}");
} }
result = (uint)(b2 + (b3 << 8) + (b4 << 16) + (b5 << 24)); result = (uint)(b2 + (b3 << 8) + (b4 << 16) + (b5 << 24));
} }
} }
} }
} }
return result; return result;
} }
@ -150,6 +152,7 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"ReadPackedUInt64() failure: {b}"); throw new IndexOutOfRangeException($"ReadPackedUInt64() failure: {b}");
} }
result = b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32) + ((ulong)b7 << 40) + ((ulong)b8 << 48) + ((ulong)b9 << 56); result = b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32) + ((ulong)b7 << 40) + ((ulong)b8 << 48) + ((ulong)b9 << 56);
} }
} }
@ -159,6 +162,7 @@ namespace QuantumUNET.Transport
} }
} }
} }
return result; return result;
} }
@ -275,14 +279,17 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"ReadString() too long: {num}"); throw new IndexOutOfRangeException($"ReadString() too long: {num}");
} }
while (num > s_StringReaderBuffer.Length) while (num > s_StringReaderBuffer.Length)
{ {
s_StringReaderBuffer = new byte[s_StringReaderBuffer.Length * 2]; s_StringReaderBuffer = new byte[s_StringReaderBuffer.Length * 2];
} }
m_buf.ReadBytes(s_StringReaderBuffer, num); m_buf.ReadBytes(s_StringReaderBuffer, num);
var chars = s_Encoding.GetChars(s_StringReaderBuffer, 0, num); var chars = s_Encoding.GetChars(s_StringReaderBuffer, 0, num);
result = new string(chars); result = new string(chars);
} }
return result; return result;
} }
@ -300,6 +307,7 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"NetworkReader ReadBytes {count}"); throw new IndexOutOfRangeException($"NetworkReader ReadBytes {count}");
} }
var array = new byte[count]; var array = new byte[count];
m_buf.ReadBytes(array, (uint)count); m_buf.ReadBytes(array, (uint)count);
return array; return array;
@ -395,6 +403,7 @@ namespace QuantumUNET.Transport
result = gameObject.transform; result = gameObject.transform;
} }
} }
return result; return result;
} }
@ -415,8 +424,10 @@ namespace QuantumUNET.Transport
{ {
Debug.Log($"ReadGameObject netId:{networkInstanceId}go: null"); Debug.Log($"ReadGameObject netId:{networkInstanceId}go: null");
} }
result = gameObject; result = gameObject;
} }
return result; return result;
} }
@ -443,6 +454,7 @@ namespace QuantumUNET.Transport
result = gameObject.GetComponent<QNetworkIdentity>(); result = gameObject.GetComponent<QNetworkIdentity>();
} }
} }
return result; return result;
} }

View File

@ -200,6 +200,7 @@ namespace QuantumUNET.Transport
{ {
throw new IndexOutOfRangeException($"Serialize(string) too long: {value.Length}"); throw new IndexOutOfRangeException($"Serialize(string) too long: {value.Length}");
} }
Write((ushort)byteCount); Write((ushort)byteCount);
var bytes = s_Encoding.GetBytes(value, 0, value.Length, s_StringWriteBuffer, 0); var bytes = s_Encoding.GetBytes(value, 0, value.Length, s_StringWriteBuffer, 0);
m_Buffer.WriteBytes(s_StringWriteBuffer, (ushort)bytes); m_Buffer.WriteBytes(s_StringWriteBuffer, (ushort)bytes);
@ -213,6 +214,7 @@ namespace QuantumUNET.Transport
m_Buffer.WriteByte(1); m_Buffer.WriteByte(1);
return; return;
} }
m_Buffer.WriteByte(0); m_Buffer.WriteByte(0);
} }