mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
197 lines
5.9 KiB
C#
197 lines
5.9 KiB
C#
using System;
|
|
|
|
#if ENABLE_UNET
|
|
|
|
namespace UnityEngine.Networking
|
|
{
|
|
// Handles network messages on client and server
|
|
public delegate void NetworkMessageDelegate(NetworkMessage netMsg);
|
|
|
|
// Handles requests to spawn objects on the client
|
|
public delegate GameObject SpawnDelegate(Vector3 position, NetworkHash128 assetId);
|
|
|
|
// Handles requests to unspawn objects on the client
|
|
public delegate void UnSpawnDelegate(GameObject spawned);
|
|
|
|
// built-in system network messages
|
|
public class MsgType
|
|
{
|
|
// internal system messages - cannot be replaced by user code
|
|
public const short ObjectDestroy = 1;
|
|
public const short Rpc = 2;
|
|
public const short ObjectSpawn = 3;
|
|
public const short Owner = 4;
|
|
public const short Command = 5;
|
|
public const short LocalPlayerTransform = 6;
|
|
public const short SyncEvent = 7;
|
|
public const short UpdateVars = 8;
|
|
public const short SyncList = 9;
|
|
public const short ObjectSpawnScene = 10;
|
|
public const short NetworkInfo = 11;
|
|
public const short SpawnFinished = 12;
|
|
public const short ObjectHide = 13;
|
|
public const short CRC = 14;
|
|
public const short LocalClientAuthority = 15;
|
|
public const short LocalChildTransform = 16;
|
|
public const short Fragment = 17;
|
|
public const short PeerClientAuthority = 18;
|
|
|
|
// used for profiling
|
|
internal const short UserMessage = 0;
|
|
internal const short HLAPIMsg = 28;
|
|
internal const short LLAPIMsg = 29;
|
|
internal const short HLAPIResend = 30;
|
|
internal const short HLAPIPending = 31;
|
|
|
|
public const short InternalHighest = 31;
|
|
|
|
// public system messages - can be replaced by user code
|
|
public const short Connect = 32;
|
|
public const short Disconnect = 33;
|
|
public const short Error = 34;
|
|
public const short Ready = 35;
|
|
public const short NotReady = 36;
|
|
public const short AddPlayer = 37;
|
|
public const short RemovePlayer = 38;
|
|
public const short Scene = 39;
|
|
public const short Animation = 40;
|
|
public const short AnimationParameters = 41;
|
|
public const short AnimationTrigger = 42;
|
|
public const short LobbyReadyToBegin = 43;
|
|
public const short LobbySceneLoaded = 44;
|
|
public const short LobbyAddPlayerFailed = 45;
|
|
public const short LobbyReturnToLobby = 46;
|
|
|
|
//NOTE: update msgLabels below if this is changed.
|
|
public const short Highest = 47;
|
|
|
|
static internal string[] msgLabels =
|
|
{
|
|
"none",
|
|
"ObjectDestroy",
|
|
"Rpc",
|
|
"ObjectSpawn",
|
|
"Owner",
|
|
"Command",
|
|
"LocalPlayerTransform",
|
|
"SyncEvent",
|
|
"UpdateVars",
|
|
"SyncList",
|
|
"ObjectSpawnScene", // 10
|
|
"NetworkInfo",
|
|
"SpawnFinished",
|
|
"ObjectHide",
|
|
"CRC",
|
|
"LocalClientAuthority",
|
|
"LocalChildTransform",
|
|
"Fragment",
|
|
"PeerClientAuthority",
|
|
"",
|
|
"", // 20
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"",
|
|
"", // 30
|
|
"", // - SystemInternalHighest
|
|
"Connect", // 32,
|
|
"Disconnect",
|
|
"Error",
|
|
"Ready",
|
|
"NotReady",
|
|
"AddPlayer",
|
|
"RemovePlayer",
|
|
"Scene",
|
|
"Animation", // 40
|
|
"AnimationParams",
|
|
"AnimationTrigger",
|
|
"LobbyReadyToBegin",
|
|
"LobbySceneLoaded",
|
|
"LobbyAddPlayerFailed", // 45
|
|
"LobbyReturnToLobby", // 46
|
|
};
|
|
|
|
static public string MsgTypeToString(short value)
|
|
{
|
|
if (value < 0 || value > Highest)
|
|
{
|
|
return String.Empty;
|
|
}
|
|
string result = msgLabels[value];
|
|
if (string.IsNullOrEmpty(result))
|
|
{
|
|
result = "[" + value + "]";
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
|
|
public class NetworkMessage
|
|
{
|
|
public const int MaxMessageSize = (64 * 1024) - 1;
|
|
|
|
public short msgType;
|
|
public NetworkConnection conn;
|
|
public NetworkReader reader;
|
|
public int channelId;
|
|
|
|
public static string Dump(byte[] payload, int sz)
|
|
{
|
|
string outStr = "[";
|
|
for (int i = 0; i < sz; i++)
|
|
{
|
|
outStr += (payload[i] + " ");
|
|
}
|
|
outStr += "]";
|
|
return outStr;
|
|
}
|
|
|
|
public TMsg ReadMessage<TMsg>() where TMsg : MessageBase, new()
|
|
{
|
|
var msg = new TMsg();
|
|
msg.Deserialize(reader);
|
|
return msg;
|
|
}
|
|
|
|
public void ReadMessage<TMsg>(TMsg msg) where TMsg : MessageBase
|
|
{
|
|
msg.Deserialize(reader);
|
|
}
|
|
}
|
|
|
|
public enum Version
|
|
{
|
|
Current = 1
|
|
}
|
|
|
|
public class Channels
|
|
{
|
|
public const int DefaultReliable = 0;
|
|
public const int DefaultUnreliable = 1;
|
|
|
|
// moved IsSequenced etc. functions here because it's better than in NetworkConnection
|
|
public static bool IsSequencedQoS(QosType qos)
|
|
{
|
|
return (qos == QosType.ReliableSequenced || qos == QosType.UnreliableSequenced);
|
|
}
|
|
|
|
public static bool IsReliableQoS(QosType qos)
|
|
{
|
|
return (qos == QosType.Reliable || qos == QosType.ReliableFragmented || qos == QosType.ReliableSequenced || qos == QosType.ReliableStateUpdate);
|
|
}
|
|
|
|
public static bool IsUnreliableQoS(QosType qos)
|
|
{
|
|
return (qos == QosType.Unreliable || qos == QosType.UnreliableFragmented || qos == QosType.UnreliableSequenced || qos == QosType.StateUpdate);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
#endif //ENABLE_UNET
|