mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 09:39:56 +00:00
add more stuff
This commit is contained in:
parent
33bc69fd0c
commit
b5ba81d727
@ -1,15 +1,16 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Animation.Events
|
||||
{
|
||||
internal class QSBAnimationMessage : MessageBase
|
||||
internal class QSBAnimationMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId netId;
|
||||
public int stateHash;
|
||||
public float normalizedTime;
|
||||
public byte[] parameters;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
netId = reader.ReadNetworkId();
|
||||
stateHash = (int)reader.ReadPackedUInt32();
|
||||
@ -17,7 +18,7 @@ namespace QSB.Animation.Events
|
||||
parameters = reader.ReadBytesAndSize();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(netId);
|
||||
writer.WritePackedUInt32((uint)stateHash);
|
||||
|
@ -1,19 +1,20 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Animation.Events
|
||||
{
|
||||
internal class QSBAnimationParametersMessage : MessageBase
|
||||
internal class QSBAnimationParametersMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId netId;
|
||||
public byte[] parameters;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
netId = reader.ReadNetworkId();
|
||||
parameters = reader.ReadBytesAndSize();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(netId);
|
||||
if (parameters == null)
|
||||
|
@ -1,19 +1,20 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Animation.Events
|
||||
{
|
||||
internal class QSBAnimationTriggerMessage : MessageBase
|
||||
internal class QSBAnimationTriggerMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId netId;
|
||||
public int hash;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
netId = reader.ReadNetworkId();
|
||||
hash = (int)reader.ReadPackedUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(netId);
|
||||
writer.WritePackedUInt32((uint)hash);
|
||||
|
@ -17,7 +17,7 @@ namespace QSB.Animation
|
||||
private uint m_ParameterSendBits;
|
||||
private int m_AnimationHash;
|
||||
private int m_TransitionHash;
|
||||
private NetworkWriter m_ParameterWriter;
|
||||
private QSBNetworkWriter m_ParameterWriter;
|
||||
private float m_SendTimer;
|
||||
|
||||
public Animator animator
|
||||
@ -48,7 +48,7 @@ namespace QSB.Animation
|
||||
|
||||
public override void OnStartAuthority()
|
||||
{
|
||||
m_ParameterWriter = new NetworkWriter();
|
||||
m_ParameterWriter = new QSBNetworkWriter();
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
@ -143,7 +143,7 @@ namespace QSB.Animation
|
||||
}
|
||||
}
|
||||
|
||||
internal void HandleAnimMsg(QSBAnimationMessage msg, NetworkReader reader)
|
||||
internal void HandleAnimMsg(QSBAnimationMessage msg, QSBNetworkReader reader)
|
||||
{
|
||||
if (HasAuthority)
|
||||
{
|
||||
@ -156,7 +156,7 @@ namespace QSB.Animation
|
||||
ReadParameters(reader, false);
|
||||
}
|
||||
|
||||
internal void HandleAnimParamsMsg(QSBAnimationParametersMessage msg, NetworkReader reader)
|
||||
internal void HandleAnimParamsMsg(QSBAnimationParametersMessage msg, QSBNetworkReader reader)
|
||||
{
|
||||
if (HasAuthority)
|
||||
{
|
||||
@ -170,7 +170,7 @@ namespace QSB.Animation
|
||||
m_Animator.SetTrigger(hash);
|
||||
}
|
||||
|
||||
private void WriteParameters(NetworkWriter writer, bool autoSend)
|
||||
private void WriteParameters(QSBNetworkWriter writer, bool autoSend)
|
||||
{
|
||||
for (int index = 0; index < m_Animator.parameters.Length; ++index)
|
||||
{
|
||||
@ -195,7 +195,7 @@ namespace QSB.Animation
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadParameters(NetworkReader reader, bool autoSend)
|
||||
private void ReadParameters(QSBNetworkReader reader, bool autoSend)
|
||||
{
|
||||
for (int index = 0; index < m_Animator.parameters.Length; ++index)
|
||||
{
|
||||
@ -227,7 +227,7 @@ namespace QSB.Animation
|
||||
}
|
||||
}
|
||||
|
||||
public override bool OnSerialize(NetworkWriter writer, bool forceAll)
|
||||
public override bool OnSerialize(QSBNetworkWriter writer, bool forceAll)
|
||||
{
|
||||
if (!forceAll)
|
||||
{
|
||||
@ -249,7 +249,7 @@ namespace QSB.Animation
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void OnDeserialize(NetworkReader reader, bool initialState)
|
||||
public override void OnDeserialize(QSBNetworkReader reader, bool initialState)
|
||||
{
|
||||
if (!initialState)
|
||||
{
|
||||
@ -305,7 +305,7 @@ namespace QSB.Animation
|
||||
return;
|
||||
}
|
||||
var component = localObject.GetComponent<QSBNetworkAnimator>();
|
||||
var reader = new NetworkReader(AnimationMessage.parameters);
|
||||
var reader = new QSBNetworkReader(AnimationMessage.parameters);
|
||||
component?.HandleAnimMsg(AnimationMessage, reader);
|
||||
QSBNetworkServer.SendToReady(localObject, 40, AnimationMessage);
|
||||
}
|
||||
@ -319,7 +319,7 @@ namespace QSB.Animation
|
||||
return;
|
||||
}
|
||||
var component = localObject.GetComponent<QSBNetworkAnimator>();
|
||||
var reader = new NetworkReader(ParametersMessage.parameters);
|
||||
var reader = new QSBNetworkReader(ParametersMessage.parameters);
|
||||
component?.HandleAnimParamsMsg(ParametersMessage, reader);
|
||||
QSBNetworkServer.SendToReady(localObject, 41, ParametersMessage);
|
||||
}
|
||||
@ -346,7 +346,7 @@ namespace QSB.Animation
|
||||
var component = localObject.GetComponent<QSBNetworkAnimator>();
|
||||
if (component == null)
|
||||
return;
|
||||
var reader = new NetworkReader(AnimationMessage.parameters);
|
||||
var reader = new QSBNetworkReader(AnimationMessage.parameters);
|
||||
component.HandleAnimMsg(AnimationMessage, reader);
|
||||
}
|
||||
|
||||
@ -359,7 +359,7 @@ namespace QSB.Animation
|
||||
var component = localObject.GetComponent<QSBNetworkAnimator>();
|
||||
if (component == null)
|
||||
return;
|
||||
var reader = new NetworkReader(ParametersMessage.parameters);
|
||||
var reader = new QSBNetworkReader(ParametersMessage.parameters);
|
||||
component.HandleAnimParamsMsg(ParametersMessage, reader);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.ConversationSync.Events
|
||||
@ -9,7 +10,7 @@ namespace QSB.ConversationSync.Events
|
||||
public int ObjectId { get; set; }
|
||||
public string Message { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
ObjectId = reader.ReadInt32();
|
||||
@ -17,7 +18,7 @@ namespace QSB.ConversationSync.Events
|
||||
Message = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(ObjectId);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.ConversationSync.Events
|
||||
@ -9,7 +10,7 @@ namespace QSB.ConversationSync.Events
|
||||
public uint PlayerId { get; set; }
|
||||
public bool State { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
CharacterId = reader.ReadInt32();
|
||||
@ -17,7 +18,7 @@ namespace QSB.ConversationSync.Events
|
||||
State = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(CharacterId);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.MessagesCore
|
||||
@ -7,13 +8,13 @@ namespace QSB.MessagesCore
|
||||
{
|
||||
public T Value;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
Value = (T)(object)reader.ReadInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)(object)Value);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.MessagesCore
|
||||
@ -7,13 +8,13 @@ namespace QSB.MessagesCore
|
||||
{
|
||||
public float Value;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
Value = reader.ReadSingle();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(Value);
|
||||
|
@ -9,7 +9,7 @@ using UnityEngine.Networking;
|
||||
namespace QSB.Messaging
|
||||
{
|
||||
// Extend this to create new message handlers.
|
||||
public class MessageHandler<T> where T : MessageBase, new()
|
||||
public class MessageHandler<T> where T : QSBMessageBase, new()
|
||||
{
|
||||
public event Action<T> OnClientReceiveMessage;
|
||||
|
||||
@ -63,6 +63,7 @@ namespace QSB.Messaging
|
||||
private void OnClientReceiveMessageHandler(QSBNetworkMessage netMsg)
|
||||
{
|
||||
var message = netMsg.ReadMessage<T>();
|
||||
DebugLog.DebugWrite($"receive message {message.GetType()}");
|
||||
OnClientReceiveMessage?.Invoke(message);
|
||||
}
|
||||
|
||||
|
@ -1,19 +1,20 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Messaging
|
||||
{
|
||||
public class PlayerMessage : MessageBase
|
||||
public class PlayerMessage : QSBMessageBase
|
||||
{
|
||||
public uint FromId { get; set; }
|
||||
public uint AboutId { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
FromId = reader.ReadUInt32();
|
||||
AboutId = reader.ReadUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(FromId);
|
||||
writer.Write(AboutId);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Messaging
|
||||
{
|
||||
@ -6,13 +7,13 @@ namespace QSB.Messaging
|
||||
{
|
||||
public bool ToggleValue { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
ToggleValue = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(ToggleValue);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Player.Events
|
||||
@ -7,13 +8,13 @@ namespace QSB.Player.Events
|
||||
{
|
||||
public string PlayerName { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
PlayerName = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(PlayerName);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine.Networking;
|
||||
@ -9,13 +10,13 @@ namespace QSB.Player.Events
|
||||
{
|
||||
public uint[] NetIds { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
NetIds = reader.ReadString().Split(',').Select(x => Convert.ToUInt32(x)).ToArray();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(string.Join(",", NetIds.Select(x => x.ToString()).ToArray()));
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.Player.Events
|
||||
@ -11,7 +12,7 @@ namespace QSB.Player.Events
|
||||
public Sector.Name SectorID { get; set; }
|
||||
public string SectorName { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
PlayerName = reader.ReadString();
|
||||
@ -21,7 +22,7 @@ namespace QSB.Player.Events
|
||||
SectorName = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(PlayerName);
|
||||
|
@ -132,9 +132,14 @@
|
||||
<Compile Include="Animation\Events\QSBAnimationTriggerMessage.cs" />
|
||||
<Compile Include="Animation\PlayerHeadRotationSync.cs" />
|
||||
<Compile Include="Animation\QSBNetworkAnimator.cs" />
|
||||
<Compile Include="QuantumUNET\QSBAddPlayerMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBChannelBuffer.cs" />
|
||||
<Compile Include="QuantumUNET\QSBCRCMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBCRCMessageEntry.cs" />
|
||||
<Compile Include="QuantumUNET\QSBEmptyMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBErrorMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBFloatConversion.cs" />
|
||||
<Compile Include="QuantumUNET\QSBMessageBase.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkCRC.cs" />
|
||||
<Compile Include="QuantumUNET\QSBChannelPacket.cs" />
|
||||
<Compile Include="QuantumUNET\QSBClientAuthorityMessage.cs" />
|
||||
@ -185,18 +190,30 @@
|
||||
<Compile Include="QuantumUNET\QSBNetworkMessageDelegate.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkMessageHandlers.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkMigrationManager.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkReader.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkScene.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkServer.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkServerSimple.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkTransform.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNetworkWriter.cs" />
|
||||
<Compile Include="QuantumUNET\QSBNotReadyMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBObjectDestroyMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBObjectSpawnFinishedMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBObjectSpawnMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBObjectSpawnSceneMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBOwnerMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBPeerAuthorityMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBPeerInfoMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBPeerInfoPlayer.cs" />
|
||||
<Compile Include="QuantumUNET\QSBPeerListMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBPlayerController.cs" />
|
||||
<Compile Include="QuantumUNET\QSBReadyMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBReconnectMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBRemovePlayerMessage.cs" />
|
||||
<Compile Include="QSBSceneManager.cs" />
|
||||
<Compile Include="QuantumUNET\QSBStringMessage.cs" />
|
||||
<Compile Include="QuantumUNET\QSBUIntDecimal.cs" />
|
||||
<Compile Include="QuantumUNET\QSBUIntFloat.cs" />
|
||||
<Compile Include="QuantumUNET\QSBULocalConnectionToClient.cs" />
|
||||
<Compile Include="QuantumUNET\QSBULocalConnectionToServer.cs" />
|
||||
<Compile Include="QuantumUNET\QSBUtility.cs" />
|
||||
|
@ -52,6 +52,12 @@ namespace QSB
|
||||
ident.LocalPlayerAuthority = true;
|
||||
ident.SetValue("m_AssetId", playerPrefab.GetComponent<NetworkIdentity>().assetId);
|
||||
ident.SetValue("m_SceneId", playerPrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||
Destroy(playerPrefab.GetComponent<NetworkTransform>());
|
||||
Destroy(playerPrefab.GetComponent<NetworkIdentity>());
|
||||
DebugLog.DebugWrite(ident.LocalPlayerAuthority.ToString());
|
||||
var transform = playerPrefab.AddComponent<QSBNetworkTransform>();
|
||||
transform.SendInterval = 0.1f;
|
||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||
playerPrefab.AddComponent<PlayerTransformSync>();
|
||||
playerPrefab.AddComponent<AnimationSync>();
|
||||
playerPrefab.AddComponent<WakeUpSync>();
|
||||
@ -62,6 +68,12 @@ namespace QSB
|
||||
ident.LocalPlayerAuthority = true;
|
||||
ident.SetValue("m_AssetId", _shipPrefab.GetComponent<NetworkIdentity>().assetId);
|
||||
ident.SetValue("m_SceneId", _shipPrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||
Destroy(_shipPrefab.GetComponent<NetworkTransform>());
|
||||
Destroy(_shipPrefab.GetComponent<NetworkIdentity>());
|
||||
DebugLog.DebugWrite(ident.LocalPlayerAuthority.ToString());
|
||||
transform = _shipPrefab.AddComponent<QSBNetworkTransform>();
|
||||
transform.SendInterval = 0.1f;
|
||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||
_shipPrefab.AddComponent<ShipTransformSync>();
|
||||
spawnPrefabs.Add(_shipPrefab);
|
||||
|
||||
@ -70,6 +82,12 @@ namespace QSB
|
||||
ident.LocalPlayerAuthority = true;
|
||||
ident.SetValue("m_AssetId", _cameraPrefab.GetComponent<NetworkIdentity>().assetId);
|
||||
ident.SetValue("m_SceneId", _cameraPrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||
Destroy(_cameraPrefab.GetComponent<NetworkTransform>());
|
||||
Destroy(_cameraPrefab.GetComponent<NetworkIdentity>());
|
||||
DebugLog.DebugWrite(ident.LocalPlayerAuthority.ToString());
|
||||
transform = _cameraPrefab.AddComponent<QSBNetworkTransform>();
|
||||
transform.SendInterval = 0.1f;
|
||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||
_cameraPrefab.AddComponent<PlayerCameraSync>();
|
||||
spawnPrefabs.Add(_cameraPrefab);
|
||||
|
||||
@ -78,6 +96,12 @@ namespace QSB
|
||||
ident.LocalPlayerAuthority = true;
|
||||
ident.SetValue("m_AssetId", _probePrefab.GetComponent<NetworkIdentity>().assetId);
|
||||
ident.SetValue("m_SceneId", _probePrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||
Destroy(_probePrefab.GetComponent<NetworkTransform>());
|
||||
Destroy(_probePrefab.GetComponent<NetworkIdentity>());
|
||||
DebugLog.DebugWrite(ident.LocalPlayerAuthority.ToString());
|
||||
transform = _probePrefab.AddComponent<QSBNetworkTransform>();
|
||||
transform.SendInterval = 0.1f;
|
||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||
_probePrefab.AddComponent<PlayerProbeSync>();
|
||||
spawnPrefabs.Add(_probePrefab);
|
||||
|
||||
@ -86,6 +110,11 @@ namespace QSB
|
||||
ident.LocalPlayerAuthority = true;
|
||||
ident.SetValue("m_AssetId", OrbPrefab.GetComponent<NetworkIdentity>().assetId);
|
||||
ident.SetValue("m_SceneId", OrbPrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||
Destroy(OrbPrefab.GetComponent<NetworkTransform>());
|
||||
Destroy(OrbPrefab.GetComponent<NetworkIdentity>());
|
||||
transform = OrbPrefab.AddComponent<QSBNetworkTransform>();
|
||||
transform.SendInterval = 0.1f;
|
||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||
OrbPrefab.AddComponent<NomaiOrbTransformSync>();
|
||||
spawnPrefabs.Add(OrbPrefab);
|
||||
|
||||
|
37
QSB/QuantumUNET/QSBAddPlayerMessage.cs
Normal file
37
QSB/QuantumUNET/QSBAddPlayerMessage.cs
Normal file
@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
class QSBAddPlayerMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.playerControllerId = (short)reader.ReadUInt16();
|
||||
this.msgData = reader.ReadBytesAndSize();
|
||||
if (this.msgData == null)
|
||||
{
|
||||
this.msgSize = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.msgSize = this.msgData.Length;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write((ushort)this.playerControllerId);
|
||||
writer.WriteBytesAndSize(this.msgData, this.msgSize);
|
||||
}
|
||||
|
||||
public short playerControllerId;
|
||||
|
||||
public int msgSize;
|
||||
|
||||
public byte[] msgData;
|
||||
}
|
||||
}
|
@ -2,11 +2,11 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBCRCMessage : MessageBase
|
||||
internal class QSBCRCMessage : QSBMessageBase
|
||||
{
|
||||
public QSBCRCMessageEntry[] scripts;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
var num = (int)reader.ReadUInt16();
|
||||
scripts = new QSBCRCMessageEntry[num];
|
||||
@ -19,7 +19,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write((ushort)scripts.Length);
|
||||
for (var i = 0; i < scripts.Length; i++)
|
||||
|
@ -32,8 +32,8 @@ namespace QSB.QuantumUNET
|
||||
private static List<QSBChannelPacket> _freePackets;
|
||||
internal static int _pendingPacketCount;
|
||||
private float _lastBufferedMessageCountTimer = Time.realtimeSinceStartup;
|
||||
private static NetworkWriter _sendWriter = new NetworkWriter();
|
||||
private static NetworkWriter _fragmentWriter = new NetworkWriter();
|
||||
private static QSBNetworkWriter _sendWriter = new QSBNetworkWriter();
|
||||
private static QSBNetworkWriter _fragmentWriter = new QSBNetworkWriter();
|
||||
private const int _packetHeaderReserveSize = 100;
|
||||
private bool _disposed;
|
||||
internal QSBNetBuffer _fragmentBuffer = new QSBNetBuffer();
|
||||
@ -174,13 +174,13 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public bool SendWriter(NetworkWriter writer)
|
||||
public bool SendWriter(QSBNetworkWriter writer)
|
||||
{
|
||||
var arraySegment = (ArraySegment<byte>)writer.GetType().GetMethod("AsArraySegment", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic).Invoke(writer, null);
|
||||
return SendBytes(arraySegment.Array, arraySegment.Count);
|
||||
}
|
||||
|
||||
public bool Send(short msgType, MessageBase msg)
|
||||
public bool Send(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
_sendWriter.StartMessage(msgType);
|
||||
msg.Serialize(_sendWriter);
|
||||
@ -189,7 +189,7 @@ namespace QSB.QuantumUNET
|
||||
return SendWriter(_sendWriter);
|
||||
}
|
||||
|
||||
internal bool HandleFragment(NetworkReader reader)
|
||||
internal bool HandleFragment(QSBNetworkReader reader)
|
||||
{
|
||||
bool result;
|
||||
if (reader.ReadByte() == 0)
|
||||
|
@ -2,18 +2,18 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBClientAuthorityMessage : MessageBase
|
||||
internal class QSBClientAuthorityMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId netId;
|
||||
public bool authority;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
netId = reader.ReadNetworkId();
|
||||
authority = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(netId);
|
||||
writer.Write(authority);
|
||||
|
@ -11,7 +11,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
private static bool HasMigrationPending() => reconnectId != -1;
|
||||
|
||||
public static void SetReconnectId(int newReconnectId, PeerInfoMessage[] peers)
|
||||
public static void SetReconnectId(int newReconnectId, QSBPeerInfoMessage[] peers)
|
||||
{
|
||||
reconnectId = newReconnectId;
|
||||
s_Peers = peers;
|
||||
@ -110,7 +110,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public static bool AddPlayer(QSBNetworkConnection readyConn, short playerControllerId) => AddPlayer(readyConn, playerControllerId, null);
|
||||
|
||||
public static bool AddPlayer(QSBNetworkConnection readyConn, short playerControllerId, MessageBase extraMessage)
|
||||
public static bool AddPlayer(QSBNetworkConnection readyConn, short playerControllerId, QSBMessageBase extraMessage)
|
||||
{
|
||||
bool result;
|
||||
if (playerControllerId < 0)
|
||||
@ -188,13 +188,13 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (!HasMigrationPending())
|
||||
{
|
||||
var addPlayerMessage = new AddPlayerMessage
|
||||
var addPlayerMessage = new QSBAddPlayerMessage
|
||||
{
|
||||
playerControllerId = playerControllerId
|
||||
};
|
||||
if (extraMessage != null)
|
||||
{
|
||||
var networkWriter = new NetworkWriter();
|
||||
var networkWriter = new QSBNetworkWriter();
|
||||
extraMessage.Serialize(networkWriter);
|
||||
addPlayerMessage.msgData = networkWriter.ToArray();
|
||||
addPlayerMessage.msgSize = (int)networkWriter.Position;
|
||||
@ -210,7 +210,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool SendReconnectMessage(MessageBase extraMessage)
|
||||
public static bool SendReconnectMessage(QSBMessageBase extraMessage)
|
||||
{
|
||||
bool result;
|
||||
if (!HasMigrationPending())
|
||||
@ -243,7 +243,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
for (var j = 0; j < peerInfoMessage.playerIds.Length; j++)
|
||||
{
|
||||
var reconnectMessage = new ReconnectMessage
|
||||
var reconnectMessage = new QSBReconnectMessage
|
||||
{
|
||||
oldConnectionId = reconnectId,
|
||||
netId = peerInfoMessage.playerIds[j].netId,
|
||||
@ -251,7 +251,7 @@ namespace QSB.QuantumUNET
|
||||
};
|
||||
if (extraMessage != null)
|
||||
{
|
||||
var networkWriter = new NetworkWriter();
|
||||
var networkWriter = new QSBNetworkWriter();
|
||||
extraMessage.Serialize(networkWriter);
|
||||
reconnectMessage.msgData = networkWriter.ToArray();
|
||||
reconnectMessage.msgSize = (int)networkWriter.Position;
|
||||
@ -284,9 +284,9 @@ namespace QSB.QuantumUNET
|
||||
bool result;
|
||||
if (readyConnection.GetPlayerController(playerControllerId, out var playerController))
|
||||
{
|
||||
var removePlayerMessage = new RemovePlayerMessage
|
||||
var removePlayerMessage = new QSBRemovePlayerMessage
|
||||
{
|
||||
playerControllerId = playerControllerId
|
||||
PlayerControllerId = playerControllerId
|
||||
};
|
||||
readyConnection.Send(38, removePlayerMessage);
|
||||
readyConnection.RemovePlayerController(playerControllerId);
|
||||
@ -324,8 +324,9 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (conn != null)
|
||||
{
|
||||
var msg = new ReadyMessage();
|
||||
var msg = new QSBReadyMessage();
|
||||
conn.Send(35, msg);
|
||||
DebugLog.DebugWrite("SENDING READY");
|
||||
ready = true;
|
||||
readyConnection = conn;
|
||||
readyConnection.isReady = true;
|
||||
@ -484,7 +485,7 @@ namespace QSB.QuantumUNET
|
||||
uv.transform.position = position;
|
||||
if (payload != null && payload.Length > 0)
|
||||
{
|
||||
var reader = new NetworkReader(payload);
|
||||
var reader = new QSBNetworkReader(payload);
|
||||
uv.OnUpdateVars(reader, true);
|
||||
}
|
||||
if (!(newGameObject == null))
|
||||
@ -502,6 +503,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private static void OnObjectSpawn(QSBNetworkMessage netMsg)
|
||||
{
|
||||
DebugLog.DebugWrite("OnObjectSpawn");
|
||||
netMsg.ReadMessage<QSBObjectSpawnMessage>(s_ObjectSpawnMessage);
|
||||
if (!s_ObjectSpawnMessage.assetId.IsValid())
|
||||
{
|
||||
@ -736,7 +738,7 @@ namespace QSB.QuantumUNET
|
||||
private static void OnUpdateVarsMessage(QSBNetworkMessage netMsg)
|
||||
{
|
||||
var networkInstanceId = netMsg.Reader.ReadNetworkId();
|
||||
Debug.Log(string.Concat(new object[]
|
||||
DebugLog.DebugWrite(string.Concat(new object[]
|
||||
{
|
||||
"ClientScene::OnUpdateVarsMessage ",
|
||||
networkInstanceId,
|
||||
@ -921,7 +923,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public const int ReconnectIdHost = 0;
|
||||
|
||||
private static PeerInfoMessage[] s_Peers;
|
||||
private static QSBPeerInfoMessage[] s_Peers;
|
||||
|
||||
private static List<PendingOwner> s_PendingOwnerIds = new List<PendingOwner>();
|
||||
|
||||
|
19
QSB/QuantumUNET/QSBEmptyMessage.cs
Normal file
19
QSB/QuantumUNET/QSBEmptyMessage.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBEmptyMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
23
QSB/QuantumUNET/QSBErrorMessage.cs
Normal file
23
QSB/QuantumUNET/QSBErrorMessage.cs
Normal file
@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBErrorMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.errorCode = (int)reader.ReadUInt16();
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write((ushort)this.errorCode);
|
||||
}
|
||||
|
||||
public int errorCode;
|
||||
}
|
||||
}
|
32
QSB/QuantumUNET/QSBFloatConversion.cs
Normal file
32
QSB/QuantumUNET/QSBFloatConversion.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBFloatConversion
|
||||
{
|
||||
public static float ToSingle(uint value)
|
||||
{
|
||||
QSBUIntFloat uintFloat = default(QSBUIntFloat);
|
||||
uintFloat.intValue = value;
|
||||
return uintFloat.floatValue;
|
||||
}
|
||||
|
||||
public static double ToDouble(ulong value)
|
||||
{
|
||||
QSBUIntFloat uintFloat = default(QSBUIntFloat);
|
||||
uintFloat.longValue = value;
|
||||
return uintFloat.doubleValue;
|
||||
}
|
||||
|
||||
public static decimal ToDecimal(ulong value1, ulong value2)
|
||||
{
|
||||
QSBUIntDecimal uintDecimal = default(QSBUIntDecimal);
|
||||
uintDecimal.longValue1 = value1;
|
||||
uintDecimal.longValue2 = value2;
|
||||
return uintDecimal.decimalValue;
|
||||
}
|
||||
}
|
||||
}
|
@ -83,7 +83,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private void PostInternalMessage(short msgType)
|
||||
{
|
||||
var networkWriter = new NetworkWriter();
|
||||
var networkWriter = new QSBNetworkWriter();
|
||||
networkWriter.StartMessage(msgType);
|
||||
networkWriter.FinishMessage();
|
||||
PostInternalMessage(networkWriter.AsArray(), 0);
|
||||
@ -100,7 +100,7 @@ namespace QSB.QuantumUNET
|
||||
var t = internalMsgs[i];
|
||||
if (s_InternalMessage.Reader == null)
|
||||
{
|
||||
s_InternalMessage.Reader = new NetworkReader(t.buffer);
|
||||
s_InternalMessage.Reader = new QSBNetworkReader(t.buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -124,9 +124,9 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
internal void InvokeHandlerOnClient(short msgType, MessageBase msg, int channelId)
|
||||
internal void InvokeHandlerOnClient(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
var networkWriter = new NetworkWriter();
|
||||
var networkWriter = new QSBNetworkWriter();
|
||||
networkWriter.StartMessage(msgType);
|
||||
msg.Serialize(networkWriter);
|
||||
networkWriter.FinishMessage();
|
||||
|
19
QSB/QuantumUNET/QSBMessageBase.cs
Normal file
19
QSB/QuantumUNET/QSBMessageBase.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public abstract class QSBMessageBase
|
||||
{
|
||||
public virtual void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using OWML.Common;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Sockets;
|
||||
using UnityEngine;
|
||||
@ -45,7 +47,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
protected void SendCommandInternal(NetworkWriter writer, int channelId, string cmdName)
|
||||
protected void SendCommandInternal(QSBNetworkWriter writer, int channelId, string cmdName)
|
||||
{
|
||||
if (!IsLocalPlayer && !HasAuthority)
|
||||
{
|
||||
@ -62,55 +64,49 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool InvokeCommand(int cmdHash, NetworkReader reader) => InvokeCommandDelegate(cmdHash, reader);
|
||||
public virtual bool InvokeCommand(int cmdHash, QSBNetworkReader reader) => InvokeCommandDelegate(cmdHash, reader);
|
||||
|
||||
protected void SendRPCInternal(NetworkWriter writer, int channelId, string rpcName)
|
||||
protected void SendRPCInternal(QSBNetworkWriter writer, int channelId, string rpcName)
|
||||
{
|
||||
if (!IsServer)
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("ClientRpc call on un-spawned object");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.FinishMessage();
|
||||
QSBNetworkServer.SendWriterToReady(base.gameObject, writer, channelId);
|
||||
}
|
||||
writer.FinishMessage();
|
||||
QSBNetworkServer.SendWriterToReady(base.gameObject, writer, channelId);
|
||||
}
|
||||
|
||||
protected void SendTargetRPCInternal(NetworkConnection conn, NetworkWriter writer, int channelId, string rpcName)
|
||||
protected void SendTargetRPCInternal(QSBNetworkConnection conn, QSBNetworkWriter writer, int channelId, string rpcName)
|
||||
{
|
||||
if (!IsServer)
|
||||
{
|
||||
Debug.LogWarning("TargetRpc call on un-spawned object");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.FinishMessage();
|
||||
conn.SendWriter(writer, channelId);
|
||||
}
|
||||
writer.FinishMessage();
|
||||
conn.SendWriter(writer, channelId);
|
||||
}
|
||||
|
||||
public virtual bool InvokeRPC(int cmdHash, NetworkReader reader) => InvokeRpcDelegate(cmdHash, reader);
|
||||
public virtual bool InvokeRPC(int cmdHash, QSBNetworkReader reader) => InvokeRpcDelegate(cmdHash, reader);
|
||||
|
||||
protected void SendEventInternal(NetworkWriter writer, int channelId, string eventName)
|
||||
protected void SendEventInternal(QSBNetworkWriter writer, int channelId, string eventName)
|
||||
{
|
||||
if (!QSBNetworkServer.active)
|
||||
{
|
||||
Debug.LogWarning("SendEvent no server?");
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.FinishMessage();
|
||||
QSBNetworkServer.SendWriterToReady(gameObject, writer, channelId);
|
||||
DebugLog.ToConsole($"Error - Tried to send event {eventName} on channel {channelId} but QSBNetworkServer isn't active.", MessageType.Error);
|
||||
return;
|
||||
}
|
||||
writer.FinishMessage();
|
||||
QSBNetworkServer.SendWriterToReady(gameObject, writer, channelId);
|
||||
}
|
||||
|
||||
public virtual bool InvokeSyncEvent(int cmdHash, NetworkReader reader) => InvokeSyncEventDelegate(cmdHash, reader);
|
||||
public virtual bool InvokeSyncEvent(int cmdHash, QSBNetworkReader reader) => InvokeSyncEventDelegate(cmdHash, reader);
|
||||
|
||||
public virtual bool InvokeSyncList(int cmdHash, NetworkReader reader) => InvokeSyncListDelegate(cmdHash, reader);
|
||||
public virtual bool InvokeSyncList(int cmdHash, QSBNetworkReader reader) => InvokeSyncListDelegate(cmdHash, reader);
|
||||
|
||||
protected static void RegisterCommandDelegate(Type invokeClass, int cmdHash, CmdDelegate func)
|
||||
{
|
||||
@ -123,13 +119,6 @@ namespace QSB.QuantumUNET
|
||||
invokeFunction = func
|
||||
};
|
||||
s_CmdHandlerDelegates[cmdHash] = invoker;
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"RegisterCommandDelegate hash:",
|
||||
cmdHash,
|
||||
" ",
|
||||
func.GetMethodName()
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -144,13 +133,6 @@ namespace QSB.QuantumUNET
|
||||
invokeFunction = func
|
||||
};
|
||||
s_CmdHandlerDelegates[cmdHash] = invoker;
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"RegisterRpcDelegate hash:",
|
||||
cmdHash,
|
||||
" ",
|
||||
func.GetMethodName()
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -165,13 +147,6 @@ namespace QSB.QuantumUNET
|
||||
invokeFunction = func
|
||||
};
|
||||
s_CmdHandlerDelegates[cmdHash] = invoker;
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"RegisterEventDelegate hash:",
|
||||
cmdHash,
|
||||
" ",
|
||||
func.GetMethodName()
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -186,13 +161,6 @@ namespace QSB.QuantumUNET
|
||||
invokeFunction = func
|
||||
};
|
||||
s_CmdHandlerDelegates[cmdHash] = invoker;
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"RegisterSyncListDelegate hash:",
|
||||
cmdHash,
|
||||
" ",
|
||||
func.GetMethodName()
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@ -278,7 +246,7 @@ namespace QSB.QuantumUNET
|
||||
internal bool ContainsCommandDelegate(int cmdHash)
|
||||
=> s_CmdHandlerDelegates.ContainsKey(cmdHash);
|
||||
|
||||
internal bool InvokeCommandDelegate(int cmdHash, NetworkReader reader)
|
||||
internal bool InvokeCommandDelegate(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
bool result;
|
||||
if (!s_CmdHandlerDelegates.ContainsKey(cmdHash))
|
||||
@ -308,7 +276,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal bool InvokeRpcDelegate(int cmdHash, NetworkReader reader)
|
||||
internal bool InvokeRpcDelegate(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
bool result;
|
||||
if (!s_CmdHandlerDelegates.ContainsKey(cmdHash))
|
||||
@ -338,7 +306,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal bool InvokeSyncEventDelegate(int cmdHash, NetworkReader reader)
|
||||
internal bool InvokeSyncEventDelegate(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
bool result;
|
||||
if (!s_CmdHandlerDelegates.ContainsKey(cmdHash))
|
||||
@ -361,7 +329,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal bool InvokeSyncListDelegate(int cmdHash, NetworkReader reader)
|
||||
internal bool InvokeSyncListDelegate(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
bool result;
|
||||
if (!s_CmdHandlerDelegates.ContainsKey(cmdHash))
|
||||
@ -495,6 +463,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
flag = !value.Equals(fieldValue);
|
||||
}
|
||||
|
||||
if (flag)
|
||||
{
|
||||
Debug.Log(string.Concat(new object[]
|
||||
@ -508,6 +477,7 @@ namespace QSB.QuantumUNET
|
||||
"->",
|
||||
value
|
||||
}));
|
||||
|
||||
SetDirtyBit(dirtyBit);
|
||||
fieldValue = value;
|
||||
}
|
||||
@ -533,7 +503,7 @@ namespace QSB.QuantumUNET
|
||||
return -1;
|
||||
}
|
||||
|
||||
public virtual bool OnSerialize(NetworkWriter writer, bool initialState)
|
||||
public virtual bool OnSerialize(QSBNetworkWriter writer, bool initialState)
|
||||
{
|
||||
if (!initialState)
|
||||
{
|
||||
@ -542,7 +512,7 @@ namespace QSB.QuantumUNET
|
||||
return false;
|
||||
}
|
||||
|
||||
public virtual void OnDeserialize(NetworkReader reader, bool initialState)
|
||||
public virtual void OnDeserialize(QSBNetworkReader reader, bool initialState)
|
||||
{
|
||||
if (!initialState)
|
||||
{
|
||||
@ -550,44 +520,17 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void PreStartClient()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnNetworkDestroy()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnStartServer()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnStartClient()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnStartLocalPlayer()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnStartAuthority()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnStopAuthority()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void PreStartClient() { }
|
||||
public virtual void OnNetworkDestroy() { }
|
||||
public virtual void OnStartServer() { }
|
||||
public virtual void OnStartClient() { }
|
||||
public virtual void OnStartLocalPlayer() { }
|
||||
public virtual void OnStartAuthority() { }
|
||||
public virtual void OnStopAuthority() { }
|
||||
public virtual bool OnRebuildObservers(HashSet<QSBNetworkConnection> observers, bool initialize) => false;
|
||||
|
||||
public virtual void OnSetLocalVisibility(bool vis)
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OnSetLocalVisibility(bool vis) { }
|
||||
public virtual bool OnCheckObserver(QSBNetworkConnection conn) => true;
|
||||
|
||||
public virtual int GetNetworkChannel() => 0;
|
||||
|
||||
public virtual float GetNetworkSendInterval() => 0.1f;
|
||||
|
||||
private float m_LastSendTime;
|
||||
@ -595,9 +538,9 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private static readonly Dictionary<int, Invoker> s_CmdHandlerDelegates = new Dictionary<int, Invoker>();
|
||||
|
||||
public delegate void CmdDelegate(QSBNetworkBehaviour obj, NetworkReader reader);
|
||||
public delegate void CmdDelegate(QSBNetworkBehaviour obj, QSBNetworkReader reader);
|
||||
|
||||
protected delegate void EventDelegate(List<Delegate> targets, NetworkReader reader);
|
||||
protected delegate void EventDelegate(List<Delegate> targets, QSBNetworkReader reader);
|
||||
|
||||
protected enum UNetInvokeType
|
||||
{
|
||||
|
@ -614,7 +614,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public bool Send(short msgType, MessageBase msg)
|
||||
public bool Send(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
bool result;
|
||||
if (m_Connection != null)
|
||||
@ -643,7 +643,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool SendWriter(NetworkWriter writer, int channelId)
|
||||
public bool SendWriter(QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
bool result;
|
||||
if (m_Connection != null)
|
||||
@ -701,7 +701,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool SendUnreliable(short msgType, MessageBase msg)
|
||||
public bool SendUnreliable(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
bool result;
|
||||
if (m_Connection != null)
|
||||
@ -730,7 +730,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool SendByChannel(short msgType, MessageBase msg, int channelId)
|
||||
public bool SendByChannel(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
bool result;
|
||||
if (m_Connection != null)
|
||||
@ -835,7 +835,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (networkEventType != NetworkEventType.Nothing)
|
||||
{
|
||||
Debug.Log(string.Concat(new object[]
|
||||
DebugLog.DebugWrite(string.Concat(new object[]
|
||||
{
|
||||
"Client event: host=",
|
||||
m_ClientId,
|
||||
@ -968,12 +968,12 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (handler != null)
|
||||
{
|
||||
ErrorMessage errorMessage = new ErrorMessage();
|
||||
QSBErrorMessage errorMessage = new QSBErrorMessage();
|
||||
errorMessage.errorCode = error;
|
||||
byte[] buffer = new byte[200];
|
||||
NetworkWriter writer = new NetworkWriter(buffer);
|
||||
QSBNetworkWriter writer = new QSBNetworkWriter(buffer);
|
||||
errorMessage.Serialize(writer);
|
||||
NetworkReader reader = new NetworkReader(buffer);
|
||||
QSBNetworkReader reader = new QSBNetworkReader(buffer);
|
||||
handler(new QSBNetworkMessage
|
||||
{
|
||||
MsgType = 34,
|
||||
@ -1057,11 +1057,13 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public void RegisterHandler(short msgType, QSBNetworkMessageDelegate handler)
|
||||
{
|
||||
DebugLog.DebugWrite($"Register event id {msgType}");
|
||||
m_MessageHandlers.RegisterHandler(msgType, handler);
|
||||
}
|
||||
|
||||
public void RegisterHandlerSafe(short msgType, QSBNetworkMessageDelegate handler)
|
||||
{
|
||||
DebugLog.DebugWrite($"Safe register event id {msgType}");
|
||||
m_MessageHandlers.RegisterHandlerSafe(msgType, handler);
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
@ -10,7 +11,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
public QSBNetworkConnection()
|
||||
{
|
||||
m_Writer = new NetworkWriter();
|
||||
m_Writer = new QSBNetworkWriter();
|
||||
}
|
||||
|
||||
internal HashSet<QSBNetworkIdentity> VisList { get; } = new HashSet<QSBNetworkIdentity>();
|
||||
@ -27,7 +28,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public virtual void Initialize(string networkAddress, int networkHostId, int networkConnectionId, HostTopology hostTopology)
|
||||
{
|
||||
m_Writer = new NetworkWriter();
|
||||
m_Writer = new QSBNetworkWriter();
|
||||
address = networkAddress;
|
||||
hostId = networkHostId;
|
||||
connectionId = networkConnectionId;
|
||||
@ -115,7 +116,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public bool InvokeHandlerNoData(short msgType) => InvokeHandler(msgType, null, 0);
|
||||
|
||||
public bool InvokeHandler(short msgType, NetworkReader reader, int channelId)
|
||||
public bool InvokeHandler(short msgType, QSBNetworkReader reader, int channelId)
|
||||
{
|
||||
bool result;
|
||||
if (m_MessageHandlersDict.ContainsKey(msgType))
|
||||
@ -162,14 +163,14 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void HandleFragment(NetworkReader reader, int channelId)
|
||||
internal void HandleFragment(QSBNetworkReader reader, int channelId)
|
||||
{
|
||||
if (channelId >= 0 && channelId < m_Channels.Length)
|
||||
{
|
||||
var channelBuffer = m_Channels[channelId];
|
||||
if (channelBuffer.HandleFragment(reader))
|
||||
{
|
||||
var networkReader = new NetworkReader(channelBuffer._fragmentBuffer.AsArraySegment().Array);
|
||||
var networkReader = new QSBNetworkReader(channelBuffer._fragmentBuffer.AsArraySegment().Array);
|
||||
networkReader.ReadInt16();
|
||||
var msgType = networkReader.ReadInt16();
|
||||
InvokeHandler(msgType, networkReader, channelId);
|
||||
@ -252,11 +253,11 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool Send(short msgType, MessageBase msg) => SendByChannel(msgType, msg, 0);
|
||||
public virtual bool Send(short msgType, QSBMessageBase msg) => SendByChannel(msgType, msg, 0);
|
||||
|
||||
public virtual bool SendUnreliable(short msgType, MessageBase msg) => SendByChannel(msgType, msg, 1);
|
||||
public virtual bool SendUnreliable(short msgType, QSBMessageBase msg) => SendByChannel(msgType, msg, 1);
|
||||
|
||||
public virtual bool SendByChannel(short msgType, MessageBase msg, int channelId)
|
||||
public virtual bool SendByChannel(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
m_Writer.StartMessage(msgType);
|
||||
msg.Serialize(m_Writer);
|
||||
@ -273,7 +274,7 @@ namespace QSB.QuantumUNET
|
||||
return CheckChannel(channelId) && m_Channels[channelId].SendBytes(bytes, numBytes);
|
||||
}
|
||||
|
||||
public virtual bool SendWriter(NetworkWriter writer, int channelId)
|
||||
public virtual bool SendWriter(QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
if (logNetworkMessages)
|
||||
{
|
||||
@ -353,52 +354,48 @@ namespace QSB.QuantumUNET
|
||||
|
||||
protected void HandleReader(NetworkReader reader, int receivedSize, int channelId)
|
||||
{
|
||||
while ((ulong)reader.Position < (ulong)((long)receivedSize))
|
||||
DebugLog.DebugWrite($"handle reader size:{receivedSize}");
|
||||
while (reader.Position < receivedSize)
|
||||
{
|
||||
var num = reader.ReadUInt16();
|
||||
var num2 = reader.ReadInt16();
|
||||
var array = reader.ReadBytes((int)num);
|
||||
var reader2 = new NetworkReader(array);
|
||||
if (logNetworkMessages)
|
||||
var reader2 = new QSBNetworkReader(array);
|
||||
var stringBuilder = new StringBuilder();
|
||||
for (var i = 0; i < (int)num; i++)
|
||||
{
|
||||
var stringBuilder = new StringBuilder();
|
||||
for (var i = 0; i < (int)num; i++)
|
||||
stringBuilder.AppendFormat("{0:X2}", array[i]);
|
||||
if (i > 150)
|
||||
{
|
||||
stringBuilder.AppendFormat("{0:X2}", array[i]);
|
||||
if (i > 150)
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"ConnectionRecv con:",
|
||||
connectionId,
|
||||
" bytes:",
|
||||
num,
|
||||
" msgId:",
|
||||
num2,
|
||||
" ",
|
||||
stringBuilder
|
||||
}));
|
||||
}
|
||||
DebugLog.DebugWrite(string.Concat(new object[]
|
||||
{
|
||||
"ConnectionRecv con:",
|
||||
connectionId,
|
||||
" bytes:",
|
||||
num,
|
||||
" msgId:",
|
||||
num2,
|
||||
" ",
|
||||
stringBuilder
|
||||
}));
|
||||
QSBNetworkMessageDelegate networkMessageDelegate = null;
|
||||
if (m_MessageHandlersDict.ContainsKey(num2))
|
||||
{
|
||||
networkMessageDelegate = m_MessageHandlersDict[num2];
|
||||
DebugLog.DebugWrite(networkMessageDelegate.GetMethodName());
|
||||
}
|
||||
if (networkMessageDelegate == null)
|
||||
{
|
||||
if (LogFilter.logError)
|
||||
DebugLog.ToConsole(string.Concat(new object[]
|
||||
{
|
||||
Debug.LogError(string.Concat(new object[]
|
||||
{
|
||||
"Unknown message ID ",
|
||||
num2,
|
||||
" connId:",
|
||||
connectionId
|
||||
}));
|
||||
}
|
||||
"Unknown message ID ",
|
||||
num2,
|
||||
" connId:",
|
||||
connectionId
|
||||
}));
|
||||
break;
|
||||
}
|
||||
m_NetMsg.MsgType = num2;
|
||||
@ -501,7 +498,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private QSBChannelBuffer[] m_Channels;
|
||||
private readonly QSBNetworkMessage m_NetMsg = new QSBNetworkMessage();
|
||||
private NetworkWriter m_Writer;
|
||||
private QSBNetworkWriter m_Writer;
|
||||
|
||||
private Dictionary<short, QSBNetworkMessageDelegate> m_MessageHandlersDict;
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Utility;
|
||||
using OWML.Common;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
@ -325,8 +326,9 @@ namespace QSB.QuantumUNET
|
||||
return true;
|
||||
}
|
||||
|
||||
internal void UNetSerializeAllVars(NetworkWriter writer)
|
||||
internal void UNetSerializeAllVars(QSBNetworkWriter writer)
|
||||
{
|
||||
DebugLog.DebugWrite($"Sync all vars (NetId:{NetId}, Gameobject:{gameObject.name})");
|
||||
for (var i = 0; i < m_NetworkBehaviours.Length; i++)
|
||||
{
|
||||
var networkBehaviour = m_NetworkBehaviours[i];
|
||||
@ -383,7 +385,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void HandleSyncEvent(int cmdHash, NetworkReader reader)
|
||||
internal void HandleSyncEvent(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
if (base.gameObject == null)
|
||||
{
|
||||
@ -429,7 +431,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
internal void HandleSyncList(int cmdHash, NetworkReader reader)
|
||||
internal void HandleSyncList(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
if (base.gameObject == null)
|
||||
{
|
||||
@ -475,7 +477,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
internal void HandleCommand(int cmdHash, NetworkReader reader)
|
||||
internal void HandleCommand(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
if (base.gameObject == null)
|
||||
{
|
||||
@ -521,7 +523,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
internal void HandleRPC(int cmdHash, NetworkReader reader)
|
||||
internal void HandleRPC(int cmdHash, QSBNetworkReader reader)
|
||||
{
|
||||
if (base.gameObject == null)
|
||||
{
|
||||
@ -586,6 +588,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
if ((num & (1U << j)) != 0U)
|
||||
{
|
||||
DebugLog.DebugWrite("sending update vars message");
|
||||
s_UpdateWriter.StartMessage(8);
|
||||
s_UpdateWriter.Write(NetId);
|
||||
var flag = false;
|
||||
@ -621,6 +624,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (flag)
|
||||
{
|
||||
DebugLog.DebugWrite("FINISH MESSAGE");
|
||||
s_UpdateWriter.FinishMessage();
|
||||
QSBNetworkServer.SendWriterToReady(base.gameObject, s_UpdateWriter, j);
|
||||
}
|
||||
@ -633,7 +637,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
internal void OnUpdateVars(NetworkReader reader, bool initialState)
|
||||
internal void OnUpdateVars(QSBNetworkReader reader, bool initialState)
|
||||
{
|
||||
if (initialState && m_NetworkBehaviours == null)
|
||||
{
|
||||
@ -854,81 +858,71 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public bool RemoveClientAuthority(QSBNetworkConnection conn)
|
||||
{
|
||||
bool result;
|
||||
if (!IsServer)
|
||||
{
|
||||
Debug.LogError("RemoveClientAuthority can only be call on the server for spawned objects.");
|
||||
result = false;
|
||||
DebugLog.ToConsole($"Warning - Cannot remove authority on client-side. (NetId:{NetId}, Gameobject:{gameObject.name})", MessageType.Warning);
|
||||
return false;
|
||||
}
|
||||
else if (ConnectionToClient != null)
|
||||
{
|
||||
Debug.LogError("RemoveClientAuthority cannot remove authority for a player object");
|
||||
result = false;
|
||||
return false;
|
||||
}
|
||||
else if (ClientAuthorityOwner == null)
|
||||
{
|
||||
Debug.LogError("RemoveClientAuthority for " + base.gameObject + " has no clientAuthority owner.");
|
||||
result = false;
|
||||
return false;
|
||||
}
|
||||
else if (ClientAuthorityOwner != conn)
|
||||
{
|
||||
Debug.LogError("RemoveClientAuthority for " + base.gameObject + " has different owner.");
|
||||
result = false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
ClientAuthorityOwner.RemoveOwnedObject(this);
|
||||
ClientAuthorityOwner = null;
|
||||
ForceAuthority(true);
|
||||
conn.Send(15, new QSBClientAuthorityMessage
|
||||
{
|
||||
ClientAuthorityOwner.RemoveOwnedObject(this);
|
||||
ClientAuthorityOwner = null;
|
||||
ForceAuthority(true);
|
||||
conn.Send(15, new QSBClientAuthorityMessage
|
||||
{
|
||||
netId = NetId,
|
||||
authority = false
|
||||
});
|
||||
clientAuthorityCallback?.Invoke(conn, this, false);
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
netId = NetId,
|
||||
authority = false
|
||||
});
|
||||
clientAuthorityCallback?.Invoke(conn, this, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool AssignClientAuthority(QSBNetworkConnection conn)
|
||||
{
|
||||
bool result;
|
||||
if (!IsServer)
|
||||
{
|
||||
Debug.LogError("AssignClientAuthority can only be call on the server for spawned objects.");
|
||||
result = false;
|
||||
DebugLog.ToConsole($"Warning - Cannot assign authority on client-side. (NetId:{NetId}, Gameobject:{gameObject.name})", MessageType.Warning);
|
||||
return false;
|
||||
}
|
||||
else if (!LocalPlayerAuthority)
|
||||
{
|
||||
Debug.LogError("AssignClientAuthority can only be used for NetworkIdentity component with LocalPlayerAuthority set.");
|
||||
result = false;
|
||||
DebugLog.ToConsole($"Warning - Cannot assign authority on object without LocalPlayerAuthority. (NetId:{NetId}, Gameobject:{gameObject.name})", MessageType.Warning);
|
||||
return false;
|
||||
}
|
||||
else if (ClientAuthorityOwner != null && conn != ClientAuthorityOwner)
|
||||
{
|
||||
Debug.LogError("AssignClientAuthority for " + base.gameObject + " already has an owner. Use RemoveClientAuthority() first.");
|
||||
result = false;
|
||||
return false;
|
||||
}
|
||||
else if (conn == null)
|
||||
{
|
||||
Debug.LogError("AssignClientAuthority for " + base.gameObject + " owner cannot be null. Use RemoveClientAuthority() instead.");
|
||||
result = false;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ClientAuthorityOwner = conn;
|
||||
ClientAuthorityOwner.AddOwnedObject(this);
|
||||
ClientAuthorityOwner = conn;
|
||||
ClientAuthorityOwner.AddOwnedObject(this);
|
||||
|
||||
ForceAuthority(false);
|
||||
conn.Send(15, new QSBClientAuthorityMessage
|
||||
{
|
||||
netId = NetId,
|
||||
authority = true
|
||||
});
|
||||
clientAuthorityCallback?.Invoke(conn, this, true);
|
||||
result = true;
|
||||
}
|
||||
return result;
|
||||
ForceAuthority(false);
|
||||
conn.Send(15, new QSBClientAuthorityMessage
|
||||
{
|
||||
netId = NetId,
|
||||
authority = true
|
||||
});
|
||||
clientAuthorityCallback?.Invoke(conn, this, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
internal void MarkForReset() => m_Reset = true;
|
||||
@ -981,7 +975,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private static uint s_NextNetworkId = 1U;
|
||||
|
||||
private static readonly NetworkWriter s_UpdateWriter = new NetworkWriter();
|
||||
private static readonly QSBNetworkWriter s_UpdateWriter = new QSBNetworkWriter();
|
||||
|
||||
public static ClientAuthorityCallback clientAuthorityCallback;
|
||||
|
||||
|
@ -902,7 +902,7 @@ namespace QSB.QuantumUNET
|
||||
QSBNetworkServer.SetAllClientsNotReady();
|
||||
networkSceneName = newSceneName;
|
||||
s_LoadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName);
|
||||
StringMessage msg = new StringMessage(networkSceneName);
|
||||
QSBStringMessage msg = new QSBStringMessage(networkSceneName);
|
||||
QSBNetworkServer.SendToAll(39, msg);
|
||||
s_StartPositionIndex = 0;
|
||||
s_StartPositions.Clear();
|
||||
@ -1069,7 +1069,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
if (networkSceneName != "" && networkSceneName != m_OfflineScene)
|
||||
{
|
||||
StringMessage msg = new StringMessage(networkSceneName);
|
||||
QSBStringMessage msg = new QSBStringMessage(networkSceneName);
|
||||
netMsg.Connection.Send(39, msg);
|
||||
}
|
||||
if (m_MigrationManager != null)
|
||||
@ -1107,7 +1107,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
Debug.Log("NetworkManager:OnServerAddPlayerMessageInternal");
|
||||
}
|
||||
netMsg.ReadMessage<AddPlayerMessage>(s_AddPlayerMessage);
|
||||
netMsg.ReadMessage<QSBAddPlayerMessage>(s_AddPlayerMessage);
|
||||
if (s_AddPlayerMessage.msgSize != 0)
|
||||
{
|
||||
NetworkReader extraMessageReader = new NetworkReader(s_AddPlayerMessage.msgData);
|
||||
@ -1129,11 +1129,11 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
Debug.Log("NetworkManager:OnServerRemovePlayerMessageInternal");
|
||||
}
|
||||
netMsg.ReadMessage<RemovePlayerMessage>(s_RemovePlayerMessage);
|
||||
netMsg.ReadMessage<QSBRemovePlayerMessage>(s_RemovePlayerMessage);
|
||||
QSBPlayerController player;
|
||||
netMsg.Connection.GetPlayerController(s_RemovePlayerMessage.playerControllerId, out player);
|
||||
netMsg.Connection.GetPlayerController(s_RemovePlayerMessage.PlayerControllerId, out player);
|
||||
OnServerRemovePlayer(netMsg.Connection, player);
|
||||
netMsg.Connection.RemovePlayerController(s_RemovePlayerMessage.playerControllerId);
|
||||
netMsg.Connection.RemovePlayerController(s_RemovePlayerMessage.PlayerControllerId);
|
||||
if (m_MigrationManager != null)
|
||||
{
|
||||
m_MigrationManager.SendPeerInfo();
|
||||
@ -1146,7 +1146,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
Debug.Log("NetworkManager:OnServerErrorInternal");
|
||||
}
|
||||
netMsg.ReadMessage<ErrorMessage>(s_ErrorMessage);
|
||||
netMsg.ReadMessage<QSBErrorMessage>(s_ErrorMessage);
|
||||
this.OnServerError(netMsg.Connection, s_ErrorMessage.errorCode);
|
||||
}
|
||||
|
||||
@ -1209,7 +1209,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
Debug.Log("NetworkManager:OnClientErrorInternal");
|
||||
}
|
||||
netMsg.ReadMessage<ErrorMessage>(s_ErrorMessage);
|
||||
netMsg.ReadMessage<QSBErrorMessage>(s_ErrorMessage);
|
||||
this.OnClientError(netMsg.Connection, s_ErrorMessage.errorCode);
|
||||
}
|
||||
|
||||
@ -1697,11 +1697,11 @@ namespace QSB.QuantumUNET
|
||||
|
||||
public static QSBNetworkManagerUNET singleton;
|
||||
|
||||
private static AddPlayerMessage s_AddPlayerMessage = new AddPlayerMessage();
|
||||
private static QSBAddPlayerMessage s_AddPlayerMessage = new QSBAddPlayerMessage();
|
||||
|
||||
private static RemovePlayerMessage s_RemovePlayerMessage = new RemovePlayerMessage();
|
||||
private static QSBRemovePlayerMessage s_RemovePlayerMessage = new QSBRemovePlayerMessage();
|
||||
|
||||
private static ErrorMessage s_ErrorMessage = new ErrorMessage();
|
||||
private static QSBErrorMessage s_ErrorMessage = new QSBErrorMessage();
|
||||
|
||||
private static AsyncOperation s_LoadingSceneAsync;
|
||||
|
||||
|
@ -8,17 +8,17 @@ namespace QSB.QuantumUNET
|
||||
public const int MaxMessageSize = 65535;
|
||||
public short MsgType;
|
||||
public QSBNetworkConnection Connection;
|
||||
public NetworkReader Reader;
|
||||
public QSBNetworkReader Reader;
|
||||
public int ChannelId;
|
||||
|
||||
public TMsg ReadMessage<TMsg>() where TMsg : MessageBase, new()
|
||||
public TMsg ReadMessage<TMsg>() where TMsg : QSBMessageBase, new()
|
||||
{
|
||||
var result = Activator.CreateInstance<TMsg>();
|
||||
result.Deserialize(Reader);
|
||||
return result;
|
||||
}
|
||||
|
||||
public void ReadMessage<TMsg>(TMsg msg) where TMsg : MessageBase
|
||||
public void ReadMessage<TMsg>(TMsg msg) where TMsg : QSBMessageBase
|
||||
{
|
||||
msg.Deserialize(Reader);
|
||||
}
|
||||
|
@ -169,7 +169,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public PeerInfoMessage[] peers
|
||||
public QSBPeerInfoMessage[] peers
|
||||
{
|
||||
get
|
||||
{
|
||||
@ -206,7 +206,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
internal void AssignAuthorityCallback(QSBNetworkConnection conn, QSBNetworkIdentity uv, bool authorityState)
|
||||
{
|
||||
PeerAuthorityMessage peerAuthorityMessage = new PeerAuthorityMessage();
|
||||
QSBPeerAuthorityMessage peerAuthorityMessage = new QSBPeerAuthorityMessage();
|
||||
peerAuthorityMessage.connectionId = conn.connectionId;
|
||||
peerAuthorityMessage.netId = uv.NetId;
|
||||
peerAuthorityMessage.authorityState = authorityState;
|
||||
@ -241,12 +241,12 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
for (int i = 0; i < this.m_Peers.Length; i++)
|
||||
{
|
||||
PeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
QSBPeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
if (peerInfoMessage.playerIds != null)
|
||||
{
|
||||
for (int j = 0; j < peerInfoMessage.playerIds.Length; j++)
|
||||
{
|
||||
PeerInfoPlayer peerInfoPlayer = peerInfoMessage.playerIds[j];
|
||||
QSBPeerInfoPlayer peerInfoPlayer = peerInfoMessage.playerIds[j];
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"DisablePlayerObjects disable player for ",
|
||||
@ -282,14 +282,14 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
if (this.m_HostMigration)
|
||||
{
|
||||
PeerListMessage peerListMessage = new PeerListMessage();
|
||||
List<PeerInfoMessage> list = new List<PeerInfoMessage>();
|
||||
QSBPeerListMessage peerListMessage = new QSBPeerListMessage();
|
||||
List<QSBPeerInfoMessage> list = new List<QSBPeerInfoMessage>();
|
||||
for (int i = 0; i < QSBNetworkServer.connections.Count; i++)
|
||||
{
|
||||
QSBNetworkConnection networkConnection = QSBNetworkServer.connections[i];
|
||||
if (networkConnection != null)
|
||||
{
|
||||
PeerInfoMessage peerInfoMessage = new PeerInfoMessage();
|
||||
QSBPeerInfoMessage peerInfoMessage = new QSBPeerInfoMessage();
|
||||
string address;
|
||||
int port;
|
||||
NetworkID networkID;
|
||||
@ -309,13 +309,13 @@ namespace QSB.QuantumUNET
|
||||
peerInfoMessage.address = address;
|
||||
peerInfoMessage.isHost = false;
|
||||
}
|
||||
List<PeerInfoPlayer> list2 = new List<PeerInfoPlayer>();
|
||||
List<QSBPeerInfoPlayer> list2 = new List<QSBPeerInfoPlayer>();
|
||||
for (int j = 0; j < networkConnection.PlayerControllers.Count; j++)
|
||||
{
|
||||
QSBPlayerController playerController = networkConnection.PlayerControllers[j];
|
||||
if (playerController != null && playerController.UnetView != null)
|
||||
{
|
||||
PeerInfoPlayer item;
|
||||
QSBPeerInfoPlayer item;
|
||||
item.netId = playerController.UnetView.NetId;
|
||||
item.playerControllerId = playerController.UnetView.PlayerControllerId;
|
||||
list2.Add(item);
|
||||
@ -331,7 +331,7 @@ namespace QSB.QuantumUNET
|
||||
QSBNetworkIdentity component = gameObject.GetComponent<QSBNetworkIdentity>();
|
||||
if (component.PlayerControllerId == -1)
|
||||
{
|
||||
PeerInfoPlayer item2;
|
||||
QSBPeerInfoPlayer item2;
|
||||
item2.netId = netId;
|
||||
item2.playerControllerId = -1;
|
||||
list2.Add(item2);
|
||||
@ -361,7 +361,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private void OnPeerClientAuthority(QSBNetworkMessage netMsg)
|
||||
{
|
||||
PeerAuthorityMessage peerAuthorityMessage = netMsg.ReadMessage<PeerAuthorityMessage>();
|
||||
QSBPeerAuthorityMessage peerAuthorityMessage = netMsg.ReadMessage<QSBPeerAuthorityMessage>();
|
||||
if (LogFilter.logDebug)
|
||||
{
|
||||
Debug.Log("OnPeerClientAuthority for netId:" + peerAuthorityMessage.netId);
|
||||
@ -370,12 +370,12 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
for (int i = 0; i < this.m_Peers.Length; i++)
|
||||
{
|
||||
PeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
QSBPeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
if (peerInfoMessage.connectionId == peerAuthorityMessage.connectionId)
|
||||
{
|
||||
if (peerInfoMessage.playerIds == null)
|
||||
{
|
||||
peerInfoMessage.playerIds = new PeerInfoPlayer[0];
|
||||
peerInfoMessage.playerIds = new QSBPeerInfoPlayer[0];
|
||||
}
|
||||
if (peerAuthorityMessage.authorityState)
|
||||
{
|
||||
@ -386,10 +386,10 @@ namespace QSB.QuantumUNET
|
||||
return;
|
||||
}
|
||||
}
|
||||
PeerInfoPlayer item = default(PeerInfoPlayer);
|
||||
QSBPeerInfoPlayer item = default(QSBPeerInfoPlayer);
|
||||
item.netId = peerAuthorityMessage.netId;
|
||||
item.playerControllerId = -1;
|
||||
peerInfoMessage.playerIds = new List<PeerInfoPlayer>(peerInfoMessage.playerIds)
|
||||
peerInfoMessage.playerIds = new List<QSBPeerInfoPlayer>(peerInfoMessage.playerIds)
|
||||
{
|
||||
item
|
||||
}.ToArray();
|
||||
@ -400,7 +400,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
if (peerInfoMessage.playerIds[k].netId == peerAuthorityMessage.netId)
|
||||
{
|
||||
List<PeerInfoPlayer> list = new List<PeerInfoPlayer>(peerInfoMessage.playerIds);
|
||||
List<QSBPeerInfoPlayer> list = new List<QSBPeerInfoPlayer>(peerInfoMessage.playerIds);
|
||||
list.RemoveAt(k);
|
||||
peerInfoMessage.playerIds = list.ToArray();
|
||||
break;
|
||||
@ -420,7 +420,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
Debug.Log("OnPeerInfo");
|
||||
}
|
||||
netMsg.ReadMessage<PeerListMessage>(this.m_PeerListMessage);
|
||||
netMsg.ReadMessage<QSBPeerListMessage>(this.m_PeerListMessage);
|
||||
this.m_Peers = this.m_PeerListMessage.peers;
|
||||
this.m_OldServerConnectionId = this.m_PeerListMessage.oldServerConnectionId;
|
||||
for (int i = 0; i < this.m_Peers.Length; i++)
|
||||
@ -446,7 +446,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private void OnServerReconnectPlayerMessage(QSBNetworkMessage netMsg)
|
||||
{
|
||||
ReconnectMessage reconnectMessage = netMsg.ReadMessage<ReconnectMessage>();
|
||||
QSBReconnectMessage reconnectMessage = netMsg.ReadMessage<QSBReconnectMessage>();
|
||||
Debug.Log(string.Concat(new object[]
|
||||
{
|
||||
"OnReconnectMessage: connId=",
|
||||
@ -762,7 +762,7 @@ namespace QSB.QuantumUNET
|
||||
this.ReconnectObjectForConnection(newConnection, oldObject, oldConnectionId);
|
||||
}
|
||||
|
||||
protected virtual void OnPeersUpdated(PeerListMessage peers)
|
||||
protected virtual void OnPeersUpdated(QSBPeerListMessage peers)
|
||||
{
|
||||
Debug.Log("NetworkMigrationManager NumPeers " + peers.peers.Length);
|
||||
}
|
||||
@ -780,7 +780,7 @@ namespace QSB.QuantumUNET
|
||||
}));
|
||||
}
|
||||
|
||||
public virtual bool FindNewHost(out PeerInfoMessage newHostInfo, out bool youAreNewHost)
|
||||
public virtual bool FindNewHost(out QSBPeerInfoMessage newHostInfo, out bool youAreNewHost)
|
||||
{
|
||||
bool result;
|
||||
if (this.m_Peers == null)
|
||||
@ -796,7 +796,7 @@ namespace QSB.QuantumUNET
|
||||
else
|
||||
{
|
||||
Debug.Log("NetworkMigrationManager FindLowestHost");
|
||||
newHostInfo = new PeerInfoMessage();
|
||||
newHostInfo = new QSBPeerInfoMessage();
|
||||
newHostInfo.connectionId = 50000;
|
||||
newHostInfo.address = "";
|
||||
newHostInfo.port = 0;
|
||||
@ -810,7 +810,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
for (int i = 0; i < this.m_Peers.Length; i++)
|
||||
{
|
||||
PeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
QSBPeerInfoMessage peerInfoMessage = this.m_Peers[i];
|
||||
if (peerInfoMessage.connectionId != 0)
|
||||
{
|
||||
if (!peerInfoMessage.isHost)
|
||||
@ -1036,11 +1036,11 @@ namespace QSB.QuantumUNET
|
||||
|
||||
private string m_NewHostAddress;
|
||||
|
||||
private PeerInfoMessage m_NewHostInfo = new PeerInfoMessage();
|
||||
private QSBPeerInfoMessage m_NewHostInfo = new QSBPeerInfoMessage();
|
||||
|
||||
private PeerListMessage m_PeerListMessage = new PeerListMessage();
|
||||
private QSBPeerListMessage m_PeerListMessage = new QSBPeerListMessage();
|
||||
|
||||
private PeerInfoMessage[] m_Peers;
|
||||
private QSBPeerInfoMessage[] m_Peers;
|
||||
|
||||
private Dictionary<int, ConnectionPendingPlayers> m_PendingPlayers = new Dictionary<int, ConnectionPendingPlayers>();
|
||||
|
||||
|
568
QSB/QuantumUNET/QSBNetworkReader.cs
Normal file
568
QSB/QuantumUNET/QSBNetworkReader.cs
Normal file
@ -0,0 +1,568 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBNetworkReader
|
||||
{
|
||||
public QSBNetworkReader()
|
||||
{
|
||||
this.m_buf = new QSBNetBuffer();
|
||||
QSBNetworkReader.Initialize();
|
||||
}
|
||||
|
||||
public QSBNetworkReader(QSBNetworkWriter writer)
|
||||
{
|
||||
this.m_buf = new QSBNetBuffer(writer.AsArray());
|
||||
QSBNetworkReader.Initialize();
|
||||
}
|
||||
|
||||
public QSBNetworkReader(byte[] buffer)
|
||||
{
|
||||
this.m_buf = new QSBNetBuffer(buffer);
|
||||
QSBNetworkReader.Initialize();
|
||||
}
|
||||
|
||||
private static void Initialize()
|
||||
{
|
||||
if (QSBNetworkReader.s_Encoding == null)
|
||||
{
|
||||
QSBNetworkReader.s_StringReaderBuffer = new byte[1024];
|
||||
QSBNetworkReader.s_Encoding = new UTF8Encoding();
|
||||
}
|
||||
}
|
||||
|
||||
public uint Position
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_buf.Position;
|
||||
}
|
||||
}
|
||||
|
||||
public int Length
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.m_buf.Length;
|
||||
}
|
||||
}
|
||||
|
||||
public void SeekZero()
|
||||
{
|
||||
this.m_buf.SeekZero();
|
||||
}
|
||||
|
||||
internal void Replace(byte[] buffer)
|
||||
{
|
||||
this.m_buf.Replace(buffer);
|
||||
}
|
||||
|
||||
public uint ReadPackedUInt32()
|
||||
{
|
||||
byte b = this.ReadByte();
|
||||
uint result;
|
||||
if (b < 241)
|
||||
{
|
||||
result = (uint)b;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b2 = this.ReadByte();
|
||||
if (b >= 241 && b <= 248)
|
||||
{
|
||||
result = 240U + 256U * (uint)(b - 241) + (uint)b2;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b3 = this.ReadByte();
|
||||
if (b == 249)
|
||||
{
|
||||
result = 2288U + 256U * (uint)b2 + (uint)b3;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b4 = this.ReadByte();
|
||||
if (b == 250)
|
||||
{
|
||||
result = (uint)((int)b2 + ((int)b3 << 8) + ((int)b4 << 16));
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b5 = this.ReadByte();
|
||||
if (b < 251)
|
||||
{
|
||||
throw new IndexOutOfRangeException("ReadPackedUInt32() failure: " + b);
|
||||
}
|
||||
result = (uint)((int)b2 + ((int)b3 << 8) + ((int)b4 << 16) + ((int)b5 << 24));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public ulong ReadPackedUInt64()
|
||||
{
|
||||
byte b = this.ReadByte();
|
||||
ulong result;
|
||||
if (b < 241)
|
||||
{
|
||||
result = (ulong)b;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b2 = this.ReadByte();
|
||||
if (b >= 241 && b <= 248)
|
||||
{
|
||||
result = 240UL + 256UL * ((ulong)b - 241UL) + (ulong)b2;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b3 = this.ReadByte();
|
||||
if (b == 249)
|
||||
{
|
||||
result = 2288UL + 256UL * (ulong)b2 + (ulong)b3;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b4 = this.ReadByte();
|
||||
if (b == 250)
|
||||
{
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b5 = this.ReadByte();
|
||||
if (b == 251)
|
||||
{
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b6 = this.ReadByte();
|
||||
if (b == 252)
|
||||
{
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b7 = this.ReadByte();
|
||||
if (b == 253)
|
||||
{
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32) + ((ulong)b7 << 40);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b8 = this.ReadByte();
|
||||
if (b == 254)
|
||||
{
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32) + ((ulong)b7 << 40) + ((ulong)b8 << 48);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte b9 = this.ReadByte();
|
||||
if (b != 255)
|
||||
{
|
||||
throw new IndexOutOfRangeException("ReadPackedUInt64() failure: " + b);
|
||||
}
|
||||
result = (ulong)b2 + ((ulong)b3 << 8) + ((ulong)b4 << 16) + ((ulong)b5 << 24) + ((ulong)b6 << 32) + ((ulong)b7 << 40) + ((ulong)b8 << 48) + ((ulong)b9 << 56);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public NetworkInstanceId ReadNetworkId()
|
||||
{
|
||||
return new NetworkInstanceId(this.ReadPackedUInt32());
|
||||
}
|
||||
|
||||
public NetworkSceneId ReadSceneId()
|
||||
{
|
||||
return new NetworkSceneId(this.ReadPackedUInt32());
|
||||
}
|
||||
|
||||
public byte ReadByte()
|
||||
{
|
||||
return this.m_buf.ReadByte();
|
||||
}
|
||||
|
||||
public sbyte ReadSByte()
|
||||
{
|
||||
return (sbyte)this.m_buf.ReadByte();
|
||||
}
|
||||
|
||||
public short ReadInt16()
|
||||
{
|
||||
ushort num = 0;
|
||||
num |= (ushort)this.m_buf.ReadByte();
|
||||
num |= (ushort)(this.m_buf.ReadByte() << 8);
|
||||
return (short)num;
|
||||
}
|
||||
|
||||
public ushort ReadUInt16()
|
||||
{
|
||||
return (ushort)((uint)(ushort)(0U | (uint)this.m_buf.ReadByte()) | (uint)(ushort)((uint)this.m_buf.ReadByte() << 8));
|
||||
}
|
||||
|
||||
public int ReadInt32()
|
||||
{
|
||||
uint num = 0U;
|
||||
num |= (uint)this.m_buf.ReadByte();
|
||||
num |= (uint)((uint)this.m_buf.ReadByte() << 8);
|
||||
num |= (uint)((uint)this.m_buf.ReadByte() << 16);
|
||||
return (int)(num | (uint)((uint)this.m_buf.ReadByte() << 24));
|
||||
}
|
||||
|
||||
public uint ReadUInt32()
|
||||
{
|
||||
uint num = 0U;
|
||||
num |= (uint)this.m_buf.ReadByte();
|
||||
num |= (uint)((uint)this.m_buf.ReadByte() << 8);
|
||||
num |= (uint)((uint)this.m_buf.ReadByte() << 16);
|
||||
return num | (uint)((uint)this.m_buf.ReadByte() << 24);
|
||||
}
|
||||
|
||||
public long ReadInt64()
|
||||
{
|
||||
ulong num = 0UL;
|
||||
ulong num2 = (ulong)this.m_buf.ReadByte();
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 8;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 16;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 24;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 32;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 40;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 48;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 56;
|
||||
return (long)(num | num2);
|
||||
}
|
||||
|
||||
public ulong ReadUInt64()
|
||||
{
|
||||
ulong num = 0UL;
|
||||
ulong num2 = (ulong)this.m_buf.ReadByte();
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 8;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 16;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 24;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 32;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 40;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 48;
|
||||
num |= num2;
|
||||
num2 = (ulong)this.m_buf.ReadByte() << 56;
|
||||
return num | num2;
|
||||
}
|
||||
|
||||
public decimal ReadDecimal()
|
||||
{
|
||||
return new decimal(new int[]
|
||||
{
|
||||
this.ReadInt32(),
|
||||
this.ReadInt32(),
|
||||
this.ReadInt32(),
|
||||
this.ReadInt32()
|
||||
});
|
||||
}
|
||||
|
||||
public float ReadSingle()
|
||||
{
|
||||
uint value = this.ReadUInt32();
|
||||
return QSBFloatConversion.ToSingle(value);
|
||||
}
|
||||
|
||||
public double ReadDouble()
|
||||
{
|
||||
ulong value = this.ReadUInt64();
|
||||
return QSBFloatConversion.ToDouble(value);
|
||||
}
|
||||
|
||||
public string ReadString()
|
||||
{
|
||||
ushort num = this.ReadUInt16();
|
||||
string result;
|
||||
if (num == 0)
|
||||
{
|
||||
result = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (num >= 32768)
|
||||
{
|
||||
throw new IndexOutOfRangeException("ReadString() too long: " + num);
|
||||
}
|
||||
while ((int)num > QSBNetworkReader.s_StringReaderBuffer.Length)
|
||||
{
|
||||
QSBNetworkReader.s_StringReaderBuffer = new byte[QSBNetworkReader.s_StringReaderBuffer.Length * 2];
|
||||
}
|
||||
this.m_buf.ReadBytes(QSBNetworkReader.s_StringReaderBuffer, (uint)num);
|
||||
char[] chars = QSBNetworkReader.s_Encoding.GetChars(QSBNetworkReader.s_StringReaderBuffer, 0, (int)num);
|
||||
result = new string(chars);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public char ReadChar()
|
||||
{
|
||||
return (char)this.m_buf.ReadByte();
|
||||
}
|
||||
|
||||
public bool ReadBoolean()
|
||||
{
|
||||
int num = (int)this.m_buf.ReadByte();
|
||||
return num == 1;
|
||||
}
|
||||
|
||||
public byte[] ReadBytes(int count)
|
||||
{
|
||||
if (count < 0)
|
||||
{
|
||||
throw new IndexOutOfRangeException("NetworkReader ReadBytes " + count);
|
||||
}
|
||||
byte[] array = new byte[count];
|
||||
this.m_buf.ReadBytes(array, (uint)count);
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] ReadBytesAndSize()
|
||||
{
|
||||
ushort num = this.ReadUInt16();
|
||||
byte[] result;
|
||||
if (num == 0)
|
||||
{
|
||||
result = new byte[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
result = this.ReadBytes((int)num);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Vector2 ReadVector2()
|
||||
{
|
||||
return new Vector2(this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Vector3 ReadVector3()
|
||||
{
|
||||
return new Vector3(this.ReadSingle(), this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Vector4 ReadVector4()
|
||||
{
|
||||
return new Vector4(this.ReadSingle(), this.ReadSingle(), this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Color ReadColor()
|
||||
{
|
||||
return new Color(this.ReadSingle(), this.ReadSingle(), this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Color32 ReadColor32()
|
||||
{
|
||||
return new Color32(this.ReadByte(), this.ReadByte(), this.ReadByte(), this.ReadByte());
|
||||
}
|
||||
|
||||
public Quaternion ReadQuaternion()
|
||||
{
|
||||
return new Quaternion(this.ReadSingle(), this.ReadSingle(), this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Rect ReadRect()
|
||||
{
|
||||
return new Rect(this.ReadSingle(), this.ReadSingle(), this.ReadSingle(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Plane ReadPlane()
|
||||
{
|
||||
return new Plane(this.ReadVector3(), this.ReadSingle());
|
||||
}
|
||||
|
||||
public Ray ReadRay()
|
||||
{
|
||||
return new Ray(this.ReadVector3(), this.ReadVector3());
|
||||
}
|
||||
|
||||
public Matrix4x4 ReadMatrix4x4()
|
||||
{
|
||||
return new Matrix4x4
|
||||
{
|
||||
m00 = this.ReadSingle(),
|
||||
m01 = this.ReadSingle(),
|
||||
m02 = this.ReadSingle(),
|
||||
m03 = this.ReadSingle(),
|
||||
m10 = this.ReadSingle(),
|
||||
m11 = this.ReadSingle(),
|
||||
m12 = this.ReadSingle(),
|
||||
m13 = this.ReadSingle(),
|
||||
m20 = this.ReadSingle(),
|
||||
m21 = this.ReadSingle(),
|
||||
m22 = this.ReadSingle(),
|
||||
m23 = this.ReadSingle(),
|
||||
m30 = this.ReadSingle(),
|
||||
m31 = this.ReadSingle(),
|
||||
m32 = this.ReadSingle(),
|
||||
m33 = this.ReadSingle()
|
||||
};
|
||||
}
|
||||
|
||||
public NetworkHash128 ReadNetworkHash128()
|
||||
{
|
||||
NetworkHash128 result;
|
||||
result.i0 = this.ReadByte();
|
||||
result.i1 = this.ReadByte();
|
||||
result.i2 = this.ReadByte();
|
||||
result.i3 = this.ReadByte();
|
||||
result.i4 = this.ReadByte();
|
||||
result.i5 = this.ReadByte();
|
||||
result.i6 = this.ReadByte();
|
||||
result.i7 = this.ReadByte();
|
||||
result.i8 = this.ReadByte();
|
||||
result.i9 = this.ReadByte();
|
||||
result.i10 = this.ReadByte();
|
||||
result.i11 = this.ReadByte();
|
||||
result.i12 = this.ReadByte();
|
||||
result.i13 = this.ReadByte();
|
||||
result.i14 = this.ReadByte();
|
||||
result.i15 = this.ReadByte();
|
||||
return result;
|
||||
}
|
||||
|
||||
public Transform ReadTransform()
|
||||
{
|
||||
NetworkInstanceId networkInstanceId = this.ReadNetworkId();
|
||||
Transform result;
|
||||
if (networkInstanceId.IsEmpty())
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
GameObject gameObject = ClientScene.FindLocalObject(networkInstanceId);
|
||||
if (gameObject == null)
|
||||
{
|
||||
if (LogFilter.logDebug)
|
||||
{
|
||||
Debug.Log("ReadTransform netId:" + networkInstanceId);
|
||||
}
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = gameObject.transform;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public GameObject ReadGameObject()
|
||||
{
|
||||
NetworkInstanceId networkInstanceId = this.ReadNetworkId();
|
||||
GameObject result;
|
||||
if (networkInstanceId.IsEmpty())
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
GameObject gameObject;
|
||||
if (QSBNetworkServer.active)
|
||||
{
|
||||
gameObject = QSBNetworkServer.FindLocalObject(networkInstanceId);
|
||||
}
|
||||
else
|
||||
{
|
||||
gameObject = QSBClientScene.FindLocalObject(networkInstanceId);
|
||||
}
|
||||
if (gameObject == null)
|
||||
{
|
||||
if (LogFilter.logDebug)
|
||||
{
|
||||
Debug.Log("ReadGameObject netId:" + networkInstanceId + "go: null");
|
||||
}
|
||||
}
|
||||
result = gameObject;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public QSBNetworkIdentity ReadNetworkIdentity()
|
||||
{
|
||||
NetworkInstanceId networkInstanceId = this.ReadNetworkId();
|
||||
QSBNetworkIdentity result;
|
||||
if (networkInstanceId.IsEmpty())
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
GameObject gameObject;
|
||||
if (QSBNetworkServer.active)
|
||||
{
|
||||
gameObject = QSBNetworkServer.FindLocalObject(networkInstanceId);
|
||||
}
|
||||
else
|
||||
{
|
||||
gameObject = QSBClientScene.FindLocalObject(networkInstanceId);
|
||||
}
|
||||
if (gameObject == null)
|
||||
{
|
||||
if (LogFilter.logDebug)
|
||||
{
|
||||
Debug.Log("ReadNetworkIdentity netId:" + networkInstanceId + "go: null");
|
||||
}
|
||||
result = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = gameObject.GetComponent<QSBNetworkIdentity>();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return this.m_buf.ToString();
|
||||
}
|
||||
|
||||
public TMsg ReadMessage<TMsg>() where TMsg : QSBMessageBase, new()
|
||||
{
|
||||
TMsg result = Activator.CreateInstance<TMsg>();
|
||||
result.Deserialize(this);
|
||||
return result;
|
||||
}
|
||||
|
||||
private QSBNetBuffer m_buf;
|
||||
|
||||
private const int k_MaxStringLength = 32768;
|
||||
|
||||
private const int k_InitialStringBufferSize = 1024;
|
||||
|
||||
private static byte[] s_StringReaderBuffer;
|
||||
|
||||
private static Encoding s_Encoding;
|
||||
}
|
||||
}
|
@ -235,7 +235,7 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
m_SimpleServerSimple.RegisterHandlerSafe((short)35, new QSBNetworkMessageDelegate(OnClientReadyMessage));
|
||||
m_SimpleServerSimple.RegisterHandlerSafe((short)5, new QSBNetworkMessageDelegate(OnCommandMessage));
|
||||
m_SimpleServerSimple.RegisterHandlerSafe((short)6, new QSBNetworkMessageDelegate(QSBNetworkTransform.HandleTransform));
|
||||
m_SimpleServerSimple.RegisterHandlerSafe(6, new QSBNetworkMessageDelegate(QSBNetworkTransform.HandleTransform));
|
||||
//m_SimpleServerSimple.RegisterHandlerSafe((short)16, new QSBNetworkMessageDelegate(NetworkTransformChild.HandleChildTransform));
|
||||
m_SimpleServerSimple.RegisterHandlerSafe((short)38, new QSBNetworkMessageDelegate(OnRemovePlayerMessage));
|
||||
m_SimpleServerSimple.RegisterHandlerSafe((short)40, new QSBNetworkMessageDelegate(QSBNetworkAnimator.OnAnimationServerMessage));
|
||||
@ -282,12 +282,12 @@ namespace QSB.QuantumUNET
|
||||
return true;
|
||||
}
|
||||
|
||||
public static QSBNetworkClient BecomeHost(QSBNetworkClient oldClient, int port, MatchInfo matchInfo, int oldConnectionId, PeerInfoMessage[] peers)
|
||||
public static QSBNetworkClient BecomeHost(QSBNetworkClient oldClient, int port, MatchInfo matchInfo, int oldConnectionId, QSBPeerInfoMessage[] peers)
|
||||
{
|
||||
return instance.BecomeHostInternal(oldClient, port, matchInfo, oldConnectionId, peers);
|
||||
}
|
||||
|
||||
internal QSBNetworkClient BecomeHostInternal(QSBNetworkClient oldClient, int port, MatchInfo matchInfo, int oldConnectionId, PeerInfoMessage[] peers)
|
||||
internal QSBNetworkClient BecomeHostInternal(QSBNetworkClient oldClient, int port, MatchInfo matchInfo, int oldConnectionId, QSBPeerInfoMessage[] peers)
|
||||
{
|
||||
QSBNetworkClient result;
|
||||
if (s_Active)
|
||||
@ -442,7 +442,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public static bool SendToAll(short msgType, MessageBase msg)
|
||||
public static bool SendToAll(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
Debug.Log("Server.SendToAll msgType:" + msgType);
|
||||
var flag = true;
|
||||
@ -457,7 +457,7 @@ namespace QSB.QuantumUNET
|
||||
return flag;
|
||||
}
|
||||
|
||||
private static bool SendToObservers(GameObject contextObj, short msgType, MessageBase msg)
|
||||
private static bool SendToObservers(GameObject contextObj, short msgType, QSBMessageBase msg)
|
||||
{
|
||||
Debug.Log("Server.SendToObservers id:" + msgType);
|
||||
var flag = true;
|
||||
@ -480,7 +480,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool SendToReady(GameObject contextObj, short msgType, MessageBase msg)
|
||||
public static bool SendToReady(GameObject contextObj, short msgType, QSBMessageBase msg)
|
||||
{
|
||||
Debug.Log("Server.SendToReady id:" + msgType);
|
||||
bool result;
|
||||
@ -521,18 +521,21 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void SendWriterToReady(GameObject contextObj, NetworkWriter writer, int channelId)
|
||||
public static void SendWriterToReady(GameObject contextObj, QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
DebugLog.DebugWrite("send writer to ready");
|
||||
var arraySegment = (ArraySegment<byte>)writer.GetType().GetMethod("AsArraySegment").Invoke(writer, null);
|
||||
if (arraySegment.Count > 32767)
|
||||
{
|
||||
throw new UnityException("NetworkWriter used buffer is too big!");
|
||||
}
|
||||
DebugLog.DebugWrite("pre send bytes");
|
||||
SendBytesToReady(contextObj, arraySegment.Array, arraySegment.Count, channelId);
|
||||
}
|
||||
|
||||
public static void SendBytesToReady(GameObject contextObj, byte[] buffer, int numBytes, int channelId)
|
||||
{
|
||||
DebugLog.DebugWrite("send bytes to ready");
|
||||
if (contextObj == null)
|
||||
{
|
||||
var flag = true;
|
||||
@ -541,18 +544,20 @@ namespace QSB.QuantumUNET
|
||||
var networkConnection = connections[i];
|
||||
if (networkConnection != null && networkConnection.isReady)
|
||||
{
|
||||
DebugLog.DebugWrite($"sending bytes to connection {networkConnection.connectionId}");
|
||||
if (!networkConnection.SendBytes(buffer, numBytes, channelId))
|
||||
{
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.DebugWrite($"- Connection {networkConnection.connectionId} is not ready!");
|
||||
}
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("SendBytesToReady failed");
|
||||
}
|
||||
DebugLog.DebugWrite("SendBytesToReady failed");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -567,26 +572,25 @@ namespace QSB.QuantumUNET
|
||||
var networkConnection2 = component.Observers[j];
|
||||
if (networkConnection2.isReady)
|
||||
{
|
||||
DebugLog.DebugWrite($"sending bytes to connection {networkConnection2.connectionId}");
|
||||
if (!networkConnection2.SendBytes(buffer, numBytes, channelId))
|
||||
{
|
||||
flag2 = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog.DebugWrite($"- Connection {networkConnection2.connectionId} is not ready!");
|
||||
}
|
||||
}
|
||||
if (!flag2)
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("SendBytesToReady failed for " + contextObj);
|
||||
}
|
||||
DebugLog.DebugWrite("SendBytesToReady failed for " + contextObj);
|
||||
}
|
||||
}
|
||||
catch (NullReferenceException)
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("SendBytesToReady object " + contextObj + " has not been spawned");
|
||||
}
|
||||
DebugLog.DebugWrite("SendBytesToReady object " + contextObj + " has not been spawned");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -610,7 +614,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public static bool SendUnreliableToAll(short msgType, MessageBase msg)
|
||||
public static bool SendUnreliableToAll(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
Debug.Log("Server.SendUnreliableToAll msgType:" + msgType);
|
||||
var flag = true;
|
||||
@ -625,7 +629,7 @@ namespace QSB.QuantumUNET
|
||||
return flag;
|
||||
}
|
||||
|
||||
public static bool SendUnreliableToReady(GameObject contextObj, short msgType, MessageBase msg)
|
||||
public static bool SendUnreliableToReady(GameObject contextObj, short msgType, QSBMessageBase msg)
|
||||
{
|
||||
Debug.Log("Server.SendUnreliableToReady id:" + msgType);
|
||||
bool result;
|
||||
@ -659,7 +663,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool SendByChannelToAll(short msgType, MessageBase msg, int channelId)
|
||||
public static bool SendByChannelToAll(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
Debug.Log("Server.SendByChannelToAll id:" + msgType);
|
||||
var flag = true;
|
||||
@ -674,7 +678,7 @@ namespace QSB.QuantumUNET
|
||||
return flag;
|
||||
}
|
||||
|
||||
public static bool SendByChannelToReady(GameObject contextObj, short msgType, MessageBase msg, int channelId)
|
||||
public static bool SendByChannelToReady(GameObject contextObj, short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
Debug.Log("Server.SendByChannelToReady msgType:" + msgType);
|
||||
bool result;
|
||||
@ -857,11 +861,11 @@ namespace QSB.QuantumUNET
|
||||
{
|
||||
if (handlers.ContainsKey(34))
|
||||
{
|
||||
var errorMessage = new ErrorMessage();
|
||||
var errorMessage = new QSBErrorMessage();
|
||||
errorMessage.errorCode = error;
|
||||
var writer = new NetworkWriter();
|
||||
var writer = new QSBNetworkWriter();
|
||||
errorMessage.Serialize(writer);
|
||||
var reader = new NetworkReader(writer);
|
||||
var reader = new QSBNetworkReader(writer);
|
||||
conn.InvokeHandler(34, reader, 0);
|
||||
}
|
||||
}
|
||||
@ -928,7 +932,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendToClientOfPlayer(GameObject player, short msgType, MessageBase msg)
|
||||
public static void SendToClientOfPlayer(GameObject player, short msgType, QSBMessageBase msg)
|
||||
{
|
||||
for (var i = 0; i < connections.Count; i++)
|
||||
{
|
||||
@ -952,7 +956,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public static void SendToClient(int connectionId, short msgType, MessageBase msg)
|
||||
public static void SendToClient(int connectionId, short msgType, QSBMessageBase msg)
|
||||
{
|
||||
if (connectionId < connections.Count)
|
||||
{
|
||||
@ -1361,7 +1365,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
conn.isReady = false;
|
||||
conn.RemoveObservers();
|
||||
var msg = new NotReadyMessage();
|
||||
var msg = new QSBNotReadyMessage();
|
||||
conn.Send(36, msg);
|
||||
}
|
||||
}
|
||||
@ -1491,7 +1495,7 @@ namespace QSB.QuantumUNET
|
||||
objectSpawnMessage.assetId = uv.AssetId;
|
||||
objectSpawnMessage.Position = uv.transform.position;
|
||||
objectSpawnMessage.Rotation = uv.transform.rotation;
|
||||
var networkWriter = new NetworkWriter();
|
||||
var networkWriter = new QSBNetworkWriter();
|
||||
uv.UNetSerializeAllVars(networkWriter);
|
||||
if (networkWriter.Position > 0)
|
||||
{
|
||||
@ -1512,7 +1516,7 @@ namespace QSB.QuantumUNET
|
||||
objectSpawnSceneMessage.NetId = uv.NetId;
|
||||
objectSpawnSceneMessage.SceneId = uv.SceneId;
|
||||
objectSpawnSceneMessage.Position = uv.transform.position;
|
||||
var networkWriter2 = new NetworkWriter();
|
||||
var networkWriter2 = new QSBNetworkWriter();
|
||||
uv.UNetSerializeAllVars(networkWriter2);
|
||||
if (networkWriter2.Position > 0)
|
||||
{
|
||||
@ -1736,7 +1740,7 @@ namespace QSB.QuantumUNET
|
||||
|
||||
internal bool InvokeBytes(QSBULocalConnectionToServer conn, byte[] buffer, int numBytes, int channelId)
|
||||
{
|
||||
var networkReader = new NetworkReader(buffer);
|
||||
var networkReader = new QSBNetworkReader(buffer);
|
||||
networkReader.ReadInt16();
|
||||
var num = networkReader.ReadInt16();
|
||||
bool result;
|
||||
@ -1752,14 +1756,14 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
internal bool InvokeHandlerOnServer(QSBULocalConnectionToServer conn, short msgType, MessageBase msg, int channelId)
|
||||
internal bool InvokeHandlerOnServer(QSBULocalConnectionToServer conn, short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
bool result;
|
||||
if (handlers.ContainsKey(msgType) && m_LocalConnection != null)
|
||||
{
|
||||
var writer = new NetworkWriter();
|
||||
var writer = new QSBNetworkWriter();
|
||||
msg.Serialize(writer);
|
||||
var reader = new NetworkReader(writer);
|
||||
var reader = new QSBNetworkReader(writer);
|
||||
m_LocalConnection.InvokeHandler(msgType, reader, channelId);
|
||||
result = true;
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using QSB.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using UnityEngine;
|
||||
@ -235,7 +236,8 @@ namespace QSB.QuantumUNET
|
||||
|
||||
internal void RegisterHandlerSafe(short msgType, QSBNetworkMessageDelegate handler)
|
||||
{
|
||||
this.m_MessageHandlers.RegisterHandlerSafe(msgType, handler);
|
||||
DebugLog.DebugWrite($"Registering message {msgType}.");
|
||||
m_MessageHandlers.RegisterHandlerSafe(msgType, handler);
|
||||
}
|
||||
|
||||
public void RegisterHandler(short msgType, QSBNetworkMessageDelegate handler)
|
||||
@ -498,7 +500,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public void SendWriterTo(int connectionId, NetworkWriter writer, int channelId)
|
||||
public void SendWriterTo(int connectionId, QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
QSBNetworkConnection networkConnection = this.FindConnection(connectionId);
|
||||
if (networkConnection != null)
|
||||
|
File diff suppressed because it is too large
Load Diff
541
QSB/QuantumUNET/QSBNetworkWriter.cs
Normal file
541
QSB/QuantumUNET/QSBNetworkWriter.cs
Normal file
@ -0,0 +1,541 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBNetworkWriter
|
||||
{
|
||||
public QSBNetworkWriter()
|
||||
{
|
||||
this.m_Buffer = new QSBNetBuffer();
|
||||
if (s_Encoding == null)
|
||||
{
|
||||
s_Encoding = new UTF8Encoding();
|
||||
s_StringWriteBuffer = new byte[32768];
|
||||
}
|
||||
}
|
||||
|
||||
public QSBNetworkWriter(byte[] buffer)
|
||||
{
|
||||
this.m_Buffer = new QSBNetBuffer(buffer);
|
||||
if (s_Encoding == null)
|
||||
{
|
||||
s_Encoding = new UTF8Encoding();
|
||||
s_StringWriteBuffer = new byte[32768];
|
||||
}
|
||||
}
|
||||
|
||||
public short Position
|
||||
{
|
||||
get
|
||||
{
|
||||
return (short)this.m_Buffer.Position;
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] ToArray()
|
||||
{
|
||||
byte[] array = new byte[this.m_Buffer.AsArraySegment().Count];
|
||||
Array.Copy(this.m_Buffer.AsArraySegment().Array, array, this.m_Buffer.AsArraySegment().Count);
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] AsArray()
|
||||
{
|
||||
return this.AsArraySegment().Array;
|
||||
}
|
||||
|
||||
internal ArraySegment<byte> AsArraySegment()
|
||||
{
|
||||
return this.m_Buffer.AsArraySegment();
|
||||
}
|
||||
|
||||
public void WritePackedUInt32(uint value)
|
||||
{
|
||||
if (value <= 240U)
|
||||
{
|
||||
this.Write((byte)value);
|
||||
}
|
||||
else if (value <= 2287U)
|
||||
{
|
||||
this.Write((byte)((value - 240U) / 256U + 241U));
|
||||
this.Write((byte)((value - 240U) % 256U));
|
||||
}
|
||||
else if (value <= 67823U)
|
||||
{
|
||||
this.Write(249);
|
||||
this.Write((byte)((value - 2288U) / 256U));
|
||||
this.Write((byte)((value - 2288U) % 256U));
|
||||
}
|
||||
else if (value <= 16777215U)
|
||||
{
|
||||
this.Write(250);
|
||||
this.Write((byte)(value & 255U));
|
||||
this.Write((byte)(value >> 8 & 255U));
|
||||
this.Write((byte)(value >> 16 & 255U));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Write(251);
|
||||
this.Write((byte)(value & 255U));
|
||||
this.Write((byte)(value >> 8 & 255U));
|
||||
this.Write((byte)(value >> 16 & 255U));
|
||||
this.Write((byte)(value >> 24 & 255U));
|
||||
}
|
||||
}
|
||||
|
||||
public void WritePackedUInt64(ulong value)
|
||||
{
|
||||
if (value <= 240UL)
|
||||
{
|
||||
this.Write((byte)value);
|
||||
}
|
||||
else if (value <= 2287UL)
|
||||
{
|
||||
this.Write((byte)((value - 240UL) / 256UL + 241UL));
|
||||
this.Write((byte)((value - 240UL) % 256UL));
|
||||
}
|
||||
else if (value <= 67823UL)
|
||||
{
|
||||
this.Write(249);
|
||||
this.Write((byte)((value - 2288UL) / 256UL));
|
||||
this.Write((byte)((value - 2288UL) % 256UL));
|
||||
}
|
||||
else if (value <= 16777215UL)
|
||||
{
|
||||
this.Write(250);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
}
|
||||
else if (value <= uint.MaxValue)
|
||||
{
|
||||
this.Write(251);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
this.Write((byte)(value >> 24 & 255UL));
|
||||
}
|
||||
else if (value <= 1099511627775UL)
|
||||
{
|
||||
this.Write(252);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
this.Write((byte)(value >> 24 & 255UL));
|
||||
this.Write((byte)(value >> 32 & 255UL));
|
||||
}
|
||||
else if (value <= 281474976710655UL)
|
||||
{
|
||||
this.Write(253);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
this.Write((byte)(value >> 24 & 255UL));
|
||||
this.Write((byte)(value >> 32 & 255UL));
|
||||
this.Write((byte)(value >> 40 & 255UL));
|
||||
}
|
||||
else if (value <= 72057594037927935UL)
|
||||
{
|
||||
this.Write(254);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
this.Write((byte)(value >> 24 & 255UL));
|
||||
this.Write((byte)(value >> 32 & 255UL));
|
||||
this.Write((byte)(value >> 40 & 255UL));
|
||||
this.Write((byte)(value >> 48 & 255UL));
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Write(byte.MaxValue);
|
||||
this.Write((byte)(value & 255UL));
|
||||
this.Write((byte)(value >> 8 & 255UL));
|
||||
this.Write((byte)(value >> 16 & 255UL));
|
||||
this.Write((byte)(value >> 24 & 255UL));
|
||||
this.Write((byte)(value >> 32 & 255UL));
|
||||
this.Write((byte)(value >> 40 & 255UL));
|
||||
this.Write((byte)(value >> 48 & 255UL));
|
||||
this.Write((byte)(value >> 56 & 255UL));
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(NetworkInstanceId value)
|
||||
{
|
||||
this.WritePackedUInt32(value.Value);
|
||||
}
|
||||
|
||||
public void Write(NetworkSceneId value)
|
||||
{
|
||||
this.WritePackedUInt32(value.Value);
|
||||
}
|
||||
|
||||
public void Write(char value)
|
||||
{
|
||||
this.m_Buffer.WriteByte((byte)value);
|
||||
}
|
||||
|
||||
public void Write(byte value)
|
||||
{
|
||||
this.m_Buffer.WriteByte(value);
|
||||
}
|
||||
|
||||
public void Write(sbyte value)
|
||||
{
|
||||
this.m_Buffer.WriteByte((byte)value);
|
||||
}
|
||||
|
||||
public void Write(short value)
|
||||
{
|
||||
this.m_Buffer.WriteByte2((byte)(value & 255), (byte)(value >> 8 & 255));
|
||||
}
|
||||
|
||||
public void Write(ushort value)
|
||||
{
|
||||
this.m_Buffer.WriteByte2((byte)(value & 255), (byte)(value >> 8 & 255));
|
||||
}
|
||||
|
||||
public void Write(int value)
|
||||
{
|
||||
this.m_Buffer.WriteByte4((byte)(value & 255), (byte)(value >> 8 & 255), (byte)(value >> 16 & 255), (byte)(value >> 24 & 255));
|
||||
}
|
||||
|
||||
public void Write(uint value)
|
||||
{
|
||||
this.m_Buffer.WriteByte4((byte)(value & 255U), (byte)(value >> 8 & 255U), (byte)(value >> 16 & 255U), (byte)(value >> 24 & 255U));
|
||||
}
|
||||
|
||||
public void Write(long value)
|
||||
{
|
||||
this.m_Buffer.WriteByte8((byte)(value & 255L), (byte)(value >> 8 & 255L), (byte)(value >> 16 & 255L), (byte)(value >> 24 & 255L), (byte)(value >> 32 & 255L), (byte)(value >> 40 & 255L), (byte)(value >> 48 & 255L), (byte)(value >> 56 & 255L));
|
||||
}
|
||||
|
||||
public void Write(ulong value)
|
||||
{
|
||||
this.m_Buffer.WriteByte8((byte)(value & 255UL), (byte)(value >> 8 & 255UL), (byte)(value >> 16 & 255UL), (byte)(value >> 24 & 255UL), (byte)(value >> 32 & 255UL), (byte)(value >> 40 & 255UL), (byte)(value >> 48 & 255UL), (byte)(value >> 56 & 255UL));
|
||||
}
|
||||
|
||||
public void Write(float value)
|
||||
{
|
||||
s_FloatConverter.floatValue = value;
|
||||
this.Write(s_FloatConverter.intValue);
|
||||
}
|
||||
|
||||
public void Write(double value)
|
||||
{
|
||||
s_FloatConverter.doubleValue = value;
|
||||
this.Write(s_FloatConverter.longValue);
|
||||
}
|
||||
|
||||
public void Write(decimal value)
|
||||
{
|
||||
int[] bits = decimal.GetBits(value);
|
||||
this.Write(bits[0]);
|
||||
this.Write(bits[1]);
|
||||
this.Write(bits[2]);
|
||||
this.Write(bits[3]);
|
||||
}
|
||||
|
||||
public void Write(string value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
this.m_Buffer.WriteByte2(0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
int byteCount = s_Encoding.GetByteCount(value);
|
||||
if (byteCount >= 32768)
|
||||
{
|
||||
throw new IndexOutOfRangeException("Serialize(string) too long: " + value.Length);
|
||||
}
|
||||
this.Write((ushort)byteCount);
|
||||
int bytes = s_Encoding.GetBytes(value, 0, value.Length, s_StringWriteBuffer, 0);
|
||||
this.m_Buffer.WriteBytes(s_StringWriteBuffer, (ushort)bytes);
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(bool value)
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
this.m_Buffer.WriteByte(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.m_Buffer.WriteByte(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(byte[] buffer, int count)
|
||||
{
|
||||
if (count > 65535)
|
||||
{
|
||||
if (LogFilter.logError)
|
||||
{
|
||||
Debug.LogError("NetworkWriter Write: buffer is too large (" + count + ") bytes. The maximum buffer size is 64K bytes.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.m_Buffer.WriteBytes(buffer, (ushort)count);
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(byte[] buffer, int offset, int count)
|
||||
{
|
||||
if (count > 65535)
|
||||
{
|
||||
if (LogFilter.logError)
|
||||
{
|
||||
Debug.LogError("NetworkWriter Write: buffer is too large (" + count + ") bytes. The maximum buffer size is 64K bytes.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.m_Buffer.WriteBytesAtOffset(buffer, (ushort)offset, (ushort)count);
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteBytesAndSize(byte[] buffer, int count)
|
||||
{
|
||||
if (buffer == null || count == 0)
|
||||
{
|
||||
this.Write(0);
|
||||
}
|
||||
else if (count > 65535)
|
||||
{
|
||||
if (LogFilter.logError)
|
||||
{
|
||||
Debug.LogError("NetworkWriter WriteBytesAndSize: buffer is too large (" + count + ") bytes. The maximum buffer size is 64K bytes.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Write((ushort)count);
|
||||
this.m_Buffer.WriteBytes(buffer, (ushort)count);
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteBytesFull(byte[] buffer)
|
||||
{
|
||||
if (buffer == null)
|
||||
{
|
||||
this.Write(0);
|
||||
}
|
||||
else if (buffer.Length > 65535)
|
||||
{
|
||||
if (LogFilter.logError)
|
||||
{
|
||||
Debug.LogError("NetworkWriter WriteBytes: buffer is too large (" + buffer.Length + ") bytes. The maximum buffer size is 64K bytes.");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Write((ushort)buffer.Length);
|
||||
this.m_Buffer.WriteBytes(buffer, (ushort)buffer.Length);
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(Vector2 value)
|
||||
{
|
||||
this.Write(value.x);
|
||||
this.Write(value.y);
|
||||
}
|
||||
|
||||
public void Write(Vector3 value)
|
||||
{
|
||||
this.Write(value.x);
|
||||
this.Write(value.y);
|
||||
this.Write(value.z);
|
||||
}
|
||||
|
||||
public void Write(Vector4 value)
|
||||
{
|
||||
this.Write(value.x);
|
||||
this.Write(value.y);
|
||||
this.Write(value.z);
|
||||
this.Write(value.w);
|
||||
}
|
||||
|
||||
public void Write(Color value)
|
||||
{
|
||||
this.Write(value.r);
|
||||
this.Write(value.g);
|
||||
this.Write(value.b);
|
||||
this.Write(value.a);
|
||||
}
|
||||
|
||||
public void Write(Color32 value)
|
||||
{
|
||||
this.Write(value.r);
|
||||
this.Write(value.g);
|
||||
this.Write(value.b);
|
||||
this.Write(value.a);
|
||||
}
|
||||
|
||||
public void Write(Quaternion value)
|
||||
{
|
||||
this.Write(value.x);
|
||||
this.Write(value.y);
|
||||
this.Write(value.z);
|
||||
this.Write(value.w);
|
||||
}
|
||||
|
||||
public void Write(Rect value)
|
||||
{
|
||||
this.Write(value.xMin);
|
||||
this.Write(value.yMin);
|
||||
this.Write(value.width);
|
||||
this.Write(value.height);
|
||||
}
|
||||
|
||||
public void Write(Plane value)
|
||||
{
|
||||
this.Write(value.normal);
|
||||
this.Write(value.distance);
|
||||
}
|
||||
|
||||
public void Write(Ray value)
|
||||
{
|
||||
this.Write(value.direction);
|
||||
this.Write(value.origin);
|
||||
}
|
||||
|
||||
public void Write(Matrix4x4 value)
|
||||
{
|
||||
this.Write(value.m00);
|
||||
this.Write(value.m01);
|
||||
this.Write(value.m02);
|
||||
this.Write(value.m03);
|
||||
this.Write(value.m10);
|
||||
this.Write(value.m11);
|
||||
this.Write(value.m12);
|
||||
this.Write(value.m13);
|
||||
this.Write(value.m20);
|
||||
this.Write(value.m21);
|
||||
this.Write(value.m22);
|
||||
this.Write(value.m23);
|
||||
this.Write(value.m30);
|
||||
this.Write(value.m31);
|
||||
this.Write(value.m32);
|
||||
this.Write(value.m33);
|
||||
}
|
||||
|
||||
public void Write(NetworkHash128 value)
|
||||
{
|
||||
this.Write(value.i0);
|
||||
this.Write(value.i1);
|
||||
this.Write(value.i2);
|
||||
this.Write(value.i3);
|
||||
this.Write(value.i4);
|
||||
this.Write(value.i5);
|
||||
this.Write(value.i6);
|
||||
this.Write(value.i7);
|
||||
this.Write(value.i8);
|
||||
this.Write(value.i9);
|
||||
this.Write(value.i10);
|
||||
this.Write(value.i11);
|
||||
this.Write(value.i12);
|
||||
this.Write(value.i13);
|
||||
this.Write(value.i14);
|
||||
this.Write(value.i15);
|
||||
}
|
||||
|
||||
public void Write(NetworkIdentity value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
this.WritePackedUInt32(0U);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.Write(value.netId);
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(Transform value)
|
||||
{
|
||||
if (value == null || value.gameObject == null)
|
||||
{
|
||||
this.WritePackedUInt32(0U);
|
||||
}
|
||||
else
|
||||
{
|
||||
NetworkIdentity component = value.gameObject.GetComponent<NetworkIdentity>();
|
||||
if (component != null)
|
||||
{
|
||||
this.Write(component.netId);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("NetworkWriter " + value + " has no NetworkIdentity");
|
||||
}
|
||||
this.WritePackedUInt32(0U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(GameObject value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
this.WritePackedUInt32(0U);
|
||||
}
|
||||
else
|
||||
{
|
||||
QSBNetworkIdentity component = value.GetComponent<QSBNetworkIdentity>();
|
||||
if (component != null)
|
||||
{
|
||||
this.Write(component.NetId);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (LogFilter.logWarn)
|
||||
{
|
||||
Debug.LogWarning("NetworkWriter " + value + " has no NetworkIdentity");
|
||||
}
|
||||
this.WritePackedUInt32(0U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(QSBMessageBase msg)
|
||||
{
|
||||
msg.Serialize(this);
|
||||
}
|
||||
|
||||
public void SeekZero()
|
||||
{
|
||||
this.m_Buffer.SeekZero();
|
||||
}
|
||||
|
||||
public void StartMessage(short msgType)
|
||||
{
|
||||
this.SeekZero();
|
||||
this.m_Buffer.WriteByte2(0, 0);
|
||||
this.Write(msgType);
|
||||
}
|
||||
|
||||
public void FinishMessage()
|
||||
{
|
||||
this.m_Buffer.FinishMessage();
|
||||
}
|
||||
|
||||
private const int k_MaxStringLength = 32768;
|
||||
|
||||
private QSBNetBuffer m_Buffer;
|
||||
|
||||
private static Encoding s_Encoding;
|
||||
|
||||
private static byte[] s_StringWriteBuffer;
|
||||
|
||||
private static QSBUIntFloat s_FloatConverter;
|
||||
}
|
||||
}
|
11
QSB/QuantumUNET/QSBNotReadyMessage.cs
Normal file
11
QSB/QuantumUNET/QSBNotReadyMessage.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBNotReadyMessage : QSBEmptyMessage
|
||||
{
|
||||
}
|
||||
}
|
@ -2,16 +2,16 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBObjectDestroyMessage : MessageBase
|
||||
internal class QSBObjectDestroyMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId NetId;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
NetId = reader.ReadNetworkId();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(NetId);
|
||||
}
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBObjectSpawnFinishedMessage : MessageBase
|
||||
internal class QSBObjectSpawnFinishedMessage : QSBMessageBase
|
||||
{
|
||||
public uint State;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
State = reader.ReadPackedUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.WritePackedUInt32(State);
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBObjectSpawnMessage : MessageBase
|
||||
internal class QSBObjectSpawnMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId NetId;
|
||||
public NetworkHash128 assetId;
|
||||
@ -11,7 +11,7 @@ namespace QSB.QuantumUNET
|
||||
public byte[] Payload;
|
||||
public Quaternion Rotation;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
NetId = reader.ReadNetworkId();
|
||||
assetId = reader.ReadNetworkHash128();
|
||||
@ -23,7 +23,7 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(NetId);
|
||||
writer.Write(assetId);
|
||||
|
@ -3,14 +3,14 @@ using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBObjectSpawnSceneMessage : MessageBase
|
||||
internal class QSBObjectSpawnSceneMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId NetId;
|
||||
public NetworkSceneId SceneId;
|
||||
public Vector3 Position;
|
||||
public byte[] Payload;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
NetId = reader.ReadNetworkId();
|
||||
SceneId = reader.ReadSceneId();
|
||||
@ -18,7 +18,7 @@ namespace QSB.QuantumUNET
|
||||
Payload = reader.ReadBytesAndSize();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(NetId);
|
||||
writer.Write(SceneId);
|
||||
|
@ -2,18 +2,18 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal class QSBOwnerMessage : MessageBase
|
||||
internal class QSBOwnerMessage : QSBMessageBase
|
||||
{
|
||||
public NetworkInstanceId NetId;
|
||||
public short PlayerControllerId;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
NetId = reader.ReadNetworkId();
|
||||
PlayerControllerId = (short)reader.ReadPackedUInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(NetId);
|
||||
writer.WritePackedUInt32((uint)PlayerControllerId);
|
||||
|
31
QSB/QuantumUNET/QSBPeerAuthorityMessage.cs
Normal file
31
QSB/QuantumUNET/QSBPeerAuthorityMessage.cs
Normal file
@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBPeerAuthorityMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.connectionId = (int)reader.ReadPackedUInt32();
|
||||
this.netId = reader.ReadNetworkId();
|
||||
this.authorityState = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.WritePackedUInt32((uint)this.connectionId);
|
||||
writer.Write(this.netId);
|
||||
writer.Write(this.authorityState);
|
||||
}
|
||||
|
||||
public int connectionId;
|
||||
|
||||
public NetworkInstanceId netId;
|
||||
|
||||
public bool authorityState;
|
||||
}
|
||||
}
|
84
QSB/QuantumUNET/QSBPeerInfoMessage.cs
Normal file
84
QSB/QuantumUNET/QSBPeerInfoMessage.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBPeerInfoMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.connectionId = (int)reader.ReadPackedUInt32();
|
||||
this.address = reader.ReadString();
|
||||
this.port = (int)reader.ReadPackedUInt32();
|
||||
this.isHost = reader.ReadBoolean();
|
||||
this.isYou = reader.ReadBoolean();
|
||||
uint num = reader.ReadPackedUInt32();
|
||||
if (num > 0U)
|
||||
{
|
||||
List<QSBPeerInfoPlayer> list = new List<QSBPeerInfoPlayer>();
|
||||
for (uint num2 = 0U; num2 < num; num2 += 1U)
|
||||
{
|
||||
QSBPeerInfoPlayer item;
|
||||
item.netId = reader.ReadNetworkId();
|
||||
item.playerControllerId = (short)reader.ReadPackedUInt32();
|
||||
list.Add(item);
|
||||
}
|
||||
this.playerIds = list.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.WritePackedUInt32((uint)this.connectionId);
|
||||
writer.Write(this.address);
|
||||
writer.WritePackedUInt32((uint)this.port);
|
||||
writer.Write(this.isHost);
|
||||
writer.Write(this.isYou);
|
||||
if (this.playerIds == null)
|
||||
{
|
||||
writer.WritePackedUInt32(0U);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.WritePackedUInt32((uint)this.playerIds.Length);
|
||||
for (int i = 0; i < this.playerIds.Length; i++)
|
||||
{
|
||||
writer.Write(this.playerIds[i].netId);
|
||||
writer.WritePackedUInt32((uint)this.playerIds[i].playerControllerId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Concat(new object[]
|
||||
{
|
||||
"PeerInfo conn:",
|
||||
this.connectionId,
|
||||
" addr:",
|
||||
this.address,
|
||||
":",
|
||||
this.port,
|
||||
" host:",
|
||||
this.isHost,
|
||||
" isYou:",
|
||||
this.isYou
|
||||
});
|
||||
}
|
||||
|
||||
public int connectionId;
|
||||
|
||||
public string address;
|
||||
|
||||
public int port;
|
||||
|
||||
public bool isHost;
|
||||
|
||||
public bool isYou;
|
||||
|
||||
public QSBPeerInfoPlayer[] playerIds;
|
||||
}
|
||||
}
|
15
QSB/QuantumUNET/QSBPeerInfoPlayer.cs
Normal file
15
QSB/QuantumUNET/QSBPeerInfoPlayer.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public struct QSBPeerInfoPlayer
|
||||
{
|
||||
public NetworkInstanceId netId;
|
||||
|
||||
public short playerControllerId;
|
||||
}
|
||||
}
|
38
QSB/QuantumUNET/QSBPeerListMessage.cs
Normal file
38
QSB/QuantumUNET/QSBPeerListMessage.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBPeerListMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.oldServerConnectionId = (int)reader.ReadPackedUInt32();
|
||||
int num = (int)reader.ReadUInt16();
|
||||
this.peers = new QSBPeerInfoMessage[num];
|
||||
for (int i = 0; i < this.peers.Length; i++)
|
||||
{
|
||||
QSBPeerInfoMessage peerInfoMessage = new QSBPeerInfoMessage();
|
||||
peerInfoMessage.Deserialize(reader);
|
||||
this.peers[i] = peerInfoMessage;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.WritePackedUInt32((uint)this.oldServerConnectionId);
|
||||
writer.Write((ushort)this.peers.Length);
|
||||
for (int i = 0; i < this.peers.Length; i++)
|
||||
{
|
||||
this.peers[i].Serialize(writer);
|
||||
}
|
||||
}
|
||||
|
||||
public QSBPeerInfoMessage[] peers;
|
||||
|
||||
public int oldServerConnectionId;
|
||||
}
|
||||
}
|
11
QSB/QuantumUNET/QSBReadyMessage.cs
Normal file
11
QSB/QuantumUNET/QSBReadyMessage.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBReadyMessage : QSBEmptyMessage
|
||||
{
|
||||
}
|
||||
}
|
38
QSB/QuantumUNET/QSBReconnectMessage.cs
Normal file
38
QSB/QuantumUNET/QSBReconnectMessage.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBReconnectMessage : QSBMessageBase
|
||||
{
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.oldConnectionId = (int)reader.ReadPackedUInt32();
|
||||
this.playerControllerId = (short)reader.ReadPackedUInt32();
|
||||
this.netId = reader.ReadNetworkId();
|
||||
this.msgData = reader.ReadBytesAndSize();
|
||||
this.msgSize = this.msgData.Length;
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.WritePackedUInt32((uint)this.oldConnectionId);
|
||||
writer.WritePackedUInt32((uint)this.playerControllerId);
|
||||
writer.Write(this.netId);
|
||||
writer.WriteBytesAndSize(this.msgData, this.msgSize);
|
||||
}
|
||||
|
||||
public int oldConnectionId;
|
||||
|
||||
public short playerControllerId;
|
||||
|
||||
public NetworkInstanceId netId;
|
||||
|
||||
public int msgSize;
|
||||
|
||||
public byte[] msgData;
|
||||
}
|
||||
}
|
@ -2,16 +2,16 @@
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBRemovePlayerMessage : MessageBase
|
||||
public class QSBRemovePlayerMessage : QSBMessageBase
|
||||
{
|
||||
public short PlayerControllerId;
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
PlayerControllerId = (short)reader.ReadUInt16();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write((ushort)PlayerControllerId);
|
||||
}
|
||||
|
32
QSB/QuantumUNET/QSBStringMessage.cs
Normal file
32
QSB/QuantumUNET/QSBStringMessage.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
public class QSBStringMessage : QSBMessageBase
|
||||
{
|
||||
public QSBStringMessage()
|
||||
{
|
||||
}
|
||||
|
||||
public QSBStringMessage(string v)
|
||||
{
|
||||
this.value = v;
|
||||
}
|
||||
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
this.value = reader.ReadString();
|
||||
}
|
||||
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
writer.Write(this.value);
|
||||
}
|
||||
|
||||
public string value;
|
||||
}
|
||||
}
|
16
QSB/QuantumUNET/QSBUIntDecimal.cs
Normal file
16
QSB/QuantumUNET/QSBUIntDecimal.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal struct QSBUIntDecimal
|
||||
{
|
||||
public ulong longValue1;
|
||||
|
||||
public ulong longValue2;
|
||||
|
||||
public decimal decimalValue;
|
||||
}
|
||||
}
|
18
QSB/QuantumUNET/QSBUIntFloat.cs
Normal file
18
QSB/QuantumUNET/QSBUIntFloat.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace QSB.QuantumUNET
|
||||
{
|
||||
internal struct QSBUIntFloat
|
||||
{
|
||||
public float floatValue;
|
||||
|
||||
public uint intValue;
|
||||
|
||||
public double doubleValue;
|
||||
|
||||
public ulong longValue;
|
||||
}
|
||||
}
|
@ -18,19 +18,19 @@ namespace QSB.QuantumUNET
|
||||
}
|
||||
}
|
||||
|
||||
public override bool Send(short msgType, MessageBase msg)
|
||||
public override bool Send(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
m_LocalClient.InvokeHandlerOnClient(msgType, msg, 0);
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool SendUnreliable(short msgType, MessageBase msg)
|
||||
public override bool SendUnreliable(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
m_LocalClient.InvokeHandlerOnClient(msgType, msg, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool SendByChannel(short msgType, MessageBase msg, int channelId)
|
||||
public override bool SendByChannel(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
m_LocalClient.InvokeHandlerOnClient(msgType, msg, channelId);
|
||||
return true;
|
||||
@ -42,7 +42,7 @@ namespace QSB.QuantumUNET
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool SendWriter(NetworkWriter writer, int channelId)
|
||||
public override bool SendWriter(QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
m_LocalClient.InvokeBytesOnClient(writer.AsArray(), channelId);
|
||||
return true;
|
||||
|
@ -11,17 +11,17 @@ namespace QSB.QuantumUNET
|
||||
m_LocalServer = localServer;
|
||||
}
|
||||
|
||||
public override bool Send(short msgType, MessageBase msg)
|
||||
public override bool Send(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
return m_LocalServer.InvokeHandlerOnServer(this, msgType, msg, 0);
|
||||
}
|
||||
|
||||
public override bool SendUnreliable(short msgType, MessageBase msg)
|
||||
public override bool SendUnreliable(short msgType, QSBMessageBase msg)
|
||||
{
|
||||
return m_LocalServer.InvokeHandlerOnServer(this, msgType, msg, 1);
|
||||
}
|
||||
|
||||
public override bool SendByChannel(short msgType, MessageBase msg, int channelId)
|
||||
public override bool SendByChannel(short msgType, QSBMessageBase msg, int channelId)
|
||||
{
|
||||
return m_LocalServer.InvokeHandlerOnServer(this, msgType, msg, channelId);
|
||||
}
|
||||
@ -44,7 +44,7 @@ namespace QSB.QuantumUNET
|
||||
return result;
|
||||
}
|
||||
|
||||
public override bool SendWriter(NetworkWriter writer, int channelId)
|
||||
public override bool SendWriter(QSBNetworkWriter writer, int channelId)
|
||||
{
|
||||
return m_LocalServer.InvokeBytes(this, writer.AsArray(), (int)((short)writer.AsArray().Length), channelId);
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.TimeSync.Events
|
||||
@ -8,14 +9,14 @@ namespace QSB.TimeSync.Events
|
||||
public float ServerTime { get; set; }
|
||||
public int LoopCount { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
ServerTime = reader.ReadSingle();
|
||||
LoopCount = reader.ReadInt16();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(ServerTime);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using UnityEngine.Networking;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.WorldSync.Events
|
||||
{
|
||||
@ -6,13 +7,13 @@ namespace QSB.WorldSync.Events
|
||||
{
|
||||
public bool State { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
State = reader.ReadBoolean();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(State);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using QSB.Messaging;
|
||||
using QSB.QuantumUNET;
|
||||
using UnityEngine.Networking;
|
||||
|
||||
namespace QSB.WorldSync.Events
|
||||
@ -7,13 +8,13 @@ namespace QSB.WorldSync.Events
|
||||
{
|
||||
public int ObjectId { get; set; }
|
||||
|
||||
public override void Deserialize(NetworkReader reader)
|
||||
public override void Deserialize(QSBNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
ObjectId = reader.ReadInt32();
|
||||
}
|
||||
|
||||
public override void Serialize(NetworkWriter writer)
|
||||
public override void Serialize(QSBNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(ObjectId);
|
||||
|
Loading…
x
Reference in New Issue
Block a user