add more stuff

This commit is contained in:
Mister_Nebula 2020-12-04 09:23:27 +00:00
parent 33bc69fd0c
commit b5ba81d727
59 changed files with 2032 additions and 1158 deletions

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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()));

View File

@ -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);

View File

@ -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" />

View File

@ -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);

View 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;
}
}

View File

@ -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++)

View File

@ -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)

View File

@ -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);

View File

@ -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>();

View 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)
{
}
}
}

View 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;
}
}

View 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;
}
}
}

View File

@ -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();

View 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)
{
}
}
}

View File

@ -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
{

View File

@ -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);
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -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>();

View 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;
}
}

View File

@ -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;
}

View File

@ -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

View 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;
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QSB.QuantumUNET
{
public class QSBNotReadyMessage : QSBEmptyMessage
{
}
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QSB.QuantumUNET
{
public class QSBReadyMessage : QSBEmptyMessage
{
}
}

View 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;
}
}

View File

@ -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);
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);