From c80a9711266b1228f9c831702eff4cd9df17648b Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 25 Feb 2019 20:15:16 +0100 Subject: [PATCH 001/276] 2018.3 UnityConnectSettings detected too late --- ProjectSettings/UnityConnectSettings.asset | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/ProjectSettings/UnityConnectSettings.asset b/ProjectSettings/UnityConnectSettings.asset index 1be460051..c3ae9a020 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/ProjectSettings/UnityConnectSettings.asset @@ -3,25 +3,25 @@ --- !u!310 &1 UnityConnectSettings: m_ObjectHideFlags: 0 + serializedVersion: 1 m_Enabled: 1 m_TestMode: 0 - m_TestEventUrl: - m_TestConfigUrl: + m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events + m_EventUrl: https://cdp.cloud.unity3d.com/v1/events + m_ConfigUrl: https://config.uca.cloud.unity3d.com m_TestInitMode: 0 CrashReportingSettings: - m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes - m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate + m_EventUrl: https://perf-events.cloud.unity3d.com m_Enabled: 0 + m_LogBufferSize: 10 m_CaptureEditorExceptions: 1 UnityPurchasingSettings: m_Enabled: 0 m_TestMode: 0 UnityAnalyticsSettings: m_Enabled: 0 - m_InitializeOnStartup: 1 m_TestMode: 0 - m_TestEventUrl: - m_TestConfigUrl: + m_InitializeOnStartup: 1 UnityAdsSettings: m_Enabled: 0 m_InitializeOnStartup: 1 From 39ec1fd256597e116b5f5be91871ca7e4fdd526a Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 25 Feb 2019 20:15:47 +0100 Subject: [PATCH 002/276] 0gc recv (#445) * Protocol.UnpackMessage returns reader instead of content to avoid manually extracting content, just to create a reader from it in all callers * Create NetworkReader outside of Protocol.Unpack --- Assets/Mirror/Runtime/LocalClient.cs | 11 ++++++----- Assets/Mirror/Runtime/NetworkConnection.cs | 9 +++++---- Assets/Mirror/Runtime/NetworkServer.cs | 5 +++-- Assets/Mirror/Runtime/UNetwork.cs | 13 +++++-------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index b62e1dca7..3cbc15627 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -59,12 +59,12 @@ internal void AddLocalPlayer(NetworkIdentity localPlayer) ClientScene.InternalAddPlayer(localPlayer); } - void PostInternalMessage(short msgType, byte[] content) + void PostInternalMessage(short msgType, NetworkReader contentReader) { NetworkMessage msg = new NetworkMessage { msgType = msgType, - reader = new NetworkReader(content), + reader = contentReader, conn = connection }; m_InternalMsgs.Enqueue(msg); @@ -74,7 +74,7 @@ void PostInternalMessage(short msgType) { // call PostInternalMessage with empty content array if we just want to call a message like Connect // -> original NetworkTransport used empty [] and not null array for those messages too - PostInternalMessage(msgType, new byte[0]); + PostInternalMessage(msgType, new NetworkReader(new byte[0])); } void ProcessInternalMessages() @@ -91,9 +91,10 @@ void ProcessInternalMessages() internal void InvokeBytesOnClient(byte[] buffer) { // unpack message and post to internal list for processing - if (Protocol.UnpackMessage(buffer, out ushort msgType, out byte[] content)) + NetworkReader reader = new NetworkReader(buffer); + if (Protocol.UnpackMessage(reader, out ushort msgType)) { - PostInternalMessage((short)msgType, content); + PostInternalMessage((short)msgType, reader); } else Debug.LogError("InvokeBytesOnClient failed to unpack message: " + BitConverter.ToString(buffer)); } diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 7b7e7b44e..9512fac54 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -190,19 +190,20 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR protected void HandleBytes(byte[] buffer) { // unpack message - if (Protocol.UnpackMessage(buffer, out ushort msgType, out byte[] content)) + NetworkReader reader = new NetworkReader(buffer); + if (Protocol.UnpackMessage(reader, out ushort msgType)) { if (logNetworkMessages) { if (Enum.IsDefined(typeof(MsgType), msgType)) { // one of Mirror mesage types, display the message name - Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + (MsgType)msgType + " content:" + BitConverter.ToString(content)); + Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + (MsgType)msgType + " buffer:" + BitConverter.ToString(buffer)); } else { // user defined message, display the number - Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + msgType + " content:" + BitConverter.ToString(content)); + Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + msgType + " buffer:" + BitConverter.ToString(buffer)); } } @@ -212,7 +213,7 @@ protected void HandleBytes(byte[] buffer) NetworkMessage msg = new NetworkMessage { msgType = (short)msgType, - reader = new NetworkReader(content), + reader = reader, conn = this }; diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 6c9c7ce74..a5f6eeed9 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -1086,12 +1086,13 @@ public static void UnSpawn(GameObject obj) internal static bool InvokeBytes(ULocalConnectionToServer conn, byte[] buffer) { - if (Protocol.UnpackMessage(buffer, out ushort msgType, out byte[] content)) + NetworkReader reader = new NetworkReader(buffer); + if (Protocol.UnpackMessage(reader, out ushort msgType)) { if (handlers.ContainsKey((short)msgType) && s_LocalConnection != null) { // this must be invoked with the connection to the client, not the client's connection to the server - s_LocalConnection.InvokeHandler((short)msgType, new NetworkReader(content)); + s_LocalConnection.InvokeHandler((short)msgType, reader); return true; } } diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 96c9be161..58d3e1639 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -120,16 +120,13 @@ public static byte[] PackMessage(ushort msgType, MessageBase msg) } // unpack message after receiving - public static bool UnpackMessage(byte[] message, out ushort msgType, out byte[] content) + // -> pass NetworkReader so it's less strange if we create it in here + // and pass it upwards. + // -> NetworkReader will point at content afterwards! + public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType) { - NetworkReader reader = new NetworkReader(message); - // read message type (varint) - msgType = (UInt16)reader.ReadPackedUInt32(); - - // read content (remaining data in message) - content = reader.ReadBytes(reader.Length - reader.Position); - + msgType = (UInt16)messageReader.ReadPackedUInt32(); return true; } } From 6c229c8c58ffa1c55012fcafb7519de101ff5be4 Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 25 Feb 2019 20:27:12 +0100 Subject: [PATCH 003/276] LocalClient: add internalmsgs comment --- Assets/Mirror/Runtime/LocalClient.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 3cbc15627..0ce895214 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -6,6 +6,10 @@ namespace Mirror { sealed class LocalClient : NetworkClient { + // local client in host mode might call Cmds/Rpcs during Update, but we + // want to apply them in LateUpdate like all other Transport messages + // to avoid race conditions. + // -> that's why there is an internal message queue. Queue m_InternalMsgs = new Queue(); bool m_Connected; From c84ea361f100f1520d202870022651853a332642 Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 25 Feb 2019 20:42:58 +0100 Subject: [PATCH 004/276] 2018.3 ProjectSettings detected too late --- ProjectSettings/ProjectSettings.asset | 106 +++++++++----------------- 1 file changed, 38 insertions(+), 68 deletions(-) diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index f8cd230af..ea445309b 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -63,6 +63,8 @@ PlayerSettings: use32BitDisplayBuffer: 1 preserveFramebufferAlpha: 0 disableDepthAndStencilBuffers: 0 + androidStartInFullscreen: 1 + androidRenderOutsideSafeArea: 0 androidBlitType: 0 defaultIsNativeResolution: 1 macRetinaSupport: 1 @@ -96,9 +98,6 @@ PlayerSettings: xboxEnableGuest: 0 xboxEnablePIXSampling: 0 metalFramebufferOnly: 0 - n3dsDisableStereoscopicView: 0 - n3dsEnableSharedListOpt: 1 - n3dsEnableVSync: 0 xboxOneResolution: 0 xboxOneSResolution: 0 xboxOneXResolution: 3 @@ -107,11 +106,12 @@ PlayerSettings: xboxOneDisableEsram: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 - videoMemoryForVertexBuffers: 0 - psp2PowerMode: 0 - psp2AcquireBGM: 1 + switchQueueControlMemory: 16384 + switchQueueComputeMemory: 262144 + switchNVNShaderPoolsGranularity: 33554432 + switchNVNDefaultPoolsGranularity: 16777216 + switchNVNOtherPoolsGranularity: 16777216 vulkanEnableSetSRGBWrite: 0 - vulkanUseSWCommandBuffers: 0 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -145,6 +145,7 @@ PlayerSettings: dashSupport: 0 enable360StereoCapture: 0 protectGraphicsMemory: 0 + enableFrameTimingStats: 0 useHDRDisplay: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 @@ -169,7 +170,7 @@ PlayerSettings: StripUnusedMeshComponents: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 - iOSTargetOSVersionString: 8.0 + iOSTargetOSVersionString: 9.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 9.0 @@ -235,7 +236,6 @@ PlayerSettings: appleEnableAutomaticSigning: 0 iOSRequireARKit: 0 appleEnableProMotion: 0 - vulkanEditorSupport: 0 clonedFromGUID: 00000000000000000000000000000000 templatePackageId: templateDefaultScene: @@ -393,6 +393,7 @@ PlayerSettings: switchAllowsRuntimeAddOnContentInstall: 0 switchDataLossConfirmation: 0 switchUserAccountLockEnabled: 0 + switchSystemResourceMemory: 16777216 switchSupportedNpadStyles: 3 switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 @@ -453,6 +454,7 @@ PlayerSettings: ps4pnGameCustomData: 1 playerPrefsSupport: 0 enableApplicationExit: 0 + resetTempFolder: 1 restrictedAudioUsageRights: 0 ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 @@ -476,53 +478,6 @@ PlayerSettings: ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] monoEnv: - psp2Splashimage: {fileID: 0} - psp2NPTrophyPackPath: - psp2NPSupportGBMorGJP: 0 - psp2NPAgeRating: 12 - psp2NPTitleDatPath: - psp2NPCommsID: - psp2NPCommunicationsID: - psp2NPCommsPassphrase: - psp2NPCommsSig: - psp2ParamSfxPath: - psp2ManualPath: - psp2LiveAreaGatePath: - psp2LiveAreaBackroundPath: - psp2LiveAreaPath: - psp2LiveAreaTrialPath: - psp2PatchChangeInfoPath: - psp2PatchOriginalPackage: - psp2PackagePassword: WRK5RhRXdCdG5nG5azdNMK66MuCV6GXi - psp2KeystoneFile: - psp2MemoryExpansionMode: 0 - psp2DRMType: 0 - psp2StorageType: 0 - psp2MediaCapacity: 0 - psp2DLCConfigPath: - psp2ThumbnailPath: - psp2BackgroundPath: - psp2SoundPath: - psp2TrophyCommId: - psp2TrophyPackagePath: - psp2PackagedResourcesPath: - psp2SaveDataQuota: 10240 - psp2ParentalLevel: 1 - psp2ShortTitle: Not Set - psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF - psp2Category: 0 - psp2MasterVersion: 01.00 - psp2AppVersion: 01.00 - psp2TVBootMode: 0 - psp2EnterButtonAssignment: 2 - psp2TVDisableEmu: 0 - psp2AllowTwitterDialog: 1 - psp2Upgradable: 0 - psp2HealthWarning: 0 - psp2UseLibLocation: 0 - psp2InfoBarOnStartup: 0 - psp2InfoBarColor: 0 - psp2ScriptOptimizationLevel: 0 splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} spritePackerPolicy: @@ -538,10 +493,13 @@ PlayerSettings: webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 webGLLinkerTarget: 1 - scriptingDefineSymbols: {} + webGLThreadsSupport: 0 + scriptingDefineSymbols: + 1: MIRROR;MIRROR_1726_OR_NEWER platformArchitecture: {} scriptingBackend: {} il2cppCompilerConfiguration: {} + managedStrippingLevel: {} incrementalIl2cppBuild: {} allowUnsafeCode: 0 additionalIl2CppArgs: @@ -564,6 +522,8 @@ PlayerSettings: metroMediumTileShowName: 0 metroLargeTileShowName: 0 metroWideTileShowName: 0 + metroSupportStreamingInstall: 0 + metroLastRequiredScene: 0 metroDefaultTileSize: 1 metroTileForegroundText: 2 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} @@ -571,21 +531,11 @@ PlayerSettings: a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} + metroTargetDeviceFamilies: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: metroCompilationOverrides: 1 - n3dsUseExtSaveData: 0 - n3dsCompressStaticMem: 1 - n3dsExtSaveDataNumber: 0x12345 - n3dsStackSize: 131072 - n3dsTargetPlatform: 2 - n3dsRegion: 7 - n3dsMediaSize: 0 - n3dsLogoStyle: 3 - n3dsTitle: GameName - n3dsProductCode: - n3dsApplicationId: 0xFF3FF XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -611,16 +561,36 @@ PlayerSettings: XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 xboxOneScriptCompiler: 0 + XboxOneOverrideIdentityName: vrEditorSettings: daydream: daydreamIconForeground: {fileID: 0} daydreamIconBackground: {fileID: 0} cloudServicesEnabled: {} + luminIcon: + m_Name: + m_ModelFolderPath: + m_PortalFolderPath: + luminCert: + m_CertPath: + m_PrivateKeyPath: + luminIsChannelApp: 0 + luminVersion: + m_VersionCode: 1 + m_VersionName: facebookSdkVersion: 7.9.4 + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 apiCompatibilityLevel: 3 cloudProjectId: + framebufferDepthMemorylessMode: 0 projectName: organizationId: cloudEnabled: 0 enableNativePlatformBackendsForNewInputSystem: 0 disableOldInputManagerSupport: 0 + legacyClampBlendShapeWeights: 1 From 24b3b0d0fb5278731f8ff6829aa3dbe6cbaa6ba8 Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 25 Feb 2019 22:01:42 +0100 Subject: [PATCH 005/276] Networkclient singleton (#447) * NetworkClient.allClients replaced with singleton because there is only ever one client. * use this() * remove redundant log --- Assets/Mirror/Components/NetworkAnimator.cs | 2 +- Assets/Mirror/Runtime/NetworkClient.cs | 54 +++++++-------------- 2 files changed, 18 insertions(+), 38 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 0c8073b0d..07b9c7428 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -293,7 +293,7 @@ public void SetTrigger(int hash) { if (hasAuthority && localPlayerAuthority) { - if (NetworkClient.allClients.Count > 0 && ClientScene.readyConnection != null) + if (NetworkClient.singleton != null && ClientScene.readyConnection != null) { CmdOnAnimationTriggerServerMessage(hash); } diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 4a56d8bcb..dfc97294f 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -6,7 +6,8 @@ namespace Mirror { public class NetworkClient { - public static List allClients = new List(); + // the client (can be a regular NetworkClient or a LocalClient) + public static NetworkClient singleton; public static bool active { get; private set; } int m_ClientId = -1; @@ -36,14 +37,18 @@ internal void SetHandlers(NetworkConnection conn) public NetworkClient() { if (LogFilter.Debug) { Debug.Log("Client created version " + Version.Current); } - AddClient(this); + + if (singleton != null) + { + Debug.LogError("NetworkClient: can only create one!"); + return; + } + singleton = this; } - public NetworkClient(NetworkConnection conn) + // initialize with connection. calls NetworkClient() to setup singleton. + public NetworkClient(NetworkConnection conn) : this() { - if (LogFilter.Debug) { Debug.Log("Client created version " + Version.Current); } - AddClient(this); - SetActive(true); m_Connection = conn; connectState = ConnectState.Connected; @@ -87,7 +92,7 @@ void OnDisconnected() connectState = ConnectState.Disconnected; ClientScene.HandleClientDisconnect(m_Connection); - + m_Connection?.InvokeHandlerNoData((short)MsgType.Disconnect); } @@ -167,11 +172,8 @@ public void Shutdown() { if (LogFilter.Debug) Debug.Log("Shutting down client " + m_ClientId); m_ClientId = -1; - RemoveClient(this); - if (allClients.Count == 0) - { - SetActive(false); - } + singleton = null; + SetActive(false); } internal virtual void Update() @@ -276,37 +278,15 @@ public void UnregisterHandler(MsgType msgType) UnregisterHandler((short)msgType); } - internal static void AddClient(NetworkClient client) - { - allClients.Add(client); - } - - internal static bool RemoveClient(NetworkClient client) - { - return allClients.Remove(client); - } - internal static void UpdateClients() { - // remove null clients first - allClients.RemoveAll(cl => cl == null); - - // now update valid clients - // IMPORTANT: no foreach, otherwise we get an InvalidOperationException - // when stopping the client. - for (int i = 0; i < allClients.Count; ++i) - { - allClients[i].Update(); - } + singleton?.Update(); } public static void ShutdownAll() { - while (allClients.Count != 0) - { - allClients[0].Shutdown(); - } - allClients = new List(); + singleton?.Shutdown(); + singleton = null; active = false; ClientScene.Shutdown(); } From bb3bf0635b52398a1a4d7b8efe916077544f1a7c Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:50:59 +0100 Subject: [PATCH 006/276] Networkclient active (#448) * use NetworkClient.active directly * add comment --- Assets/Mirror/Runtime/LocalClient.cs | 2 +- Assets/Mirror/Runtime/NetworkClient.cs | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 0ce895214..4821fd9d3 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -32,7 +32,7 @@ internal void InternalConnectLocalServer(bool generateConnectMsg) m_Connection.connectionId = NetworkServer.AddLocalClient(this); connectState = ConnectState.Connected; - SetActive(true); + active = true; RegisterSystemHandlers(true); if (generateConnectMsg) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index dfc97294f..6fc5751da 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -8,7 +8,10 @@ public class NetworkClient { // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; - public static bool active { get; private set; } + + // active is true while a client is connecting/connected + // (= while the network is active) + public static bool active { get; protected set; } int m_ClientId = -1; @@ -49,7 +52,7 @@ public NetworkClient() // initialize with connection. calls NetworkClient() to setup singleton. public NetworkClient(NetworkConnection conn) : this() { - SetActive(true); + active = true; m_Connection = conn; connectState = ConnectState.Connected; conn.SetHandlers(handlers); @@ -123,7 +126,7 @@ void OnConnected() void PrepareForConnect() { - SetActive(true); + active = true; RegisterSystemHandlers(false); m_ClientId = 0; NetworkManager.singleton.transport.enabled = true; @@ -173,7 +176,7 @@ public void Shutdown() if (LogFilter.Debug) Debug.Log("Shutting down client " + m_ClientId); m_ClientId = -1; singleton = null; - SetActive(false); + active = false; } internal virtual void Update() @@ -290,10 +293,5 @@ public static void ShutdownAll() active = false; ClientScene.Shutdown(); } - - internal static void SetActive(bool state) - { - active = state; - } } } From c3b6fc5f4ed037ef01fa0600e585fc0b888a6f93 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:53:44 +0100 Subject: [PATCH 007/276] syntax --- Assets/Mirror/Runtime/NetworkClient.cs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 6fc5751da..48a42ca67 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -9,14 +9,12 @@ public class NetworkClient // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; - // active is true while a client is connecting/connected - // (= while the network is active) - public static bool active { get; protected set; } - int m_ClientId = -1; public readonly Dictionary handlers = new Dictionary(); + protected NetworkConnection m_Connection; + public NetworkConnection connection => m_Connection; protected enum ConnectState { @@ -27,13 +25,11 @@ protected enum ConnectState } protected ConnectState connectState = ConnectState.None; - internal void SetHandlers(NetworkConnection conn) - { - conn.SetHandlers(handlers); - } - public string serverIp { get; private set; } = ""; - public NetworkConnection connection => m_Connection; + + // active is true while a client is connecting/connected + // (= while the network is active) + public static bool active { get; protected set; } public bool isConnected => connectState == ConnectState.Connected; @@ -59,6 +55,11 @@ public NetworkClient(NetworkConnection conn) : this() RegisterSystemHandlers(false); } + internal void SetHandlers(NetworkConnection conn) + { + conn.SetHandlers(handlers); + } + public void Connect(string serverIp) { PrepareForConnect(); From f87f00effaada8c5985421a39e61173718fcc1fd Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:54:20 +0100 Subject: [PATCH 008/276] remove unused ctor --- Assets/Mirror/Runtime/NetworkClient.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 48a42ca67..43473668f 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -45,16 +45,6 @@ public NetworkClient() singleton = this; } - // initialize with connection. calls NetworkClient() to setup singleton. - public NetworkClient(NetworkConnection conn) : this() - { - active = true; - m_Connection = conn; - connectState = ConnectState.Connected; - conn.SetHandlers(handlers); - RegisterSystemHandlers(false); - } - internal void SetHandlers(NetworkConnection conn) { conn.SetHandlers(handlers); From 4634f0632e147a91ccdf01c9214ae4b371305e66 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:55:04 +0100 Subject: [PATCH 009/276] comment out unused GenerateConnectError --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 43473668f..8abda9507 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -192,13 +192,13 @@ internal virtual void Update() } } + /* TODO use or remove void GenerateConnectError(byte error) { Debug.LogError("UNet Client Error Connect Error: " + error); GenerateError(error); } - /* TODO use or remove void GenerateDataError(byte error) { NetworkError dataError = (NetworkError)error; From 605c4d471cfd60d4c0cb33b703cfa49179717340 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:57:12 +0100 Subject: [PATCH 010/276] rename m_ClientId to clientId --- Assets/Mirror/Runtime/NetworkClient.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 8abda9507..31c30d095 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -9,7 +9,7 @@ public class NetworkClient // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; - int m_ClientId = -1; + int clientId = -1; public readonly Dictionary handlers = new Dictionary(); @@ -63,7 +63,7 @@ public void Connect(string serverIp) NetworkManager.singleton.transport.ClientConnect(serverIp); // setup all the handlers - m_Connection = new NetworkConnection(this.serverIp, m_ClientId, 0); + m_Connection = new NetworkConnection(this.serverIp, clientId, 0); m_Connection.SetHandlers(handlers); } @@ -119,7 +119,7 @@ void PrepareForConnect() { active = true; RegisterSystemHandlers(false); - m_ClientId = 0; + clientId = 0; NetworkManager.singleton.transport.enabled = true; InitializeTransportHandlers(); } @@ -133,7 +133,7 @@ public virtual void Disconnect() m_Connection.Disconnect(); m_Connection.Dispose(); m_Connection = null; - m_ClientId = -1; + clientId = -1; RemoveTransportHandlers(); } } @@ -164,15 +164,15 @@ public bool Send(short msgType, MessageBase msg) public void Shutdown() { - if (LogFilter.Debug) Debug.Log("Shutting down client " + m_ClientId); - m_ClientId = -1; + if (LogFilter.Debug) Debug.Log("Shutting down client " + clientId); + clientId = -1; singleton = null; active = false; } internal virtual void Update() { - if (m_ClientId == -1) + if (clientId == -1) { return; } From 2c54ab3722468b6308896e70810dd0bb9f880c09 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 08:59:43 +0100 Subject: [PATCH 011/276] NetworkClient.connection via property --- Assets/Mirror/Runtime/LocalClient.cs | 20 +++++++-------- Assets/Mirror/Runtime/NetworkClient.cs | 35 +++++++++++++------------- 2 files changed, 27 insertions(+), 28 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 4821fd9d3..7e101fda6 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -15,21 +15,21 @@ sealed class LocalClient : NetworkClient public override void Disconnect() { - ClientScene.HandleClientDisconnect(m_Connection); + ClientScene.HandleClientDisconnect(connection); if (m_Connected) { PostInternalMessage((short)MsgType.Disconnect); m_Connected = false; } connectState = ConnectState.Disconnected; - NetworkServer.RemoveLocalClient(m_Connection); + NetworkServer.RemoveLocalClient(connection); } internal void InternalConnectLocalServer(bool generateConnectMsg) { - m_Connection = new ULocalConnectionToServer(); - SetHandlers(m_Connection); - m_Connection.connectionId = NetworkServer.AddLocalClient(this); + connection = new ULocalConnectionToServer(); + SetHandlers(connection); + connection.connectionId = NetworkServer.AddLocalClient(this); connectState = ConnectState.Connected; active = true; @@ -50,14 +50,14 @@ internal override void Update() // Called by the server to set the LocalClient's LocalPlayer object during NetworkServer.AddPlayer() internal void AddLocalPlayer(NetworkIdentity localPlayer) { - if (LogFilter.Debug) Debug.Log("Local client AddLocalPlayer " + localPlayer.gameObject.name + " conn=" + m_Connection.connectionId); - m_Connection.isReady = true; - m_Connection.SetPlayerController(localPlayer); + if (LogFilter.Debug) Debug.Log("Local client AddLocalPlayer " + localPlayer.gameObject.name + " conn=" + connection.connectionId); + connection.isReady = true; + connection.SetPlayerController(localPlayer); if (localPlayer != null) { localPlayer.EnableIsClient(); NetworkIdentity.spawned[localPlayer.netId] = localPlayer; - localPlayer.SetConnectionToServer(m_Connection); + localPlayer.SetConnectionToServer(connection); } // there is no SystemOwnerMessage for local client. add to ClientScene here instead ClientScene.InternalAddPlayer(localPlayer); @@ -86,7 +86,7 @@ void ProcessInternalMessages() while (m_InternalMsgs.Count > 0) { NetworkMessage internalMessage = m_InternalMsgs.Dequeue(); - m_Connection.InvokeHandler(internalMessage); + connection.InvokeHandler(internalMessage); connection.lastMessageTime = Time.time; } } diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 31c30d095..6b9e6080c 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -13,8 +13,7 @@ public class NetworkClient public readonly Dictionary handlers = new Dictionary(); - protected NetworkConnection m_Connection; - public NetworkConnection connection => m_Connection; + public NetworkConnection connection { get; protected set; } = null; protected enum ConnectState { @@ -63,8 +62,8 @@ public void Connect(string serverIp) NetworkManager.singleton.transport.ClientConnect(serverIp); // setup all the handlers - m_Connection = new NetworkConnection(this.serverIp, clientId, 0); - m_Connection.SetHandlers(handlers); + connection = new NetworkConnection(this.serverIp, clientId, 0); + connection.SetHandlers(handlers); } private void InitializeTransportHandlers() @@ -85,23 +84,23 @@ void OnDisconnected() { connectState = ConnectState.Disconnected; - ClientScene.HandleClientDisconnect(m_Connection); + ClientScene.HandleClientDisconnect(connection); - m_Connection?.InvokeHandlerNoData((short)MsgType.Disconnect); + connection?.InvokeHandlerNoData((short)MsgType.Disconnect); } void OnDataReceived(byte[] data) { - if (m_Connection != null) + if (connection != null) { - m_Connection.TransportReceive(data); + connection.TransportReceive(data); } else Debug.LogError("Skipped Data message handling because m_Connection is null."); } void OnConnected() { - if (m_Connection != null) + if (connection != null) { // reset network time stats NetworkTime.Reset(); @@ -110,7 +109,7 @@ void OnConnected() // thus we should set the connected state before calling the handler connectState = ConnectState.Connected; NetworkTime.UpdateClient(this); - m_Connection.InvokeHandlerNoData((short)MsgType.Connect); + connection.InvokeHandlerNoData((short)MsgType.Connect); } else Debug.LogError("Skipped Connect message handling because m_Connection is null."); } @@ -127,12 +126,12 @@ void PrepareForConnect() public virtual void Disconnect() { connectState = ConnectState.Disconnected; - ClientScene.HandleClientDisconnect(m_Connection); - if (m_Connection != null) + ClientScene.HandleClientDisconnect(connection); + if (connection != null) { - m_Connection.Disconnect(); - m_Connection.Dispose(); - m_Connection = null; + connection.Disconnect(); + connection.Dispose(); + connection = null; clientId = -1; RemoveTransportHandlers(); } @@ -149,14 +148,14 @@ void RemoveTransportHandlers() public bool Send(short msgType, MessageBase msg) { - if (m_Connection != null) + if (connection != null) { if (connectState != ConnectState.Connected) { Debug.LogError("NetworkClient Send when not connected to a server"); return false; } - return m_Connection.Send(msgType, msg); + return connection.Send(msgType, msg); } Debug.LogError("NetworkClient Send with no connection"); return false; @@ -231,7 +230,7 @@ void GenerateError(byte error) { msgType = (short)MsgType.Error, reader = new NetworkReader(writer.ToArray()), - conn = m_Connection + conn = connection }; msgDelegate(netMsg); } From d42c13ad1599711b0021af45fa45db619d6e0ad8 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:00:16 +0100 Subject: [PATCH 012/276] comment out unused function --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 6b9e6080c..3705cfa0d 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -211,7 +211,6 @@ void GenerateDisconnectError(byte error) Debug.LogError("UNet Client Disconnect Error: " + disconnectError); GenerateError(error); } - */ void GenerateError(byte error) { @@ -235,6 +234,7 @@ void GenerateError(byte error) msgDelegate(netMsg); } } + */ [Obsolete("Use NetworkTime.rtt instead")] public float GetRTT() From c7524cb7f1205eff77ed78f09e5ce1f6b768e1e6 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:01:09 +0100 Subject: [PATCH 013/276] NetworkClient.Update: remove unnecessary checks --- Assets/Mirror/Runtime/NetworkClient.cs | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 3705cfa0d..0a90fb565 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -176,15 +176,7 @@ internal virtual void Update() return; } - // don't do anything if we aren't fully connected - // -> we don't check Client.Connected because then we wouldn't - // process the last disconnect message. - if (connectState != ConnectState.Connecting && - connectState != ConnectState.Connected) - { - return; - } - + // only update things while connected if (connectState == ConnectState.Connected) { NetworkTime.UpdateClient(this); From 0cdaaecd3a322b4e6f5ea08e7b9a19a1e3efad66 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:02:02 +0100 Subject: [PATCH 014/276] avoid shadowing member --- Assets/Mirror/Runtime/NetworkClient.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 0a90fb565..fb7d24008 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -49,17 +49,17 @@ internal void SetHandlers(NetworkConnection conn) conn.SetHandlers(handlers); } - public void Connect(string serverIp) + public void Connect(string ip) { PrepareForConnect(); - if (LogFilter.Debug) { Debug.Log("Client Connect: " + serverIp); } + if (LogFilter.Debug) { Debug.Log("Client Connect: " + ip); } - string hostnameOrIp = serverIp; + string hostnameOrIp = ip; this.serverIp = hostnameOrIp; connectState = ConnectState.Connecting; - NetworkManager.singleton.transport.ClientConnect(serverIp); + NetworkManager.singleton.transport.ClientConnect(ip); // setup all the handlers connection = new NetworkConnection(this.serverIp, clientId, 0); From f1e3c6f8fd3958adfb56b0450005248722f20967 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:02:12 +0100 Subject: [PATCH 015/276] syntax --- Assets/Mirror/Runtime/NetworkClient.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index fb7d24008..1898035c2 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -56,13 +56,13 @@ public void Connect(string ip) if (LogFilter.Debug) { Debug.Log("Client Connect: " + ip); } string hostnameOrIp = ip; - this.serverIp = hostnameOrIp; + serverIp = hostnameOrIp; connectState = ConnectState.Connecting; NetworkManager.singleton.transport.ClientConnect(ip); // setup all the handlers - connection = new NetworkConnection(this.serverIp, clientId, 0); + connection = new NetworkConnection(serverIp, clientId, 0); connection.SetHandlers(handlers); } From 48e08bdd053e2f4ebca4450c93b4e842a2a9d166 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:02:37 +0100 Subject: [PATCH 016/276] no need for extra variable --- Assets/Mirror/Runtime/NetworkClient.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 1898035c2..d4b0c289f 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -55,8 +55,7 @@ public void Connect(string ip) if (LogFilter.Debug) { Debug.Log("Client Connect: " + ip); } - string hostnameOrIp = ip; - serverIp = hostnameOrIp; + serverIp = ip; connectState = ConnectState.Connecting; NetworkManager.singleton.transport.ClientConnect(ip); From b0da7f8b0f98ef0bbe3dffdab3828a2dc49dec5c Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:03:00 +0100 Subject: [PATCH 017/276] syntax --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index d4b0c289f..f437f2892 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -13,7 +13,7 @@ public class NetworkClient public readonly Dictionary handlers = new Dictionary(); - public NetworkConnection connection { get; protected set; } = null; + public NetworkConnection connection { get; protected set; } protected enum ConnectState { From 7109be3c1c22bd98dc3319c1ca12b29aa7eb74cb Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:09:55 +0100 Subject: [PATCH 018/276] move ProcessInternalMessages to Update --- Assets/Mirror/Runtime/LocalClient.cs | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 7e101fda6..653ab59ed 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -44,7 +44,13 @@ internal void InternalConnectLocalServer(bool generateConnectMsg) internal override void Update() { - ProcessInternalMessages(); + // process internal messages so they are applied at the correct time + while (m_InternalMsgs.Count > 0) + { + NetworkMessage internalMessage = m_InternalMsgs.Dequeue(); + connection.InvokeHandler(internalMessage); + connection.lastMessageTime = Time.time; + } } // Called by the server to set the LocalClient's LocalPlayer object during NetworkServer.AddPlayer() @@ -81,16 +87,6 @@ void PostInternalMessage(short msgType) PostInternalMessage(msgType, new NetworkReader(new byte[0])); } - void ProcessInternalMessages() - { - while (m_InternalMsgs.Count > 0) - { - NetworkMessage internalMessage = m_InternalMsgs.Dequeue(); - connection.InvokeHandler(internalMessage); - connection.lastMessageTime = Time.time; - } - } - // called by the server, to bypass network internal void InvokeBytesOnClient(byte[] buffer) { From 58b7126f0b688c748021163789aa581c1934358b Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Tue, 26 Feb 2019 07:54:41 -0600 Subject: [PATCH 019/276] Use Length instead of position for getting the written data (#449) * Use Length instead of position for getting the written data * Update NetworkBehaviour.cs --- Assets/Mirror/Runtime/NetworkIdentity.cs | 4 ++-- Assets/Mirror/Runtime/NetworkWriter.cs | 23 +++++++++++++---------- Assets/Mirror/Runtime/UNetwork.cs | 4 ++-- Assets/Mirror/Tests/NetworkWriterTest.cs | 5 ++--- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 4307d1c82..b2a29ab09 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -455,8 +455,8 @@ internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, boo // -> returns serialized data of everything dirty, null if nothing was dirty internal byte[] OnSerializeAllSafely(bool initialState) { - // reset cached writer's position - onSerializeWriter.Position = 0; + // reset cached writer length and position + onSerializeWriter.Reset(); if (m_NetworkBehaviours.Length > 64) { diff --git a/Assets/Mirror/Runtime/NetworkWriter.cs b/Assets/Mirror/Runtime/NetworkWriter.cs index d03dd007d..cb375c363 100644 --- a/Assets/Mirror/Runtime/NetworkWriter.cs +++ b/Assets/Mirror/Runtime/NetworkWriter.cs @@ -14,19 +14,22 @@ public class NetworkWriter // -> converting long to int is fine until 2GB of data (MAX_INT), so we don't have to worry about overflows here public int Position { get { return (int)writer.BaseStream.Position; } set { writer.BaseStream.Position = value; } } - // MemoryStream.ToArray() ignores .Position, but HLAPI's .ToArray() expects only the valid data until .Position. - // .ToArray() is often used for payloads or sends, we don't unnecessary old data in there (bandwidth etc.) - // Example: - // HLAPI writes 10 bytes, sends them - // HLAPI sets .Position = 0 - // HLAPI writes 5 bytes, sends them - // => .ToArray() would return 10 bytes because of the first write, which is exactly what we don't want. + // MemoryStream has 3 values: Position, Length and Capacity. + // Position is used to indicate where we are writing + // Length is how much data we have written + // capacity is how much memory we have allocated + // ToArray returns all the data we have written, regardless of the current position public byte[] ToArray() { writer.Flush(); - byte[] slice = new byte[Position]; - Array.Copy(((MemoryStream)writer.BaseStream).ToArray(), slice, Position); - return slice; + return ((MemoryStream)writer.BaseStream).ToArray(); + } + + // reset both the position and length of the stream, but leaves the capacity the same + // so that we can reuse this writer without extra allocations + public void Reset() + { + ((MemoryStream)writer.BaseStream).SetLength(0); } public void Write(byte value) { writer.Write(value); } diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 58d3e1639..ee3547cf8 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -106,8 +106,8 @@ public static class Protocol // -> pass writer instead of byte[] so we can reuse it public static byte[] PackMessage(ushort msgType, MessageBase msg) { - // reset cached writer's position - packWriter.Position = 0; + // reset cached writer length and position + packWriter.Reset(); // write message type packWriter.WritePackedUInt32(msgType); diff --git a/Assets/Mirror/Tests/NetworkWriterTest.cs b/Assets/Mirror/Tests/NetworkWriterTest.cs index 1d84421a3..4e728b232 100644 --- a/Assets/Mirror/Tests/NetworkWriterTest.cs +++ b/Assets/Mirror/Tests/NetworkWriterTest.cs @@ -54,9 +54,8 @@ public void TestToArray() // set position back by one writer.Position = 1; - // .ToArray() length is 1, even though the internal array contains 2 bytes? - // (see .ToArray() function comments) - Assert.That(writer.ToArray().Length, Is.EqualTo(1)); + // Changing the position should not alter the size of the data + Assert.That(writer.ToArray().Length, Is.EqualTo(2)); } [Test] From c931d03ae08a738d7193c68f4756197da97b9674 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Tue, 26 Feb 2019 06:21:43 -0800 Subject: [PATCH 020/276] Simplified code a bit, and also removed allocation. (#453) --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 08d0da9d5..bf10eb880 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -29,7 +29,7 @@ internal static void Shutdown() { NetworkIdentity.spawned.Clear(); ClearSpawners(); - s_PendingOwnerNetIds = new List(); + s_PendingOwnerNetIds.Clear(); spawnableObjects = null; readyConnection = null; ready = false; From 93e7da9b88c1b546b089bd982451616684bfb4d5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:32:28 +0100 Subject: [PATCH 021/276] syntax --- Assets/Mirror/Runtime/LocalConnections.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index ab6a02489..50ed8ff09 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -7,7 +7,7 @@ namespace Mirror // sending messages on this connection causes the client's handler function to be invoked directly class ULocalConnectionToClient : NetworkConnection { - public LocalClient localClient { get; } + public LocalClient localClient; public ULocalConnectionToClient(LocalClient localClient) : base ("localClient") { From d86d9e3e87de85dbd8c491956efabc63fc70fc31 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:44:40 +0100 Subject: [PATCH 022/276] m_internalmsgs renamed to packetqueue --- Assets/Mirror/Runtime/LocalClient.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 653ab59ed..59b7d74d7 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -8,9 +8,8 @@ sealed class LocalClient : NetworkClient { // local client in host mode might call Cmds/Rpcs during Update, but we // want to apply them in LateUpdate like all other Transport messages - // to avoid race conditions. - // -> that's why there is an internal message queue. - Queue m_InternalMsgs = new Queue(); + // to avoid race conditions. keep packets in Queue until LateUpdate. + Queue packetQueue = new Queue(); bool m_Connected; public override void Disconnect() @@ -45,9 +44,9 @@ internal void InternalConnectLocalServer(bool generateConnectMsg) internal override void Update() { // process internal messages so they are applied at the correct time - while (m_InternalMsgs.Count > 0) + while (packetQueue.Count > 0) { - NetworkMessage internalMessage = m_InternalMsgs.Dequeue(); + NetworkMessage internalMessage = packetQueue.Dequeue(); connection.InvokeHandler(internalMessage); connection.lastMessageTime = Time.time; } @@ -77,7 +76,7 @@ void PostInternalMessage(short msgType, NetworkReader contentReader) reader = contentReader, conn = connection }; - m_InternalMsgs.Enqueue(msg); + packetQueue.Enqueue(msg); } void PostInternalMessage(short msgType) From 2fcd0cac64cc1e2cf6988ec3693764f394029f5d Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 09:50:22 +0100 Subject: [PATCH 023/276] LocalClient packetQueue stores byte arrays and unpacks them in Update --- Assets/Mirror/Runtime/LocalClient.cs | 55 ++++++++--------------- Assets/Mirror/Runtime/LocalConnections.cs | 2 +- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 59b7d74d7..713a0ef2a 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -9,7 +9,7 @@ sealed class LocalClient : NetworkClient // local client in host mode might call Cmds/Rpcs during Update, but we // want to apply them in LateUpdate like all other Transport messages // to avoid race conditions. keep packets in Queue until LateUpdate. - Queue packetQueue = new Queue(); + internal Queue packetQueue = new Queue(); bool m_Connected; public override void Disconnect() @@ -17,7 +17,7 @@ public override void Disconnect() ClientScene.HandleClientDisconnect(connection); if (m_Connected) { - PostInternalMessage((short)MsgType.Disconnect); + packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); m_Connected = false; } connectState = ConnectState.Disconnected; @@ -36,7 +36,7 @@ internal void InternalConnectLocalServer(bool generateConnectMsg) if (generateConnectMsg) { - PostInternalMessage((short)MsgType.Connect); + packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); } m_Connected = true; } @@ -46,9 +46,22 @@ internal override void Update() // process internal messages so they are applied at the correct time while (packetQueue.Count > 0) { - NetworkMessage internalMessage = packetQueue.Dequeue(); - connection.InvokeHandler(internalMessage); - connection.lastMessageTime = Time.time; + byte[] packet = packetQueue.Dequeue(); + + // unpack message + NetworkReader reader = new NetworkReader(packet); + if (Protocol.UnpackMessage(reader, out ushort msgType)) + { + NetworkMessage msg = new NetworkMessage + { + msgType = (short)msgType, + reader = reader, + conn = connection + }; + + connection.InvokeHandler(msg); + connection.lastMessageTime = Time.time; + } } } @@ -67,35 +80,5 @@ internal void AddLocalPlayer(NetworkIdentity localPlayer) // there is no SystemOwnerMessage for local client. add to ClientScene here instead ClientScene.InternalAddPlayer(localPlayer); } - - void PostInternalMessage(short msgType, NetworkReader contentReader) - { - NetworkMessage msg = new NetworkMessage - { - msgType = msgType, - reader = contentReader, - conn = connection - }; - packetQueue.Enqueue(msg); - } - - void PostInternalMessage(short msgType) - { - // call PostInternalMessage with empty content array if we just want to call a message like Connect - // -> original NetworkTransport used empty [] and not null array for those messages too - PostInternalMessage(msgType, new NetworkReader(new byte[0])); - } - - // called by the server, to bypass network - internal void InvokeBytesOnClient(byte[] buffer) - { - // unpack message and post to internal list for processing - NetworkReader reader = new NetworkReader(buffer); - if (Protocol.UnpackMessage(reader, out ushort msgType)) - { - PostInternalMessage((short)msgType, reader); - } - else Debug.LogError("InvokeBytesOnClient failed to unpack message: " + BitConverter.ToString(buffer)); - } } } diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index 50ed8ff09..19c3fbdf9 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -16,7 +16,7 @@ public ULocalConnectionToClient(LocalClient localClient) : base ("localClient") internal override bool SendBytes(byte[] bytes, int channelId = Channels.DefaultReliable) { - localClient.InvokeBytesOnClient(bytes); + localClient.packetQueue.Enqueue(bytes); return true; } } From 29a95b33a1f78bbf323772ba8e03ade739ba1f60 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:08:02 +0100 Subject: [PATCH 024/276] NetworkConnection: move InvokeHandlers next to HandleBytes for a better overview --- Assets/Mirror/Runtime/NetworkConnection.cs | 62 +++++++++++----------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 9512fac54..7e71c5287 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -94,6 +94,37 @@ internal void SetHandlers(Dictionary handlers) m_MessageHandlers = handlers; } + public void RegisterHandler(short msgType, NetworkMessageDelegate handler) + { + if (m_MessageHandlers.ContainsKey(msgType)) + { + if (LogFilter.Debug) { Debug.Log("NetworkConnection.RegisterHandler replacing " + msgType); } + } + m_MessageHandlers[msgType] = handler; + } + + public void UnregisterHandler(short msgType) + { + m_MessageHandlers.Remove(msgType); + } + + internal void SetPlayerController(NetworkIdentity player) + { + m_PlayerController = player; + } + + internal void RemovePlayerController() + { + m_PlayerController = null; + } + + public virtual bool Send(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) + { + // pack message and send + byte[] message = Protocol.PackMessage((ushort)msgType, msg); + return SendBytes(message, channelId); + } + public bool InvokeHandlerNoData(short msgType) { return InvokeHandler(msgType, null); @@ -127,37 +158,6 @@ public bool InvokeHandler(NetworkMessage netMsg) return false; } - public void RegisterHandler(short msgType, NetworkMessageDelegate handler) - { - if (m_MessageHandlers.ContainsKey(msgType)) - { - if (LogFilter.Debug) { Debug.Log("NetworkConnection.RegisterHandler replacing " + msgType); } - } - m_MessageHandlers[msgType] = handler; - } - - public void UnregisterHandler(short msgType) - { - m_MessageHandlers.Remove(msgType); - } - - internal void SetPlayerController(NetworkIdentity player) - { - m_PlayerController = player; - } - - internal void RemovePlayerController() - { - m_PlayerController = null; - } - - public virtual bool Send(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) - { - // pack message and send - byte[] message = Protocol.PackMessage((ushort)msgType, msg); - return SendBytes(message, channelId); - } - // internal because no one except Mirror should send bytes directly to // the client. they would be detected as a message. send messages instead. internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultReliable) From cbc3c724c9c5b9622d36e2d96ccd8847f2fb1df5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:22:49 +0100 Subject: [PATCH 025/276] ClientScene.RegisterSystemHandlers: sort and add empty handlers to local client's handlers to avoid 'messageid not found' errors. This way we can reuse NetworkConnection.HandleBytes for local client without errors. --- Assets/Mirror/Runtime/ClientScene.cs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index bf10eb880..2425bfe58 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -198,27 +198,34 @@ internal static NetworkIdentity SpawnSceneObject(uint sceneId) internal static void RegisterSystemHandlers(NetworkClient client, bool localClient) { + // local client / regular client react to some messages differently. + // but we still need to add handlers for all of them to avoid + // 'message id not found' errors. if (localClient) { + client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); client.RegisterHandler(MsgType.ObjectDestroy, OnLocalClientObjectDestroy); client.RegisterHandler(MsgType.ObjectHide, OnLocalClientObjectHide); + client.RegisterHandler(MsgType.Owner, (msg) => {}); + client.RegisterHandler(MsgType.Pong, (msg) => {}); client.RegisterHandler(MsgType.SpawnPrefab, OnLocalClientSpawnPrefab); client.RegisterHandler(MsgType.SpawnSceneObject, OnLocalClientSpawnSceneObject); - client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); + client.RegisterHandler(MsgType.SpawnStarted, (msg) => {}); + client.RegisterHandler(MsgType.SpawnFinished, (msg) => {}); + client.RegisterHandler(MsgType.UpdateVars, (msg) => {}); } else { - // LocalClient shares the sim/scene with the server, no need for these events + client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); + client.RegisterHandler(MsgType.ObjectDestroy, OnObjectDestroy); + client.RegisterHandler(MsgType.ObjectHide, OnObjectDestroy); + client.RegisterHandler(MsgType.Owner, OnOwnerMessage); + client.RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); client.RegisterHandler(MsgType.SpawnPrefab, OnSpawnPrefab); client.RegisterHandler(MsgType.SpawnSceneObject, OnSpawnSceneObject); client.RegisterHandler(MsgType.SpawnStarted, OnObjectSpawnStarted); client.RegisterHandler(MsgType.SpawnFinished, OnObjectSpawnFinished); - client.RegisterHandler(MsgType.ObjectDestroy, OnObjectDestroy); - client.RegisterHandler(MsgType.ObjectHide, OnObjectDestroy); client.RegisterHandler(MsgType.UpdateVars, OnUpdateVarsMessage); - client.RegisterHandler(MsgType.Owner, OnOwnerMessage); - client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); - client.RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); } client.RegisterHandler(MsgType.Rpc, OnRPCMessage); From e605ec725105beece02653d1f9d3f6f4eef7c5a7 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:24:24 +0100 Subject: [PATCH 026/276] NetworkClient.OnDataReceived made protected so it can be called from LocalClient --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index f437f2892..1d0e4c217 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -88,7 +88,7 @@ void OnDisconnected() connection?.InvokeHandlerNoData((short)MsgType.Disconnect); } - void OnDataReceived(byte[] data) + protected void OnDataReceived(byte[] data) { if (connection != null) { From f68119d61438bbace88eed15d6c243ad20560c5a Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:29:40 +0100 Subject: [PATCH 027/276] LocalClient.Update uses OnDataReceived --- Assets/Mirror/Runtime/LocalClient.cs | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 713a0ef2a..461fdd0f8 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -47,21 +47,7 @@ internal override void Update() while (packetQueue.Count > 0) { byte[] packet = packetQueue.Dequeue(); - - // unpack message - NetworkReader reader = new NetworkReader(packet); - if (Protocol.UnpackMessage(reader, out ushort msgType)) - { - NetworkMessage msg = new NetworkMessage - { - msgType = (short)msgType, - reader = reader, - conn = connection - }; - - connection.InvokeHandler(msg); - connection.lastMessageTime = Time.time; - } + OnDataReceived(packet); } } From 06a334e6dda43f9447ca173be3d77137cf29fd46 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:34:06 +0100 Subject: [PATCH 028/276] NetworkConnection.HandleBytes moved into TransportReceive --- Assets/Mirror/Runtime/NetworkConnection.cs | 73 ++++++++++------------ 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 7e71c5287..72d915963 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -180,6 +180,39 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR return TransportSend(channelId, bytes, out byte error); } + public override string ToString() + { + return string.Format("hostId: {0} connectionId: {1} isReady: {2}", hostId, connectionId, isReady); + } + + internal void AddToVisList(NetworkIdentity identity) + { + visList.Add(identity); + + // spawn uv for this conn + NetworkServer.ShowForConnection(identity, this); + } + + internal void RemoveFromVisList(NetworkIdentity identity, bool isDestroyed) + { + visList.Remove(identity); + + if (!isDestroyed) + { + // hide uv for this conn + NetworkServer.HideForConnection(identity, this); + } + } + + internal void RemoveObservers() + { + foreach (NetworkIdentity identity in visList) + { + identity.RemoveObserverInternal(this); + } + visList.Clear(); + } + // handle this message // note: original HLAPI HandleBytes function handled >1 message in a while loop, but this wasn't necessary // anymore because NetworkServer/NetworkClient.Update both use while loops to handle >1 data events per @@ -187,7 +220,7 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR // -> in other words, we always receive 1 message per Receive call, never two. // -> can be tested easily with a 1000ms send delay and then logging amount received in while loops here // and in NetworkServer/Client Update. HandleBytes already takes exactly one. - protected void HandleBytes(byte[] buffer) + public virtual void TransportReceive(byte[] buffer) { // unpack message NetworkReader reader = new NetworkReader(buffer); @@ -232,44 +265,6 @@ protected void HandleBytes(byte[] buffer) } } - public override string ToString() - { - return string.Format("hostId: {0} connectionId: {1} isReady: {2}", hostId, connectionId, isReady); - } - - internal void AddToVisList(NetworkIdentity identity) - { - visList.Add(identity); - - // spawn uv for this conn - NetworkServer.ShowForConnection(identity, this); - } - - internal void RemoveFromVisList(NetworkIdentity identity, bool isDestroyed) - { - visList.Remove(identity); - - if (!isDestroyed) - { - // hide uv for this conn - NetworkServer.HideForConnection(identity, this); - } - } - - internal void RemoveObservers() - { - foreach (NetworkIdentity identity in visList) - { - identity.RemoveObserverInternal(this); - } - visList.Clear(); - } - - public virtual void TransportReceive(byte[] bytes) - { - HandleBytes(bytes); - } - public virtual bool TransportSend(int channelId, byte[] bytes, out byte error) { error = 0; From 038f09de3fec93f0bbf4410d3b9ad70f5fa34cdb Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:35:19 +0100 Subject: [PATCH 029/276] NetworkConnection: remove unused InvokeHandler(NetworkMessage) function --- Assets/Mirror/Runtime/NetworkConnection.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 72d915963..2dd95275c 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -148,16 +148,6 @@ public bool InvokeHandler(short msgType, NetworkReader reader) return false; } - public bool InvokeHandler(NetworkMessage netMsg) - { - if (m_MessageHandlers.TryGetValue(netMsg.msgType, out NetworkMessageDelegate msgDelegate)) - { - msgDelegate(netMsg); - return true; - } - return false; - } - // internal because no one except Mirror should send bytes directly to // the client. they would be detected as a message. send messages instead. internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultReliable) From 2f322c37fe439e70fa2b234e02456fbeb59abc33 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:37:38 +0100 Subject: [PATCH 030/276] NetworkConnection: move InvokeHandler functions down to TransportReceive for better overview --- Assets/Mirror/Runtime/NetworkConnection.cs | 46 +++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 2dd95275c..091dad34a 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -125,29 +125,6 @@ public virtual bool Send(short msgType, MessageBase msg, int channelId = Channel return SendBytes(message, channelId); } - public bool InvokeHandlerNoData(short msgType) - { - return InvokeHandler(msgType, null); - } - - public bool InvokeHandler(short msgType, NetworkReader reader) - { - if (m_MessageHandlers.TryGetValue(msgType, out NetworkMessageDelegate msgDelegate)) - { - NetworkMessage message = new NetworkMessage - { - msgType = msgType, - conn = this, - reader = reader - }; - - msgDelegate(message); - return true; - } - Debug.LogError("NetworkConnection InvokeHandler no handler for " + msgType); - return false; - } - // internal because no one except Mirror should send bytes directly to // the client. they would be detected as a message. send messages instead. internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultReliable) @@ -203,6 +180,29 @@ internal void RemoveObservers() visList.Clear(); } + public bool InvokeHandlerNoData(short msgType) + { + return InvokeHandler(msgType, null); + } + + public bool InvokeHandler(short msgType, NetworkReader reader) + { + if (m_MessageHandlers.TryGetValue(msgType, out NetworkMessageDelegate msgDelegate)) + { + NetworkMessage message = new NetworkMessage + { + msgType = msgType, + conn = this, + reader = reader + }; + + msgDelegate(message); + return true; + } + Debug.LogError("NetworkConnection InvokeHandler no handler for " + msgType); + return false; + } + // handle this message // note: original HLAPI HandleBytes function handled >1 message in a while loop, but this wasn't necessary // anymore because NetworkServer/NetworkClient.Update both use while loops to handle >1 data events per From 17c343d28d2e73455f6a24bb9a1afe70456bdf27 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:39:41 +0100 Subject: [PATCH 031/276] NetworkConnection.InvokeHandler: improve error message --- Assets/Mirror/Runtime/NetworkConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 091dad34a..ad6bcf0d6 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -199,7 +199,7 @@ public bool InvokeHandler(short msgType, NetworkReader reader) msgDelegate(message); return true; } - Debug.LogError("NetworkConnection InvokeHandler no handler for " + msgType); + Debug.LogError("Unknown message ID " + msgType + " connId:" + connectionId); return false; } From b15ad7dbc0d3594d8f13eae9dcadfa0940e78efc Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:40:53 +0100 Subject: [PATCH 032/276] syntax --- Assets/Mirror/Runtime/NetworkConnection.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index ad6bcf0d6..565abe09e 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -192,8 +192,8 @@ public bool InvokeHandler(short msgType, NetworkReader reader) NetworkMessage message = new NetworkMessage { msgType = msgType, - conn = this, - reader = reader + reader = reader, + conn = this }; msgDelegate(message); From 312ef309ae422b179be2120f7418254961bc4a00 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:41:30 +0100 Subject: [PATCH 033/276] NetworkConnection.TransportReceive: reuse InvokeHandler --- Assets/Mirror/Runtime/NetworkConnection.cs | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 565abe09e..51a606d31 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -230,24 +230,11 @@ public virtual void TransportReceive(byte[] buffer) } } - if (m_MessageHandlers.TryGetValue((short)msgType, out NetworkMessageDelegate msgDelegate)) + // try to invoke the handler for that message + if (InvokeHandler((short)msgType, reader)) { - // create message here instead of caching it. so we can add it to queue more easily. - NetworkMessage msg = new NetworkMessage - { - msgType = (short)msgType, - reader = reader, - conn = this - }; - - msgDelegate(msg); lastMessageTime = Time.time; } - else - { - //NOTE: this throws away the rest of the buffer. Need moar error codes - Debug.LogError("Unknown message ID " + msgType + " connId:" + connectionId); - } } else { From 1c999df5de58edd0e14553f00a66f583ebd52984 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:41:41 +0100 Subject: [PATCH 034/276] syntax --- Assets/Mirror/Runtime/NetworkConnection.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 51a606d31..64dfef942 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -236,10 +236,7 @@ public virtual void TransportReceive(byte[] buffer) lastMessageTime = Time.time; } } - else - { - Debug.LogError("HandleBytes UnpackMessage failed for: " + BitConverter.ToString(buffer)); - } + else Debug.LogError("HandleBytes UnpackMessage failed for: " + BitConverter.ToString(buffer)); } public virtual bool TransportSend(int channelId, byte[] bytes, out byte error) From c2dcf69e1595c05c51c1b2c193d9b18c4e9909e3 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 10:46:20 +0100 Subject: [PATCH 035/276] improve comments --- Assets/Mirror/Runtime/NetworkConnection.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 64dfef942..94cfe45db 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -156,7 +156,7 @@ internal void AddToVisList(NetworkIdentity identity) { visList.Add(identity); - // spawn uv for this conn + // spawn identity for this conn NetworkServer.ShowForConnection(identity, this); } @@ -166,7 +166,7 @@ internal void RemoveFromVisList(NetworkIdentity identity, bool isDestroyed) if (!isDestroyed) { - // hide uv for this conn + // hide identity for this conn NetworkServer.HideForConnection(identity, this); } } From 903ca76c653fc1d91d99860abe41da1abcc7ae54 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 11:01:14 +0100 Subject: [PATCH 036/276] Remove NetworkServer.InvokeBytes. LocalConnection uses TransportReceive instead. --- Assets/Mirror/Runtime/LocalConnections.cs | 6 +++++- Assets/Mirror/Runtime/NetworkServer.cs | 16 ---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index 19c3fbdf9..75c71da38 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -36,7 +36,11 @@ internal override bool SendBytes(byte[] bytes, int channelId = Channels.DefaultR Debug.LogError("LocalConnection:SendBytes cannot send zero bytes"); return false; } - return NetworkServer.InvokeBytes(this, bytes); + + // handle the server's message directly + // TODO any way to do this without NetworkServer.localConnection? + NetworkServer.localConnection.TransportReceive(bytes); + return true; } } } diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index a5f6eeed9..ad1979146 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -1084,22 +1084,6 @@ public static void UnSpawn(GameObject obj) } } - internal static bool InvokeBytes(ULocalConnectionToServer conn, byte[] buffer) - { - NetworkReader reader = new NetworkReader(buffer); - if (Protocol.UnpackMessage(reader, out ushort msgType)) - { - if (handlers.ContainsKey((short)msgType) && s_LocalConnection != null) - { - // this must be invoked with the connection to the client, not the client's connection to the server - s_LocalConnection.InvokeHandler((short)msgType, reader); - return true; - } - } - Debug.LogError("InvokeBytes: failed to unpack message:" + BitConverter.ToString(buffer)); - return false; - } - [Obsolete("Use NetworkIdentity.spawned[netId] instead.")] public static GameObject FindLocalObject(uint netId) { From 3967a7c089184d51d40240e68c2e8be17c3e89db Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 11:19:37 +0100 Subject: [PATCH 037/276] LocalClient.InternalConnectLocalServer: always generate connect message --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- Assets/Mirror/Runtime/LocalClient.cs | 8 +++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 2425bfe58..ab460c76d 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -150,7 +150,7 @@ public static NetworkClient ConnectLocalServer() { LocalClient newClient = new LocalClient(); NetworkServer.ActivateLocalClientScene(); - newClient.InternalConnectLocalServer(true); + newClient.InternalConnectLocalServer(); return newClient; } diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 461fdd0f8..6fdb1180e 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -24,7 +24,7 @@ public override void Disconnect() NetworkServer.RemoveLocalClient(connection); } - internal void InternalConnectLocalServer(bool generateConnectMsg) + internal void InternalConnectLocalServer() { connection = new ULocalConnectionToServer(); SetHandlers(connection); @@ -34,10 +34,8 @@ internal void InternalConnectLocalServer(bool generateConnectMsg) active = true; RegisterSystemHandlers(true); - if (generateConnectMsg) - { - packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); - } + packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); + m_Connected = true; } From 6fa3aacea23b1be0c88cee2510acf2aa2333c079 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 11:47:44 +0100 Subject: [PATCH 038/276] LocalClient: removed unnecessary m_Connected variable --- Assets/Mirror/Runtime/LocalClient.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 6fdb1180e..719c319fb 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -10,15 +10,13 @@ sealed class LocalClient : NetworkClient // want to apply them in LateUpdate like all other Transport messages // to avoid race conditions. keep packets in Queue until LateUpdate. internal Queue packetQueue = new Queue(); - bool m_Connected; public override void Disconnect() { ClientScene.HandleClientDisconnect(connection); - if (m_Connected) + if (isConnected) { packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); - m_Connected = false; } connectState = ConnectState.Disconnected; NetworkServer.RemoveLocalClient(connection); @@ -35,8 +33,6 @@ internal void InternalConnectLocalServer() RegisterSystemHandlers(true); packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); - - m_Connected = true; } internal override void Update() From a724503f6e0764a483608f065cd5e94011acbd4d Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 11:54:47 +0100 Subject: [PATCH 039/276] LocalClient.Disconnect: modify syntax to be more similar to NetworkClient.Disconnect --- Assets/Mirror/Runtime/LocalClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 719c319fb..c06b8584f 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -13,12 +13,12 @@ sealed class LocalClient : NetworkClient public override void Disconnect() { + connectState = ConnectState.Disconnected; ClientScene.HandleClientDisconnect(connection); if (isConnected) { packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); } - connectState = ConnectState.Disconnected; NetworkServer.RemoveLocalClient(connection); } From 9c58cb5c800da44f9433da4239608abdf7206eb9 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 14:25:30 +0100 Subject: [PATCH 040/276] syntax --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 1d0e4c217..99382b3f9 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -20,7 +20,7 @@ protected enum ConnectState None, Connecting, Connected, - Disconnected, + Disconnected } protected ConnectState connectState = ConnectState.None; From 7ac3749274d6516ef7c3f57dc53eaeda73a1d5a8 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 15:01:18 +0100 Subject: [PATCH 041/276] NetworkServer.RemoveLocalClient: remove unnecessary parameter --- Assets/Mirror/Runtime/LocalClient.cs | 2 +- Assets/Mirror/Runtime/NetworkServer.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index c06b8584f..376624527 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -19,7 +19,7 @@ public override void Disconnect() { packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); } - NetworkServer.RemoveLocalClient(connection); + NetworkServer.RemoveLocalClient(); } internal void InternalConnectLocalServer() diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index ad1979146..5d22105c5 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -147,7 +147,7 @@ internal static int AddLocalClient(LocalClient localClient) return 0; } - internal static void RemoveLocalClient(NetworkConnection localClientConnection) + internal static void RemoveLocalClient() { if (s_LocalConnection != null) { From 81ecf61eed689628ecb41e30fcf4352867d8f151 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 15:03:30 +0100 Subject: [PATCH 042/276] LocalClient: move connect above disconnect --- Assets/Mirror/Runtime/LocalClient.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 376624527..b2d268b13 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -11,17 +11,6 @@ sealed class LocalClient : NetworkClient // to avoid race conditions. keep packets in Queue until LateUpdate. internal Queue packetQueue = new Queue(); - public override void Disconnect() - { - connectState = ConnectState.Disconnected; - ClientScene.HandleClientDisconnect(connection); - if (isConnected) - { - packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); - } - NetworkServer.RemoveLocalClient(); - } - internal void InternalConnectLocalServer() { connection = new ULocalConnectionToServer(); @@ -35,6 +24,17 @@ internal void InternalConnectLocalServer() packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); } + public override void Disconnect() + { + connectState = ConnectState.Disconnected; + ClientScene.HandleClientDisconnect(connection); + if (isConnected) + { + packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); + } + NetworkServer.RemoveLocalClient(); + } + internal override void Update() { // process internal messages so they are applied at the correct time From fd561db9c209a7882880ea50dbab9927de4b6d58 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 15:11:42 +0100 Subject: [PATCH 043/276] NetworkServer.AddLocalClient: reused OnConnected --- Assets/Mirror/Runtime/NetworkServer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 5d22105c5..a8d609589 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -142,8 +142,7 @@ internal static int AddLocalClient(LocalClient localClient) connectionId = 0 }; AddConnection(s_LocalConnection); - - s_LocalConnection.InvokeHandlerNoData((short)MsgType.Connect); + OnConnected(s_LocalConnection); return 0; } From 9957cbc3b51bbef71ad63575f88a84c2ca7cee5b Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 15:13:04 +0100 Subject: [PATCH 044/276] NetworkServer.OnConnected: call AddConnection in here too, instead of manually doing it from AddLocalClient and OnConnected --- Assets/Mirror/Runtime/NetworkServer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index a8d609589..aceffa216 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -141,7 +141,6 @@ internal static int AddLocalClient(LocalClient localClient) { connectionId = 0 }; - AddConnection(s_LocalConnection); OnConnected(s_LocalConnection); return 0; } @@ -323,7 +322,6 @@ static void OnConnected(int connectionId) // add player info NetworkConnection conn = new NetworkConnection(address, serverHostId, connectionId); - AddConnection(conn); OnConnected(conn); } else @@ -337,6 +335,9 @@ static void OnConnected(int connectionId) static void OnConnected(NetworkConnection conn) { if (LogFilter.Debug) { Debug.Log("Server accepted client:" + conn.connectionId); } + + // add connection and invoke connected event + AddConnection(conn); conn.InvokeHandlerNoData((short)MsgType.Connect); } From db327541009eff6dd1c1b3744301dd73272cf1ee Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:26:33 +0100 Subject: [PATCH 045/276] NetworkClient: move Shutdown next to ShutdownAll --- Assets/Mirror/Runtime/NetworkClient.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 99382b3f9..4beccbf8a 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -160,14 +160,6 @@ public bool Send(short msgType, MessageBase msg) return false; } - public void Shutdown() - { - if (LogFilter.Debug) Debug.Log("Shutting down client " + clientId); - clientId = -1; - singleton = null; - active = false; - } - internal virtual void Update() { if (clientId == -1) @@ -267,6 +259,14 @@ internal static void UpdateClients() singleton?.Update(); } + public void Shutdown() + { + if (LogFilter.Debug) Debug.Log("Shutting down client " + clientId); + clientId = -1; + singleton = null; + active = false; + } + public static void ShutdownAll() { singleton?.Shutdown(); From 70ecdd8f3a7e36f9577899c409539bd909d330f9 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:28:45 +0100 Subject: [PATCH 046/276] NetworkClient.UpdateClients renamed to UpdateClient --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 4beccbf8a..27228caef 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -254,7 +254,7 @@ public void UnregisterHandler(MsgType msgType) UnregisterHandler((short)msgType); } - internal static void UpdateClients() + internal static void UpdateClient() { singleton?.Update(); } diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index b2a29ab09..305cd0cbc 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -937,7 +937,7 @@ internal void UNetUpdate() public static void UNetStaticUpdate() { NetworkServer.Update(); - NetworkClient.UpdateClients(); + NetworkClient.UpdateClient(); NetworkManager.UpdateScene(); } } From bd2952446ebee58fa854e8790a54a74bb7353f00 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:36:08 +0100 Subject: [PATCH 047/276] NetworkClient.clientId: add comment --- Assets/Mirror/Runtime/NetworkClient.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 27228caef..c75fff91d 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -9,6 +9,8 @@ public class NetworkClient // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; + // this is always 0 or -1 because NetworkClient is only used for our own + // client. int clientId = -1; public readonly Dictionary handlers = new Dictionary(); From 9a143dac5bc3a4334426f3ac1775c8126680add4 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:41:18 +0100 Subject: [PATCH 048/276] NetworkClient.Disconnect sets active = false too --- Assets/Mirror/Runtime/NetworkClient.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index c75fff91d..04f136a17 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -136,6 +136,9 @@ public virtual void Disconnect() clientId = -1; RemoveTransportHandlers(); } + + // the client's network is not active anymore. + active = false; } void RemoveTransportHandlers() From 3d945666a8a39e2aea5c51f319b0c2cde6e1c873 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:43:55 +0100 Subject: [PATCH 049/276] NetworkClient.Connect: use 0 as second parameter because the third one was actually the client id. The second one was the host id, which will likely be removed soon because it's left over from LLAPI. --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 04f136a17..cba193b79 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -63,7 +63,7 @@ public void Connect(string ip) NetworkManager.singleton.transport.ClientConnect(ip); // setup all the handlers - connection = new NetworkConnection(serverIp, clientId, 0); + connection = new NetworkConnection(serverIp, 0, 0); connection.SetHandlers(handlers); } From d08b9c027217b2ec0b076126b1723ff6c9d23293 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:45:58 +0100 Subject: [PATCH 050/276] NetworkClient.clientId removed because all it ever did was change between -1 and 0 to indicate if a connection was made. The .active variable is enough here. --- Assets/Mirror/Runtime/NetworkClient.cs | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index cba193b79..491718580 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -9,10 +9,6 @@ public class NetworkClient // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; - // this is always 0 or -1 because NetworkClient is only used for our own - // client. - int clientId = -1; - public readonly Dictionary handlers = new Dictionary(); public NetworkConnection connection { get; protected set; } @@ -119,7 +115,6 @@ void PrepareForConnect() { active = true; RegisterSystemHandlers(false); - clientId = 0; NetworkManager.singleton.transport.enabled = true; InitializeTransportHandlers(); } @@ -133,7 +128,6 @@ public virtual void Disconnect() connection.Disconnect(); connection.Dispose(); connection = null; - clientId = -1; RemoveTransportHandlers(); } @@ -167,13 +161,8 @@ public bool Send(short msgType, MessageBase msg) internal virtual void Update() { - if (clientId == -1) - { - return; - } - // only update things while connected - if (connectState == ConnectState.Connected) + if (active && connectState == ConnectState.Connected) { NetworkTime.UpdateClient(this); } @@ -266,8 +255,7 @@ internal static void UpdateClient() public void Shutdown() { - if (LogFilter.Debug) Debug.Log("Shutting down client " + clientId); - clientId = -1; + if (LogFilter.Debug) Debug.Log("Shutting down client."); singleton = null; active = false; } From 74b297819be0f492da10db6ae03f675c4a3e016c Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 16:57:19 +0100 Subject: [PATCH 051/276] NetworkServer: remove unnecessary check because hostId is set to 0 one line before that --- Assets/Mirror/Runtime/NetworkServer.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index aceffa216..c1dcc1774 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -95,12 +95,6 @@ public static bool Listen(int maxConnections) { NetworkManager.singleton.transport.ServerStart(); serverHostId = 0; // so it doesn't return false - - if (serverHostId == -1) - { - return false; - } - if (LogFilter.Debug) { Debug.Log("Server started listening"); } } From 619d5f47e3d880739009c774ffdc8b8131c5bc0f Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 17:08:10 +0100 Subject: [PATCH 052/276] Remove hostId from NetworkServer and NetworkConnection because it was only needed for the old LLAPI. Also added comment for NetworkConnection.isConnected which can be removed later. --- Assets/Mirror/Runtime/NetworkClient.cs | 2 +- Assets/Mirror/Runtime/NetworkConnection.cs | 19 +++++++++---------- Assets/Mirror/Runtime/NetworkServer.cs | 14 +++++--------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 491718580..d41204e76 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -59,7 +59,7 @@ public void Connect(string ip) NetworkManager.singleton.transport.ClientConnect(ip); // setup all the handlers - connection = new NetworkConnection(serverIp, 0, 0); + connection = new NetworkConnection(serverIp, 0); connection.SetHandlers(handlers); } diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 94cfe45db..bf359f554 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -11,7 +11,6 @@ public class NetworkConnection : IDisposable Dictionary m_MessageHandlers; - public int hostId = -1; public int connectionId = -1; public bool isReady; public string address; @@ -19,17 +18,20 @@ public class NetworkConnection : IDisposable public NetworkIdentity playerController => m_PlayerController; public HashSet clientOwnedObjects; public bool logNetworkMessages; - public bool isConnected => hostId != -1; + + // this is always true for regular connections, false for local + // connections because it's set in the constructor and never reset. + public bool isConnected { get; protected set; } public NetworkConnection(string networkAddress) { address = networkAddress; } - public NetworkConnection(string networkAddress, int networkHostId, int networkConnectionId) + public NetworkConnection(string networkAddress, int networkConnectionId) { address = networkAddress; - hostId = networkHostId; connectionId = networkConnectionId; + isConnected = true; } ~NetworkConnection() @@ -82,11 +84,8 @@ public void Disconnect() NetworkManager.singleton.transport.ServerDisconnect(connectionId); } - // remove observers. original HLAPI has hostId check for that too. - if (hostId != -1) - { - RemoveObservers(); - } + // remove observers + RemoveObservers(); } internal void SetHandlers(Dictionary handlers) @@ -149,7 +148,7 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR public override string ToString() { - return string.Format("hostId: {0} connectionId: {1} isReady: {2}", hostId, connectionId, isReady); + return string.Format("connectionId: {0} isReady: {1}", connectionId, isReady); } internal void AddToVisList(NetworkIdentity identity) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index c1dcc1774..49d2ede03 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -17,8 +17,6 @@ public static class NetworkServer // => removed it for easier code. use .localConection now! public static NetworkConnection localConnection => s_LocalConnection; - public static int serverHostId { get; private set; } = -1; - // public static Dictionary connections = new Dictionary(); public static Dictionary handlers = new Dictionary(); @@ -46,7 +44,6 @@ public static void Shutdown() else { NetworkManager.singleton.transport.ServerStop(); - serverHostId = -1; } NetworkManager.singleton.transport.OnServerDisconnected.RemoveListener(OnDisconnected); @@ -94,7 +91,6 @@ public static bool Listen(int maxConnections) if (!dontListen) { NetworkManager.singleton.transport.ServerStart(); - serverHostId = 0; // so it doesn't return false if (LogFilter.Debug) { Debug.Log("Server started listening"); } } @@ -278,10 +274,10 @@ static void UpdateServerObjects() // The user should never need to pump the update loop manually internal static void Update() { - if (serverHostId == -1) - return; - - UpdateServerObjects(); + if (active) + { + UpdateServerObjects(); + } } static void OnConnected(int connectionId) @@ -315,7 +311,7 @@ static void OnConnected(int connectionId) string address = NetworkManager.singleton.transport.ServerGetClientAddress(connectionId); // add player info - NetworkConnection conn = new NetworkConnection(address, serverHostId, connectionId); + NetworkConnection conn = new NetworkConnection(address, connectionId); OnConnected(conn); } else From a851ca75546d4cebfbc62e1e9582f5cd6c211343 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 26 Feb 2019 20:59:32 +0100 Subject: [PATCH 053/276] Rename NetworkWriter.Reset to SetLength(value). Seems more obvious. Reset could mean a lot of things. (#459) --- Assets/Mirror/Runtime/NetworkIdentity.cs | 2 +- Assets/Mirror/Runtime/NetworkWriter.cs | 6 +++--- Assets/Mirror/Runtime/UNetwork.cs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 305cd0cbc..0ff42f454 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -456,7 +456,7 @@ internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, boo internal byte[] OnSerializeAllSafely(bool initialState) { // reset cached writer length and position - onSerializeWriter.Reset(); + onSerializeWriter.SetLength(0); if (m_NetworkBehaviours.Length > 64) { diff --git a/Assets/Mirror/Runtime/NetworkWriter.cs b/Assets/Mirror/Runtime/NetworkWriter.cs index cb375c363..952dbce9c 100644 --- a/Assets/Mirror/Runtime/NetworkWriter.cs +++ b/Assets/Mirror/Runtime/NetworkWriter.cs @@ -14,7 +14,7 @@ public class NetworkWriter // -> converting long to int is fine until 2GB of data (MAX_INT), so we don't have to worry about overflows here public int Position { get { return (int)writer.BaseStream.Position; } set { writer.BaseStream.Position = value; } } - // MemoryStream has 3 values: Position, Length and Capacity. + // MemoryStream has 3 values: Position, Length and Capacity. // Position is used to indicate where we are writing // Length is how much data we have written // capacity is how much memory we have allocated @@ -27,9 +27,9 @@ public byte[] ToArray() // reset both the position and length of the stream, but leaves the capacity the same // so that we can reuse this writer without extra allocations - public void Reset() + public void SetLength(long value) { - ((MemoryStream)writer.BaseStream).SetLength(0); + ((MemoryStream)writer.BaseStream).SetLength(value); } public void Write(byte value) { writer.Write(value); } diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index ee3547cf8..0c951658f 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -107,7 +107,7 @@ public static class Protocol public static byte[] PackMessage(ushort msgType, MessageBase msg) { // reset cached writer length and position - packWriter.Reset(); + packWriter.SetLength(0); // write message type packWriter.WritePackedUInt32(msgType); From ca9d88d6021439650051c9213740ecd821edbb6e Mon Sep 17 00:00:00 2001 From: rodolphito Date: Tue, 26 Feb 2019 20:15:22 -0800 Subject: [PATCH 054/276] Greatly simplified SyncList by using Expression Bodied Members. (#466) --- Assets/Mirror/Runtime/SyncList.cs | 111 ++++++------------------------ 1 file changed, 21 insertions(+), 90 deletions(-) diff --git a/Assets/Mirror/Runtime/SyncList.cs b/Assets/Mirror/Runtime/SyncList.cs index 8e99b329a..97ba79d02 100644 --- a/Assets/Mirror/Runtime/SyncList.cs +++ b/Assets/Mirror/Runtime/SyncList.cs @@ -8,67 +8,32 @@ namespace Mirror { public class SyncListString : SyncList { - protected override void SerializeItem(NetworkWriter writer, string item) - { - writer.Write(item); - } - - protected override string DeserializeItem(NetworkReader reader) - { - return reader.ReadString(); - } + protected override void SerializeItem(NetworkWriter writer, string item) => writer.Write(item); + protected override string DeserializeItem(NetworkReader reader) => reader.ReadString(); } public class SyncListFloat : SyncList { - protected override void SerializeItem(NetworkWriter writer, float item) - { - writer.Write(item); - } - - protected override float DeserializeItem(NetworkReader reader) - { - return reader.ReadSingle(); - } + protected override void SerializeItem(NetworkWriter writer, float item) => writer.Write(item); + protected override float DeserializeItem(NetworkReader reader) => reader.ReadSingle(); } public class SyncListInt : SyncList { - protected override void SerializeItem(NetworkWriter writer, int item) - { - writer.WritePackedUInt32((uint)item); - } - - protected override int DeserializeItem(NetworkReader reader) - { - return (int)reader.ReadPackedUInt32(); - } + protected override void SerializeItem(NetworkWriter writer, int item) => writer.WritePackedUInt32((uint)item); + protected override int DeserializeItem(NetworkReader reader) => (int)reader.ReadPackedUInt32(); } public class SyncListUInt : SyncList { - protected override void SerializeItem(NetworkWriter writer, uint item) - { - writer.WritePackedUInt32(item); - } - - protected override uint DeserializeItem(NetworkReader reader) - { - return reader.ReadPackedUInt32(); - } + protected override void SerializeItem(NetworkWriter writer, uint item) => writer.WritePackedUInt32(item); + protected override uint DeserializeItem(NetworkReader reader) => reader.ReadPackedUInt32(); } public class SyncListBool : SyncList { - protected override void SerializeItem(NetworkWriter writer, bool item) - { - writer.Write(item); - } - - protected override bool DeserializeItem(NetworkReader reader) - { - return reader.ReadBoolean(); - } + protected override void SerializeItem(NetworkWriter writer, bool item) => writer.Write(item); + protected override bool DeserializeItem(NetworkReader reader) => reader.ReadBoolean(); } // Original UNET name is SyncListStruct and original Weaver weavers anything @@ -81,19 +46,9 @@ protected override bool DeserializeItem(NetworkReader reader) // TODO rename back to SyncListStruct after 2019.1! public class SyncListSTRUCT : SyncList where T : struct { - protected override void SerializeItem(NetworkWriter writer, T item) - { - } - - protected override T DeserializeItem(NetworkReader reader) - { - return new T(); - } - - public T GetItem(int i) - { - return base[i]; - } + protected override void SerializeItem(NetworkWriter writer, T item) { } + protected override T DeserializeItem(NetworkReader reader) => new T(); + public T GetItem(int i) => base[i]; } [EditorBrowsable(EditorBrowsableState.Never)] @@ -127,7 +82,7 @@ struct Change readonly List Changes = new List(); // how many changes we need to ignore - // this is needed because when we initialize the list, + // this is needed because when we initialize the list, // we might later receive changes that have already been applied // so we need to skip them int changesAhead = 0; @@ -135,20 +90,11 @@ struct Change protected abstract void SerializeItem(NetworkWriter writer, T item); protected abstract T DeserializeItem(NetworkReader reader); - public bool IsDirty - { - get - { - return Changes.Count > 0; - } - } + public bool IsDirty => Changes.Count > 0; // throw away all the changes // this should be called after a successfull sync - public void Flush() - { - Changes.Clear(); - } + public void Flush() => Changes.Clear(); void AddOperation(Operation op, int itemIndex, T item) { @@ -169,10 +115,7 @@ void AddOperation(Operation op, int itemIndex, T item) Callback?.Invoke(op, itemIndex, item); } - void AddOperation(Operation op, int itemIndex) - { - AddOperation(op, itemIndex, default(T)); - } + void AddOperation(Operation op, int itemIndex) => AddOperation(op, itemIndex, default(T)); public void OnSerializeAll(NetworkWriter writer) { @@ -352,20 +295,11 @@ public void Clear() AddOperation(Operation.OP_CLEAR, 0); } - public bool Contains(T item) - { - return m_Objects.Contains(item); - } + public bool Contains(T item) => m_Objects.Contains(item); - public void CopyTo(T[] array, int index) - { - m_Objects.CopyTo(array, index); - } + public void CopyTo(T[] array, int index) => m_Objects.CopyTo(array, index); - public int IndexOf(T item) - { - return m_Objects.IndexOf(item); - } + public int IndexOf(T item) => m_Objects.IndexOf(item); public void Insert(int index, T item) { @@ -420,10 +354,7 @@ public T this[int i] } } - public IEnumerator GetEnumerator() - { - return m_Objects.GetEnumerator(); - } + public IEnumerator GetEnumerator() => m_Objects.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); } From 72474af073eab93aaae7f69712a50bc8736f03d9 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Tue, 26 Feb 2019 20:16:03 -0800 Subject: [PATCH 055/276] Fixed typos in Lobby Example README. (#456) --- Assets/Mirror/Examples/Lobby/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Examples/Lobby/README.md b/Assets/Mirror/Examples/Lobby/README.md index 5d630e394..adf8597b3 100644 --- a/Assets/Mirror/Examples/Lobby/README.md +++ b/Assets/Mirror/Examples/Lobby/README.md @@ -1,6 +1,6 @@ # Lobby Example -In Buld Settings, remove all scenes and add all of the scenes from the Examples\Lobbey\Scenes folder in the following order: +In Build Settings, remove all scenes and add all of the scenes from the Examples\Lobby\Scenes folder in the following order: - Offline - Lobby From 7d3d8dad72db7bf6048c0aa6ca8768e2136d2a7c Mon Sep 17 00:00:00 2001 From: rodolphito Date: Tue, 26 Feb 2019 20:16:42 -0800 Subject: [PATCH 056/276] Simplify ClientScene functions. (#461) --- Assets/Mirror/Runtime/ClientScene.cs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index ab460c76d..71a01ab6a 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -57,16 +57,10 @@ internal static void InternalAddPlayer(NetworkIdentity identity) } // use this if already ready - public static bool AddPlayer() - { - return AddPlayer(null); - } + public static bool AddPlayer() => AddPlayer(null); // use this to implicitly become ready - public static bool AddPlayer(NetworkConnection readyConn) - { - return AddPlayer(readyConn, null); - } + public static bool AddPlayer(NetworkConnection readyConn) => AddPlayer(readyConn, null); // use this to implicitly become ready // -> extraMessage can contain character selection, etc. From cb432a12fb58a438c47814f73a18a09281760bed Mon Sep 17 00:00:00 2001 From: Lymdun <6077630+Lymdun@users.noreply.github.com> Date: Wed, 27 Feb 2019 09:38:17 +0100 Subject: [PATCH 057/276] Weaver aesthetic (#455) * Renamed lists to WeaveList * Renamed scriptDef to CurrentAssembly * Renamed corLib to CorLibModule * Renamed m_UnityAssemblyDefinition to UnityAssembly * Renamed m_UNetAssemblyDefinition to NetAssembly * Renamed MaxRecursionCount to m_kMaxRecursionCount * Renamed s_RecursionCount to m_recursionCount * Renamed m_DebugFlag to m_debugLogEnabled * Moved properties & fixed comment * Renamed fail to WeavingFailed * Renamed generateLogErros to GenerateLogErrors * Removed UNET references * Updated dll * WeaveLists better than WeaveList * Removed m_ prefix * Updated dll --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 81920 -> 77824 bytes Weaver/Weaver/Helpers.cs | 4 +- Weaver/Weaver/Processors/CommandProcessor.cs | 6 +- .../Processors/MessageClassProcessor.cs | 16 +- .../Processors/MonoBehaviourProcessor.cs | 18 +- .../Processors/NetworkBehaviourProcessor.cs | 74 +-- Weaver/Weaver/Processors/RpcProcessor.cs | 4 +- .../Weaver/Processors/SyncEventProcessor.cs | 12 +- Weaver/Weaver/Processors/SyncListProcessor.cs | 4 +- .../Processors/SyncListStructProcessor.cs | 24 +- Weaver/Weaver/Processors/SyncVarProcessor.cs | 38 +- .../Weaver/Processors/TargetRpcProcessor.cs | 8 +- Weaver/Weaver/Program.cs | 6 +- Weaver/Weaver/Resolvers.cs | 10 +- Weaver/Weaver/Weaver.cs | 450 +++++++++--------- 15 files changed, 337 insertions(+), 337 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 0e7f6fe3384608a57fc14ca2c73b100bd5c3db77..f2110a7c1f0da4c1264a4abd9b9aaa2c2e285e2c 100644 GIT binary patch literal 77824 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%0Aqw0<$415-SFQ$`ypzGsXxO9^ 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
  • -_3^zPyR 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 diff --git a/Weaver/Weaver/Helpers.cs b/Weaver/Weaver/Helpers.cs index e7df12ef8..81d01ca09 100644 --- a/Weaver/Weaver/Helpers.cs +++ b/Weaver/Weaver/Helpers.cs @@ -85,7 +85,7 @@ public static string PrettyPrintType(TypeReference type) return type.Name; } - public static ReaderParameters ReaderParameters(string assemblyPath, IEnumerable extraPaths, IAssemblyResolver assemblyResolver, string unityEngineDLLPath, string unityUNetDLLPath) + public static ReaderParameters ReaderParameters(string assemblyPath, IEnumerable extraPaths, IAssemblyResolver assemblyResolver, string unityEngineDLLPath, string mirrorNetDLLPath) { ReaderParameters parameters = new ReaderParameters(); if (assemblyResolver == null) @@ -94,7 +94,7 @@ public static ReaderParameters ReaderParameters(string assemblyPath, IEnumerable helper.AddSearchDirectory(Path.GetDirectoryName(assemblyPath)); helper.AddSearchDirectory(UnityEngineDLLDirectoryName()); helper.AddSearchDirectory(Path.GetDirectoryName(unityEngineDLLPath)); - helper.AddSearchDirectory(Path.GetDirectoryName(unityUNetDLLPath)); + helper.AddSearchDirectory(Path.GetDirectoryName(mirrorNetDLLPath)); if (extraPaths != null) { foreach (var path in extraPaths) diff --git a/Weaver/Weaver/Processors/CommandProcessor.cs b/Weaver/Weaver/Processors/CommandProcessor.cs index 205282909..cb6bce92e 100644 --- a/Weaver/Weaver/Processors/CommandProcessor.cs +++ b/Weaver/Weaver/Processors/CommandProcessor.cs @@ -49,7 +49,7 @@ public static MethodDefinition ProcessCommandCall(TypeDefinition td, MethodDefin NetworkBehaviourProcessor.WriteSetupLocals(cmdWorker); - if (Weaver.generateLogErrors) + if (Weaver.GenerateLogErrors) { cmdWorker.Append(cmdWorker.Create(OpCodes.Ldstr, "Call Command function " + md.Name)); cmdWorker.Append(cmdWorker.Create(OpCodes.Call, Weaver.logErrorReference)); @@ -144,14 +144,14 @@ public static bool ProcessMethodsValidateCommand(TypeDefinition td, MethodDefini if (md.Name.Length > 2 && md.Name.Substring(0, 3) != "Cmd") { Log.Error("Command function [" + td.FullName + ":" + md.Name + "] doesnt have 'Cmd' prefix"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.IsStatic) { Log.Error("Command function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } diff --git a/Weaver/Weaver/Processors/MessageClassProcessor.cs b/Weaver/Weaver/Processors/MessageClassProcessor.cs index b997a0ed2..9beda7e2c 100644 --- a/Weaver/Weaver/Processors/MessageClassProcessor.cs +++ b/Weaver/Weaver/Processors/MessageClassProcessor.cs @@ -13,7 +13,7 @@ public static void Process(TypeDefinition td) Weaver.ResetRecursionCount(); GenerateSerialization(td); - if (Weaver.fail) + if (Weaver.WeavingFailed) { return; } @@ -41,7 +41,7 @@ static void GenerateSerialization(TypeDefinition td) { if (field.FieldType.FullName == td.FullName) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " [" + field.FullName + "]. [MessageBase] member cannot be self referencing."); return; } @@ -51,7 +51,7 @@ static void GenerateSerialization(TypeDefinition td) MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType); - serializeFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType))); + serializeFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkWriterType))); ILProcessor serWorker = serializeFunc.Body.GetILProcessor(); foreach (FieldDefinition field in td.Fields) @@ -61,14 +61,14 @@ static void GenerateSerialization(TypeDefinition td) if (field.FieldType.Resolve().HasGenericParameters) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot have generic parameters."); return; } if (field.FieldType.Resolve().IsInterface) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot be an interface."); return; } @@ -83,7 +83,7 @@ static void GenerateSerialization(TypeDefinition td) } else { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " unknown type [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member variables must be basic types."); return; } @@ -111,7 +111,7 @@ static void GenerateDeSerialization(TypeDefinition td) MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType); - serializeFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType))); + serializeFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkReaderType))); ILProcessor serWorker = serializeFunc.Body.GetILProcessor(); foreach (FieldDefinition field in td.Fields) @@ -129,7 +129,7 @@ static void GenerateDeSerialization(TypeDefinition td) } else { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateDeSerialization for " + td.Name + " unknown type [" + field.FieldType + "]. [SyncVar] member variables must be basic types."); return; } diff --git a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs index b61cf9da6..0250202eb 100644 --- a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs @@ -21,14 +21,14 @@ static void ProcessSyncVars(TypeDefinition td) if (ca.AttributeType.FullName == Weaver.SyncVarType.FullName) { Log.Error("Script " + td.FullName + " uses [SyncVar] " + fd.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; } } if (SyncObjectProcessor.ImplementsSyncObject(fd.FieldType)) { Log.Error(string.Format("Script {0} defines field {1} with type {2}, but it's not a NetworkBehaviour", td.FullName, fd.Name, Helpers.PrettyPrintType(fd.FieldType))); - Weaver.fail = true; + Weaver.WeavingFailed = true; } } } @@ -43,19 +43,19 @@ static void ProcessMethods(TypeDefinition td) if (ca.AttributeType.FullName == Weaver.CommandType.FullName) { Log.Error("Script " + td.FullName + " uses [Command] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; } if (ca.AttributeType.FullName == Weaver.ClientRpcType.FullName) { Log.Error("Script " + td.FullName + " uses [ClientRpc] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; } if (ca.AttributeType.FullName == Weaver.TargetRpcType.FullName) { Log.Error("Script " + td.FullName + " uses [TargetRpc] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; } string attributeName = ca.Constructor.DeclaringType.ToString(); @@ -64,19 +64,19 @@ static void ProcessMethods(TypeDefinition td) { case "Mirror.ServerAttribute": Log.Error("Script " + td.FullName + " uses the attribute [Server] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; break; case "Mirror.ServerCallbackAttribute": Log.Error("Script " + td.FullName + " uses the attribute [ServerCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; break; case "Mirror.ClientAttribute": Log.Error("Script " + td.FullName + " uses the attribute [Client] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; break; case "Mirror.ClientCallbackAttribute": Log.Error("Script " + td.FullName + " uses the attribute [ClientCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; break; } } diff --git a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs index 764d9716c..d895a5a56 100644 --- a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs @@ -37,7 +37,7 @@ public void Process() { if (m_td.HasGenericParameters) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("NetworkBehaviour " + m_td.Name + " cannot have generic parameters"); return; } @@ -49,7 +49,7 @@ public void Process() ProcessMethods(); SyncEventProcessor.ProcessEvents(m_td, m_Events, m_EventInvocationFuncs); - if (Weaver.fail) + if (Weaver.WeavingFailed) { return; } @@ -57,7 +57,7 @@ public void Process() Weaver.ResetRecursionCount(); GenerateSerialization(); - if (Weaver.fail) + if (Weaver.WeavingFailed) { return; } @@ -104,7 +104,7 @@ public static void WriteServerActiveCheck(ILProcessor worker, string mdName, Ins public static void WriteSetupLocals(ILProcessor worker) { worker.Body.InitLocals = true; - worker.Body.Variables.Add(new VariableDefinition(Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType))); + worker.Body.Variables.Add(new VariableDefinition(Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkWriterType))); } public static void WriteCreateWriter(ILProcessor worker) @@ -130,7 +130,7 @@ public static bool WriteArguments(ILProcessor worker, MethodDefinition md, strin if (writeFunc == null) { Log.Error("WriteArguments for " + md.Name + " type " + pd.ParameterType + " not supported"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } // use built-in writer func on writer object @@ -194,7 +194,7 @@ void GenerateConstants() else { Log.Error("No cctor for " + m_td.Name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } } @@ -226,7 +226,7 @@ void GenerateConstants() } else { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("No ctor for " + m_td.Name); return; } @@ -237,7 +237,7 @@ void GenerateConstants() if (ctor == null) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("No ctor for " + m_td.Name); return; } @@ -320,7 +320,7 @@ void GenerateSerialization() MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.boolType); - serialize.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType))); + serialize.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkWriterType))); serialize.Parameters.Add(new ParameterDefinition("forceAll", ParameterAttributes.None, Weaver.boolType)); ILProcessor serWorker = serialize.Body.GetILProcessor(); @@ -330,7 +330,7 @@ void GenerateSerialization() VariableDefinition dirtyLocal = new VariableDefinition(Weaver.boolType); serialize.Body.Variables.Add(dirtyLocal); - MethodReference baseSerialize = Resolvers.ResolveMethodInParents(m_td.BaseType, Weaver.scriptDef, "OnSerialize"); + MethodReference baseSerialize = Resolvers.ResolveMethodInParents(m_td.BaseType, Weaver.CurrentAssembly, "OnSerialize"); if (baseSerialize != null) { serWorker.Append(serWorker.Create(OpCodes.Ldarg_0)); // base @@ -358,8 +358,8 @@ void GenerateSerialization() } else { - Weaver.fail = true; - Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. UNet [SyncVar] member variables must be basic types."); + Weaver.WeavingFailed = true; + Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); return; } } @@ -407,8 +407,8 @@ void GenerateSerialization() } else { - Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. UNet [SyncVar] member variables must be basic types."); - Weaver.fail = true; + Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); + Weaver.WeavingFailed = true; return; } @@ -420,7 +420,7 @@ void GenerateSerialization() dirtyBit += 1; } - if (Weaver.generateLogErrors) + if (Weaver.GenerateLogErrors) { serWorker.Append(serWorker.Create(OpCodes.Ldstr, "Injected Serialize " + m_td.Name)); serWorker.Append(serWorker.Create(OpCodes.Call, Weaver.logErrorReference)); @@ -493,8 +493,8 @@ void DeserializeField(FieldDefinition syncVar, ILProcessor serWorker) MethodReference readFunc = Weaver.GetReadFunc(syncVar.FieldType); if (readFunc == null) { - Log.Error("GenerateDeSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. UNet [SyncVar] member variables must be basic types."); - Weaver.fail = true; + Log.Error("GenerateDeSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); + Weaver.WeavingFailed = true; return; } @@ -538,11 +538,11 @@ void GenerateDeSerialization() MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType); - serialize.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType))); + serialize.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkReaderType))); serialize.Parameters.Add(new ParameterDefinition("initialState", ParameterAttributes.None, Weaver.boolType)); ILProcessor serWorker = serialize.Body.GetILProcessor(); - MethodReference baseDeserialize = Resolvers.ResolveMethodInParents(m_td.BaseType, Weaver.scriptDef, "OnDeserialize"); + MethodReference baseDeserialize = Resolvers.ResolveMethodInParents(m_td.BaseType, Weaver.CurrentAssembly, "OnDeserialize"); if (baseDeserialize != null) { serWorker.Append(serWorker.Create(OpCodes.Ldarg_0)); // base @@ -595,7 +595,7 @@ void GenerateDeSerialization() dirtyBit += 1; } - if (Weaver.generateLogErrors) + if (Weaver.GenerateLogErrors) { serWorker.Append(serWorker.Create(OpCodes.Ldstr, "Injected Deserialize " + m_td.Name)); serWorker.Append(serWorker.Create(OpCodes.Call, Weaver.logErrorReference)); @@ -636,7 +636,7 @@ public static bool ProcessNetworkReaderParameters(TypeDefinition td, MethodDefin else { Log.Error("ProcessNetworkReaderParameters for " + td.Name + ":" + md.Name + " type " + arg.ParameterType + " not supported"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } } @@ -646,7 +646,7 @@ public static bool ProcessNetworkReaderParameters(TypeDefinition td, MethodDefin public static void AddInvokeParameters(ICollection collection) { collection.Add(new ParameterDefinition("obj", ParameterAttributes.None, Weaver.NetworkBehaviourType2)); - collection.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType))); + collection.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkReaderType))); } public static bool ProcessMethodsValidateFunction(TypeDefinition td, MethodReference md, string actionType) @@ -654,19 +654,19 @@ public static bool ProcessMethodsValidateFunction(TypeDefinition td, MethodRefer if (md.ReturnType.FullName == Weaver.IEnumeratorType.FullName) { Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot be a coroutine"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.ReturnType.FullName != Weaver.voidType.FullName) { Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] must have a void return type."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.HasGenericParameters) { Log.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot have generic parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } return true; @@ -680,25 +680,25 @@ public static bool ProcessMethodsValidateParameters(TypeDefinition td, MethodRef if (p.IsOut) { Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have out parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (p.IsOptional) { Log.Error(actionType + "function [" + td.FullName + ":" + md.Name + "] cannot have optional parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (p.ParameterType.Resolve().IsAbstract) { Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have abstract parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (p.ParameterType.IsByReference) { Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have ref parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } // TargetRPC is an exception to this rule and can have a NetworkConnection as first parameter @@ -707,7 +707,7 @@ public static bool ProcessMethodsValidateParameters(TypeDefinition td, MethodRef { Log.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot use a NetworkConnection as a parameter. To access a player object's connection on the server use connectionToClient"); Log.Error("Name: " + ca.AttributeType.FullName + " parameter: " + md.Parameters[0].ParameterType.FullName); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (p.ParameterType.Resolve().IsDerivedFrom(Weaver.ComponentType)) @@ -718,7 +718,7 @@ public static bool ProcessMethodsValidateParameters(TypeDefinition td, MethodRef "] is of the type [" + p.ParameterType.Name + "] which is a Component. You cannot pass a Component to a remote call. Try passing data from within the component."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } } @@ -744,7 +744,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { Log.Error("Duplicate Command name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } names.Add(md.Name); @@ -760,7 +760,7 @@ void ProcessMethods() if (cmdCallFunc != null) { m_CmdCallFuncs.Add(cmdCallFunc); - Weaver.lists.replaceMethods[md.FullName] = cmdCallFunc; + Weaver.WeaveLists.replaceMethods[md.FullName] = cmdCallFunc; } break; } @@ -773,7 +773,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { Log.Error("Duplicate Target Rpc name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } names.Add(md.Name); @@ -789,7 +789,7 @@ void ProcessMethods() if (rpcCallFunc != null) { m_TargetRpcCallFuncs.Add(rpcCallFunc); - Weaver.lists.replaceMethods[md.FullName] = rpcCallFunc; + Weaver.WeaveLists.replaceMethods[md.FullName] = rpcCallFunc; } break; } @@ -802,7 +802,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { Log.Error("Duplicate ClientRpc name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } names.Add(md.Name); @@ -818,7 +818,7 @@ void ProcessMethods() if (rpcCallFunc != null) { m_RpcCallFuncs.Add(rpcCallFunc); - Weaver.lists.replaceMethods[md.FullName] = rpcCallFunc; + Weaver.WeaveLists.replaceMethods[md.FullName] = rpcCallFunc; } break; } diff --git a/Weaver/Weaver/Processors/RpcProcessor.cs b/Weaver/Weaver/Processors/RpcProcessor.cs index d3c88aa9c..5e416af8b 100644 --- a/Weaver/Weaver/Processors/RpcProcessor.cs +++ b/Weaver/Weaver/Processors/RpcProcessor.cs @@ -98,14 +98,14 @@ public static bool ProcessMethodsValidateRpc(TypeDefinition td, MethodDefinition if (md.Name.Length > 2 && md.Name.Substring(0, 3) != "Rpc") { Log.Error("Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Rpc' prefix"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.IsStatic) { Log.Error("ClientRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } diff --git a/Weaver/Weaver/Processors/SyncEventProcessor.cs b/Weaver/Weaver/Processors/SyncEventProcessor.cs index 8fec69283..feb6b8d07 100644 --- a/Weaver/Weaver/Processors/SyncEventProcessor.cs +++ b/Weaver/Weaver/Processors/SyncEventProcessor.cs @@ -22,7 +22,7 @@ public static MethodDefinition ProcessEventInvoke(TypeDefinition td, EventDefini if (eventField == null) { Weaver.DLog(td, "ERROR: no event field?!"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } @@ -51,7 +51,7 @@ public static MethodDefinition ProcessEventInvoke(TypeDefinition td, EventDefini cmdWorker.Append(cmdWorker.Create(OpCodes.Ldfld, eventField)); // read the event arguments - MethodReference invoke = Resolvers.ResolveMethod(eventField.FieldType, Weaver.scriptDef, "Invoke"); + MethodReference invoke = Resolvers.ResolveMethod(eventField.FieldType, Weaver.CurrentAssembly, "Invoke"); if (!NetworkBehaviourProcessor.ProcessNetworkReaderParameters(td, invoke.Resolve(), cmdWorker, false)) return null; @@ -66,7 +66,7 @@ public static MethodDefinition ProcessEventInvoke(TypeDefinition td, EventDefini public static MethodDefinition ProcessEventCall(TypeDefinition td, EventDefinition ed, CustomAttribute ca) { - MethodReference invoke = Resolvers.ResolveMethod(ed.EventType, Weaver.scriptDef, "Invoke"); + MethodReference invoke = Resolvers.ResolveMethod(ed.EventType, Weaver.CurrentAssembly, "Invoke"); MethodDefinition evt = new MethodDefinition("Call" + ed.Name, MethodAttributes.Public | MethodAttributes.HideBySig, Weaver.voidType); @@ -115,14 +115,14 @@ public static void ProcessEvents(TypeDefinition td, List events if (ed.Name.Length > 4 && ed.Name.Substring(0, 5) != "Event") { Log.Error("Event [" + td.FullName + ":" + ed.FullName + "] doesnt have 'Event' prefix"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if (ed.EventType.Resolve().HasGenericParameters) { Log.Error("Event [" + td.FullName + ":" + ed.FullName + "] cannot have generic parameters"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } @@ -141,7 +141,7 @@ public static void ProcessEvents(TypeDefinition td, List events MethodDefinition eventCallFunc = ProcessEventCall(td, ed, ca); td.Methods.Add(eventCallFunc); - Weaver.lists.replaceEvents[ed.Name] = eventCallFunc; // original weaver compares .Name, not EventDefinition. + Weaver.WeaveLists.replaceEvents[ed.Name] = eventCallFunc; // original weaver compares .Name, not EventDefinition. Weaver.DLog(td, " Event: " + ed.Name); break; diff --git a/Weaver/Weaver/Processors/SyncListProcessor.cs b/Weaver/Weaver/Processors/SyncListProcessor.cs index 40fd888ce..54e41861e 100644 --- a/Weaver/Weaver/Processors/SyncListProcessor.cs +++ b/Weaver/Weaver/Processors/SyncListProcessor.cs @@ -31,11 +31,11 @@ public static void GenerateSyncListInstanceInitializer(ILProcessor ctorWorker, F MethodReference listCtor; try { - listCtor = Weaver.scriptDef.MainModule.ImportReference(fd.FieldType.Resolve().Methods.First(x => x.Name == ".ctor" && !x.HasParameters)); + listCtor = Weaver.CurrentAssembly.MainModule.ImportReference(fd.FieldType.Resolve().Methods.First(x => x.Name == ".ctor" && !x.HasParameters)); } catch (Exception) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("Missing parameter-less constructor for:" + fd.FieldType.Name); return; } diff --git a/Weaver/Weaver/Processors/SyncListStructProcessor.cs b/Weaver/Weaver/Processors/SyncListStructProcessor.cs index 4926d2b78..9fe062ff0 100644 --- a/Weaver/Weaver/Processors/SyncListStructProcessor.cs +++ b/Weaver/Weaver/Processors/SyncListStructProcessor.cs @@ -12,17 +12,17 @@ public static void Process(TypeDefinition td) GenericInstanceType gt = (GenericInstanceType)td.BaseType; if (gt.GenericArguments.Count == 0) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("SyncListStructProcessor no generic args"); return; } - TypeReference itemType = Weaver.scriptDef.MainModule.ImportReference(gt.GenericArguments[0]); + TypeReference itemType = Weaver.CurrentAssembly.MainModule.ImportReference(gt.GenericArguments[0]); Weaver.DLog(td, "SyncListStructProcessor Start item:" + itemType.FullName); Weaver.ResetRecursionCount(); MethodReference writeItemFunc = GenerateSerialization(td, itemType); - if (Weaver.fail) + if (Weaver.WeavingFailed) { return; } @@ -51,13 +51,13 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it MethodAttributes.HideBySig, Weaver.voidType); - serializeFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType))); + serializeFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkWriterType))); serializeFunc.Parameters.Add(new ParameterDefinition("item", ParameterAttributes.None, itemType)); ILProcessor serWorker = serializeFunc.Body.GetILProcessor(); if (itemType.IsGenericInstance) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + Helpers.PrettyPrintType(itemType) + " failed. Struct passed into SyncListStruct can't have generic parameters"); return null; } @@ -67,19 +67,19 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it if (field.IsStatic || field.IsPrivate || field.IsSpecialName) continue; - FieldReference importedField = Weaver.scriptDef.MainModule.ImportReference(field); + FieldReference importedField = Weaver.CurrentAssembly.MainModule.ImportReference(field); TypeDefinition ft = importedField.FieldType.Resolve(); if (ft.HasGenericParameters) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot have generic parameters."); return null; } if (ft.IsInterface) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot be an interface."); return null; } @@ -94,7 +94,7 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it } else { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateSerialization for " + td.Name + " unknown type [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member variables must be basic types."); return null; } @@ -120,7 +120,7 @@ static MethodReference GenerateDeserialization(TypeDefinition td, TypeReference MethodAttributes.HideBySig, itemType); - serializeFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType))); + serializeFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.CurrentAssembly.MainModule.ImportReference(Weaver.NetworkReaderType))); ILProcessor serWorker = serializeFunc.Body.GetILProcessor(); @@ -136,7 +136,7 @@ static MethodReference GenerateDeserialization(TypeDefinition td, TypeReference if (field.IsStatic || field.IsPrivate || field.IsSpecialName) continue; - FieldReference importedField = Weaver.scriptDef.MainModule.ImportReference(field); + FieldReference importedField = Weaver.CurrentAssembly.MainModule.ImportReference(field); TypeDefinition ft = importedField.FieldType.Resolve(); MethodReference readerFunc = Weaver.GetReadFunc(field.FieldType); @@ -149,7 +149,7 @@ static MethodReference GenerateDeserialization(TypeDefinition td, TypeReference } else { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("GenerateDeserialization for " + td.Name + " unknown type [" + ft + "]. [SyncListStruct] member variables must be basic types."); return null; } diff --git a/Weaver/Weaver/Processors/SyncVarProcessor.cs b/Weaver/Weaver/Processors/SyncVarProcessor.cs index 86eaea1d3..f953efc1c 100644 --- a/Weaver/Weaver/Processors/SyncVarProcessor.cs +++ b/Weaver/Weaver/Processors/SyncVarProcessor.cs @@ -32,19 +32,19 @@ public static bool CheckForHookFunction(TypeDefinition td, FieldDefinition syncV if (m.Parameters[0].ParameterType != syncVar.FieldType) { Log.Error("SyncVar Hook function " + hookFunctionName + " has wrong type signature for " + td.Name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } foundMethod = m; return true; } Log.Error("SyncVar Hook function " + hookFunctionName + " must have one argument " + td.Name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } } Log.Error("SyncVar Hook function " + hookFunctionName + " not found for " + td.Name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } } @@ -222,7 +222,7 @@ public static void ProcessSyncVar(TypeDefinition td, FieldDefinition fd, Diction td.Methods.Add(get); td.Methods.Add(set); td.Properties.Add(propertyDefinition); - Weaver.lists.replacementSetterProperties[fd] = set; + Weaver.WeaveLists.replacementSetterProperties[fd] = set; // replace getter field if GameObject/NetworkIdentity so it uses // netId instead @@ -231,7 +231,7 @@ public static void ProcessSyncVar(TypeDefinition td, FieldDefinition fd, Diction if (fd.FieldType.FullName == Weaver.gameObjectType.FullName || fd.FieldType.FullName == Weaver.NetworkIdentityType.FullName) { - Weaver.lists.replacementGetterProperties[fd] = get; + Weaver.WeaveLists.replacementGetterProperties[fd] = get; } } @@ -257,56 +257,56 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (resolvedField.IsDerivedFrom(Weaver.NetworkBehaviourType)) { Log.Error("SyncVar [" + fd.FullName + "] cannot be derived from NetworkBehaviour."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if (resolvedField.IsDerivedFrom(Weaver.ScriptableObjectType)) { Log.Error("SyncVar [" + fd.FullName + "] cannot be derived from ScriptableObject."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if ((fd.Attributes & FieldAttributes.Static) != 0) { Log.Error("SyncVar [" + fd.FullName + "] cannot be static."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if (resolvedField.HasGenericParameters) { Log.Error("SyncVar [" + fd.FullName + "] cannot have generic parameters."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if (resolvedField.IsInterface) { Log.Error("SyncVar [" + fd.FullName + "] cannot be an interface."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } var fieldModuleName = resolvedField.Module.Name; - if (fieldModuleName != Weaver.scriptDef.MainModule.Name && - fieldModuleName != Weaver.m_UnityAssemblyDefinition.MainModule.Name && - fieldModuleName != Weaver.m_UNetAssemblyDefinition.MainModule.Name && - fieldModuleName != Weaver.corLib.Name && + if (fieldModuleName != Weaver.CurrentAssembly.MainModule.Name && + fieldModuleName != Weaver.UnityAssembly.MainModule.Name && + fieldModuleName != Weaver.NetAssembly.MainModule.Name && + fieldModuleName != Weaver.CorLibModule.Name && fieldModuleName != "System.Runtime.dll" && // this is only for Metro, built-in types are not in corlib on metro fieldModuleName != "netstandard.dll" // handle built-in types when weaving new C#7 compiler assemblies ) { Log.Error("SyncVar [" + fd.FullName + "] from " + resolvedField.Module.ToString() + " cannot be a different module."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } if (fd.FieldType.IsArray) { Log.Error("SyncVar [" + fd.FullName + "] cannot be an array. Use a SyncList instead."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } @@ -325,7 +325,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (dirtyBitCounter == k_SyncVarLimit) { Log.Error("Script class [" + td.FullName + "] has too many SyncVars (" + k_SyncVarLimit + "). (This could include base classes)"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } break; @@ -335,7 +335,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (fd.FieldType.FullName.Contains("Mirror.SyncListStruct")) { Log.Error("SyncListStruct member variable [" + fd.FullName + "] must use a dervied class, like \"class MySyncList : SyncListStruct {}\"."); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } @@ -344,7 +344,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (fd.IsStatic) { Log.Error("SyncList [" + td.FullName + ":" + fd.FullName + "] cannot be a static"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return; } diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Weaver/Weaver/Processors/TargetRpcProcessor.cs index 01d66b255..25fdfd8ba 100644 --- a/Weaver/Weaver/Processors/TargetRpcProcessor.cs +++ b/Weaver/Weaver/Processors/TargetRpcProcessor.cs @@ -120,14 +120,14 @@ public static bool ProcessMethodsValidateTargetRpc(TypeDefinition td, MethodDefi if (md.Name.Length > prefixLen && md.Name.Substring(0, prefixLen) != targetPrefix) { Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Target' prefix"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.IsStatic) { Log.Error("TargetRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } @@ -139,14 +139,14 @@ public static bool ProcessMethodsValidateTargetRpc(TypeDefinition td, MethodDefi if (md.Parameters.Count < 1) { Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] must have a NetworkConnection as the first parameter"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } if (md.Parameters[0].ParameterType.FullName != Weaver.NetworkConnectionType.FullName) { Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] first parameter must be a NetworkConnection"); - Weaver.fail = true; + Weaver.WeavingFailed = true; return false; } diff --git a/Weaver/Weaver/Program.cs b/Weaver/Weaver/Program.cs index 188f2b94b..f8a326de6 100644 --- a/Weaver/Weaver/Program.cs +++ b/Weaver/Weaver/Program.cs @@ -23,15 +23,15 @@ public static void Error(string msg) public class Program { - public static bool Process(string unityEngine, string unetDLL, string outputDirectory, string[] assemblies, string[] extraAssemblyPaths, IAssemblyResolver assemblyResolver, Action printWarning, Action printError) + public static bool Process(string unityEngine, string netDLL, string outputDirectory, string[] assemblies, string[] extraAssemblyPaths, IAssemblyResolver assemblyResolver, Action printWarning, Action printError) { CheckDLLPath(unityEngine); - CheckDLLPath(unetDLL); + CheckDLLPath(netDLL); CheckOutputDirectory(outputDirectory); CheckAssemblies(assemblies); Log.WarningMethod = printWarning; Log.ErrorMethod = printError; - return Weaver.WeaveAssemblies(assemblies, extraAssemblyPaths, assemblyResolver, outputDirectory, unityEngine, unetDLL); + return Weaver.WeaveAssemblies(assemblies, extraAssemblyPaths, assemblyResolver, outputDirectory, unityEngine, netDLL); } private static void CheckDLLPath(string path) diff --git a/Weaver/Weaver/Resolvers.cs b/Weaver/Weaver/Resolvers.cs index d0fdae2b2..7e265af37 100644 --- a/Weaver/Weaver/Resolvers.cs +++ b/Weaver/Weaver/Resolvers.cs @@ -16,7 +16,7 @@ public static MethodReference ResolveMethod(TypeReference tr, AssemblyDefinition if (tr == null) { Log.Error("Type missing for " + name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } foreach (MethodDefinition methodRef in tr.Resolve().Methods) @@ -34,7 +34,7 @@ public static MethodReference ResolveMethod(TypeReference tr, AssemblyDefinition Log.Error("Method " + methodRef.Name); } - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } @@ -44,7 +44,7 @@ public static MethodReference ResolveMethodInParents(TypeReference tr, AssemblyD if (tr == null) { Log.Error("Type missing for " + name); - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } foreach (MethodDefinition methodRef in tr.Resolve().Methods) @@ -75,7 +75,7 @@ public static MethodReference ResolveMethodWithArg(TypeReference tr, AssemblyDef } } Log.Error("ResolveMethodWithArg failed " + tr.Name + "::" + name + " " + argTypeFullName); - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } @@ -122,7 +122,7 @@ public static GenericInstanceMethod ResolveMethodGeneric(TypeReference t, Assemb } Log.Error("ResolveMethodGeneric failed " + t.Name + "::" + name + " " + genericType); - Weaver.fail = true; + Weaver.WeavingFailed = true; return null; } diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index ba2ae3162..dbf23c04e 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -38,7 +38,24 @@ class WeaverLists class Weaver { - // UNetwork types + public static WeaverLists WeaveLists { get; private set; } + public static AssemblyDefinition CurrentAssembly { get; private set; } + public static ModuleDefinition CorLibModule { get; private set; } + public static AssemblyDefinition UnityAssembly { get; private set; } + public static AssemblyDefinition NetAssembly { get; private set; } + public static bool WeavingFailed { get; set; } + public static bool GenerateLogErrors { get; set; } + + // private properties + static bool DebugLogEnabled = true; + + // this is used to prevent stack overflows when generating serialization code when there are self-referencing types. + // All the utility classes use GetWriteFunc() to generate serialization code, so the recursion check is implemented there instead of in each utility class. + // A NetworkBehaviour with the max SyncVars (64) can legitimately increment this value to 65 - so max must be higher than that + const int MaxRecursionCount = 128; + static int RecursionCount; + + // Network types public static TypeReference NetworkBehaviourType; public static TypeReference NetworkBehaviourType2; public static TypeReference MonoBehaviourType; @@ -63,7 +80,7 @@ class Weaver public static MethodReference NetworkWriterCtor; public static MethodReference NetworkReaderCtor; public static MethodReference getComponentReference; - public static MethodReference getUNetIdReference; + public static MethodReference getNetIdReference; public static TypeReference NetworkIdentityType; public static TypeReference IEnumeratorType; @@ -156,31 +173,14 @@ class Weaver public static MethodReference sendTargetRpcInternal; public static MethodReference sendEventInternal; - public static WeaverLists lists; - - public static AssemblyDefinition scriptDef; - public static ModuleDefinition corLib; - public static AssemblyDefinition m_UnityAssemblyDefinition; - public static AssemblyDefinition m_UNetAssemblyDefinition; - - static bool m_DebugFlag = true; - - public static bool fail; - public static bool generateLogErrors = false; - - // this is used to prevent stack overflows when generating serialization code when there are self-referencing types. - // All the utility classes use GetWriteFunc() to generate serialization code, so the recursion check is implemented there instead of in each utility class. - // A NetworkBehaviour with the max SyncVars (32) can legitimately increment this value to 65 - so max must be higher than that - const int MaxRecursionCount = 128; - static int s_RecursionCount; public static void ResetRecursionCount() { - s_RecursionCount = 0; + RecursionCount = 0; } public static void DLog(TypeDefinition td, string fmt, params object[] args) { - if (!m_DebugFlag) + if (!DebugLogEnabled) return; Console.WriteLine("[" + td.Name + "] " + String.Format(fmt, args)); @@ -188,28 +188,28 @@ public static void DLog(TypeDefinition td, string fmt, params object[] args) public static int GetSyncVarStart(string className) { - return lists.numSyncVars.ContainsKey(className) - ? lists.numSyncVars[className] + return WeaveLists.numSyncVars.ContainsKey(className) + ? WeaveLists.numSyncVars[className] : 0; } public static void SetNumSyncVars(string className, int num) { - lists.numSyncVars[className] = num; + WeaveLists.numSyncVars[className] = num; } public static MethodReference GetWriteFunc(TypeReference variable) { - if (s_RecursionCount++ > MaxRecursionCount) + if (RecursionCount++ > MaxRecursionCount) { Log.Error("GetWriteFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); - fail = true; + WeavingFailed = true; return null; } - if (lists.writeFuncs.ContainsKey(variable.FullName)) + if (WeaveLists.writeFuncs.ContainsKey(variable.FullName)) { - MethodReference foundFunc = lists.writeFuncs[variable.FullName]; + MethodReference foundFunc = WeaveLists.writeFuncs[variable.FullName]; if (foundFunc.Parameters[0].ParameterType.IsArray == variable.IsArray) { return foundFunc; @@ -256,18 +256,18 @@ public static MethodReference GetWriteFunc(TypeReference variable) public static void RegisterWriteFunc(string name, MethodDefinition newWriterFunc) { - lists.writeFuncs[name] = newWriterFunc; - lists.generatedWriteFunctions.Add(newWriterFunc); + WeaveLists.writeFuncs[name] = newWriterFunc; + WeaveLists.generatedWriteFunctions.Add(newWriterFunc); - ConfirmGeneratedCodeClass(scriptDef.MainModule); - lists.generateContainerClass.Methods.Add(newWriterFunc); + ConfirmGeneratedCodeClass(CurrentAssembly.MainModule); + WeaveLists.generateContainerClass.Methods.Add(newWriterFunc); } public static MethodReference GetReadFunc(TypeReference variable) { - if (lists.readFuncs.ContainsKey(variable.FullName)) + if (WeaveLists.readFuncs.ContainsKey(variable.FullName)) { - MethodReference foundFunc = lists.readFuncs[variable.FullName]; + MethodReference foundFunc = WeaveLists.readFuncs[variable.FullName]; if (foundFunc.ReturnType.IsArray == variable.IsArray) { return foundFunc; @@ -321,11 +321,11 @@ public static MethodReference GetReadFunc(TypeReference variable) public static void RegisterReadFunc(string name, MethodDefinition newReaderFunc) { - lists.readFuncs[name] = newReaderFunc; - lists.generatedReadFunctions.Add(newReaderFunc); + WeaveLists.readFuncs[name] = newReaderFunc; + WeaveLists.generatedReadFunctions.Add(newReaderFunc); - ConfirmGeneratedCodeClass(scriptDef.MainModule); - lists.generateContainerClass.Methods.Add(newReaderFunc); + ConfirmGeneratedCodeClass(CurrentAssembly.MainModule); + WeaveLists.generateContainerClass.Methods.Add(newReaderFunc); } static MethodDefinition GenerateArrayReadFunc(TypeReference variable, MethodReference elementReadFunc) @@ -352,7 +352,7 @@ static MethodDefinition GenerateArrayReadFunc(TypeReference variable, MethodRefe MethodAttributes.HideBySig, variable); - readerFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, scriptDef.MainModule.ImportReference(NetworkReaderType))); + readerFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(NetworkReaderType))); readerFunc.Body.Variables.Add(new VariableDefinition(int32Type)); readerFunc.Body.Variables.Add(new VariableDefinition(variable)); @@ -435,8 +435,8 @@ static MethodDefinition GenerateArrayWriteFunc(TypeReference variable, MethodRef MethodAttributes.HideBySig, voidType); - writerFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, scriptDef.MainModule.ImportReference(NetworkWriterType))); - writerFunc.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, scriptDef.MainModule.ImportReference(variable))); + writerFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(NetworkWriterType))); + writerFunc.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(variable))); writerFunc.Body.Variables.Add(new VariableDefinition(uint16Type)); writerFunc.Body.Variables.Add(new VariableDefinition(uint16Type)); @@ -523,8 +523,8 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) MethodAttributes.HideBySig, voidType); - writerFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, scriptDef.MainModule.ImportReference(NetworkWriterType))); - writerFunc.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, scriptDef.MainModule.ImportReference(variable))); + writerFunc.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(NetworkWriterType))); + writerFunc.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(variable))); ILProcessor worker = writerFunc.Body.GetILProcessor(); @@ -536,14 +536,14 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) if (field.FieldType.Resolve().HasGenericParameters) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot have generic parameters."); return null; } if (field.FieldType.Resolve().IsInterface) { - Weaver.fail = true; + Weaver.WeavingFailed = true; Log.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot be an interface."); return null; } @@ -560,7 +560,7 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) else { Log.Error("WriteReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); - fail = true; + WeavingFailed = true; return null; } } @@ -574,10 +574,10 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) static MethodDefinition GenerateReadFunction(TypeReference variable) { - if (s_RecursionCount++ > MaxRecursionCount) + if (RecursionCount++ > MaxRecursionCount) { Log.Error("GetReadFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); - fail = true; + WeavingFailed = true; return null; } @@ -607,7 +607,7 @@ static MethodDefinition GenerateReadFunction(TypeReference variable) readerFunc.Body.Variables.Add(new VariableDefinition(variable)); readerFunc.Body.InitLocals = true; - readerFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, scriptDef.MainModule.ImportReference(NetworkReaderType))); + readerFunc.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, CurrentAssembly.MainModule.ImportReference(NetworkReaderType))); ILProcessor worker = readerFunc.Body.GetILProcessor(); @@ -651,7 +651,7 @@ static MethodDefinition GenerateReadFunction(TypeReference variable) else { Log.Error("GetReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); - fail = true; + WeavingFailed = true; return null; } @@ -693,7 +693,7 @@ static void ProcessInstructionMethod(ModuleDefinition moduleDef, TypeDefinition // that's why we use dict. // TODO maybe replaceEvents[md] would work too? MethodDefinition replacement; - if (lists.replaceEvents.TryGetValue(opField.Name, out replacement)) + if (WeaveLists.replaceEvents.TryGetValue(opField.Name, out replacement)) { instr.Operand = replacement; inst.OpCode = OpCodes.Nop; @@ -709,7 +709,7 @@ static void ProcessInstructionMethod(ModuleDefinition moduleDef, TypeDefinition // that's why we use dict. // TODO maybe replaceMethods[md] would work too? MethodDefinition replacement; - if (lists.replaceMethods.TryGetValue(opMethodRef.FullName, out replacement)) + if (WeaveLists.replaceMethods.TryGetValue(opMethodRef.FullName, out replacement)) { //DLog(td, " replacing " + md.Name + ":" + i); instr.Operand = replacement; @@ -720,19 +720,19 @@ static void ProcessInstructionMethod(ModuleDefinition moduleDef, TypeDefinition static void ConfirmGeneratedCodeClass(ModuleDefinition moduleDef) { - if (lists.generateContainerClass == null) + if (WeaveLists.generateContainerClass == null) { - lists.generateContainerClass = new TypeDefinition("Mirror", "GeneratedNetworkCode", + WeaveLists.generateContainerClass = new TypeDefinition("Mirror", "GeneratedNetworkCode", TypeAttributes.BeforeFieldInit | TypeAttributes.Class | TypeAttributes.AnsiClass | TypeAttributes.Public | TypeAttributes.AutoClass, objectType); const MethodAttributes methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName; MethodDefinition method = new MethodDefinition(".ctor", methodAttributes, voidType); method.Body.Instructions.Add(Instruction.Create(OpCodes.Ldarg_0)); - method.Body.Instructions.Add(Instruction.Create(OpCodes.Call, Resolvers.ResolveMethod(objectType, scriptDef, ".ctor"))); + method.Body.Instructions.Add(Instruction.Create(OpCodes.Call, Resolvers.ResolveMethod(objectType, CurrentAssembly, ".ctor"))); method.Body.Instructions.Add(Instruction.Create(OpCodes.Ret)); - lists.generateContainerClass.Methods.Add(method); + WeaveLists.generateContainerClass.Methods.Add(method); } } @@ -745,7 +745,7 @@ static void ProcessInstructionSetterField(TypeDefinition td, MethodDefinition md // does it set a field that we replaced? MethodDefinition replacement; - if (lists.replacementSetterProperties.TryGetValue(opField, out replacement)) + if (WeaveLists.replacementSetterProperties.TryGetValue(opField, out replacement)) { //replace with property //DLog(td, " replacing " + md.Name + ":" + i); @@ -764,7 +764,7 @@ static void ProcessInstructionGetterField(TypeDefinition td, MethodDefinition md // does it set a field that we replaced? MethodDefinition replacement; - if (lists.replacementGetterProperties.TryGetValue(opField, out replacement)) + if (WeaveLists.replacementGetterProperties.TryGetValue(opField, out replacement)) { //replace with property //DLog(td, " replacing " + md.Name + ":" + i); @@ -972,19 +972,19 @@ static void ProcessSitesModule(ModuleDefinition moduleDef) ProcessSiteClass(moduleDef, td); } } - if (lists.generateContainerClass != null) + if (WeaveLists.generateContainerClass != null) { - moduleDef.Types.Add(lists.generateContainerClass); - scriptDef.MainModule.ImportReference(lists.generateContainerClass); + moduleDef.Types.Add(WeaveLists.generateContainerClass); + CurrentAssembly.MainModule.ImportReference(WeaveLists.generateContainerClass); - foreach (MethodDefinition f in lists.generatedReadFunctions) + foreach (MethodDefinition f in WeaveLists.generatedReadFunctions) { - scriptDef.MainModule.ImportReference(f); + CurrentAssembly.MainModule.ImportReference(f); } - foreach (MethodDefinition f in lists.generatedWriteFunctions) + foreach (MethodDefinition f in WeaveLists.generatedWriteFunctions) { - scriptDef.MainModule.ImportReference(f); + CurrentAssembly.MainModule.ImportReference(f); } } Console.WriteLine(" ProcessSitesModule " + moduleDef.Name + " elapsed time:" + (DateTime.Now - startTime)); @@ -992,7 +992,7 @@ static void ProcessSitesModule(ModuleDefinition moduleDef) static void ProcessPropertySites() { - ProcessSitesModule(scriptDef.MainModule); + ProcessSitesModule(CurrentAssembly.MainModule); } static bool ProcessNetworkBehaviourType(TypeDefinition td) @@ -1010,29 +1010,29 @@ static bool ProcessNetworkBehaviourType(TypeDefinition td) static void SetupUnityTypes() { - vector2Type = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Vector2"); - vector3Type = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Vector3"); - vector4Type = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Vector4"); - colorType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Color"); - color32Type = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Color32"); - quaternionType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Quaternion"); - rectType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Rect"); - planeType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Plane"); - rayType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Ray"); - matrixType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Matrix4x4"); - gameObjectType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.GameObject"); - transformType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Transform"); - unityObjectType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Object"); + vector2Type = UnityAssembly.MainModule.GetType("UnityEngine.Vector2"); + vector3Type = UnityAssembly.MainModule.GetType("UnityEngine.Vector3"); + vector4Type = UnityAssembly.MainModule.GetType("UnityEngine.Vector4"); + colorType = UnityAssembly.MainModule.GetType("UnityEngine.Color"); + color32Type = UnityAssembly.MainModule.GetType("UnityEngine.Color32"); + quaternionType = UnityAssembly.MainModule.GetType("UnityEngine.Quaternion"); + rectType = UnityAssembly.MainModule.GetType("UnityEngine.Rect"); + planeType = UnityAssembly.MainModule.GetType("UnityEngine.Plane"); + rayType = UnityAssembly.MainModule.GetType("UnityEngine.Ray"); + matrixType = UnityAssembly.MainModule.GetType("UnityEngine.Matrix4x4"); + gameObjectType = UnityAssembly.MainModule.GetType("UnityEngine.GameObject"); + transformType = UnityAssembly.MainModule.GetType("UnityEngine.Transform"); + unityObjectType = UnityAssembly.MainModule.GetType("UnityEngine.Object"); - NetworkClientType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkClient"); - NetworkServerType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkServer"); + NetworkClientType = NetAssembly.MainModule.GetType("Mirror.NetworkClient"); + NetworkServerType = NetAssembly.MainModule.GetType("Mirror.NetworkServer"); - SyncVarType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.SyncVarAttribute"); - CommandType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.CommandAttribute"); - ClientRpcType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.ClientRpcAttribute"); - TargetRpcType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.TargetRpcAttribute"); - SyncEventType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.SyncEventAttribute"); - SyncObjectType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.SyncObject"); + SyncVarType = NetAssembly.MainModule.GetType("Mirror.SyncVarAttribute"); + CommandType = NetAssembly.MainModule.GetType("Mirror.CommandAttribute"); + ClientRpcType = NetAssembly.MainModule.GetType("Mirror.ClientRpcAttribute"); + TargetRpcType = NetAssembly.MainModule.GetType("Mirror.TargetRpcAttribute"); + SyncEventType = NetAssembly.MainModule.GetType("Mirror.SyncEventAttribute"); + SyncObjectType = NetAssembly.MainModule.GetType("Mirror.SyncObject"); } static void SetupCorLib() @@ -1040,15 +1040,15 @@ static void SetupCorLib() AssemblyNameReference name = AssemblyNameReference.Parse("mscorlib"); ReaderParameters parameters = new ReaderParameters { - AssemblyResolver = scriptDef.MainModule.AssemblyResolver, + AssemblyResolver = CurrentAssembly.MainModule.AssemblyResolver, }; - corLib = scriptDef.MainModule.AssemblyResolver.Resolve(name, parameters).MainModule; + CorLibModule = CurrentAssembly.MainModule.AssemblyResolver.Resolve(name, parameters).MainModule; } static TypeReference ImportCorLibType(string fullName) { - TypeDefinition type = corLib.GetType(fullName) ?? corLib.ExportedTypes.First(t => t.FullName == fullName).Resolve(); - return scriptDef.MainModule.ImportReference(type); + TypeDefinition type = CorLibModule.GetType(fullName) ?? CorLibModule.ExportedTypes.First(t => t.FullName == fullName).Resolve(); + return CurrentAssembly.MainModule.ImportReference(type); } static void SetupTargetTypes() @@ -1076,108 +1076,108 @@ static void SetupTargetTypes() IEnumeratorType = ImportCorLibType("System.Collections.IEnumerator"); guidType = ImportCorLibType("System.Guid"); - NetworkReaderType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkReader"); + NetworkReaderType = NetAssembly.MainModule.GetType("Mirror.NetworkReader"); NetworkReaderDef = NetworkReaderType.Resolve(); - NetworkReaderCtor = Resolvers.ResolveMethod(NetworkReaderDef, scriptDef, ".ctor"); + NetworkReaderCtor = Resolvers.ResolveMethod(NetworkReaderDef, CurrentAssembly, ".ctor"); - NetworkWriterType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkWriter"); + NetworkWriterType = NetAssembly.MainModule.GetType("Mirror.NetworkWriter"); NetworkWriterDef = NetworkWriterType.Resolve(); - NetworkWriterCtor = Resolvers.ResolveMethod(NetworkWriterDef, scriptDef, ".ctor"); + NetworkWriterCtor = Resolvers.ResolveMethod(NetworkWriterDef, CurrentAssembly, ".ctor"); - NetworkServerGetActive = Resolvers.ResolveMethod(NetworkServerType, scriptDef, "get_active"); - NetworkServerGetLocalClientActive = Resolvers.ResolveMethod(NetworkServerType, scriptDef, "get_localClientActive"); - NetworkClientGetActive = Resolvers.ResolveMethod(NetworkClientType, scriptDef, "get_active"); + NetworkServerGetActive = Resolvers.ResolveMethod(NetworkServerType, CurrentAssembly, "get_active"); + NetworkServerGetLocalClientActive = Resolvers.ResolveMethod(NetworkServerType, CurrentAssembly, "get_localClientActive"); + NetworkClientGetActive = Resolvers.ResolveMethod(NetworkClientType, CurrentAssembly, "get_active"); - NetworkReaderReadInt32 = Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadInt32"); + NetworkReaderReadInt32 = Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadInt32"); - NetworkWriterWriteInt32 = Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", int32Type); - NetworkWriterWriteInt16 = Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", int16Type); + NetworkWriterWriteInt32 = Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", int32Type); + NetworkWriterWriteInt16 = Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", int16Type); - NetworkReaderReadPacked32 = Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadPackedUInt32"); - NetworkReaderReadPacked64 = Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadPackedUInt64"); - NetworkReaderReadByte = Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadByte"); + NetworkReaderReadPacked32 = Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadPackedUInt32"); + NetworkReaderReadPacked64 = Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadPackedUInt64"); + NetworkReaderReadByte = Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadByte"); - NetworkWriterWritePacked32 = Resolvers.ResolveMethod(NetworkWriterType, scriptDef, "WritePackedUInt32"); - NetworkWriterWritePacked64 = Resolvers.ResolveMethod(NetworkWriterType, scriptDef, "WritePackedUInt64"); + NetworkWriterWritePacked32 = Resolvers.ResolveMethod(NetworkWriterType, CurrentAssembly, "WritePackedUInt32"); + NetworkWriterWritePacked64 = Resolvers.ResolveMethod(NetworkWriterType, CurrentAssembly, "WritePackedUInt64"); - NetworkReadUInt16 = Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadUInt16"); - NetworkWriteUInt16 = Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", uint16Type); + NetworkReadUInt16 = Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadUInt16"); + NetworkWriteUInt16 = Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", uint16Type); - CmdDelegateReference = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkBehaviour/CmdDelegate"); - CmdDelegateConstructor = Resolvers.ResolveMethod(CmdDelegateReference, scriptDef, ".ctor"); - scriptDef.MainModule.ImportReference(gameObjectType); - scriptDef.MainModule.ImportReference(transformType); + CmdDelegateReference = NetAssembly.MainModule.GetType("Mirror.NetworkBehaviour/CmdDelegate"); + CmdDelegateConstructor = Resolvers.ResolveMethod(CmdDelegateReference, CurrentAssembly, ".ctor"); + CurrentAssembly.MainModule.ImportReference(gameObjectType); + CurrentAssembly.MainModule.ImportReference(transformType); - TypeReference unetViewTmp = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkIdentity"); - NetworkIdentityType = scriptDef.MainModule.ImportReference(unetViewTmp); + TypeReference netViewTmp = NetAssembly.MainModule.GetType("Mirror.NetworkIdentity"); + NetworkIdentityType = CurrentAssembly.MainModule.ImportReference(netViewTmp); - NetworkBehaviourType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkBehaviour"); - NetworkBehaviourType2 = scriptDef.MainModule.ImportReference(NetworkBehaviourType); - NetworkConnectionType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkConnection"); + NetworkBehaviourType = NetAssembly.MainModule.GetType("Mirror.NetworkBehaviour"); + NetworkBehaviourType2 = CurrentAssembly.MainModule.ImportReference(NetworkBehaviourType); + NetworkConnectionType = NetAssembly.MainModule.GetType("Mirror.NetworkConnection"); - MonoBehaviourType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.MonoBehaviour"); - ScriptableObjectType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.ScriptableObject"); + MonoBehaviourType = UnityAssembly.MainModule.GetType("UnityEngine.MonoBehaviour"); + ScriptableObjectType = UnityAssembly.MainModule.GetType("UnityEngine.ScriptableObject"); - NetworkConnectionType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.NetworkConnection"); - NetworkConnectionType = scriptDef.MainModule.ImportReference(NetworkConnectionType); + NetworkConnectionType = NetAssembly.MainModule.GetType("Mirror.NetworkConnection"); + NetworkConnectionType = CurrentAssembly.MainModule.ImportReference(NetworkConnectionType); - ULocalConnectionToServerType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.ULocalConnectionToServer"); - ULocalConnectionToServerType = scriptDef.MainModule.ImportReference(ULocalConnectionToServerType); + ULocalConnectionToServerType = NetAssembly.MainModule.GetType("Mirror.ULocalConnectionToServer"); + ULocalConnectionToServerType = CurrentAssembly.MainModule.ImportReference(ULocalConnectionToServerType); - ULocalConnectionToClientType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.ULocalConnectionToClient"); - ULocalConnectionToClientType = scriptDef.MainModule.ImportReference(ULocalConnectionToClientType); + ULocalConnectionToClientType = NetAssembly.MainModule.GetType("Mirror.ULocalConnectionToClient"); + ULocalConnectionToClientType = CurrentAssembly.MainModule.ImportReference(ULocalConnectionToClientType); - MessageBaseType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.MessageBase"); - SyncListStructType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.SyncListSTRUCT`1"); + MessageBaseType = NetAssembly.MainModule.GetType("Mirror.MessageBase"); + SyncListStructType = NetAssembly.MainModule.GetType("Mirror.SyncListSTRUCT`1"); - NetworkBehaviourDirtyBitsReference = Resolvers.ResolveProperty(NetworkBehaviourType, scriptDef, "syncVarDirtyBits"); + NetworkBehaviourDirtyBitsReference = Resolvers.ResolveProperty(NetworkBehaviourType, CurrentAssembly, "syncVarDirtyBits"); - ComponentType = m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Component"); - ClientSceneType = m_UNetAssemblyDefinition.MainModule.GetType("Mirror.ClientScene"); - ReadyConnectionReference = Resolvers.ResolveMethod(ClientSceneType, scriptDef, "get_readyConnection"); + ComponentType = UnityAssembly.MainModule.GetType("UnityEngine.Component"); + ClientSceneType = NetAssembly.MainModule.GetType("Mirror.ClientScene"); + ReadyConnectionReference = Resolvers.ResolveMethod(ClientSceneType, CurrentAssembly, "get_readyConnection"); // get specialized GetComponent() - getComponentReference = Resolvers.ResolveMethodGeneric(ComponentType, scriptDef, "GetComponent", NetworkIdentityType); + getComponentReference = Resolvers.ResolveMethodGeneric(ComponentType, CurrentAssembly, "GetComponent", NetworkIdentityType); - getUNetIdReference = Resolvers.ResolveMethod(unetViewTmp, scriptDef, "get_netId"); + getNetIdReference = Resolvers.ResolveMethod(netViewTmp, CurrentAssembly, "get_netId"); - gameObjectInequality = Resolvers.ResolveMethod(unityObjectType, scriptDef, "op_Inequality"); + gameObjectInequality = Resolvers.ResolveMethod(unityObjectType, CurrentAssembly, "op_Inequality"); - UBehaviourIsServer = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "get_isServer"); - setSyncVarReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SetSyncVar"); - setSyncVarHookGuard = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "set_syncVarHookGuard"); - getSyncVarHookGuard = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "get_syncVarHookGuard"); + UBehaviourIsServer = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "get_isServer"); + setSyncVarReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SetSyncVar"); + setSyncVarHookGuard = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "set_syncVarHookGuard"); + getSyncVarHookGuard = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "get_syncVarHookGuard"); - setSyncVarGameObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SetSyncVarGameObject"); - getSyncVarGameObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "GetSyncVarGameObject"); - setSyncVarNetworkIdentityReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SetSyncVarNetworkIdentity"); - getSyncVarNetworkIdentityReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "GetSyncVarNetworkIdentity"); - registerCommandDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "RegisterCommandDelegate"); - registerRpcDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "RegisterRpcDelegate"); - registerEventDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "RegisterEventDelegate"); - getTypeReference = Resolvers.ResolveMethod(objectType, scriptDef, "GetType"); - getTypeFromHandleReference = Resolvers.ResolveMethod(typeType, scriptDef, "GetTypeFromHandle"); - logErrorReference = Resolvers.ResolveMethod(m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Debug"), scriptDef, "LogError"); - logWarningReference = Resolvers.ResolveMethod(m_UnityAssemblyDefinition.MainModule.GetType("UnityEngine.Debug"), scriptDef, "LogWarning"); - sendCommandInternal = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SendCommandInternal"); - sendRpcInternal = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SendRPCInternal"); - sendTargetRpcInternal = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SendTargetRPCInternal"); - sendEventInternal = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "SendEventInternal"); + setSyncVarGameObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SetSyncVarGameObject"); + getSyncVarGameObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "GetSyncVarGameObject"); + setSyncVarNetworkIdentityReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SetSyncVarNetworkIdentity"); + getSyncVarNetworkIdentityReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "GetSyncVarNetworkIdentity"); + registerCommandDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "RegisterCommandDelegate"); + registerRpcDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "RegisterRpcDelegate"); + registerEventDelegateReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "RegisterEventDelegate"); + getTypeReference = Resolvers.ResolveMethod(objectType, CurrentAssembly, "GetType"); + getTypeFromHandleReference = Resolvers.ResolveMethod(typeType, CurrentAssembly, "GetTypeFromHandle"); + logErrorReference = Resolvers.ResolveMethod(UnityAssembly.MainModule.GetType("UnityEngine.Debug"), CurrentAssembly, "LogError"); + logWarningReference = Resolvers.ResolveMethod(UnityAssembly.MainModule.GetType("UnityEngine.Debug"), CurrentAssembly, "LogWarning"); + sendCommandInternal = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SendCommandInternal"); + sendRpcInternal = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SendRPCInternal"); + sendTargetRpcInternal = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SendTargetRPCInternal"); + sendEventInternal = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "SendEventInternal"); - SyncObjectType = scriptDef.MainModule.ImportReference(SyncObjectType); - InitSyncObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, scriptDef, "InitSyncObject"); + SyncObjectType = CurrentAssembly.MainModule.ImportReference(SyncObjectType); + InitSyncObjectReference = Resolvers.ResolveMethod(NetworkBehaviourType, CurrentAssembly, "InitSyncObject"); } static void SetupReadFunctions() { - lists.readFuncs = new Dictionary + WeaveLists.readFuncs = new Dictionary { - { singleType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadSingle") }, - { doubleType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadDouble") }, - { boolType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadBoolean") }, - { stringType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadString") }, + { singleType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadSingle") }, + { doubleType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadDouble") }, + { boolType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadBoolean") }, + { stringType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadString") }, { int64Type.FullName, NetworkReaderReadPacked64 }, { uint64Type.FullName, NetworkReaderReadPacked64 }, { int32Type.FullName, NetworkReaderReadPacked32 }, @@ -1187,33 +1187,33 @@ static void SetupReadFunctions() { byteType.FullName, NetworkReaderReadPacked32 }, { sbyteType.FullName, NetworkReaderReadPacked32 }, { charType.FullName, NetworkReaderReadPacked32 }, - { decimalType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadDecimal") }, - { vector2Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadVector2") }, - { vector3Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadVector3") }, - { vector4Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadVector4") }, - { colorType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadColor") }, - { color32Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadColor32") }, - { quaternionType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadQuaternion") }, - { rectType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadRect") }, - { planeType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadPlane") }, - { rayType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadRay") }, - { matrixType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadMatrix4x4") }, - { guidType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadGuid") }, - { gameObjectType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadGameObject") }, - { NetworkIdentityType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadNetworkIdentity") }, - { transformType.FullName, Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadTransform") }, - { "System.Byte[]", Resolvers.ResolveMethod(NetworkReaderType, scriptDef, "ReadBytesAndSize") }, + { decimalType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadDecimal") }, + { vector2Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadVector2") }, + { vector3Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadVector3") }, + { vector4Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadVector4") }, + { colorType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadColor") }, + { color32Type.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadColor32") }, + { quaternionType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadQuaternion") }, + { rectType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadRect") }, + { planeType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadPlane") }, + { rayType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadRay") }, + { matrixType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadMatrix4x4") }, + { guidType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadGuid") }, + { gameObjectType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadGameObject") }, + { NetworkIdentityType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadNetworkIdentity") }, + { transformType.FullName, Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadTransform") }, + { "System.Byte[]", Resolvers.ResolveMethod(NetworkReaderType, CurrentAssembly, "ReadBytesAndSize") }, }; } static void SetupWriteFunctions() { - lists.writeFuncs = new Dictionary + WeaveLists.writeFuncs = new Dictionary { - { singleType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", singleType) }, - { doubleType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", doubleType) }, - { boolType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", boolType) }, - { stringType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", stringType) }, + { singleType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", singleType) }, + { doubleType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", doubleType) }, + { boolType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", boolType) }, + { stringType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", stringType) }, { int64Type.FullName, NetworkWriterWritePacked64 }, { uint64Type.FullName, NetworkWriterWritePacked64 }, { int32Type.FullName, NetworkWriterWritePacked32 }, @@ -1223,22 +1223,22 @@ static void SetupWriteFunctions() { byteType.FullName, NetworkWriterWritePacked32 }, { sbyteType.FullName, NetworkWriterWritePacked32 }, { charType.FullName, NetworkWriterWritePacked32 }, - { decimalType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", decimalType) }, - { vector2Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", vector2Type) }, - { vector3Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", vector3Type) }, - { vector4Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", vector4Type) }, - { colorType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", colorType) }, - { color32Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", color32Type) }, - { quaternionType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", quaternionType) }, - { rectType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", rectType) }, - { planeType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", planeType) }, - { rayType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", rayType) }, - { matrixType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", matrixType) }, - { guidType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", guidType) }, - { gameObjectType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", gameObjectType) }, - { NetworkIdentityType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", NetworkIdentityType) }, - { transformType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "Write", transformType) }, - { "System.Byte[]", Resolvers.ResolveMethodWithArg(NetworkWriterType, scriptDef, "WriteBytesAndSize", "System.Byte[]") } + { decimalType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", decimalType) }, + { vector2Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", vector2Type) }, + { vector3Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", vector3Type) }, + { vector4Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", vector4Type) }, + { colorType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", colorType) }, + { color32Type.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", color32Type) }, + { quaternionType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", quaternionType) }, + { rectType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", rectType) }, + { planeType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", planeType) }, + { rayType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", rayType) }, + { matrixType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", matrixType) }, + { guidType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", guidType) }, + { gameObjectType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", gameObjectType) }, + { NetworkIdentityType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", NetworkIdentityType) }, + { transformType.FullName, Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "Write", transformType) }, + { "System.Byte[]", Resolvers.ResolveMethodWithArg(NetworkWriterType, CurrentAssembly, "WriteBytesAndSize", "System.Byte[]") } }; } @@ -1252,14 +1252,14 @@ public static bool IsValidTypeToGenerate(TypeDefinition variable) // a valid type is a simple class or struct. so we generate only code for types we dont know, and if they are not inside // this assembly it must mean that we are trying to serialize a variable outside our scope. and this will fail. - string assembly = scriptDef.MainModule.Name; + string assembly = CurrentAssembly.MainModule.Name; if (variable.Module.Name != assembly) { Log.Error("parameter [" + variable.Name + "] is of the type [" + variable.FullName + "] is not a valid type, please make sure to use a valid type."); - fail = true; + WeavingFailed = true; return false; } return true; @@ -1392,16 +1392,16 @@ static bool CheckSyncListStruct(TypeDefinition td) return didWork; } - static bool Weave(string assName, IEnumerable dependencies, IAssemblyResolver assemblyResolver, string unityEngineDLLPath, string unityUNetDLLPath, string outputDir) + static bool Weave(string assName, IEnumerable dependencies, IAssemblyResolver assemblyResolver, string unityEngineDLLPath, string mirrorNetDLLPath, string outputDir) { - ReaderParameters readParams = Helpers.ReaderParameters(assName, dependencies, assemblyResolver, unityEngineDLLPath, unityUNetDLLPath); - scriptDef = AssemblyDefinition.ReadAssembly(assName, readParams); + ReaderParameters readParams = Helpers.ReaderParameters(assName, dependencies, assemblyResolver, unityEngineDLLPath, mirrorNetDLLPath); + CurrentAssembly = AssemblyDefinition.ReadAssembly(assName, readParams); SetupTargetTypes(); SetupReadFunctions(); SetupWriteFunctions(); - ModuleDefinition moduleDefinition = scriptDef.MainModule; + ModuleDefinition moduleDefinition = CurrentAssembly.MainModule; Console.WriteLine("Script Module: {0}", moduleDefinition.Name); // Process each NetworkBehaviour @@ -1429,17 +1429,17 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes } catch (Exception ex) { - if (scriptDef.MainModule.SymbolReader != null) - scriptDef.MainModule.SymbolReader.Dispose(); - fail = true; + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); + WeavingFailed = true; throw ex; } } - if (fail) + if (WeavingFailed) { - if (scriptDef.MainModule.SymbolReader != null) - scriptDef.MainModule.SymbolReader.Dispose(); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); return false; } } @@ -1457,16 +1457,16 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes catch (Exception e) { Log.Error("ProcessPropertySites exception: " + e); - if (scriptDef.MainModule.SymbolReader != null) - scriptDef.MainModule.SymbolReader.Dispose(); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); return false; } - if (fail) + if (WeavingFailed) { //Log.Error("Failed phase II."); - if (scriptDef.MainModule.SymbolReader != null) - scriptDef.MainModule.SymbolReader.Dispose(); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); return false; } @@ -1498,22 +1498,22 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes } } - scriptDef.Write(dest, writeParams); + CurrentAssembly.Write(dest, writeParams); } - if (scriptDef.MainModule.SymbolReader != null) - scriptDef.MainModule.SymbolReader.Dispose(); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); return true; } - public static bool WeaveAssemblies(IEnumerable assemblies, IEnumerable dependencies, IAssemblyResolver assemblyResolver, string outputDir, string unityEngineDLLPath, string unityUNetDLLPath) + public static bool WeaveAssemblies(IEnumerable assemblies, IEnumerable dependencies, IAssemblyResolver assemblyResolver, string outputDir, string unityEngineDLLPath, string mirrorNetDLLPath) { - fail = false; - lists = new WeaverLists(); + WeavingFailed = false; + WeaveLists = new WeaverLists(); - m_UnityAssemblyDefinition = AssemblyDefinition.ReadAssembly(unityEngineDLLPath); - m_UNetAssemblyDefinition = AssemblyDefinition.ReadAssembly(unityUNetDLLPath); + UnityAssembly = AssemblyDefinition.ReadAssembly(unityEngineDLLPath); + NetAssembly = AssemblyDefinition.ReadAssembly(mirrorNetDLLPath); SetupUnityTypes(); @@ -1521,7 +1521,7 @@ public static bool WeaveAssemblies(IEnumerable assemblies, IEnumerable assemblies, IEnumerable Date: Wed, 27 Feb 2019 09:39:53 +0100 Subject: [PATCH 058/276] Rebuild weaver.dll --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77824 -> 77824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index f2110a7c1f0da4c1264a4abd9b9aaa2c2e285e2c..17294ef93fc531f9ead7b2d8eb6e84e603530187 100644 GIT binary patch delta 42 ycmZp8z|!!5WkLt@8lSSp?ycR7oKgb)r(*AK)AjXVm>{CUE?TyA`w}U}7*POv+Yn6v delta 42 ycmZp8z|!!5WkLsYcR^`m_ttJkPALKAfQNtXNZY&ZH>rMitbVD|_9aq`F`@v62ocW! From 0114a36fe1237ea35d5772fdff67732fc6c802cd Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 00:42:50 -0800 Subject: [PATCH 059/276] Expanded symbols in test comments to english. (#465) --- Assets/Mirror/Tests/NetworkWriterTest.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Mirror/Tests/NetworkWriterTest.cs b/Assets/Mirror/Tests/NetworkWriterTest.cs index 4e728b232..84a7be300 100644 --- a/Assets/Mirror/Tests/NetworkWriterTest.cs +++ b/Assets/Mirror/Tests/NetworkWriterTest.cs @@ -10,7 +10,7 @@ public class NetworkWriterTest [Test] public void TestWritingSmallMessage() { - // try serializing <32kb and see what happens + // try serializing less than 32kb and see what happens NetworkWriter writer = new NetworkWriter(); for (int i = 0; i < 30000 / 4; ++i) writer.Write(i); @@ -20,7 +20,7 @@ public void TestWritingSmallMessage() [Test] public void TestWritingLargeMessage() { - // try serializing <32kb and see what happens + // try serializing more than 32kb and see what happens NetworkWriter writer = new NetworkWriter(); for (int i = 0; i < 40000 / 4; ++i) writer.Write(i); @@ -30,7 +30,7 @@ public void TestWritingLargeMessage() [Test] public void TestWritingHugeArray() { - // try serializing array > 64KB and see what happens + // try serializing array more than 64KB large and see what happens NetworkWriter writer = new NetworkWriter(); writer.WriteBytesAndSize(new byte[100000]); byte[] data = writer.ToArray(); From ffda610f0d4a1e25adba6dfdc30a5df57d10737b Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Wed, 27 Feb 2019 14:27:53 +0100 Subject: [PATCH 060/276] Use nameof expression (#468) --- Assets/Mirror/Examples/Basic/Scripts/Player.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Mirror/Examples/Basic/Scripts/Player.cs b/Assets/Mirror/Examples/Basic/Scripts/Player.cs index ff95f575d..dcdb7e344 100644 --- a/Assets/Mirror/Examples/Basic/Scripts/Player.cs +++ b/Assets/Mirror/Examples/Basic/Scripts/Player.cs @@ -1,4 +1,4 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; using Mirror; @@ -18,7 +18,7 @@ public class Player : NetworkBehaviour public override void OnStartServer() { base.OnStartServer(); - InvokeRepeating("UpdateData", 1, 1); + InvokeRepeating(nameof(UpdateData), 1, 1); } public void UpdateData() @@ -34,4 +34,4 @@ public void Update() text.text = string.Format("Player {0}\ndata={1}", netId, data); } } -} \ No newline at end of file +} From 07a5cca7250961daf2f914c41a33c62f20cb6f23 Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 27 Feb 2019 14:32:15 +0100 Subject: [PATCH 061/276] NetworkConnection.isConnected obsolete --- Assets/Mirror/Runtime/NetworkConnection.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index bf359f554..a8c8a7a36 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -21,6 +21,7 @@ public class NetworkConnection : IDisposable // this is always true for regular connections, false for local // connections because it's set in the constructor and never reset. + [Obsolete("isConnected will be removed because it's pointless. A NetworkConnection is always connected.")] public bool isConnected { get; protected set; } public NetworkConnection(string networkAddress) From b1c028a067ba694a29be2908e686d36b6a411cee Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 27 Feb 2019 14:36:09 +0100 Subject: [PATCH 062/276] Rename Protocol to MessagePacker(#444) --- Assets/Mirror/Runtime/LocalClient.cs | 4 ++-- Assets/Mirror/Runtime/NetworkConnection.cs | 4 ++-- Assets/Mirror/Runtime/NetworkServer.cs | 6 +++--- Assets/Mirror/Runtime/UNetwork.cs | 11 +++++++---- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index b2d268b13..067663b55 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -21,7 +21,7 @@ internal void InternalConnectLocalServer() active = true; RegisterSystemHandlers(true); - packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); + packetQueue.Enqueue(MessagePacker.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); } public override void Disconnect() @@ -30,7 +30,7 @@ public override void Disconnect() ClientScene.HandleClientDisconnect(connection); if (isConnected) { - packetQueue.Enqueue(Protocol.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); + packetQueue.Enqueue(MessagePacker.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); } NetworkServer.RemoveLocalClient(); } diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index a8c8a7a36..a7dd71a1c 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -121,7 +121,7 @@ internal void RemovePlayerController() public virtual bool Send(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { // pack message and send - byte[] message = Protocol.PackMessage((ushort)msgType, msg); + byte[] message = MessagePacker.PackMessage((ushort)msgType, msg); return SendBytes(message, channelId); } @@ -214,7 +214,7 @@ public virtual void TransportReceive(byte[] buffer) { // unpack message NetworkReader reader = new NetworkReader(buffer); - if (Protocol.UnpackMessage(reader, out ushort msgType)) + if (MessagePacker.UnpackMessage(reader, out ushort msgType)) { if (logNetworkMessages) { diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 49d2ede03..e05522797 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -175,7 +175,7 @@ static bool SendToObservers(NetworkIdentity identity, short msgType, MessageBase if (identity != null && identity.observers != null) { // pack message into byte[] once - byte[] bytes = Protocol.PackMessage((ushort)msgType, msg); + byte[] bytes = MessagePacker.PackMessage((ushort)msgType, msg); // send to all observers bool result = true; @@ -193,7 +193,7 @@ public static bool SendToAll(short msgType, MessageBase msg, int channelId = Cha if (LogFilter.Debug) { Debug.Log("Server.SendToAll id:" + msgType); } // pack message into byte[] once - byte[] bytes = Protocol.PackMessage((ushort)msgType, msg); + byte[] bytes = MessagePacker.PackMessage((ushort)msgType, msg); // send to all bool result = true; @@ -211,7 +211,7 @@ public static bool SendToReady(NetworkIdentity identity, short msgType, MessageB if (identity != null && identity.observers != null) { // pack message into byte[] once - byte[] bytes = Protocol.PackMessage((ushort)msgType, msg); + byte[] bytes = MessagePacker.PackMessage((ushort)msgType, msg); // send to all ready observers bool result = true; diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 0c951658f..58633a5c0 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -88,15 +88,18 @@ public static class Channels public const int DefaultUnreliable = 1; } - // network protocol all in one place, instead of constructing headers in all kinds of different places + // message packing all in one place, instead of constructing headers in all + // kinds of different places // // MsgType (1-n bytes) // Content (ContentSize bytes) // - // -> we use varint for headers because most messages will result in 1 byte type/size headers then instead of always + // -> we use varint for headers because most messages will result in 1 byte + // type/size headers then instead of always // using 2 bytes for shorts. - // -> this reduces bandwidth by 10% if average message size is 20 bytes (probably even shorter) - public static class Protocol + // -> this reduces bandwidth by 10% if average message size is 20 bytes + // (probably even shorter) + public static class MessagePacker { // PackMessage is in hot path. caching the writer is really worth it to // avoid large amounts of allocations. From 6630b0bdbfdbdb3916ae20cfc035686afe1bb2f4 Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 27 Feb 2019 14:36:53 +0100 Subject: [PATCH 063/276] Move NetworkIdentity.UNetStaticUpdate to NetworkManager.Update. There is no reason why it should be in NetworkIdentity. (#457) --- Assets/Mirror/Runtime/NetworkIdentity.cs | 8 -------- Assets/Mirror/Runtime/NetworkManager.cs | 4 +++- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 0ff42f454..7c768bc19 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -932,13 +932,5 @@ internal void UNetUpdate() NetworkServer.SendToReady(this, (short)MsgType.UpdateVars, varsMessage); } } - - // this is invoked by the UnityEngine - public static void UNetStaticUpdate() - { - NetworkServer.Update(); - NetworkClient.UpdateClient(); - NetworkManager.UpdateScene(); - } } } diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 5e81aa35f..4fcc923fe 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -141,7 +141,9 @@ public virtual void LateUpdate() // call it while the NetworkManager exists. // -> we don't only call while Client/Server.Connected, because then we would stop if disconnected and the // NetworkClient wouldn't receive the last Disconnect event, result in all kinds of issues - NetworkIdentity.UNetStaticUpdate(); + NetworkServer.Update(); + NetworkClient.UpdateClient(); + UpdateScene(); } // When pressing Stop in the Editor, Unity keeps threads alive until we From a3a10e82f20604dc88b9d7aceab75f609b653032 Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Wed, 27 Feb 2019 14:37:54 +0100 Subject: [PATCH 064/276] Use string interpolation expressions (#469) --- Assets/Mirror/Components/NetworkLobbyPlayer.cs | 2 +- Assets/Mirror/Examples/Basic/Scripts/Player.cs | 2 +- Assets/Mirror/Runtime/NetworkBehaviour.cs | 7 +------ Assets/Mirror/Runtime/NetworkConnection.cs | 4 ++-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Assets/Mirror/Components/NetworkLobbyPlayer.cs b/Assets/Mirror/Components/NetworkLobbyPlayer.cs index 7bc831da1..70107d5da 100644 --- a/Assets/Mirror/Components/NetworkLobbyPlayer.cs +++ b/Assets/Mirror/Components/NetworkLobbyPlayer.cs @@ -88,7 +88,7 @@ public virtual void OnGUI() GUILayout.BeginArea(new Rect(20f + (Index * 100), 200f, 90f, 130f)); - GUILayout.Label(String.Format("Player [{0}]", Index + 1)); + GUILayout.Label($"Player [{Index + 1}]"); if (ReadyToBegin) GUILayout.Label("Ready"); diff --git a/Assets/Mirror/Examples/Basic/Scripts/Player.cs b/Assets/Mirror/Examples/Basic/Scripts/Player.cs index dcdb7e344..d98aee6b2 100644 --- a/Assets/Mirror/Examples/Basic/Scripts/Player.cs +++ b/Assets/Mirror/Examples/Basic/Scripts/Player.cs @@ -31,7 +31,7 @@ public void Update() if (isLocalPlayer) text.color = Color.red; - text.text = string.Format("Player {0}\ndata={1}", netId, data); + text.text = $"Player {netId}\ndata={data}"; } } } diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 2be5ffa93..93d865883 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -216,12 +216,7 @@ protected static void RegisterDelegate(Type invokeClass, string cmdName, UNetInv return; } - Debug.LogError(string.Format( - "Function {0}.{1} and {2}.{3} have the same hash. Please rename one of them", - oldInvoker.invokeClass, - oldInvoker.invokeFunction.GetMethodName(), - invokeClass, - oldInvoker.invokeFunction.GetMethodName())); + Debug.LogError($"Function {oldInvoker.invokeClass}.{oldInvoker.invokeFunction.GetMethodName()} and {invokeClass}.{oldInvoker.invokeFunction.GetMethodName()} have the same hash. Please rename one of them"); } Invoker invoker = new Invoker { diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index a7dd71a1c..52bace975 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using UnityEngine; @@ -149,7 +149,7 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR public override string ToString() { - return string.Format("connectionId: {0} isReady: {1}", connectionId, isReady); + return $"connectionId: {connectionId} isReady: {isReady}"; } internal void AddToVisList(NetworkIdentity identity) From d9a64c62b772c62e7d6610ac92ff4411c37f5994 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 05:39:44 -0800 Subject: [PATCH 065/276] Move NetworkProximityChecker to ../Components/. (#471) --- Assets/Mirror/{Runtime => Components}/NetworkProximityChecker.cs | 0 .../{Runtime => Components}/NetworkProximityChecker.cs.meta | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Assets/Mirror/{Runtime => Components}/NetworkProximityChecker.cs (100%) rename Assets/Mirror/{Runtime => Components}/NetworkProximityChecker.cs.meta (100%) diff --git a/Assets/Mirror/Runtime/NetworkProximityChecker.cs b/Assets/Mirror/Components/NetworkProximityChecker.cs similarity index 100% rename from Assets/Mirror/Runtime/NetworkProximityChecker.cs rename to Assets/Mirror/Components/NetworkProximityChecker.cs diff --git a/Assets/Mirror/Runtime/NetworkProximityChecker.cs.meta b/Assets/Mirror/Components/NetworkProximityChecker.cs.meta similarity index 100% rename from Assets/Mirror/Runtime/NetworkProximityChecker.cs.meta rename to Assets/Mirror/Components/NetworkProximityChecker.cs.meta From dbd5f57e96fa7b564e7dd7184f94d45f47756661 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 06:11:52 -0800 Subject: [PATCH 066/276] Remove List.ForEach on hot path. (#467) * Remove LINQ on hot path. * Fixed erroneous classification of List.ForEach as LINQ. * Added back using so that it could be removed by #452. --- Assets/Mirror/Runtime/NetworkBehaviour.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 93d865883..288d107df 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -394,7 +394,13 @@ public void ClearAllDirtyBits() syncVarDirtyBits = 0L; // flush all unsynchronized changes in syncobjects - m_SyncObjects.ForEach(obj => obj.Flush()); + // note: don't use List.ForEach here, this is a hot path + // List.ForEach: 432b/frame + // for: 231b/frame + for (int i = 0; i < m_SyncObjects.Count; ++i) + { + m_SyncObjects[i].Flush(); + } } internal bool AnySyncObjectDirty() From 26a9b5670de28481b5e3ad5eb44fccb40786156a Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 27 Feb 2019 15:24:30 +0100 Subject: [PATCH 067/276] NetworkClient.allClients added as obsolete --- Assets/Mirror/Runtime/NetworkClient.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index d41204e76..60e686cb5 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -9,6 +9,9 @@ public class NetworkClient // the client (can be a regular NetworkClient or a LocalClient) public static NetworkClient singleton; + [Obsolete("Use NetworkClient.singleton instead. There is always exactly one client.")] + public static List allClients => new List{singleton}; + public readonly Dictionary handlers = new Dictionary(); public NetworkConnection connection { get; protected set; } From 732111c1b933cd5efdffe52156f2f45d4ddd2201 Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 27 Feb 2019 15:43:23 +0100 Subject: [PATCH 068/276] add obsolete hostId again for easier transition from UNET --- Assets/Mirror/Runtime/NetworkConnection.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 52bace975..667329688 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -24,6 +24,11 @@ public class NetworkConnection : IDisposable [Obsolete("isConnected will be removed because it's pointless. A NetworkConnection is always connected.")] public bool isConnected { get; protected set; } + // this is always 0 for regular connections, -1 for local + // connections because it's set in the constructor and never reset. + [Obsolete("hostId will be removed because it's not needed ever since we removed LLAPI as default. It's always 0 for regular connections and -1 for local connections. Use connection.GetType() == NetworkConnection to check if it's a regular or local connection.")] + public int hostId = -1; + public NetworkConnection(string networkAddress) { address = networkAddress; @@ -33,6 +38,7 @@ public NetworkConnection(string networkAddress, int networkConnectionId) address = networkAddress; connectionId = networkConnectionId; isConnected = true; + hostId = 0; } ~NetworkConnection() From e7e890988de266288e1f54d9362227421f8002f2 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Wed, 27 Feb 2019 09:57:33 -0500 Subject: [PATCH 069/276] Re-applied GetActiveScene (#474) --- Assets/Mirror/Runtime/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 4fcc923fe..02af23fbc 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -587,7 +587,7 @@ internal void OnClientConnectInternal(NetworkMessage netMsg) { if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientConnectInternal"); } - string loadedSceneName = SceneManager.GetSceneAt(0).name; + string loadedSceneName = SceneManager.GetActiveScene().name; if (string.IsNullOrEmpty(onlineScene) || onlineScene == offlineScene || loadedSceneName == onlineScene) { clientLoadedScene = false; From f746ba8b08df00b678b49ba0858c9efb081ea528 Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Wed, 27 Feb 2019 17:06:13 +0100 Subject: [PATCH 070/276] Hide obsolete warnings (#476) --- Assets/Mirror/Runtime/NetworkConnection.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 667329688..5d1bd5db1 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -37,8 +37,10 @@ public NetworkConnection(string networkAddress, int networkConnectionId) { address = networkAddress; connectionId = networkConnectionId; +#pragma warning disable 618 isConnected = true; hostId = 0; +#pragma warning restore 618 } ~NetworkConnection() From 82535b0a8ca780222dcc6d0e3712e1b8ad9d509f Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 16:32:13 -0800 Subject: [PATCH 071/276] Moved SceneAttribute into CustomAttribute. (#470) --- Assets/Mirror/Runtime/CustomAttributes.cs | 5 +++++ Assets/Mirror/Runtime/SceneAttribute.cs | 9 --------- Assets/Mirror/Runtime/SceneAttribute.cs.meta | 11 ----------- 3 files changed, 5 insertions(+), 20 deletions(-) delete mode 100644 Assets/Mirror/Runtime/SceneAttribute.cs delete mode 100644 Assets/Mirror/Runtime/SceneAttribute.cs.meta diff --git a/Assets/Mirror/Runtime/CustomAttributes.cs b/Assets/Mirror/Runtime/CustomAttributes.cs index a9666259b..c742a1dea 100644 --- a/Assets/Mirror/Runtime/CustomAttributes.cs +++ b/Assets/Mirror/Runtime/CustomAttributes.cs @@ -59,4 +59,9 @@ public class ClientAttribute : Attribute public class ClientCallbackAttribute : Attribute { } + + // For Scene property Drawer + public class SceneAttribute : PropertyAttribute + { + } } diff --git a/Assets/Mirror/Runtime/SceneAttribute.cs b/Assets/Mirror/Runtime/SceneAttribute.cs deleted file mode 100644 index 07b455549..000000000 --- a/Assets/Mirror/Runtime/SceneAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -namespace Mirror -{ - // For Scene property Drawer - public class SceneAttribute : PropertyAttribute - { - } -} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/SceneAttribute.cs.meta b/Assets/Mirror/Runtime/SceneAttribute.cs.meta deleted file mode 100644 index e90499928..000000000 --- a/Assets/Mirror/Runtime/SceneAttribute.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c764a8a81af7e41539c3cdc06aa036be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 96133d1583f1780fbd67f24123843c1f27090a84 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 16:33:10 -0800 Subject: [PATCH 072/276] Removed useless proxy methods and substituted in direct property modification. (#454) --- Assets/Mirror/Runtime/ClientScene.cs | 4 ++-- Assets/Mirror/Runtime/LocalClient.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 14 ++------------ Assets/Mirror/Runtime/NetworkServer.cs | 4 ++-- 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 71a01ab6a..13a7ae65b 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -664,7 +664,7 @@ static void OnOwnerMessage(NetworkMessage netMsg) if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { // this object already exists - localObject.SetConnectionToServer(netMsg.conn); + localObject.connectionToServer = netMsg.conn; localObject.SetLocalPlayer(); InternalAddPlayer(localObject); } @@ -684,7 +684,7 @@ static void CheckForOwner(NetworkIdentity identity) // found owner, turn into a local player // Set isLocalPlayer to true on this NetworkIdentity and trigger OnStartLocalPlayer in all scripts on the same GO - identity.SetConnectionToServer(readyConnection); + identity.connectionToServer = readyConnection; identity.SetLocalPlayer(); if (LogFilter.Debug) { Debug.Log("ClientScene::OnOwnerMessage - player=" + identity.name); } diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index 067663b55..d4ba10c1a 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -55,7 +55,7 @@ internal void AddLocalPlayer(NetworkIdentity localPlayer) { localPlayer.EnableIsClient(); NetworkIdentity.spawned[localPlayer.netId] = localPlayer; - localPlayer.SetConnectionToServer(connection); + localPlayer.connectionToServer = connection; } // there is no SystemOwnerMessage for local client. add to ClientScene here instead ClientScene.InternalAddPlayer(localPlayer); diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 7c768bc19..873bb45cc 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -46,8 +46,8 @@ public sealed class NetworkIdentity : MonoBehaviour public bool serverOnly { get { return m_ServerOnly; } set { m_ServerOnly = value; } } public bool localPlayerAuthority { get { return m_LocalPlayerAuthority; } set { m_LocalPlayerAuthority = value; } } public NetworkConnection clientAuthorityOwner { get; private set; } - public NetworkConnection connectionToServer { get; private set; } - public NetworkConnection connectionToClient { get; private set; } + public NetworkConnection connectionToServer { get; internal set; } + public NetworkConnection connectionToClient { get; internal set; } // all spawned NetworkIdentities by netId. needed on server and client. public static Dictionary spawned = new Dictionary(); @@ -648,16 +648,6 @@ internal void SetLocalPlayer() } } - internal void SetConnectionToServer(NetworkConnection conn) - { - connectionToServer = conn; - } - - internal void SetConnectionToClient(NetworkConnection conn) - { - connectionToClient = conn; - } - internal void OnNetworkDestroy() { for (int i = 0; m_NetworkBehaviours != null && i < m_NetworkBehaviours.Length; i++) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index e05522797..9bf1e86e9 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -524,7 +524,7 @@ internal static bool InternalAddPlayerForConnection(NetworkConnection conn, Game conn.SetPlayerController(identity); // Set the connection on the NetworkIdentity on the server, NetworkIdentity.SetLocalPlayer is not called on the server (it is on clients) - identity.SetConnectionToClient(conn); + identity.connectionToClient = conn; SetClientReady(conn); @@ -613,7 +613,7 @@ internal static bool InternalReplacePlayerForConnection(NetworkConnection conn, conn.SetPlayerController(playerNetworkIdentity); // Set the connection on the NetworkIdentity on the server, NetworkIdentity.SetLocalPlayer is not called on the server (it is on clients) - playerNetworkIdentity.SetConnectionToClient(conn); + playerNetworkIdentity.connectionToClient = conn; //NOTE: DONT set connection ready. From 51458762d415e476f8377a884b175767a77e3bea Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 27 Feb 2019 19:47:37 -0800 Subject: [PATCH 073/276] Split Utils into FloatBytePacker and NetworkManager. (#483) --- .../Mirror/Components/NetworkTransformBase.cs | 16 ++--- Assets/Mirror/Runtime/FloatBytePacker.cs | 58 +++++++++++++++++ Assets/Mirror/Runtime/FloatBytePacker.cs.meta | 11 ++++ Assets/Mirror/Runtime/NetworkManager.cs | 8 ++- Assets/Mirror/Runtime/UNetwork.cs | 62 ------------------- Assets/Mirror/Tests/FloatBytePackerTest.cs | 25 ++++++++ ...st.cs.meta => FloatBytePackerTest.cs.meta} | 0 Assets/Mirror/Tests/UtilsTest.cs | 25 -------- 8 files changed, 109 insertions(+), 96 deletions(-) create mode 100644 Assets/Mirror/Runtime/FloatBytePacker.cs create mode 100644 Assets/Mirror/Runtime/FloatBytePacker.cs.meta create mode 100644 Assets/Mirror/Tests/FloatBytePackerTest.cs rename Assets/Mirror/Tests/{UtilsTest.cs.meta => FloatBytePackerTest.cs.meta} (100%) delete mode 100644 Assets/Mirror/Tests/UtilsTest.cs diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index c3a542b95..efdbf1142 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -77,14 +77,14 @@ static void SerializeIntoWriter(NetworkWriter writer, Vector3 position, Quaterni else if (compressRotation == Compression.Much) { // write 3 byte. scaling [0,360] to [0,255] - writer.Write(Utils.ScaleFloatToByte(euler.x, 0, 360, byte.MinValue, byte.MaxValue)); - writer.Write(Utils.ScaleFloatToByte(euler.y, 0, 360, byte.MinValue, byte.MaxValue)); - writer.Write(Utils.ScaleFloatToByte(euler.z, 0, 360, byte.MinValue, byte.MaxValue)); + writer.Write(FloatBytePacker.ScaleFloatToByte(euler.x, 0, 360, byte.MinValue, byte.MaxValue)); + writer.Write(FloatBytePacker.ScaleFloatToByte(euler.y, 0, 360, byte.MinValue, byte.MaxValue)); + writer.Write(FloatBytePacker.ScaleFloatToByte(euler.z, 0, 360, byte.MinValue, byte.MaxValue)); } else if (compressRotation == Compression.Lots) { // write 2 byte, 5 bits for each float - writer.Write(Utils.PackThreeFloatsIntoUShort(euler.x, euler.y, euler.z, 0, 360)); + writer.Write(FloatBytePacker.PackThreeFloatsIntoUShort(euler.x, euler.y, euler.z, 0, 360)); } } @@ -128,15 +128,15 @@ void DeserializeFromReader(NetworkReader reader) else if (compressRotation == Compression.Much) { // read 3 byte. scaling [0,255] to [0,360] - float x = Utils.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); - float y = Utils.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); - float z = Utils.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); + float x = FloatBytePacker.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); + float y = FloatBytePacker.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); + float z = FloatBytePacker.ScaleByteToFloat(reader.ReadByte(), byte.MinValue, byte.MaxValue, 0, 360); temp.rotation = Quaternion.Euler(x, y, z); } else if (compressRotation == Compression.Lots) { // read 2 byte, 5 bits per float - float[] xyz = Utils.UnpackUShortIntoThreeFloats(reader.ReadUInt16(), 0, 360); + float[] xyz = FloatBytePacker.UnpackUShortIntoThreeFloats(reader.ReadUInt16(), 0, 360); temp.rotation = Quaternion.Euler(xyz[0], xyz[1], xyz[2]); } diff --git a/Assets/Mirror/Runtime/FloatBytePacker.cs b/Assets/Mirror/Runtime/FloatBytePacker.cs new file mode 100644 index 000000000..13311948e --- /dev/null +++ b/Assets/Mirror/Runtime/FloatBytePacker.cs @@ -0,0 +1,58 @@ +namespace Mirror +{ + public static class FloatBytePacker + { + // ScaleFloatToByte( -1f, -1f, 1f, byte.MinValue, byte.MaxValue) => 0 + // ScaleFloatToByte( 0f, -1f, 1f, byte.MinValue, byte.MaxValue) => 127 + // ScaleFloatToByte(0.5f, -1f, 1f, byte.MinValue, byte.MaxValue) => 191 + // ScaleFloatToByte( 1f, -1f, 1f, byte.MinValue, byte.MaxValue) => 255 + public static byte ScaleFloatToByte(float value, float minValue, float maxValue, byte minTarget, byte maxTarget) + { + // note: C# byte - byte => int, hence so many casts + int targetRange = maxTarget - minTarget; // max byte - min byte only fits into something bigger + float valueRange = maxValue - minValue; + float valueRelative = value - minValue; + return (byte)(minTarget + (byte)(valueRelative/valueRange * (float)targetRange)); + } + + // ScaleByteToFloat( 0, byte.MinValue, byte.MaxValue, -1, 1) => -1 + // ScaleByteToFloat(127, byte.MinValue, byte.MaxValue, -1, 1) => -0.003921569 + // ScaleByteToFloat(191, byte.MinValue, byte.MaxValue, -1, 1) => 0.4980392 + // ScaleByteToFloat(255, byte.MinValue, byte.MaxValue, -1, 1) => 1 + public static float ScaleByteToFloat(byte value, byte minValue, byte maxValue, float minTarget, float maxTarget) + { + // note: C# byte - byte => int, hence so many casts + float targetRange = maxTarget - minTarget; + byte valueRange = (byte)(maxValue - minValue); + byte valueRelative = (byte)(value - minValue); + return minTarget + ((float)valueRelative/(float)valueRange * targetRange); + } + + // eulerAngles have 3 floats, putting them into 2 bytes of [x,y],[z,0] + // would be a waste. instead we compress into 5 bits each => 15 bits. + // so a ushort. + public static ushort PackThreeFloatsIntoUShort(float u, float v, float w, float minValue, float maxValue) + { + // 5 bits max value = 1+2+4+8+16 = 31 = 0x1F + byte lower = ScaleFloatToByte(u, minValue, maxValue, 0x00, 0x1F); + byte middle = ScaleFloatToByte(v, minValue, maxValue, 0x00, 0x1F); + byte upper = ScaleFloatToByte(w, minValue, maxValue, 0x00, 0x1F); + ushort combined = (ushort)(upper << 10 | middle << 5 | lower); + return combined; + } + + // see PackThreeFloatsIntoUShort for explanation + public static float[] UnpackUShortIntoThreeFloats(ushort combined, float minTarget, float maxTarget) + { + byte lower = (byte)(combined & 0x1F); + byte middle = (byte)((combined >> 5) & 0x1F); + byte upper = (byte)(combined >> 10); // nothing on the left, no & needed + + // note: we have to use 4 bits per float, so between 0x00 and 0x0F + float u = ScaleByteToFloat(lower, 0x00, 0x1F, minTarget, maxTarget); + float v = ScaleByteToFloat(middle, 0x00, 0x1F, minTarget, maxTarget); + float w = ScaleByteToFloat(upper, 0x00, 0x1F, minTarget, maxTarget); + return new float[]{u, v, w}; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/FloatBytePacker.cs.meta b/Assets/Mirror/Runtime/FloatBytePacker.cs.meta new file mode 100644 index 000000000..92145fe5c --- /dev/null +++ b/Assets/Mirror/Runtime/FloatBytePacker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afd3cca6a786d4208b1d0f7f2b168901 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 02af23fbc..184c16f10 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -85,13 +85,19 @@ public virtual void Awake() InitializeSingleton(); // headless mode? then start the server - if (Utils.IsHeadless() && startOnHeadless) + if (IsHeadless() && startOnHeadless) { Application.targetFrameRate = 60; StartServer(); } } + // headless mode detection + public static bool IsHeadless() + { + return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; + } + void InitializeSingleton() { if (singleton != null && singleton == this) diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 58633a5c0..16e199a3b 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -133,66 +133,4 @@ public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType return true; } } - - public static class Utils - { - // ScaleFloatToByte( -1f, -1f, 1f, byte.MinValue, byte.MaxValue) => 0 - // ScaleFloatToByte( 0f, -1f, 1f, byte.MinValue, byte.MaxValue) => 127 - // ScaleFloatToByte(0.5f, -1f, 1f, byte.MinValue, byte.MaxValue) => 191 - // ScaleFloatToByte( 1f, -1f, 1f, byte.MinValue, byte.MaxValue) => 255 - public static byte ScaleFloatToByte(float value, float minValue, float maxValue, byte minTarget, byte maxTarget) - { - // note: C# byte - byte => int, hence so many casts - int targetRange = maxTarget - minTarget; // max byte - min byte only fits into something bigger - float valueRange = maxValue - minValue; - float valueRelative = value - minValue; - return (byte)(minTarget + (byte)(valueRelative/valueRange * (float)targetRange)); - } - - // ScaleByteToFloat( 0, byte.MinValue, byte.MaxValue, -1, 1) => -1 - // ScaleByteToFloat(127, byte.MinValue, byte.MaxValue, -1, 1) => -0.003921569 - // ScaleByteToFloat(191, byte.MinValue, byte.MaxValue, -1, 1) => 0.4980392 - // ScaleByteToFloat(255, byte.MinValue, byte.MaxValue, -1, 1) => 1 - public static float ScaleByteToFloat(byte value, byte minValue, byte maxValue, float minTarget, float maxTarget) - { - // note: C# byte - byte => int, hence so many casts - float targetRange = maxTarget - minTarget; - byte valueRange = (byte)(maxValue - minValue); - byte valueRelative = (byte)(value - minValue); - return minTarget + ((float)valueRelative/(float)valueRange * targetRange); - } - - // eulerAngles have 3 floats, putting them into 2 bytes of [x,y],[z,0] - // would be a waste. instead we compress into 5 bits each => 15 bits. - // so a ushort. - public static ushort PackThreeFloatsIntoUShort(float u, float v, float w, float minValue, float maxValue) - { - // 5 bits max value = 1+2+4+8+16 = 31 = 0x1F - byte lower = ScaleFloatToByte(u, minValue, maxValue, 0x00, 0x1F); - byte middle = ScaleFloatToByte(v, minValue, maxValue, 0x00, 0x1F); - byte upper = ScaleFloatToByte(w, minValue, maxValue, 0x00, 0x1F); - ushort combined = (ushort)(upper << 10 | middle << 5 | lower); - return combined; - } - - // see PackThreeFloatsIntoUShort for explanation - public static float[] UnpackUShortIntoThreeFloats(ushort combined, float minTarget, float maxTarget) - { - byte lower = (byte)(combined & 0x1F); - byte middle = (byte)((combined >> 5) & 0x1F); - byte upper = (byte)(combined >> 10); // nothing on the left, no & needed - - // note: we have to use 4 bits per float, so between 0x00 and 0x0F - float u = ScaleByteToFloat(lower, 0x00, 0x1F, minTarget, maxTarget); - float v = ScaleByteToFloat(middle, 0x00, 0x1F, minTarget, maxTarget); - float w = ScaleByteToFloat(upper, 0x00, 0x1F, minTarget, maxTarget); - return new float[]{u, v, w}; - } - - // headless mode detection - public static bool IsHeadless() - { - return SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; - } - } } diff --git a/Assets/Mirror/Tests/FloatBytePackerTest.cs b/Assets/Mirror/Tests/FloatBytePackerTest.cs new file mode 100644 index 000000000..2fd53d6ca --- /dev/null +++ b/Assets/Mirror/Tests/FloatBytePackerTest.cs @@ -0,0 +1,25 @@ +using NUnit.Framework; +namespace Mirror +{ + [TestFixture] + public class FloatBytePackerTest + { + [Test] + public void TestScaleFloatToByte() + { + Assert.That(FloatBytePacker.ScaleFloatToByte( -1f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(0)); + Assert.That(FloatBytePacker.ScaleFloatToByte( 0f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(127)); + Assert.That(FloatBytePacker.ScaleFloatToByte(0.5f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(191)); + Assert.That(FloatBytePacker.ScaleFloatToByte( 1f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(255)); + } + + [Test] + public void ScaleByteToFloat() + { + Assert.That(FloatBytePacker.ScaleByteToFloat( 0, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(-1).Within(0.0001f)); + Assert.That(FloatBytePacker.ScaleByteToFloat(127, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(-0.003921569f).Within(0.0001f)); + Assert.That(FloatBytePacker.ScaleByteToFloat(191, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(0.4980392f).Within(0.0001f)); + Assert.That(FloatBytePacker.ScaleByteToFloat(255, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(1).Within(0.0001f)); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/UtilsTest.cs.meta b/Assets/Mirror/Tests/FloatBytePackerTest.cs.meta similarity index 100% rename from Assets/Mirror/Tests/UtilsTest.cs.meta rename to Assets/Mirror/Tests/FloatBytePackerTest.cs.meta diff --git a/Assets/Mirror/Tests/UtilsTest.cs b/Assets/Mirror/Tests/UtilsTest.cs deleted file mode 100644 index 37bdd40ee..000000000 --- a/Assets/Mirror/Tests/UtilsTest.cs +++ /dev/null @@ -1,25 +0,0 @@ -using NUnit.Framework; -namespace Mirror -{ - [TestFixture] - public class UtilsTest - { - [Test] - public void TestScaleFloatToByte() - { - Assert.That(Utils.ScaleFloatToByte( -1f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(0)); - Assert.That(Utils.ScaleFloatToByte( 0f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(127)); - Assert.That(Utils.ScaleFloatToByte(0.5f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(191)); - Assert.That(Utils.ScaleFloatToByte( 1f, -1f, 1f, byte.MinValue, byte.MaxValue), Is.EqualTo(255)); - } - - [Test] - public void ScaleByteToFloat() - { - Assert.That(Utils.ScaleByteToFloat( 0, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(-1).Within(0.0001f)); - Assert.That(Utils.ScaleByteToFloat(127, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(-0.003921569f).Within(0.0001f)); - Assert.That(Utils.ScaleByteToFloat(191, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(0.4980392f).Within(0.0001f)); - Assert.That(Utils.ScaleByteToFloat(255, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(1).Within(0.0001f)); - } - } -} \ No newline at end of file From d39f999f0f2f21ef0493aa209f50755bbaa83f72 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Wed, 27 Feb 2019 22:12:19 -0600 Subject: [PATCH 074/276] Simplify with auto property --- Assets/Mirror/Runtime/NetworkConnection.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 5d1bd5db1..d1e21cbfb 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -6,7 +6,6 @@ namespace Mirror { public class NetworkConnection : IDisposable { - NetworkIdentity m_PlayerController; public HashSet visList = new HashSet(); Dictionary m_MessageHandlers; @@ -15,7 +14,7 @@ public class NetworkConnection : IDisposable public bool isReady; public string address; public float lastMessageTime; - public NetworkIdentity playerController => m_PlayerController; + public NetworkIdentity playerController { get; private set; } public HashSet clientOwnedObjects; public bool logNetworkMessages; @@ -118,12 +117,12 @@ public void UnregisterHandler(short msgType) internal void SetPlayerController(NetworkIdentity player) { - m_PlayerController = player; + playerController = player; } internal void RemovePlayerController() { - m_PlayerController = null; + playerController = null; } public virtual bool Send(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) From 2d37a9e87c9e4a734a1292566db3be0a176180e5 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 00:26:33 -0800 Subject: [PATCH 075/276] First pass of moving stuff out of UNetwork. (#481) --- Assets/Mirror/Runtime/MessagePacker.cs | 50 +++++++++++++++ Assets/Mirror/Runtime/MessagePacker.cs.meta | 11 ++++ Assets/Mirror/Runtime/NetworkMessage.cs | 21 +++++++ Assets/Mirror/Runtime/NetworkMessage.cs.meta | 11 ++++ Assets/Mirror/Runtime/UNetwork.cs | 65 -------------------- 5 files changed, 93 insertions(+), 65 deletions(-) create mode 100644 Assets/Mirror/Runtime/MessagePacker.cs create mode 100644 Assets/Mirror/Runtime/MessagePacker.cs.meta create mode 100644 Assets/Mirror/Runtime/NetworkMessage.cs create mode 100644 Assets/Mirror/Runtime/NetworkMessage.cs.meta diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs new file mode 100644 index 000000000..a300aba59 --- /dev/null +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -0,0 +1,50 @@ +using System; + +namespace Mirror +{ + // message packing all in one place, instead of constructing headers in all + // kinds of different places + // + // MsgType (1-n bytes) + // Content (ContentSize bytes) + // + // -> we use varint for headers because most messages will result in 1 byte + // type/size headers then instead of always + // using 2 bytes for shorts. + // -> this reduces bandwidth by 10% if average message size is 20 bytes + // (probably even shorter) + public static class MessagePacker + { + // PackMessage is in hot path. caching the writer is really worth it to + // avoid large amounts of allocations. + static NetworkWriter packWriter = new NetworkWriter(); + + // pack message before sending + // -> pass writer instead of byte[] so we can reuse it + public static byte[] PackMessage(ushort msgType, MessageBase msg) + { + // reset cached writer length and position + packWriter.SetLength(0); + + // write message type + packWriter.WritePackedUInt32(msgType); + + // serialize message into writer + msg.Serialize(packWriter); + + // return byte[] + return packWriter.ToArray(); + } + + // unpack message after receiving + // -> pass NetworkReader so it's less strange if we create it in here + // and pass it upwards. + // -> NetworkReader will point at content afterwards! + public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType) + { + // read message type (varint) + msgType = (UInt16)messageReader.ReadPackedUInt32(); + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/MessagePacker.cs.meta b/Assets/Mirror/Runtime/MessagePacker.cs.meta new file mode 100644 index 000000000..7ca61aa7f --- /dev/null +++ b/Assets/Mirror/Runtime/MessagePacker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2db134099f0df4d96a84ae7a0cd9b4bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/NetworkMessage.cs b/Assets/Mirror/Runtime/NetworkMessage.cs new file mode 100644 index 000000000..c2ac3c458 --- /dev/null +++ b/Assets/Mirror/Runtime/NetworkMessage.cs @@ -0,0 +1,21 @@ +namespace Mirror +{ + public struct NetworkMessage + { + public short msgType; + public NetworkConnection conn; + public NetworkReader reader; + + public TMsg ReadMessage() where TMsg : MessageBase, new() + { + TMsg msg = new TMsg(); + msg.Deserialize(reader); + return msg; + } + + public void ReadMessage(TMsg msg) where TMsg : MessageBase + { + msg.Deserialize(reader); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/NetworkMessage.cs.meta b/Assets/Mirror/Runtime/NetworkMessage.cs.meta new file mode 100644 index 000000000..370b0a6c2 --- /dev/null +++ b/Assets/Mirror/Runtime/NetworkMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb04e4848a2e4452aa2dbd7adb801c51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 16e199a3b..8a914b2f0 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -58,25 +58,6 @@ public enum MsgType : short Highest = 47 } - public struct NetworkMessage - { - public short msgType; - public NetworkConnection conn; - public NetworkReader reader; - - public TMsg ReadMessage() where TMsg : MessageBase, new() - { - TMsg msg = new TMsg(); - msg.Deserialize(reader); - return msg; - } - - public void ReadMessage(TMsg msg) where TMsg : MessageBase - { - msg.Deserialize(reader); - } - } - public enum Version { Current = 1 @@ -87,50 +68,4 @@ public static class Channels public const int DefaultReliable = 0; public const int DefaultUnreliable = 1; } - - // message packing all in one place, instead of constructing headers in all - // kinds of different places - // - // MsgType (1-n bytes) - // Content (ContentSize bytes) - // - // -> we use varint for headers because most messages will result in 1 byte - // type/size headers then instead of always - // using 2 bytes for shorts. - // -> this reduces bandwidth by 10% if average message size is 20 bytes - // (probably even shorter) - public static class MessagePacker - { - // PackMessage is in hot path. caching the writer is really worth it to - // avoid large amounts of allocations. - static NetworkWriter packWriter = new NetworkWriter(); - - // pack message before sending - // -> pass writer instead of byte[] so we can reuse it - public static byte[] PackMessage(ushort msgType, MessageBase msg) - { - // reset cached writer length and position - packWriter.SetLength(0); - - // write message type - packWriter.WritePackedUInt32(msgType); - - // serialize message into writer - msg.Serialize(packWriter); - - // return byte[] - return packWriter.ToArray(); - } - - // unpack message after receiving - // -> pass NetworkReader so it's less strange if we create it in here - // and pass it upwards. - // -> NetworkReader will point at content afterwards! - public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType) - { - // read message type (varint) - msgType = (UInt16)messageReader.ReadPackedUInt32(); - return true; - } - } } From c13f4bd13b2dbb912202258844687845af75e25f Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 01:20:57 -0800 Subject: [PATCH 076/276] Used Expression Body Members to make code smaller and nicer in NetworkIdentity. (#486) --- Assets/Mirror/Runtime/NetworkIdentity.cs | 59 ++++-------------------- 1 file changed, 10 insertions(+), 49 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 873bb45cc..7a724046f 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -52,14 +52,7 @@ public sealed class NetworkIdentity : MonoBehaviour // all spawned NetworkIdentities by netId. needed on server and client. public static Dictionary spawned = new Dictionary(); - public NetworkBehaviour[] NetworkBehaviours - { - get - { - m_NetworkBehaviours = m_NetworkBehaviours ?? GetComponents(); - return m_NetworkBehaviours; - } - } + public NetworkBehaviour[] NetworkBehaviours => m_NetworkBehaviours = m_NetworkBehaviours ?? GetComponents(); // the AssetId trick: // - ideally we would have a serialized 'Guid m_AssetId' but Unity can't @@ -111,10 +104,7 @@ internal void SetClientOwner(NetworkConnection conn) } // used during dispose after disconnect - internal void ClearClientOwner() - { - clientAuthorityOwner = null; - } + internal void ClearClientOwner() => clientAuthorityOwner = null; internal void ForceAuthority(bool authority) { @@ -135,10 +125,7 @@ internal void ForceAuthority(bool authority) } static uint s_NextNetworkId = 1; - internal static uint GetNextNetworkId() - { - return s_NextNetworkId++; - } + internal static uint GetNextNetworkId() => s_NextNetworkId++; public delegate void ClientAuthorityCallback(NetworkConnection conn, NetworkIdentity identity, bool authorityState); public static ClientAuthorityCallback clientAuthorityCallback; @@ -154,20 +141,9 @@ internal void SetNetworkInstanceId(uint newNetId) } // only used when fixing duplicate scene IDs during post-processing - public void ForceSceneId(uint newSceneId) - { - m_SceneId = newSceneId; - } - - internal void EnableIsClient() - { - isClient = true; - } - - internal void EnableIsServer() - { - m_IsServer = true; - } + public void ForceSceneId(uint newSceneId) => m_SceneId = newSceneId; + internal void EnableIsClient() => isClient = true; + internal void EnableIsServer() => m_IsServer = true; // used when the player object for a connection changes internal void SetNotLocalPlayer() @@ -200,21 +176,9 @@ void OnValidate() SetupIDs(); } - void AssignAssetID(GameObject prefab) - { - string path = AssetDatabase.GetAssetPath(prefab); - AssignAssetID(path); - } - - void AssignAssetID(string path) - { - m_AssetId = AssetDatabase.AssetPathToGUID(path); - } - - bool ThisIsAPrefab() - { - return PrefabUtility.IsPartOfPrefabAsset(gameObject); - } + void AssignAssetID(GameObject prefab) => AssignAssetID(AssetDatabase.GetAssetPath(prefab)); + void AssignAssetID(string path) => m_AssetId = AssetDatabase.AssetPathToGUID(path); + bool ThisIsAPrefab() => PrefabUtility.IsPartOfPrefabAsset(gameObject); bool ThisIsASceneObjectWithPrefabParent(out GameObject prefab) { @@ -873,10 +837,7 @@ public bool AssignClientAuthority(NetworkConnection conn) // marks the identity for future reset, this is because we cant reset the identity during destroy // as people might want to be able to read the members inside OnDestroy(), and we have no way // of invoking reset after OnDestroy is called. - internal void MarkForReset() - { - m_Reset = true; - } + internal void MarkForReset() => m_Reset = true; // if we have marked an identity for reset we do the actual reset. internal void Reset() From c33c72e7200f6d521341ea1ad41fd7a421802c89 Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Thu, 28 Feb 2019 11:42:41 +0100 Subject: [PATCH 077/276] Using cleanup (#452) --- Assets/Mirror/Components/NetworkAnimator.cs | 1 - Assets/Mirror/Components/NetworkLobbyPlayer.cs | 1 - Assets/Mirror/Components/NetworkProximityChecker.cs | 1 - Assets/Mirror/Components/NetworkTransformBase.cs | 1 - Assets/Mirror/Editor/NetworkIdentityEditor.cs | 1 - Assets/Mirror/Editor/NetworkInformationPreview.cs | 3 +-- Assets/Mirror/Editor/NetworkManagerEditor.cs | 6 +----- Assets/Mirror/Editor/NetworkScenePostProcess.cs | 1 - Assets/Mirror/Editor/PreprocessorDefine.cs | 3 +-- Assets/Mirror/Examples/Basic/Scripts/Player.cs | 3 --- .../Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs | 1 - Assets/Mirror/Examples/Movement/Scripts/Move.cs | 5 ++--- Assets/Mirror/Examples/Pong/Scripts/Ball.cs | 5 ++--- Assets/Mirror/Examples/Pong/Scripts/Player.cs | 5 ++--- Assets/Mirror/Runtime/ExponentialMovingAverage.cs | 1 - Assets/Mirror/Runtime/LocalClient.cs | 1 - Assets/Mirror/Runtime/LocalConnections.cs | 1 - Assets/Mirror/Runtime/Messages.cs | 3 +-- Assets/Mirror/Runtime/NetworkBehaviour.cs | 1 - Assets/Mirror/Runtime/NetworkIdentity.cs | 1 - Assets/Mirror/Runtime/NetworkManager.cs | 3 +-- Assets/Mirror/Runtime/NetworkManagerHUD.cs | 2 -- Assets/Mirror/Runtime/NetworkServer.cs | 2 -- Assets/Mirror/Runtime/SyncList.cs | 1 - Assets/Mirror/Runtime/Transport/TelepathyTransport.cs | 3 +-- Assets/Mirror/Tests/ExponentialMovingAverageTest.cs | 3 +-- Assets/Mirror/Tests/NetworkWriterTest.cs | 3 +-- Assets/Mirror/Tests/SyncListTest.cs | 3 +-- 28 files changed, 15 insertions(+), 50 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 07b9c7428..4add52d06 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; namespace Mirror diff --git a/Assets/Mirror/Components/NetworkLobbyPlayer.cs b/Assets/Mirror/Components/NetworkLobbyPlayer.cs index 70107d5da..2d760ea64 100644 --- a/Assets/Mirror/Components/NetworkLobbyPlayer.cs +++ b/Assets/Mirror/Components/NetworkLobbyPlayer.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; using UnityEngine.SceneManagement; diff --git a/Assets/Mirror/Components/NetworkProximityChecker.cs b/Assets/Mirror/Components/NetworkProximityChecker.cs index b7a34e3fd..2626d1efd 100644 --- a/Assets/Mirror/Components/NetworkProximityChecker.cs +++ b/Assets/Mirror/Components/NetworkProximityChecker.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using UnityEngine; diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index efdbf1142..a8fa8b0bc 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -16,7 +16,6 @@ // * Only way for smooth movement is to use a fixed movement speed during // interpolation. interpolation over time is never that good. // -using System; using UnityEngine; namespace Mirror diff --git a/Assets/Mirror/Editor/NetworkIdentityEditor.cs b/Assets/Mirror/Editor/NetworkIdentityEditor.cs index af250af40..7ef1b365e 100644 --- a/Assets/Mirror/Editor/NetworkIdentityEditor.cs +++ b/Assets/Mirror/Editor/NetworkIdentityEditor.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; diff --git a/Assets/Mirror/Editor/NetworkInformationPreview.cs b/Assets/Mirror/Editor/NetworkInformationPreview.cs index 71fb803a1..579e01e3b 100644 --- a/Assets/Mirror/Editor/NetworkInformationPreview.cs +++ b/Assets/Mirror/Editor/NetworkInformationPreview.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -278,4 +277,4 @@ static NetworkIdentityInfo GetBoolean(string name, bool value) return info; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Editor/NetworkManagerEditor.cs b/Assets/Mirror/Editor/NetworkManagerEditor.cs index 6a8a1443e..0552cfaea 100644 --- a/Assets/Mirror/Editor/NetworkManagerEditor.cs +++ b/Assets/Mirror/Editor/NetworkManagerEditor.cs @@ -1,10 +1,6 @@ -using System; -using System.IO; -using System.Reflection; using UnityEditor; using UnityEditorInternal; using UnityEngine; -using UnityObject = UnityEngine.Object; namespace Mirror { @@ -113,4 +109,4 @@ internal void RemoveButton(ReorderableList list) } } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Editor/NetworkScenePostProcess.cs b/Assets/Mirror/Editor/NetworkScenePostProcess.cs index a246984f5..3ebca0f16 100644 --- a/Assets/Mirror/Editor/NetworkScenePostProcess.cs +++ b/Assets/Mirror/Editor/NetworkScenePostProcess.cs @@ -1,4 +1,3 @@ -using System.Text; using System.Collections.Generic; using System.Linq; using UnityEditor; diff --git a/Assets/Mirror/Editor/PreprocessorDefine.cs b/Assets/Mirror/Editor/PreprocessorDefine.cs index 724ae132a..2cf9b9d5b 100644 --- a/Assets/Mirror/Editor/PreprocessorDefine.cs +++ b/Assets/Mirror/Editor/PreprocessorDefine.cs @@ -1,7 +1,6 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using UnityEditor; -using UnityEngine; namespace Mirror { diff --git a/Assets/Mirror/Examples/Basic/Scripts/Player.cs b/Assets/Mirror/Examples/Basic/Scripts/Player.cs index d98aee6b2..4e86f9c75 100644 --- a/Assets/Mirror/Examples/Basic/Scripts/Player.cs +++ b/Assets/Mirror/Examples/Basic/Scripts/Player.cs @@ -1,7 +1,4 @@ -using System.Collections; -using System.Collections.Generic; using UnityEngine; -using Mirror; namespace Mirror.Examples.Basic { diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs index 18aebe66b..938bdb4e4 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs @@ -1,5 +1,4 @@ using UnityEngine; -using Mirror; using UnityEngine.SceneManagement; namespace Mirror.Examples.NetworkLobby diff --git a/Assets/Mirror/Examples/Movement/Scripts/Move.cs b/Assets/Mirror/Examples/Movement/Scripts/Move.cs index 548eee95e..0303bf15f 100644 --- a/Assets/Mirror/Examples/Movement/Scripts/Move.cs +++ b/Assets/Mirror/Examples/Movement/Scripts/Move.cs @@ -1,5 +1,4 @@ -using UnityEngine; -using Mirror; +using UnityEngine; namespace Mirror.Examples.Movement { @@ -22,4 +21,4 @@ void Update() controller.SimpleMove(forward * Input.GetAxis("Vertical") * speed * Time.deltaTime); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Examples/Pong/Scripts/Ball.cs b/Assets/Mirror/Examples/Pong/Scripts/Ball.cs index 2a0910d13..a4fd896f9 100644 --- a/Assets/Mirror/Examples/Pong/Scripts/Ball.cs +++ b/Assets/Mirror/Examples/Pong/Scripts/Ball.cs @@ -1,5 +1,4 @@ -using UnityEngine; -using Mirror; +using UnityEngine; namespace Mirror.Examples.Pong { @@ -55,4 +54,4 @@ void OnCollisionEnter2D(Collision2D col) } } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Examples/Pong/Scripts/Player.cs b/Assets/Mirror/Examples/Pong/Scripts/Player.cs index 446653730..5a3033937 100644 --- a/Assets/Mirror/Examples/Pong/Scripts/Player.cs +++ b/Assets/Mirror/Examples/Pong/Scripts/Player.cs @@ -1,5 +1,4 @@ -using UnityEngine; -using Mirror; +using UnityEngine; namespace Mirror.Examples.Pong { @@ -18,4 +17,4 @@ void FixedUpdate() GetComponent().velocity = new Vector2(0, vertical) * speed; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/ExponentialMovingAverage.cs b/Assets/Mirror/Runtime/ExponentialMovingAverage.cs index 15e1ec6bc..edf929acb 100644 --- a/Assets/Mirror/Runtime/ExponentialMovingAverage.cs +++ b/Assets/Mirror/Runtime/ExponentialMovingAverage.cs @@ -1,4 +1,3 @@ -using System; namespace Mirror { // implementation of N-day EMA diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index d4ba10c1a..e94b1f3c4 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -1,4 +1,3 @@ -using System; using System.Collections.Generic; using UnityEngine; diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index 75c71da38..893d34bce 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; namespace Mirror diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index b91760c5d..42dc1c41c 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System; using UnityEngine; namespace Mirror diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 288d107df..b7cc3a4b9 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.ComponentModel; using UnityEngine; -using System.Linq; namespace Mirror { diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 7a724046f..750887069 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Linq; using UnityEngine; diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 184c16f10..4b4b43507 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -1,11 +1,10 @@ +using System; using System.Collections.Generic; -using System.Net; using System.Linq; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.Serialization; -using System; namespace Mirror { diff --git a/Assets/Mirror/Runtime/NetworkManagerHUD.cs b/Assets/Mirror/Runtime/NetworkManagerHUD.cs index 2c8ec9919..02fce9d0c 100644 --- a/Assets/Mirror/Runtime/NetworkManagerHUD.cs +++ b/Assets/Mirror/Runtime/NetworkManagerHUD.cs @@ -1,9 +1,7 @@ // vis2k: GUILayout instead of spacey += ...; removed Update hotkeys to avoid // confusion if someone accidentally presses one. -using System; using System.ComponentModel; using UnityEngine; -using UnityEngine.Rendering; namespace Mirror { diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 9bf1e86e9..8d43752fc 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Net; using UnityEngine; namespace Mirror diff --git a/Assets/Mirror/Runtime/SyncList.cs b/Assets/Mirror/Runtime/SyncList.cs index 97ba79d02..a207338b9 100644 --- a/Assets/Mirror/Runtime/SyncList.cs +++ b/Assets/Mirror/Runtime/SyncList.cs @@ -2,7 +2,6 @@ using System.Collections; using System.Collections.Generic; using System.ComponentModel; -using UnityEngine; namespace Mirror { diff --git a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs index ddbf93792..6a2e7685e 100644 --- a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs +++ b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs @@ -1,5 +1,4 @@ -// wraps Telepathy for use as HLAPI TransportLayer -using System; +// wraps Telepathy for use as HLAPI TransportLayer using UnityEngine; namespace Mirror { diff --git a/Assets/Mirror/Tests/ExponentialMovingAverageTest.cs b/Assets/Mirror/Tests/ExponentialMovingAverageTest.cs index 1302894b3..3b55264c4 100644 --- a/Assets/Mirror/Tests/ExponentialMovingAverageTest.cs +++ b/Assets/Mirror/Tests/ExponentialMovingAverageTest.cs @@ -1,5 +1,4 @@ -using NUnit.Framework; -using System; +using NUnit.Framework; namespace Mirror.Tests { [TestFixture] diff --git a/Assets/Mirror/Tests/NetworkWriterTest.cs b/Assets/Mirror/Tests/NetworkWriterTest.cs index 84a7be300..30535afc5 100644 --- a/Assets/Mirror/Tests/NetworkWriterTest.cs +++ b/Assets/Mirror/Tests/NetworkWriterTest.cs @@ -1,6 +1,5 @@ -using NUnit.Framework; using System; -using UnityEngine; +using NUnit.Framework; namespace Mirror.Tests { diff --git a/Assets/Mirror/Tests/SyncListTest.cs b/Assets/Mirror/Tests/SyncListTest.cs index 0a8915148..255d13f4f 100644 --- a/Assets/Mirror/Tests/SyncListTest.cs +++ b/Assets/Mirror/Tests/SyncListTest.cs @@ -1,6 +1,5 @@ -using NUnit.Framework; using System; -using System.Linq; +using NUnit.Framework; namespace Mirror.Tests { From d4d764fb53e62fcd4e07d3ee6c558586bef9aad0 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 02:54:11 -0800 Subject: [PATCH 078/276] Fixed erroneous documentation. (#485) --- docs/Concepts/GameObjects/SpawnObjectCustom.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Concepts/GameObjects/SpawnObjectCustom.md b/docs/Concepts/GameObjects/SpawnObjectCustom.md index 8d206fad8..816b9cd5d 100644 --- a/docs/Concepts/GameObjects/SpawnObjectCustom.md +++ b/docs/Concepts/GameObjects/SpawnObjectCustom.md @@ -18,7 +18,7 @@ The asset ID passed to the spawn function can be found on NetworkIdentity.assetI ```cs // generate a new unique assetId -System.Guid creatureAssetId = System.Guid.NewGuid; +System.Guid creatureAssetId = System.Guid.NewGuid(); // register handlers for the new assetId ClientScene.RegisterSpawnHandler(creatureAssetId, SpawnCreature, UnSpawnCreature); From 7ecd66d6ec3db6e1877da6ffaa661b6adf558af3 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 02:58:37 -0800 Subject: [PATCH 079/276] =?UTF-8?q?Transport.activeTransport=C2=A0instead?= =?UTF-8?q?=20of=20NetworkManager.singleton.transport=20(#479)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Created Transport.activeTransport to decrease NetworkManager god status. * Fixed NetworkManagerHUD. (I forgot I had deleted it temporarily for testing) --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- Assets/Mirror/Runtime/NetworkClient.cs | 20 +++++++------- Assets/Mirror/Runtime/NetworkConnection.cs | 18 ++++++------- Assets/Mirror/Runtime/NetworkManager.cs | 10 ++++--- Assets/Mirror/Runtime/NetworkManagerHUD.cs | 2 +- Assets/Mirror/Runtime/NetworkServer.cs | 28 ++++++++++---------- Assets/Mirror/Runtime/Transport/Transport.cs | 4 +++ 7 files changed, 45 insertions(+), 39 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 13a7ae65b..ea479c303 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -35,7 +35,7 @@ internal static void Shutdown() ready = false; s_IsSpawnFinished = false; - NetworkManager.singleton.transport.ClientDisconnect(); + Transport.activeTransport.ClientDisconnect(); } // this is called from message handler for Owner message diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 60e686cb5..8e474f30c 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -59,7 +59,7 @@ public void Connect(string ip) serverIp = ip; connectState = ConnectState.Connecting; - NetworkManager.singleton.transport.ClientConnect(ip); + Transport.activeTransport.ClientConnect(ip); // setup all the handlers connection = new NetworkConnection(serverIp, 0); @@ -69,10 +69,10 @@ public void Connect(string ip) private void InitializeTransportHandlers() { // TODO do this in inspector? - NetworkManager.singleton.transport.OnClientConnected.AddListener(OnConnected); - NetworkManager.singleton.transport.OnClientDataReceived.AddListener(OnDataReceived); - NetworkManager.singleton.transport.OnClientDisconnected.AddListener(OnDisconnected); - NetworkManager.singleton.transport.OnClientError.AddListener(OnError); + Transport.activeTransport.OnClientConnected.AddListener(OnConnected); + Transport.activeTransport.OnClientDataReceived.AddListener(OnDataReceived); + Transport.activeTransport.OnClientDisconnected.AddListener(OnDisconnected); + Transport.activeTransport.OnClientError.AddListener(OnError); } void OnError(Exception exception) @@ -118,7 +118,7 @@ void PrepareForConnect() { active = true; RegisterSystemHandlers(false); - NetworkManager.singleton.transport.enabled = true; + Transport.activeTransport.enabled = true; InitializeTransportHandlers(); } @@ -141,10 +141,10 @@ public virtual void Disconnect() void RemoveTransportHandlers() { // so that we don't register them more than once - NetworkManager.singleton.transport.OnClientConnected.RemoveListener(OnConnected); - NetworkManager.singleton.transport.OnClientDataReceived.RemoveListener(OnDataReceived); - NetworkManager.singleton.transport.OnClientDisconnected.RemoveListener(OnDisconnected); - NetworkManager.singleton.transport.OnClientError.RemoveListener(OnError); + Transport.activeTransport.OnClientConnected.RemoveListener(OnConnected); + Transport.activeTransport.OnClientDataReceived.RemoveListener(OnDataReceived); + Transport.activeTransport.OnClientDisconnected.RemoveListener(OnDisconnected); + Transport.activeTransport.OnClientError.RemoveListener(OnError); } public bool Send(short msgType, MessageBase msg) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index d1e21cbfb..326fb4099 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -84,12 +84,12 @@ public void Disconnect() // paul: we may be connecting or connected, either way, we need to disconnect // transport should not do anything if it is not connecting/connected - NetworkManager.singleton.transport.ClientDisconnect(); + Transport.activeTransport.ClientDisconnect(); // server? then disconnect that client - if (NetworkManager.singleton.transport.ServerActive()) + if (Transport.activeTransport.ServerActive()) { - NetworkManager.singleton.transport.ServerDisconnect(connectionId); + Transport.activeTransport.ServerDisconnect(connectionId); } // remove observers @@ -138,9 +138,9 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR { if (logNetworkMessages) { Debug.Log("ConnectionSend con:" + connectionId + " bytes:" + BitConverter.ToString(bytes)); } - if (bytes.Length > NetworkManager.singleton.transport.GetMaxPacketSize(channelId)) + if (bytes.Length > Transport.activeTransport.GetMaxPacketSize(channelId)) { - Debug.LogError("NetworkConnection:SendBytes cannot send packet larger than " + NetworkManager.singleton.transport.GetMaxPacketSize(channelId) + " bytes"); + Debug.LogError("NetworkConnection:SendBytes cannot send packet larger than " + Transport.activeTransport.GetMaxPacketSize(channelId) + " bytes"); return false; } @@ -249,13 +249,13 @@ public virtual void TransportReceive(byte[] buffer) public virtual bool TransportSend(int channelId, byte[] bytes, out byte error) { error = 0; - if (NetworkManager.singleton.transport.ClientConnected()) + if (Transport.activeTransport.ClientConnected()) { - return NetworkManager.singleton.transport.ClientSend(channelId, bytes); + return Transport.activeTransport.ClientSend(channelId, bytes); } - else if (NetworkManager.singleton.transport.ServerActive()) + else if (Transport.activeTransport.ServerActive()) { - return NetworkManager.singleton.transport.ServerSend(connectionId, channelId, bytes); + return Transport.activeTransport.ServerSend(connectionId, channelId, bytes); } return false; } diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 4b4b43507..06fee5a64 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -35,7 +35,7 @@ public class NetworkManager : MonoBehaviour [Header("Network Info")] // transport layer - public Transport transport; + [SerializeField] Transport transport; [FormerlySerializedAs("m_NetworkAddress")] public string networkAddress = "localhost"; [FormerlySerializedAs("m_MaxConnections")] public int maxConnections = 4; @@ -104,6 +104,8 @@ void InitializeSingleton() return; } + Transport.activeTransport = transport; + // do this early LogFilter.Debug = showDebugMessages; @@ -160,7 +162,7 @@ public virtual void LateUpdate() // virtual so that inheriting classes' OnApplicationQuit() can call base.OnApplicationQuit() too public virtual void OnApplicationQuit() { - transport.Shutdown(); + Transport.activeTransport.Shutdown(); } // virtual so that inheriting classes' OnValidate() can call base.OnValidate() too @@ -424,7 +426,7 @@ internal void ClientChangeScene(string newSceneName, bool forceReload) if (client != null) { if (LogFilter.Debug) { Debug.Log("ClientChangeScene: pausing handlers while scene is loading to avoid data loss after scene was loaded."); } - NetworkManager.singleton.transport.enabled = false; + Transport.activeTransport.enabled = false; } // Let client prepare for scene change @@ -442,7 +444,7 @@ void FinishLoadScene() { // process queued messages that we received while loading the scene if (LogFilter.Debug) { Debug.Log("FinishLoadScene: resuming handlers after scene was loading."); } - NetworkManager.singleton.transport.enabled = true; + Transport.activeTransport.enabled = true; if (s_ClientReadyConnection != null) { diff --git a/Assets/Mirror/Runtime/NetworkManagerHUD.cs b/Assets/Mirror/Runtime/NetworkManagerHUD.cs index 02fce9d0c..4c546608b 100644 --- a/Assets/Mirror/Runtime/NetworkManagerHUD.cs +++ b/Assets/Mirror/Runtime/NetworkManagerHUD.cs @@ -78,7 +78,7 @@ void OnGUI() // server / client status message if (NetworkServer.active) { - GUILayout.Label("Server: active. Transport: " + manager.transport); + GUILayout.Label("Server: active. Transport: " + Transport.activeTransport); } if (manager.IsClientConnected()) { diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 8d43752fc..5f7386039 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -41,13 +41,13 @@ public static void Shutdown() } else { - NetworkManager.singleton.transport.ServerStop(); + Transport.activeTransport.ServerStop(); } - NetworkManager.singleton.transport.OnServerDisconnected.RemoveListener(OnDisconnected); - NetworkManager.singleton.transport.OnServerConnected.RemoveListener(OnConnected); - NetworkManager.singleton.transport.OnServerDataReceived.RemoveListener(OnDataReceived); - NetworkManager.singleton.transport.OnServerError.RemoveListener(OnError); + Transport.activeTransport.OnServerDisconnected.RemoveListener(OnDisconnected); + Transport.activeTransport.OnServerConnected.RemoveListener(OnConnected); + Transport.activeTransport.OnServerDataReceived.RemoveListener(OnDataReceived); + Transport.activeTransport.OnServerError.RemoveListener(OnError); s_Initialized = false; } @@ -65,10 +65,10 @@ static void Initialize() //Make sure connections are cleared in case any old connections references exist from previous sessions connections.Clear(); - NetworkManager.singleton.transport.OnServerDisconnected.AddListener(OnDisconnected); - NetworkManager.singleton.transport.OnServerConnected.AddListener(OnConnected); - NetworkManager.singleton.transport.OnServerDataReceived.AddListener(OnDataReceived); - NetworkManager.singleton.transport.OnServerError.AddListener(OnError); + Transport.activeTransport.OnServerDisconnected.AddListener(OnDisconnected); + Transport.activeTransport.OnServerConnected.AddListener(OnConnected); + Transport.activeTransport.OnServerDataReceived.AddListener(OnDataReceived); + Transport.activeTransport.OnServerError.AddListener(OnError); } @@ -88,7 +88,7 @@ public static bool Listen(int maxConnections) // only start server if we want to listen if (!dontListen) { - NetworkManager.singleton.transport.ServerStart(); + Transport.activeTransport.ServerStart(); if (LogFilter.Debug) { Debug.Log("Server started listening"); } } @@ -286,14 +286,14 @@ static void OnConnected(int connectionId) if (connectionId <= 0) { Debug.LogError("Server.HandleConnect: invalid connectionId: " + connectionId + " . Needs to be >0, because 0 is reserved for local player."); - NetworkManager.singleton.transport.ServerDisconnect(connectionId); + Transport.activeTransport.ServerDisconnect(connectionId); return; } // connectionId not in use yet? if (connections.ContainsKey(connectionId)) { - NetworkManager.singleton.transport.ServerDisconnect(connectionId); + Transport.activeTransport.ServerDisconnect(connectionId); if (LogFilter.Debug) { Debug.Log("Server connectionId " + connectionId + " already in use. kicked client:" + connectionId); } return; } @@ -306,7 +306,7 @@ static void OnConnected(int connectionId) if (connections.Count < s_MaxConnections) { // get ip address from connection - string address = NetworkManager.singleton.transport.ServerGetClientAddress(connectionId); + string address = Transport.activeTransport.ServerGetClientAddress(connectionId); // add player info NetworkConnection conn = new NetworkConnection(address, connectionId); @@ -315,7 +315,7 @@ static void OnConnected(int connectionId) else { // kick - NetworkManager.singleton.transport.ServerDisconnect(connectionId); + Transport.activeTransport.ServerDisconnect(connectionId); if (LogFilter.Debug) { Debug.Log("Server full, kicked client:" + connectionId); } } } diff --git a/Assets/Mirror/Runtime/Transport/Transport.cs b/Assets/Mirror/Runtime/Transport/Transport.cs index 061967eda..6283da63f 100644 --- a/Assets/Mirror/Runtime/Transport/Transport.cs +++ b/Assets/Mirror/Runtime/Transport/Transport.cs @@ -15,6 +15,10 @@ namespace Mirror public abstract class Transport : MonoBehaviour { + // static Transport which receives all network events + // this is usually set by NetworkManager, but doesn't have to be. + public static Transport activeTransport; + // determines if the transport is available for this platform // by default a transport is available in all platforms except webgl public virtual bool Available() From c32845d507ccea7427ff729782f8062470d48e5b Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 12:10:21 +0100 Subject: [PATCH 080/276] Update code convention with int vs Int32 --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f59f249e9..dd3a74619 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -123,5 +123,6 @@ Start reading our code and you'll get the hang of it. We optimize for readabilit Unlike Python, C# has different ways to do the same thing, which causes endless discussions and pull requests to change from one way to the other. Let's always use the most simple, most obvious way: * **type** vs. **var**: always use 'int x' instead of 'var x'. Less guess work. Less magic. If we **always** use the proper type then we have to waste no brain cycles on unnecessary decision making. * **if** vs. **switch**: any if statement could be converted to switch and back. Again, let's not have endless discussions and use if unless _switch_ makes overwhelmingly much sense. Python doesn't have switch either, they don't have those discussions and pull requests over there. - + * **int** vs. **Int32**: use int instead of Int32, double instead of Double, string instead of String and so on. We won't convert all ints to Int32, so it makes most sense to never use Int32 anywhere and avoid time wasting discussions. + Thanks. From d5857d841f56c18dc02b4da7eea2cde48204ddba Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 12:11:28 +0100 Subject: [PATCH 081/276] Add line break and fix word --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dd3a74619..d76ecd119 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -119,7 +119,8 @@ Start reading our code and you'll get the hang of it. We optimize for readabilit Fields and methods in a class are private by default, no need to use the private keyword there. * This is open source software. Consider the people who will read your code, and make it look nice for them. It's sort of like driving a car: Perhaps you love doing donuts when you're alone, but with passengers the goal is to make the ride as smooth as possible. -**One Python Way** +**The Python Way** + Unlike Python, C# has different ways to do the same thing, which causes endless discussions and pull requests to change from one way to the other. Let's always use the most simple, most obvious way: * **type** vs. **var**: always use 'int x' instead of 'var x'. Less guess work. Less magic. If we **always** use the proper type then we have to waste no brain cycles on unnecessary decision making. * **if** vs. **switch**: any if statement could be converted to switch and back. Again, let's not have endless discussions and use if unless _switch_ makes overwhelmingly much sense. Python doesn't have switch either, they don't have those discussions and pull requests over there. From f03e7b1ebe13461350cd08e0e53b0b713e53622c Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 12:16:19 +0100 Subject: [PATCH 082/276] Add empty class bodies to code convention --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d76ecd119..5f5bcf153 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -125,5 +125,6 @@ Unlike Python, C# has different ways to do the same thing, which causes endless * **type** vs. **var**: always use 'int x' instead of 'var x'. Less guess work. Less magic. If we **always** use the proper type then we have to waste no brain cycles on unnecessary decision making. * **if** vs. **switch**: any if statement could be converted to switch and back. Again, let's not have endless discussions and use if unless _switch_ makes overwhelmingly much sense. Python doesn't have switch either, they don't have those discussions and pull requests over there. * **int** vs. **Int32**: use int instead of Int32, double instead of Double, string instead of String and so on. We won't convert all ints to Int32, so it makes most sense to never use Int32 anywhere and avoid time wasting discussions. + * **Empty Class Bodies ({} vs. { })**: please use 'class MyMessage : EmptyMessage {}' instead of 'class MyMessage : EmptyMessage { }'. For the same reason that we use no white space inbetween parameterless function defintions like void Start() vs. void Start( ). Thanks. From 2b429c9b3a6acd01b7c32e58fcb81df9ceaceada Mon Sep 17 00:00:00 2001 From: SuperCables <47830337+SuperCables@users.noreply.github.com> Date: Thu, 28 Feb 2019 06:19:09 -0500 Subject: [PATCH 083/276] This doesn't sync slow rotating objects (#428) * This doesn't sync slow rotating objects The function sets lastRotation to the current rotation every frame, regardless of whether or not it detected a change. Because comparing two similar, but different Quaternions return true, only quickly rotating objects will return true; slow turning objects will return false, and the rotation will not be synced. By not updating lastRotation until a difference is spotted, any rotation will be synced. This fix allowed my slow rotating spaceship to sync rotation. TL;DR lastRotation should be the last time this function returned true, not the rotation last frame. * Update NetworkTransformBase.cs --- Assets/Mirror/Components/NetworkTransformBase.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index a8fa8b0bc..6250fdd2a 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -297,10 +297,16 @@ bool HasMovedOrRotated() bool rotated = lastRotation != targetComponent.transform.rotation; // save last for next frame to compare - lastPosition = targetComponent.transform.position; - lastRotation = targetComponent.transform.rotation; - - return moved || rotated; + // (only if change was detected. otherwise slow moving objects might + // never sync because of C#'s float comparison tolerance. see also: + // https://github.com/vis2k/Mirror/pull/428) + bool change = moved || rotated; + if (change) + { + lastPosition = targetComponent.transform.position; + lastRotation = targetComponent.transform.rotation; + } + return change; } // set position carefully depending on the target component From 97fc7aca4cf4ba57f8d7f2bad678d74bfd64a15f Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Thu, 28 Feb 2019 12:21:27 +0100 Subject: [PATCH 084/276] Use type keywords (#472) * Use type keywords * Update --- Assets/Mirror/Runtime/MessagePacker.cs | 4 ++-- Assets/Mirror/Runtime/NetworkReader.cs | 28 ++++++++++++------------ Assets/Mirror/Runtime/NetworkTime.cs | 10 ++++----- Assets/Mirror/Runtime/NetworkWriter.cs | 4 ++-- Assets/Mirror/Tests/NetworkWriterTest.cs | 8 +++---- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs index a300aba59..8356248f7 100644 --- a/Assets/Mirror/Runtime/MessagePacker.cs +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -43,8 +43,8 @@ public static byte[] PackMessage(ushort msgType, MessageBase msg) public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType) { // read message type (varint) - msgType = (UInt16)messageReader.ReadPackedUInt32(); + msgType = (ushort)messageReader.ReadPackedUInt32(); return true; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/NetworkReader.cs b/Assets/Mirror/Runtime/NetworkReader.cs index 15447fe97..7dd07849c 100644 --- a/Assets/Mirror/Runtime/NetworkReader.cs +++ b/Assets/Mirror/Runtime/NetworkReader.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using UnityEngine; @@ -53,17 +53,17 @@ public byte[] ReadBytesAndSize() // http://sqlite.org/src4/doc/trunk/www/varint.wiki // NOTE: big endian. - public UInt32 ReadPackedUInt32() + public uint ReadPackedUInt32() { - UInt64 value = ReadPackedUInt64(); - if (value > UInt32.MaxValue) + ulong value = ReadPackedUInt64(); + if (value > uint.MaxValue) { throw new IndexOutOfRangeException("ReadPackedUInt32() failure, value too large"); } - return (UInt32)value; + return (uint)value; } - public UInt64 ReadPackedUInt64() + public ulong ReadPackedUInt64() { byte a0 = ReadByte(); if (a0 < 241) @@ -74,49 +74,49 @@ public UInt64 ReadPackedUInt64() byte a1 = ReadByte(); if (a0 >= 241 && a0 <= 248) { - return 240 + 256 * (a0 - ((UInt64)241)) + a1; + return 240 + 256 * (a0 - ((ulong)241)) + a1; } byte a2 = ReadByte(); if (a0 == 249) { - return 2288 + (((UInt64)256) * a1) + a2; + return 2288 + (((ulong)256) * a1) + a2; } byte a3 = ReadByte(); if (a0 == 250) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16); } byte a4 = ReadByte(); if (a0 == 251) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16) + (((UInt64)a4) << 24); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16) + (((ulong)a4) << 24); } byte a5 = ReadByte(); if (a0 == 252) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16) + (((UInt64)a4) << 24) + (((UInt64)a5) << 32); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16) + (((ulong)a4) << 24) + (((ulong)a5) << 32); } byte a6 = ReadByte(); if (a0 == 253) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16) + (((UInt64)a4) << 24) + (((UInt64)a5) << 32) + (((UInt64)a6) << 40); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16) + (((ulong)a4) << 24) + (((ulong)a5) << 32) + (((ulong)a6) << 40); } byte a7 = ReadByte(); if (a0 == 254) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16) + (((UInt64)a4) << 24) + (((UInt64)a5) << 32) + (((UInt64)a6) << 40) + (((UInt64)a7) << 48); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16) + (((ulong)a4) << 24) + (((ulong)a5) << 32) + (((ulong)a6) << 40) + (((ulong)a7) << 48); } byte a8 = ReadByte(); if (a0 == 255) { - return a1 + (((UInt64)a2) << 8) + (((UInt64)a3) << 16) + (((UInt64)a4) << 24) + (((UInt64)a5) << 32) + (((UInt64)a6) << 40) + (((UInt64)a7) << 48) + (((UInt64)a8) << 56); + return a1 + (((ulong)a2) << 8) + (((ulong)a3) << 16) + (((ulong)a4) << 24) + (((ulong)a5) << 32) + (((ulong)a6) << 40) + (((ulong)a7) << 48) + (((ulong)a8) << 56); } throw new IndexOutOfRangeException("ReadPackedUInt64() failure: " + a0); diff --git a/Assets/Mirror/Runtime/NetworkTime.cs b/Assets/Mirror/Runtime/NetworkTime.cs index 02a235898..40d1ad693 100644 --- a/Assets/Mirror/Runtime/NetworkTime.cs +++ b/Assets/Mirror/Runtime/NetworkTime.cs @@ -1,4 +1,4 @@ -using System; +using System; using UnityEngine; using Stopwatch = System.Diagnostics.Stopwatch; @@ -28,8 +28,8 @@ static NetworkTime() static ExponentialMovingAverage _offset = new ExponentialMovingAverage(10); // the true offset guaranteed to be in this range - private static double offsetMin = Double.MinValue; - private static double offsetMax = Double.MaxValue; + private static double offsetMin = double.MinValue; + private static double offsetMax = double.MaxValue; // returns the clock time _in this system_ static double LocalTime() @@ -41,8 +41,8 @@ public static void Reset() { _rtt = new ExponentialMovingAverage(PingWindowSize); _offset = new ExponentialMovingAverage(PingWindowSize); - offsetMin = Double.MinValue; - offsetMax = Double.MaxValue; + offsetMin = double.MinValue; + offsetMax = double.MaxValue; } internal static NetworkPingMessage GetPing() diff --git a/Assets/Mirror/Runtime/NetworkWriter.cs b/Assets/Mirror/Runtime/NetworkWriter.cs index 952dbce9c..accbc309a 100644 --- a/Assets/Mirror/Runtime/NetworkWriter.cs +++ b/Assets/Mirror/Runtime/NetworkWriter.cs @@ -95,14 +95,14 @@ public void WriteBytesAndSize(byte[] buffer) } // http://sqlite.org/src4/doc/trunk/www/varint.wiki - public void WritePackedUInt32(UInt32 value) + public void WritePackedUInt32(uint value) { // for 32 bit values WritePackedUInt64 writes the // same exact thing bit by bit WritePackedUInt64(value); } - public void WritePackedUInt64(UInt64 value) + public void WritePackedUInt64(ulong value) { if (value <= 240) { diff --git a/Assets/Mirror/Tests/NetworkWriterTest.cs b/Assets/Mirror/Tests/NetworkWriterTest.cs index 30535afc5..7b7306e57 100644 --- a/Assets/Mirror/Tests/NetworkWriterTest.cs +++ b/Assets/Mirror/Tests/NetworkWriterTest.cs @@ -67,7 +67,7 @@ public void TestPackedUInt32() writer.WritePackedUInt32(67821); writer.WritePackedUInt32(16777210); writer.WritePackedUInt32(16777219); - writer.WritePackedUInt32(UInt32.MaxValue); + writer.WritePackedUInt32(uint.MaxValue); NetworkReader reader = new NetworkReader(writer.ToArray()); Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(0)); @@ -76,7 +76,7 @@ public void TestPackedUInt32() Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(67821)); Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(16777210)); Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(16777219)); - Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(UInt32.MaxValue)); + Assert.That(reader.ReadPackedUInt32(), Is.EqualTo(uint.MaxValue)); } [Test] @@ -93,7 +93,7 @@ public void TestPackedUInt64() writer.WritePackedUInt64(1099511627775); writer.WritePackedUInt64(281474976710655); writer.WritePackedUInt64(72057594037927935); - writer.WritePackedUInt64(UInt64.MaxValue); + writer.WritePackedUInt64(ulong.MaxValue); NetworkReader reader = new NetworkReader(writer.ToArray()); Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(0)); @@ -106,7 +106,7 @@ public void TestPackedUInt64() Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(1099511627775)); Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(281474976710655)); Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(72057594037927935)); - Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(UInt64.MaxValue)); + Assert.That(reader.ReadPackedUInt64(), Is.EqualTo(ulong.MaxValue)); } [Test] From 5ac23dd23138932977f2f7a494fa4285f6da58bb Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Thu, 28 Feb 2019 12:36:21 +0100 Subject: [PATCH 085/276] More using cleanup (#489) --- Assets/Mirror/Runtime/MessagePacker.cs | 2 -- Assets/Mirror/Runtime/UNetwork.cs | 1 - 2 files changed, 3 deletions(-) diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs index 8356248f7..3ce855393 100644 --- a/Assets/Mirror/Runtime/MessagePacker.cs +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -1,5 +1,3 @@ -using System; - namespace Mirror { // message packing all in one place, instead of constructing headers in all diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 8a914b2f0..e37ef9ec7 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -1,6 +1,5 @@ using System; using UnityEngine; -using UnityEngine.Rendering; namespace Mirror { From 8d96dd77cda45bc82d3b33473e448d6ca6d5df06 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 13:57:40 +0100 Subject: [PATCH 086/276] Fix trailing whitespace --- Assets/Mirror/Runtime/NetworkBehaviour.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index b7cc3a4b9..e1f910896 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -16,13 +16,13 @@ public class NetworkBehaviour : MonoBehaviour [HideInInspector] public float syncInterval = 0.1f; public bool localPlayerAuthority => netIdentity.localPlayerAuthority; - public bool isServer => netIdentity.isServer; - public bool isClient => netIdentity.isClient; - public bool isLocalPlayer => netIdentity.isLocalPlayer; + public bool isServer => netIdentity.isServer; + public bool isClient => netIdentity.isClient; + public bool isLocalPlayer => netIdentity.isLocalPlayer; public bool isServerOnly => isServer && !isClient; public bool isClientOnly => isClient && !isServer; public bool hasAuthority => netIdentity.hasAuthority; - public uint netId => netIdentity.netId; + public uint netId => netIdentity.netId; public NetworkConnection connectionToServer => netIdentity.connectionToServer; public NetworkConnection connectionToClient => netIdentity.connectionToClient; protected ulong syncVarDirtyBits { get; private set; } From 92217d4d0f6549ab6c7df7b58001e4977cb918be Mon Sep 17 00:00:00 2001 From: Chris Langsenkamp Date: Thu, 28 Feb 2019 09:08:34 -0500 Subject: [PATCH 087/276] Showcase and ChangeLog docs --- docs/General/ChangeLog.md | 17 ++++++++++++++ docs/General/Cubica.jpg | Bin 0 -> 69081 bytes docs/General/PickupHockey.png | Bin 0 -> 114787 bytes docs/General/ProjectRetrograde.jpg | Bin 0 -> 92282 bytes docs/General/Showcase.md | 36 +++++++++++++++++++++++++++++ docs/General/TheLastIO.png | Bin 0 -> 170443 bytes docs/General/TheWall.jpg | Bin 0 -> 33551 bytes docs/General/uMMORPG.jpg | Bin 0 -> 53261 bytes docs/General/uSurvival.jpg | Bin 0 -> 54823 bytes docs/_data/navigation.yml | 8 +++++-- 10 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 docs/General/ChangeLog.md create mode 100644 docs/General/Cubica.jpg create mode 100644 docs/General/PickupHockey.png create mode 100644 docs/General/ProjectRetrograde.jpg create mode 100644 docs/General/Showcase.md create mode 100644 docs/General/TheLastIO.png create mode 100644 docs/General/TheWall.jpg create mode 100644 docs/General/uMMORPG.jpg create mode 100644 docs/General/uSurvival.jpg diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md new file mode 100644 index 000000000..aa98df3ea --- /dev/null +++ b/docs/General/ChangeLog.md @@ -0,0 +1,17 @@ +# Change Log + +## Version 1.5 -- 2019-Mar-01 + +- Added: Lobby Manager and Lobby Player with example game +- Fixed: SyncVar hook not firing when clients joined + + +## Version 1.4 -- 2019-Feb-01 + +- Mirror is now full source - no more DLL's +- Transports are now components: TCP, UDP, WebGL, Steam + + +## Version 1.3 -- 2019-Jan-01 + + diff --git a/docs/General/Cubica.jpg b/docs/General/Cubica.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50fdc98f56ea05e6ec683236a4ed546f0a77697e GIT binary patch literal 69081 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%0AS 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 H|Bn1W=Wcf7 literal 0 HcmV?d00001 diff --git a/docs/General/PickupHockey.png b/docs/General/PickupHockey.png new file mode 100644 index 0000000000000000000000000000000000000000..23f77026ec4000e256c61c21b32193d5b4b8c939 GIT binary patch literal 114787 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 S_Gpy&QTdU^L)3$(ul^4wzNlva literal 0 HcmV?d00001 diff --git a/docs/General/ProjectRetrograde.jpg b/docs/General/ProjectRetrograde.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7333219358ec94dc69cd3a5b6b612e92ed45cf98 GIT binary patch literal 92282 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%0A+3kol z=3B}6FiBA=qmbk{&*@y#51?tZ`bUF&()`@USG@W?>+*}4UfU9^~UWwW2T~UhdvU7Sl&JYhCe{H zf1UQiaTCR-MmBADA=OxVW${A338gi2MLrbtT~bQ-)dxdBu0yJkdd{qgI6FV&65qq* z&uc!nx%nMlg0F=km)5kUhMY@?L`cGNX42l-YSjguyevbK^1F zg6?P%B0nk%at7##u{+N+-%L$SWq;t8MMadms}TArVr|QJ0D*MN-QJ8BZ$W4BH)Z`q z?NHn$TtZ14cR!JloRr@)Tre{XFBLyZ1);_shd3BY_tV5G9nv@KIiP`-Vq4Zqm1jhB zu+BW($ERSc?V;HR(q3peo3x3>U4I2PQYKs_c}U+ZGKQL)fZPl8F$_O9Ub+DSB9Gu8 zdnL(rpu)IOq%vcP1anE)Wqe|J3F}i7UUepGDqpW}Ltu{EqQ}8L)~Iu_7ipP<^D-PXW}jC8_tJ(PWg%pB#t<_D{4@Eb8el`s<_^E8 zv=8tBPZ+`7*JHnCaQqD&1+!9Hq!e~%UW~SVOcBhy8fwg>0@*LLGAa1N={R0o^r4|T zf2?bdy>;N_)7FcF?{b$D9~L5)-G>&tFiSJiwLn5zl_d6*fE?f%B{aDYhk`=g2`np; zj^JVi9}o>ttzhpacsk5ILnkS5cN@?6!X0UJy^1zirHyswDGB>%szLihlL8~L|L}`` zvnbh~MUQBv%l@7^VjmT;H03TO%`t*OVQM@tceFeRc4ol2T*?)r7Z&Zy8TIj;`BkC$ z#x=FywGP}E9iI-cX=-#GyykHs@UwD&+*V0PXx`Dgl_9LmjEazY+xo1s5&w|b%Dbg3 za5-{0{~jcp)4+;&csfeAekli=Q{zsI4!NM3v!v{9WZ4eC*b2;RMeI-19|UBlf)LaJ zcxQ@rV77D(8&+akgw`|UYt!(VY}BR!bK>OC0$UbI3ZS$Ch$Y^9W?1FTX>@|U9Zy1N z4lwSu68V^Y~hS!i(PTC9-wAh5m;fz_*PX4@ROzgYXoGYVe z8zsUAXM0}Qr^B^J5$E7DK}XJPzLO{U0gS>^eDWz0Emb%v+I7~(l5Iw1Dy@+AI&2)| z*X6l#!yWoL!I`8OM%dvf#fT`pY{$c~%6(rc8MHo-hyCQ!Dwcu))T2B8I>@Q&vgtn=lXFcZbCi>-G5o5yu`8O&1CrXDH`MLyVU$<8ipt;eB zi-GjcV#J%L-vFDmk*%KXSwan46B8X)JDBPP8xUKqtu8c&%;Hc}M-#m%=&F>~t z!taa{b>x7iD4|Z>`n8AuetV<++v_Q9XNn;`{Yh$7Y4n+k21kw@uCds(?V1}(#SyJ5 z9RW9Ix<^%nKYB<8Tmoy7Yk<7rLMvu8@_!RFBt~KM#Rml)NwpHPaIpOJut~4IA|J0X zl~-9Mm!4~5OD-w*oz`ePa$8s&Qrs0xES=u)0mPYHv2KOPK>8kCg%+#U{0Wjjrs5s_ zL3>e$VX_t#*lgKAs$UG zbeS=yQxFJHO{ z55We9Nk^!f4qLhkLL4-5+oYQW#8!8OrJhJkEff?|LFBT>T=w<9vswA|qvPl9ZsvP^ z?`{;jIrZZ+R8V$$;P2gdoM4NnK;3odBkWaR}d}4Ba%Y$>sXs4IFHSR zn$f8_Y~=-9Dx`0PQ63@f%WiJcfp^A~c~ISv!qe*?lp4RV%1d`{QMi28T(f+Ki}sJe zAAUH27X`7x=|as0P-xcICLO^I+%j14JHN{Y?bvh!Iz`$FRAUfN{oilb$=}3iGe4B!$K+c{rHc}7e#-| zp`f7i%&e8l`Ul<4M4yT~_TX;H>>87`D>GGBY$iKH&E^oN7FP|%$

    Bv{LeWb*hTJ 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%0A9syez*r-Z_SSdw1i$-8<3I-ddOL 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 literal 0 HcmV?d00001 diff --git a/docs/General/TheWall.jpg b/docs/General/TheWall.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47b1a765aaf2bb09e468d26431a6cb221d01b1e2 GIT binary patch literal 33551 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 literal 0 HcmV?d00001 diff --git a/docs/General/uMMORPG.jpg b/docs/General/uMMORPG.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b07b201144762ffe095032ad95d2b9dc17c5a9f GIT binary patch literal 53261 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 literal 0 HcmV?d00001 diff --git a/docs/General/uSurvival.jpg b/docs/General/uSurvival.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a2c2bd5042a0adcc5376de7d68cf848a7e2d8cd GIT binary patch literal 54823 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 HKKU|jj9GaKSYd54UJ90P# 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 578890441..c774cf658 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -2,14 +2,18 @@ children: - title: "Overview" url: "/General" - - title: "Why TCP?" - url: "/General/WhyTCP" - title: "Getting Started" url: "/General/Start" - title: "Migration Guide" url: "/General/Migration" - title: "Deprecations" url: "/General/Deprecations" + - title: "ChangeLog" + url: "/General/ChangeLog" + - title: "Showcase" + url: "/General/Showcase" + - title: "Why TCP?" + url: "/General/WhyTCP" - title: "Support" url: "/General/Support" - title: "Concepts" From d3cd0f931ed63d2f240e150cb9bbeb864eedac68 Mon Sep 17 00:00:00 2001 From: Chris Langsenkamp Date: Thu, 28 Feb 2019 09:11:44 -0500 Subject: [PATCH 088/276] Fixed image file extension --- docs/General/Showcase.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/General/Showcase.md b/docs/General/Showcase.md index ad504d954..5e196be07 100644 --- a/docs/General/Showcase.md +++ b/docs/General/Showcase.md @@ -27,7 +27,7 @@ ## [The Last IO](http://thelast.io/) -![The Last IO](TheLastIO.jpg) +![The Last IO](TheLastIO.png) ## [Project Retrograde](https://freemergency.weebly.com/) From d7b6c8556f92d8d6d79ded2ad9ff8207e31f9dd5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 15:18:52 +0100 Subject: [PATCH 089/276] move TargetRpc NetworkServer.active and conn is ULocalConnectionToServer check out of weaver (#492) --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77824 -> 77312 bytes Assets/Mirror/Runtime/NetworkBehaviour.cs | 12 ++++++++ .../Weaver/Processors/TargetRpcProcessor.cs | 26 ++---------------- Weaver/Weaver/Weaver.cs | 4 --- 4 files changed, 15 insertions(+), 27 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 17294ef93fc531f9ead7b2d8eb6e84e603530187..04604df44f32b9451da4494d6e6a3aae0933890c 100644 GIT binary patch delta 18320 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 delta 18502 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 diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index e1f910896..048ce271f 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -132,6 +132,18 @@ protected void SendRPCInternal(Type invokeClass, string rpcName, NetworkWriter w [EditorBrowsable(EditorBrowsableState.Never)] protected void SendTargetRPCInternal(NetworkConnection conn, Type invokeClass, string rpcName, NetworkWriter writer, int channelId) { + // this was in Weaver before + if (!NetworkServer.active) + { + Debug.LogError("TargetRPC Function " + rpcName + " called on client."); + return; + } + // this was in Weaver before + if (conn is ULocalConnectionToServer) + { + Debug.LogError("TargetRPC Function " + rpcName + " called on connection to server"); + return; + } // This cannot use NetworkServer.active, as that is not specific to this object. if (!isServer) { diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Weaver/Weaver/Processors/TargetRpcProcessor.cs index 25fdfd8ba..80b674931 100644 --- a/Weaver/Weaver/Processors/TargetRpcProcessor.cs +++ b/Weaver/Weaver/Processors/TargetRpcProcessor.cs @@ -42,15 +42,9 @@ public static MethodDefinition ProcessTargetRpcInvoke(TypeDefinition td, MethodD /* generates code like: public void CallTargetTest (NetworkConnection conn, int param) { - if (!NetworkServer.get_active ()) { - Debug.LogError((object)"TargetRPC Function TargetTest called on client."); - } else if (((?)conn) is ULocalConnectionToServer) { - Debug.LogError((object)"TargetRPC Function TargetTest called on connection to server"); - } else { - NetworkWriter writer = new NetworkWriter (); - writer.WritePackedUInt32 ((uint)param); - base.SendTargetRPCInternal (conn, typeof(class), "TargetTest", val); - } + NetworkWriter writer = new NetworkWriter (); + writer.WritePackedUInt32 ((uint)param); + base.SendTargetRPCInternal (conn, typeof(class), "TargetTest", val); } */ public static MethodDefinition ProcessTargetRpcCall(TypeDefinition td, MethodDefinition md, CustomAttribute ca) @@ -70,20 +64,6 @@ public static MethodDefinition ProcessTargetRpcCall(TypeDefinition td, MethodDef NetworkBehaviourProcessor.WriteSetupLocals(rpcWorker); - NetworkBehaviourProcessor.WriteServerActiveCheck(rpcWorker, md.Name, label, "TargetRPC Function"); - - Instruction labelConnectionCheck = rpcWorker.Create(OpCodes.Nop); - - // check specifically for ULocalConnectionToServer so a host is not trying to send - // an TargetRPC to the "server" from it's local client. - rpcWorker.Append(rpcWorker.Create(OpCodes.Ldarg_1)); - rpcWorker.Append(rpcWorker.Create(OpCodes.Isinst, Weaver.ULocalConnectionToServerType)); - rpcWorker.Append(rpcWorker.Create(OpCodes.Brfalse, labelConnectionCheck)); - rpcWorker.Append(rpcWorker.Create(OpCodes.Ldstr, string.Format("TargetRPC Function {0} called on connection to server", md.Name))); - rpcWorker.Append(rpcWorker.Create(OpCodes.Call, Weaver.logErrorReference)); - rpcWorker.Append(rpcWorker.Create(OpCodes.Ret)); - rpcWorker.Append(labelConnectionCheck); - NetworkBehaviourProcessor.WriteCreateWriter(rpcWorker); // write all the arguments that the user passed to the TargetRpc call diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index dbf23c04e..3dc2bf16a 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -61,7 +61,6 @@ class Weaver public static TypeReference MonoBehaviourType; public static TypeReference ScriptableObjectType; public static TypeReference NetworkConnectionType; - public static TypeReference ULocalConnectionToServerType; public static TypeReference ULocalConnectionToClientType; public static TypeReference MessageBaseType; @@ -1123,9 +1122,6 @@ static void SetupTargetTypes() NetworkConnectionType = NetAssembly.MainModule.GetType("Mirror.NetworkConnection"); NetworkConnectionType = CurrentAssembly.MainModule.ImportReference(NetworkConnectionType); - ULocalConnectionToServerType = NetAssembly.MainModule.GetType("Mirror.ULocalConnectionToServer"); - ULocalConnectionToServerType = CurrentAssembly.MainModule.ImportReference(ULocalConnectionToServerType); - ULocalConnectionToClientType = NetAssembly.MainModule.GetType("Mirror.ULocalConnectionToClient"); ULocalConnectionToClientType = CurrentAssembly.MainModule.ImportReference(ULocalConnectionToClientType); From 9f0c485b7ddcc6b8944989b3be9f7e90160e5f28 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 15:21:07 +0100 Subject: [PATCH 090/276] move TargetRpc NetworkServer.active and conn is ULocalConnectionToServer check out of weaver (#492) (#491) --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77312 -> 77312 bytes Assets/Mirror/Runtime/NetworkBehaviour.cs | 6 ++++++ Weaver/Weaver/Processors/RpcProcessor.cs | 12 +++--------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 04604df44f32b9451da4494d6e6a3aae0933890c..fd022cb45654c3aa781f3b6097244ee29014b851 100644 GIT binary patch delta 8793 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 diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 048ce271f..80dbc9c3d 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -110,6 +110,12 @@ public virtual bool InvokeCommand(int cmdHash, NetworkReader reader) [EditorBrowsable(EditorBrowsableState.Never)] protected void SendRPCInternal(Type invokeClass, string rpcName, NetworkWriter writer, int channelId) { + // this was in Weaver before + if (!NetworkServer.active) + { + Debug.LogError("RPC Function " + rpcName + " called on Client."); + return; + } // This cannot use NetworkServer.active, as that is not specific to this object. if (!isServer) { diff --git a/Weaver/Weaver/Processors/RpcProcessor.cs b/Weaver/Weaver/Processors/RpcProcessor.cs index 5e416af8b..4e0a66b03 100644 --- a/Weaver/Weaver/Processors/RpcProcessor.cs +++ b/Weaver/Weaver/Processors/RpcProcessor.cs @@ -38,13 +38,9 @@ public static MethodDefinition ProcessRpcInvoke(TypeDefinition td, MethodDefinit /* generates code like: public void CallRpcTest (int param) { - if (!NetworkServer.get_active ()) { - Debug.LogError ((object)"RPC Function RpcTest called on client."); - } else { - NetworkWriter writer = new NetworkWriter (); - writer.WritePackedUInt32((uint)param); - base.SendRPCInternal(typeof(class),"RpcTest", writer, 0); - } + NetworkWriter writer = new NetworkWriter (); + writer.WritePackedUInt32((uint)param); + base.SendRPCInternal(typeof(class),"RpcTest", writer, 0); } */ public static MethodDefinition ProcessRpcCall(TypeDefinition td, MethodDefinition md, CustomAttribute ca) @@ -64,8 +60,6 @@ public static MethodDefinition ProcessRpcCall(TypeDefinition td, MethodDefinitio NetworkBehaviourProcessor.WriteSetupLocals(rpcWorker); - NetworkBehaviourProcessor.WriteServerActiveCheck(rpcWorker, md.Name, label, "RPC Function"); - NetworkBehaviourProcessor.WriteCreateWriter(rpcWorker); // write all the arguments that the user passed to the Rpc call From cbeea382980879ede3a54fe6fec240aa4fd904e9 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 15:23:04 +0100 Subject: [PATCH 091/276] move Command NetworkClient.active check out of weaver (#494) --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77312 -> 77312 bytes Assets/Mirror/Runtime/NetworkBehaviour.cs | 8 ++++++++ Weaver/Weaver/Processors/CommandProcessor.cs | 9 --------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index fd022cb45654c3aa781f3b6097244ee29014b851..8135bea3cb2686d1dd1954b149241a5ea6194198 100644 GIT binary patch delta 10950 zcma)C30zcF`+m=zJ9oA_z%Vcj!?4Z_42TN~f=euh3T~mHhTaME6%r8e}R>>mKC7~I4dT!ErtpJiv<2$E=YMVC#Noye@ zO;Z(*{$_*k4>VVmVLCFyqA>3e7H%kw3$;^6SUNG#qOhUyB#bqpHDry35Y{MbI}x76 zuK~baJA-C`c@hVAv(e0H?0_e2R*GTPUB?7m!Xh*s*c z-sA9f)6=zC$?m^*oUW%A(jy}TrAc0Fhm;;7Xhduw%?p2(JWqcQ@8oU5_`*!Aw8&fP z6Af6Yaag!F8#AOSlCRJ}6Wvx?W%ZGf^lR%Kx>|J8`0D7J5e0NcM83*5Aiv^zA2n=4 zbCvDBi`)>cufiFCjdJ*a9*umL#L*{gOGz$m6O~QI(lJr1$uw$-wi}|n16a|%vD9V1 zjV!05>=VcnOrdA&t;iDrOZ2w_d6`~~$wqAFEEEnI>4)w(`iQd=c{%W*vw#R+8v~ZO z&)AoKA3s?bWLln*MF)miXvfk}T9{&?dlROSxHagJ8U+0oo-F}}qzj&l@UmYVVpocAcs7gOCJ`Uw9AwbLU8Ut<8R~-tv#5M+R=RwQ6wXxoy=3=1col5V^rE@b+XAeQ!U$>gkYJvZKtEs0?W~I1a{98X| zr?KKr!^^q3(+r{E9VZA)Si_DsAuJp>KPL@zY-?y2j@7|EN1}bQvuHy0MADTm$)1L& z%~@;bss&X&-;?!H)iXFezFvXXa&kxxSNX2lJ-BNQ$9Vr~*VL(PbNH&mX;bS6TF^P( z{rAqeVwm&F&Y9#{`hT4Z$-Y2%myv`V4@~Y_Lr5AubK5L^rWL9!qHi>PGS^8T%nffg ztVKhYX7UM=So&w~D&e9vusZKELW}`l!5V=i(a^%qt~L?8-pz~N?ql2PdJpdQ9zG!* zzFJyYI9Tq6eu|T?7yYO(gA59g?m0vrgLZ>582h@w;KA< z&srLmQ?chmefC8*&y_NZ%?Y;mvM91eZ?u!Q^J1f46qU($D?HP8Q)dw+fy2m#R z(`vJyq`wvAyLv?bC5(D%HrLSME2qPXo0Jtp<^}3{B@i-?KH1wAx(c)2TrI2U-rmQ^ zZu&$YPtI;s{<>!N|CfTAN6_KB9LpCqnnP(q7m7mp~L&S+8! z1LrRtY$MmQ^L_~R_RAri>8O4w9TD3rWTy!B}4GQEwi zy~9D;(^v1ONNsI`gzHA@(f+r|1AaTPL3Og z7QTd=&(js$5G}IkwKQ%}2eO(D7&Mx@d+8U0uEjm~zq4E(Jf18MjJQij;?Dd}&%oTW zOGJ)Oz$z(sAQzo8)F-FjH25hgpFq9{Of1(E(t%DJ7AI6C(n;lZx^-A<@(w*Yj3&h< z;dEh5=NG4lG~Yfn2vrwZXRtQ;PSS?qDMC|HVE1sM`FHoT|HYlIyT?xBMrV+uK*?yQ zMiyMbdNxNymtMG|l#Gs}#xY|_82xTcXVQ^w9h0M`XVIj4{hlz)iCv7Vw7HMfiy2y) z_nRHmKi)=9-s>`dc(a^eTvQ%AO1{e-ESYskBwaE#On&~RF<6~X$8M5ezG?rE&L8)w zr>jRPUHZ4ur52@^{H5fRC< zye$r^9E7;DvL_DyAC(4;+=w|uWs^KeE!CstKW-Y_)Q^T<$t^sxXi`mUdD~6nQS|Cd zH`Q2&jy2*ShvI0q9-`itriXl@BtEg=D$?~D+h zl%g(!16T;#TKiG+)O+#LICW|_#~Ku?VlZ<31Z=SvcSxx!jZLk+^y8`a4(EdM#Flb| zw>jUWmO>77PP02k2IcCO@)Fu_nw|EYW(=F$QaDWOr`hkh9LzVRrJRu3T;6>xg?>R{ zdP|`;D9m62z7y1zt)8eNhf~T62M=E%j15>OOnsf}o5~!CRy6 z2@3c$yj8f6Mz`E|#2?WLhr0$VQ;%;w(U%^iLm4d!(sD*Cf^-<84+QCOM%M=E2uAk= z=}1OD3(`@HUR0v1=u-XN`Dv|Etg!|3oJ9mD9fAibB-WkEWY(M>_h zmXmL9kd8;1;QKbnr!o0PkmfPkm9Cv($EW!#Gg5HLox*e-{cT1{pXF>#t;6Km};XM=KgCgT%cm2b4BYipeXeqOJ2nv89l z!}p;FYwcmUK*YL^L1$b_GjX;Dop6@j8fz}in`zJ46qNB-gU?OJ~}#6E@B4hQCn!Ff)~8(#TmEj*7O;GqWwraC6Bv(vh?5j`xFdo0jn^=<-<^ zM5KE$Mq#_=7#S^{#?#RI?T%F_d$C`n`VK9N*h35Mw|DqgFn2!6bqtiQ4asQkEo_ij zhd)55LPxsz{%A)@P`-`Hd|mP(si1FQsr5k_&pffNRWSD|`ZJcgEhx`wDIX6C_qP;8 z+O^K^Xw$yAQvR0mU33!4i-Yp)mhzi)ZJphJAt=vjDcd_Vhn>rWaR^E$6b6L{nZRbb zB9sP&dCYcm;HIO%H(|wZP0(*X&}_ds^)LF?puT_=aI>HG(usb%<6KaFsHH5^C;fJk zLtpl1kaBv~-PrZvQqs53%(}{?$(}wyca+vyNyM%L@^wHT#IAeCtb`dB25;2ns z54fbFEY@^N=0(uF2aNdhO|J)BxK1Y_E~Cp4H_#UmchcjChv*H=^0ksBVSWVdGRH`O z_L$>J@OD(Yu*!ockjGbu{FcQvk}jN+#}?xIb5hvnlJarR<*fVM)6CfFLC#8*&;82h zY31{g^0}&f66bNxUdm^(@>!#N-c>&5l~2@s?wLP7C5+Cb+1%ftK27YtN^Xd@h*j;dOBUmy zz+Wu2^zB8dq>-Lmv@-fAx_C2DwVEs@Zx$xLbXsNK*V**(#aBoIr4Ls~IXPIR9`yRd zsYAFsE-0h-I6``iuLw2C$IUotjoxzzlXEdln&iWMP`z=saOUQl&Uwt)w~W>=86|CF zCGDi&E%D$R$Go&vvmtkB4%r>JZ|OLKbL!Nx95S3b8k~+E=$_VQ@*=jkJdD#bt%v#u zjiV(EvAEk!YPg+5&>anKd|iCrFh29;PWVn$F2Ss#X&P@nmTr`M_Rd&Ues6L}zRVyo zOZc9hx;)i92~AZ)(YJM_Z!Udqd9U!5Xt_0%Z$H)1fzg-oL~#wg6AE#;;tvSm>N&6& zfA@jXz*M?W^dB%L!ncVB5m&nyM#mjS>=ySWqL!n~QE-2Ymc6me{s_m-9FK8)kmD$h z)f_kI&Kn2Shsg&JuX_#{``2G}Uqmz{A28bBjC2JtMt8+;lwf@Pb;N!gC&uYa64=}f z`^1JJ4&vxf{1SaOa~$J3k7-DXHd&xin~3<4)`K`un}&FSr+0AdsBMdu$sAu4+nV~< zKkm6`w7^VDYnIGVIH%C3U>o}f~SP8sG<8jY$vZJWOkVPmvkmWXerXBjB5dYjRSJ$pn5mRiU%uYD_Yurz@`K zBkwbrVGUlfSk;agA25YMDc;8z8zU_;g+pdL#^%|db*?Z)!XF9)>LOr+lX&Z5p1(${ z#4 zCJ(&H*=*Q_1tx>oiFwWj(ekP(8P=%m2OEJjxQf?m7Ue;4pD7Kd;5D3idb9^kt>AJ2 z-kBKv6kS`x*zSxq!i!0VO|4;n4~5N6`pT36`ko4#5%s;PJ$Ugp&OBEnT{LBZi02QB zGAoWiCpcH4Xis6Ub%G6eDQ2GUV~=(L@0|+E7Z;gwL0<~2{6_f2c->S0hX*Pmu}Sjn zP=OCDrn%h~xd+TGQ5XY6_kjwPt&GZ)`@s}^SuyQB zcb?oI`ixN67w%%Y6e94YgylEFe)}M~43^}IIXf{*owPh zIzDxnHUwKS2Aq`&V-s;4yvZ4xh_mJKaJ7nQ4M3u1%au^>Q#`j>tEEXWnK3_xsfnqU zs^B42q^^hLYIuXQ25?4HOVgoAWw!VY@(l1!R)UU0trm(@=1!@WWA3Y>c^=qRcBk_b`5{=NvWc2w z@*-G?Pju#K*M2821sQKojBQHUDldn*oGHbxfYXYm@8rHDuYeyoYtR?DuOhpoXny_U z$v0%2;vY>$00yLwA+MxSYuPDhw8S63uI1pvsO|J;>@+ z_JXI4`AK+MWj`l&Ft3F@Dm$&|WL^*3YL$NaM3ZlR3dETTTkA)0Bm7IHOHq6py5a+f zO`1KLp5{%kfG^Po5X7G5XCVilDNNfE^@;pEWa3MMu?l2cK)+C7m!uN&R@kGm441{c z6BgiOfq7<0Bh921*8Dbzc#UJ)#_(G6yKq!x z^}4y{{jhV1qAf>u5SA@f*t^m)^C9pyC~Tl>wfR$cQ)R1h2#-KMRkTy_iGK5E&|jr@ zh3+za1`Aa7aeSirbJ(y#akXj~yQ;EO^9E#hH7eSh=y?>H9#>dnB4cycDeNuI7H?Fe z#O^X3g*BWt!br<5lm8fmKCOt!u{EaS;8xjn=PuI;Xj0i{VY^HxVc9c^XTZJ7^abQ^ zQrMC3XU$)N{yD}PL5hFXe7eOlJPSLy)?nY}Of;W`J*sCrd86U1A13XT3*ma$dzk*os-!?T4)h#anJDQ!?jCVAZyfJ&AtLK#Nst&V!{rwShxp!G?hH-d{;~*@3}q@ zPxAsAu#f*GR`7~upn6fvAX&OU5N}894|(x|_8j-T%zY~0D?7pM@t62qtw9)JIt7mj ztZOVnt-Da`FIQ{bHLi?*Gs+x^0i$!E2* zAzc#-k3rX@R+5{r0?zTSOXnFfNQzD;rt?Z%#?}+q!x8@_8`G>Ebg%N$yB~ zN0Ui#h!NRPcIB3?+)@VFeE5dgVxcQniv@c8h4SprrOmKRYC@c4JR|kT;O8)XJ?vL$ zF>gOh|0!LDJ>j2AWzfnR3kzXSSPY%GEz0cDS%h^Fy|w*eTYMR9*cRnqpqoJ+i7(R? z61F@Vh&O5pS}ugH(mh6g4cn|+$E!VqJmJ`e>44)!T^Z?OeGPq{h(Dw&MRl<73R=2g zC0PTzVw{gPsp=lJ`8!|M>@x2Y#NaqMF zp6rerV3^C*Yh;+5j8o?Oq*!=`oW%)U3>QMj8#?(lT};)6PMS`-8HQ0Bw`GZ8oTfNp zqroDq#9@+oW}>+}W`;flM0nK@0)_A)ViEjk&_f^mi6;a~Kx@?FM&dRmfC+97Nr4WC zZFss3SfL2hF}R4^0RDqwNItjU&T%C8S%!K}<_Ntp{gluJ@g0ueaCB*y<#vvVB1;!= z9K~@q$8{Xv;&_T2Gciox^CNSh}S45tCpX)3^p6Kg(<`swCymw z9?6Ihw4fi2-<1-%!=T|2a4rS49dzifPSG{OM8f`_*3B1==obp#>*otM@b8GgmR--Z z4NN;DbqEJoT|55H{CjTewzRQq`{bVQTzF}*9ft$EP#0bh-uD(+KXYmn`YzC(_VP_y5jM7*hZM delta 10953 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 Date: Thu, 28 Feb 2019 15:43:15 +0100 Subject: [PATCH 092/276] remove unused label --- Weaver/Weaver/Processors/TargetRpcProcessor.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Weaver/Weaver/Processors/TargetRpcProcessor.cs index 80b674931..7e1c0af08 100644 --- a/Weaver/Weaver/Processors/TargetRpcProcessor.cs +++ b/Weaver/Weaver/Processors/TargetRpcProcessor.cs @@ -60,7 +60,6 @@ public static MethodDefinition ProcessTargetRpcCall(TypeDefinition td, MethodDef } ILProcessor rpcWorker = rpc.Body.GetILProcessor(); - Instruction label = rpcWorker.Create(OpCodes.Nop); NetworkBehaviourProcessor.WriteSetupLocals(rpcWorker); From a28355d77152ba5eec04ad211623c7964ecefdd5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 28 Feb 2019 15:44:18 +0100 Subject: [PATCH 093/276] Weaver: remove unused ULocalConnectionToClientType --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77312 -> 77312 bytes Weaver/Weaver/Weaver.cs | 4 ---- 2 files changed, 4 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 8135bea3cb2686d1dd1954b149241a5ea6194198..657e7274147a3df57a204b3566e09fee64088ce8 100644 GIT binary patch delta 11669 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 diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index 3dc2bf16a..034a64a32 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -61,7 +61,6 @@ class Weaver public static TypeReference MonoBehaviourType; public static TypeReference ScriptableObjectType; public static TypeReference NetworkConnectionType; - public static TypeReference ULocalConnectionToClientType; public static TypeReference MessageBaseType; public static TypeReference SyncListStructType; @@ -1122,9 +1121,6 @@ static void SetupTargetTypes() NetworkConnectionType = NetAssembly.MainModule.GetType("Mirror.NetworkConnection"); NetworkConnectionType = CurrentAssembly.MainModule.ImportReference(NetworkConnectionType); - ULocalConnectionToClientType = NetAssembly.MainModule.GetType("Mirror.ULocalConnectionToClient"); - ULocalConnectionToClientType = CurrentAssembly.MainModule.ImportReference(ULocalConnectionToClientType); - MessageBaseType = NetAssembly.MainModule.GetType("Mirror.MessageBase"); SyncListStructType = NetAssembly.MainModule.GetType("Mirror.SyncListSTRUCT`1"); From 73f822d9b78c319f5d1f9640c7988d740335d4eb Mon Sep 17 00:00:00 2001 From: Lymdun <6077630+Lymdun@users.noreply.github.com> Date: Thu, 28 Feb 2019 17:22:18 +0100 Subject: [PATCH 094/276] Weaver - My kingdom for some tests (#490) * Added custom assembly compiler for easier testing * Added weaver tests * Added controls to silence Weaver logging and collect logs * Update weaver dll * Added new weaver test fixture and tests * Connected WeaveFailed property to weave result status * Removed useless meta files * Removed useless comment * Fix artifacts deletion * Moved to [SetUp] * Removed logs noise --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77312 -> 78848 bytes Assets/Mirror/Tests/WeaverAssembler.cs | 188 ++++ Assets/Mirror/Tests/WeaverAssembler.cs.meta | 11 + Assets/Mirror/Tests/WeaverTest.cs | 831 ++++++++++++++++++ Assets/Mirror/Tests/WeaverTest.cs.meta | 11 + .../WeaverTests~/ClientGuardWrongClass.cs | 26 + .../WeaverTests~/ClientRpcCantBeStatic.cs | 15 + .../WeaverTests~/ClientRpcStartsWithRpc.cs | 15 + .../Tests/WeaverTests~/ClientRpcValid.cs | 15 + .../Tests/WeaverTests~/CommandCantBeStatic.cs | 15 + .../WeaverTests~/CommandStartsWithCmd.cs | 15 + .../Mirror/Tests/WeaverTests~/CommandValid.cs | 15 + .../Tests/WeaverTests~/GuardCmdWrongClass.cs | 44 + .../Mirror/Tests/WeaverTests~/InvalidType.cs | 18 + .../Mirror/Tests/WeaverTests~/JaggedArray.cs | 20 + .../MessageInvalidDeserializeFieldType.cs | 27 + .../MessageInvalidSerializeFieldType.cs | 27 + .../WeaverTests~/MessageMemberGeneric.cs | 19 + .../WeaverTests~/MessageMemberInterface.cs | 19 + .../WeaverTests~/MessageSelfReferencing.cs | 17 + .../Mirror/Tests/WeaverTests~/MessageValid.cs | 34 + .../Tests/WeaverTests~/MonoBehaviourClient.cs | 15 + .../MonoBehaviourClientCallback.cs | 15 + .../WeaverTests~/MonoBehaviourClientRpc.cs | 15 + .../WeaverTests~/MonoBehaviourCommand.cs | 15 + .../Tests/WeaverTests~/MonoBehaviourServer.cs | 15 + .../MonoBehaviourServerCallback.cs | 15 + .../WeaverTests~/MonoBehaviourSyncList.cs | 12 + .../WeaverTests~/MonoBehaviourSyncVar.cs | 13 + .../WeaverTests~/MonoBehaviourTargetRpc.cs | 15 + .../Tests/WeaverTests~/MonoBehaviourValid.cs | 12 + .../NetworkBehaviourAbstractBaseValid.cs | 21 + .../NetworkBehaviourClientRpcCoroutine.cs | 16 + .../NetworkBehaviourClientRpcDuplicateName.cs | 20 + .../NetworkBehaviourClientRpcGenericParam.cs | 15 + .../NetworkBehaviourClientRpcParamAbstract.cs | 19 + ...NetworkBehaviourClientRpcParamComponent.cs | 19 + ...ehaviourClientRpcParamNetworkConnection.cs | 12 + .../NetworkBehaviourClientRpcParamOptional.cs | 14 + .../NetworkBehaviourClientRpcParamOut.cs | 15 + .../NetworkBehaviourClientRpcParamRef.cs | 14 + .../NetworkBehaviourClientRpcVoidReturn.cs | 16 + .../NetworkBehaviourCmdCoroutine.cs | 16 + .../NetworkBehaviourCmdDuplicateName.cs | 20 + .../NetworkBehaviourCmdGenericParam.cs | 15 + .../NetworkBehaviourCmdParamAbstract.cs | 19 + .../NetworkBehaviourCmdParamComponent.cs | 19 + ...tworkBehaviourCmdParamNetworkConnection.cs | 12 + .../NetworkBehaviourCmdParamOptional.cs | 14 + .../NetworkBehaviourCmdParamOut.cs | 15 + .../NetworkBehaviourCmdParamRef.cs | 14 + .../NetworkBehaviourCmdVoidReturn.cs | 16 + .../WeaverTests~/NetworkBehaviourGeneric.cs | 10 + .../NetworkBehaviourTargetRpcCoroutine.cs | 16 + .../NetworkBehaviourTargetRpcDuplicateName.cs | 20 + .../NetworkBehaviourTargetRpcGenericParam.cs | 15 + .../NetworkBehaviourTargetRpcParamAbstract.cs | 19 + ...NetworkBehaviourTargetRpcParamComponent.cs | 19 + ...ehaviourTargetRpcParamNetworkConnection.cs | 12 + ...TargetRpcParamNetworkConnectionNotFirst.cs | 12 + .../NetworkBehaviourTargetRpcParamOptional.cs | 14 + .../NetworkBehaviourTargetRpcParamOut.cs | 15 + .../NetworkBehaviourTargetRpcParamRef.cs | 14 + .../NetworkBehaviourTargetRpcVoidReturn.cs | 16 + .../WeaverTests~/NetworkBehaviourValid.cs | 11 + .../Tests/WeaverTests~/RecursionCount.cs | 24 + .../WeaverTests~/ServerGuardWrongClass.cs | 26 + .../WeaverTests~/SyncEventParamGeneric.cs | 15 + .../WeaverTests~/SyncEventStartsWithEvent.cs | 15 + .../Tests/WeaverTests~/SyncEventValid.cs | 15 + .../SyncListMissingParamlessCtor.cs | 17 + .../SyncListStructGenericGeneric.cs | 27 + .../SyncListStructMemberBasicType.cs | 30 + .../SyncListStructMemberGeneric.cs | 27 + .../SyncListStructMemberInterface.cs | 22 + .../Tests/WeaverTests~/SyncListStructValid.cs | 17 + .../Tests/WeaverTests~/SyncListValid.cs | 10 + .../Tests/WeaverTests~/SyncVarsCantBeArray.cs | 23 + .../SyncVarsDerivedNetworkBehaviour.cs | 31 + .../SyncVarsDerivedScriptableObject.cs | 31 + .../WeaverTests~/SyncVarsDifferentModule.cs | 27 + .../WeaverTests~/SyncVarsGenericParam.cs | 31 + .../Tests/WeaverTests~/SyncVarsInterface.cs | 31 + .../Tests/WeaverTests~/SyncVarsMoreThan63.cs | 88 ++ .../Tests/WeaverTests~/SyncVarsNoHook.cs | 19 + .../WeaverTests~/SyncVarsNoHookParams.cs | 24 + .../Tests/WeaverTests~/SyncVarsStatic.cs | 27 + .../Tests/WeaverTests~/SyncVarsSyncList.cs | 40 + .../WeaverTests~/SyncVarsTooManyHookParams.cs | 24 + .../Tests/WeaverTests~/SyncVarsValid.cs | 87 ++ .../WeaverTests~/SyncVarsWrongHookType.cs | 24 + .../WeaverTests~/TargetRpcCantBeStatic.cs | 15 + .../TargetRpcNetworkConnectionMissing.cs | 15 + .../TargetRpcNetworkConnectionNotFirst.cs | 15 + .../WeaverTests~/TargetRpcStartsWithTarget.cs | 15 + .../Tests/WeaverTests~/TargetRpcValid.cs | 15 + Weaver/Weaver/CompilationFinishedHook.cs | 43 +- Weaver/Weaver/Weaver.cs | 3 +- 98 files changed, 2924 insertions(+), 7 deletions(-) create mode 100644 Assets/Mirror/Tests/WeaverAssembler.cs create mode 100644 Assets/Mirror/Tests/WeaverAssembler.cs.meta create mode 100644 Assets/Mirror/Tests/WeaverTest.cs create mode 100644 Assets/Mirror/Tests/WeaverTest.cs.meta create mode 100644 Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/CommandValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/InvalidType.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MessageValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs create mode 100644 Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 657e7274147a3df57a204b3566e09fee64088ce8..c59a3e8d34bb661c6e9602f684fb3efb2120a372 100644 GIT binary patch delta 23288 zcmb_^cYIV;_V{^kX5REkrer3)Px45i*U+nkCZPv`Bvb>KfeEr8kO`u6fp8T;S(>hj zYh%GhU3KkcmqlGx6h#ErwW6Y5EFkOt&N=VRWD>Ca@e7}vcTc(JoO|xM^}Wz|(%ATk zam(7=WrKe=1@xcOkeh9n+5?nG0E$N3HmvFX39doIB)FOg)e<}=H|2Omj#OpaS%h-g zNG%cTrDCbA__I_fbrh$h+>|9)fqsVKuM8%5>`wq2ZwHWWZz_1I>8zvyzZ4OKdO(fy&I_5RI&0={%hpVhiGOJ!vXb8J3u)weS z5Gj>?MVd*k(QOQ8A|q6ZwUat{byS^98m~d%HHvcy#ep?!pNM1zZI8i++bB9DmKoP0 zPc$W@8I&Rr8xu49q)^kZ4o9)GPDftJfV5i%U}pvW z;WDJ{3kKwn1L^yM$>C}yq-dJ<1yjQ_#T#Ax;`d$LdA}}u2g;_nsm&_JRw;4G1|x<* z6ng$59Torf^iX9hERdIBw2d77Z~@|KE!tKw>`IZw3eUER18H6{(HoX-6o2y;NW;a~ zUe&x4g$?07BHNcLtrb0ey~R0i8=d-6j9MT*_2psSIg`?*o}wtJKJP5n!$wBilpOZi zh>&98Y@tTxiiK*jcsprP+HL4suryH6fblc_q#&x)*Q0;I#@oakf2O$~Rt;cWH~QB} z)xsa>Cao8v0(VN=#b<$R`+DSNHzjlAlaf10heUbuJn0$nX!1aW7m|BQt3;QS!O~4) z8N+80-h9xUs!Gxt(LQasG*~Q8n<2d;PN#LVzeCDiqHe6xhti$-DYkEr>Tjr`?%!hZ zi{CI#Y;yqvO%ssljqXh1i-oOVN0us-R4C%i2yg z-pHz#mWYoFf;ckVVp;aR(jJkQa|6;j$dyRs_j>bg$+;nkMZW;>g z$qjUAY+p*`C6=2_#xe6tN4ajg%CH}ey*!bkb9kWxD@q?G}ofLiSq(<{BE&PzEZj;*&N3vLkmw= zG*x^l-e{L3PL{62meiD{iyPbKO5gmF=$W?ba6OyXu8&;g7JEy5S5SHIjdrTRU+w<6 z8C+T<$~x6aOU3?9+9J51++kKd7zeYKY?knHtgO0;5?y*0A*J=w`k+==z;uei<;$oM1ZPPv2gj=lWhlRmgRD4C@5lGh>-eRp2UAsy1 z#oxQ$kJHlPZi^9q(Jc!%4bJY3NZ-`mFRd1T=uWLY)qR}t7Ha9vZs}r7k15h5@oS~QxVhLRD*CjIA}0|^7kBl^vg%xyPyD^lpXIhbv8r!-jM<^S z3&qR*vc#Z%Zk+ii^jnB)@GJeA+(UdgBDHw0w(tr!xBq5on7G)#y9oAki-7}rNGrsO z0rL=kIv^W0*#`C$dj`71*ny;J*1(>gmDrT#RjIgb!*cPbfrF%J;`@PR#dFaBMmjou zCWmRg$7NbuO(@bDA+2GFm@+6A4O9$HQ(LVsZNd$xM$-{qjYZyF1R7?F=LQu>Tg9h? z=4chsqw5CW%mI^zWIOhus8yS4{w%78_(cC9US}N9ktAw{H7&>!=#WLi32$si7!@u|UPI(4067 z0Yzkzc=oEocqg{`$q8W@>cLqlZRoJz8v)i7U8R!4UojyitKUXk%Oz5hmy8<#pV&3D zB;~qfoE?s6uJ6FI9+G#HS?hO06Z_$wm9tSPsj!CHlVtO5^2U@_w)ELE+Kklj_7qP4 z%JL(>Fx@H7p&m6+e3e)re&5+54G?z>8(}s<9!54(JlHAa|HDBb*m?pzPBwW0jXwrF ztN85y#6~t?OO2tabQbXG8}aZZtf9|B$HW;|5^Xq!np+(Js40Of9RRLPjm^V!03fu* z0U$BKC+3ZHi%p#azi<%f!jtw!bdC-Kxj1PzPubwY863Rrjc^+-nYiI`hu5ZxWh3&t zuO(x=8ENjjZAiP)JQp2~sp02RW3&2CzbeeLx~!&&o+ESfe_eNH%a{kb9k}gJIm&21#PMhR;(u-S%)bXNmRBqZH6o{jup0xHR_zsgaM^qSd#Hmq< zxRd{CREhl^l+|ZP8(@PdG+jCGW@(<3~@G z6Eel2(T~X2XNuVso1`4^ZAAy^Q&Bjk#P(^XuG1h^JHu$=)AxAY>K)1j(B5? zrdgFvh{tomC4a~xG8Mia^E@~*6+~CKY3fISx#SPe!W$U>c-PO-vLJID% zanTSL$9IxzvqifJmA3r&iiP6w2_fN|VAv}R;hnY-s z=w9?J^lve8(r~Fj?3mP3`H%?z5${YYk&X*2fci0(>}KAG8a4Yq181)}^a)AQ?!a*>4JAJnBPaLB{S5IH0qjP( zo{M-a#p35gP0@(^d8!X4%a3-zi&1*5=Y53!Q^jHuB5A0HJuI6 zfid)dB5g{k^hdF9s!uvErcKGRd`p5#!&TzuDcy1WJUwNAR3xOSK21ZhrXej}L+RA~ zh?GlhBbA)tJotS@a%dN6bA)>%J4VBJ*-Fyn(0P)^lbhnS(#?%*Ri`3iFHTZIx)Vdt zOp&Zs6WLrE2sizV6^D3zY7m|MZt8%pIJLNC)qqt>^*fjF=VX02S)(}#H@COuk+)=D z>yG>LMBTIk`Jp_qZCWvp^I_8+(hPBCT04a9s@~EVadlOV`FpH^^~B+-9?5!{bfDYX z9Y8SH@Pn{a=ZLv86GWuSW^y3qqPVI$-}58Mp!t~KC2_9WXVJZwDr#n=i%By*$v>e; zl-NT0eN?N?aI@;CW?H37qPi+8DcFEx)n*NikCXjTOsgsQO>ubaig8GL2+15To07c^ zbE*M5$ykr0#ugOqulA?)K$NHO=3BrZUlN9=iIV9>xHCR8Em>}uEf!8+A&nJZP46Lo zKhy1z(bE)F!oF!YmeC!pdqhoU5BF?hJ~Vwbxrr7|&u;!wGSwc6@=YKyzHV%yFf) zpM+!4;U7-W}zFS$gx=S@mdP=ATfWDS|IpkEJLM8mvXJ98{1w=rZEf1Fp) zrUZ?L%MfHs;DLs@l#^Dhv;u=@4AY8{y;{2#yf`m)lnpr{I|3zyMs1-b2pW13po+XL z;W}y`>}=I>C28c?R85bVKED)i8n?_(NphlSiO0ygLKZ}f3Oe}o{FFY;iowK5H~COeRu+riTDIc zX~QW>NkooL5uNIKMxt~#(q%0SbyUfNc%bs1Auq{Ch2BAqRh!D9BuEcms0__l zanhkay;SQxFaZ|jlycT^!?IOR~H#xMOeCN3~YW&w6Eb_KD!)qAb z4w!ca^?DlDY2lfeL)vX2-ZXs?>LPwxU>i>=6|+LwVKZyfDUnPieTa&eBDV0~n(KXo zMc$T$aQ4z-NMf8{>#)=l@^uPde=)_Q zQ%*)}l}JSg|GThIk~)cCeXpz}R21?fa1#CvF4gVLu_7EE?;3b?S@`swv39 zR7{P^+lvDpiRB%ZkPW+_#4KC1dJ@+As=gqRWVOu-%@3h85nS}A_UF(MK7qZ8b?D5W zt`Z@I4Jc|l*4c=sZ)u;3W^q?0%-5I8WvUo+egDW@6b)sdMB{u^NH52Ru~h8SZ}OUAw!1K+d6JMvtN zfny_{@nwvG6K6aly(kiOacN7=(4r{g24Y+ti%(sQ(WND0dyLVwCF8jmV_ZwdH^_)+ zoq#)@cq6&RQR@?0GA6_r6I(LY#~71ZGM+z_rzwoncNdn=-14&{pXeiw*fL*4Z|Ff=wrUV#%D-}WiWGAeSrf~7eHwD(d% zd8kMENx1{d_4!z)J#BF)*iyTh_hB@>7~vr^06OPZF?W>k2iOXAA(k3x_ZGg$XoT=7 zg!@aPY@AVz;f^tM8lj_OXceJ#F|?Y{^)a-D(7R*kbV8qrp)&}5Cx*@hz)OYiV)!g# zCzeM2m`!L&44p&hpcsnBQ)75q46P+}aSX*-+Zf&&LvaGZ9YGBJ9ic}EZNmZSN4TwR z)G%)MT4WM3aHPGvG&jO4I&Badab}N~8No8x6^%WR(Lf-Sh%-iG8KDGP?Jyd95`)vc zoO)+5S!d0N#xpj?7{eff93C>Qs?aLYfIY1nc`R0i&P(i!X8i~<8mJT0{?rCc;mf$x z2O4)MahsLCjddfMhd9&4b1ufrjcUnAZx?M7j{SH`ZDWklEg55CjEa`37Bhph6_?(4 zUEC&070qipJj6{k8?l}?Jq)611X_2*;3$pH^$j$=@fa#-9uc&fc zv#7##8~c*d<{3|J&nfiXvXZQhT%=5CM>5T;#!OA7|8j5E_LvNARpa$&l|}vXlE^<} zGVMu*GD2$rp_&uSXm-NWAsP$Z{lwQGRI9;^<{D#SHE>rD@5ho3u}QxZavF-G3d8qd z6%|9OG~$98-@L!YbPa5&>$?~OlhW8gKgh%|xflDG!yl5s?ugth8% zM4ID54ji1ehBzv%ikFGf+IShU_DaNQ+|mzPwP`+4?H8M=qWb0(x2LNfOWpN4u3OZK z8e-~zR@4QoaY8dyl&(&3*EQoDwlGU=Y^I6`O6_XKS*o5b{HYc7dZs?tin^Gor&>{$ zF!fw3YG0BAshke1xb@;8pyoWHbcUzWdd#7J`j z$5FKeru>Z~Hs@~~u{nR^h|T#MN2JZ^<;}!dv4J@8?W8l><&r2!jCjH8eol}W@q%=Q zyQ0QAS_txz zuadb=ui>Tb9QOoY>Xg`IwUc;%ZRXGEzztSZ$I*3te0ZpF&f;SwF&quQ%~NxOuS; zwHL?N=M-E{M!Aq54fwt0_m-n-)Q~JPHl+3MfSfe`q6t5~osW)Se^~VoF_ObKFd+r+ zygH)XMm!ty_Ze%69KG~ex*@alZX~#E>O<57JQZpCP2PTlF84*eup#$Kp8v2RE7A$g zT#pmGRMN+7t?x{3cR?VBKSB#?S1fw%ZoAqI3#Zb(j_^4$YL7ClUe_9l&e z5ZL$yiV_~u14qp`1fjl2Ez-V~SdJY|b!5LBnvA+qD?=_ar)V)5j%D>Ef|9iG1gxr) zaY4}Dlh*emRZ4gx^609hx|KB3o2C1cba)pEYj5BAU8@hThGj_59Wkf_$Y)I7f$Sw+ z%D;xZ-sEKHEiq?PLFv<|Ap9J;!yi2Oeo}DTuGA003aSxrW>gb_s}K#p(nCD4sVEYw zA%}({x#3P6YyA1y9a#8D*-h2Ukr8Ypj;gd)f~}i}Z7$N@8Pk=m47jNVJnFdl>d9s- zHP;VA4T-X`9(CYLQkkP4+KI??vl_t%m(8YTx*2<(x`-Kul41k*wWHW&;jajs_<0Rg zw}eik@zT#u*(@c9aGxtizTHw}wUIOr7cXwkiu5ISMxa8xpdE>i>v1@BU>lN+$z*fIOiMtucJsACY&-I@VvFz)@Zq3T#9 z+5Gn6PKx;syn7xeMQ|)@p9*AHLgSH(nL**LpMXF$M?1BM-;5}mYCFEHH6k&5q&X$Y zT|a-bj6(zs%5;&}(qN8ea3V^E=~b9!(`<>L59nn~{Rtj!MQ!VE#bz`jFcuBbztxLf z=Og!a;%+1E4LY~^^_9&KnnVu$Bo+CKh8aSYh{$|J$wnz67N|rAaiw-gv`V~ zZW%1d^7#U{;6@Ms_~G>d_)xDw&OTpg3O;aNu!o1DkoG-`{CXOG{mKFcMV*QQi-@pd z2RYVNUPezt=x+2CUEW15)7UA>)Lcf|Uc4kz8mZsND=YknUZG8V*>jSz*ByQdZ5gze z|6fvy=tErz7xdI)SemMY2gDGk5}p)A@NI=U4Slj3c)&PROi}z;K~pUi8N$m^G7_pn zk+RijINGsWksN1}hp5+Rwps%EXX%E01{JeUaT_sNZoxu*HR`}JX0%pTaeh=v0)7<_ z%S!m3mI{jkOxDbK62r%v*_7Bt;`yz?-pljw8=eM$Pw;t3#q!ui;o7=6xM>6Ua0G&0 zNE<&EKExrFh-ltbk%s8LKzzrvHT;Rx3X;TSBV@NW`7yE_oq<#O*XUCOto%C zZ8KngGQe(K=WVXz{)hr5uJ&*mDg7SEd^(#Cv)66etw~-|SCd0BqnuRE;ucH!$Ne72 zONcP)KWy`)W%?tKuf7!U!#w*- z$hd$?75Lakq9zB4ZgrEoLmb8fPAYFhCtR?$kmBLbCTO)C_uJs2{bY&@!tCM>Zqi?n z?t&2*4;MVgwJI2%WSGFVB4v&TWd;6`u^;<&l}hCoQwa7&^9rmDkP{YeO`%NX*RY%l zPo;hyR!m(9R^sQIH|Fk53o_P-SepzDGXY^99ka0H z@pO%6$J&YT17k8KBx!k-G3++PB8f1MD|#Ww%my7(8SATKZ5aEQD|(@rvF91{L3=ho zmL-#*6Z0rhu>Qz!t^}C zHsNGRgS5=AVXMKAgRM6Jx_m2$IBXk!>S;g|I7uOIJL~`h>YRmha}djS#!21*zh^9> zso4p8up+=P55T9$x(g~As|r81lKU1FL@-BuCGOV*W>=PP)aC~f=5NYg>W-1!H6eQX!8b@N;4-cEYc0c?Fp#t}2 zry<)Vjqs#Ia4DDXV0d=|Q3|-6;HL6_T?9X1N?Y4F zqHx*A@D$5W_BoI)Gi4r^|B^wH`y>4L16O(u%Bqi8i9Vd^GpuCHm`Ric z62UbL!!ngmdkMOH1i$C9FP+LgS>_vt>zO{D%MLk0?2%l#is7s5@9)@fFNSRy&SCQ# z*sTh7cOugdG2G8^8rPl6a5%$rPIC7vhW}uAgrS+`71!tpva?wLUvb}!sXdmmaweAS2$pDV4OOa>2*l2f-sj?*hgpMkjK#<3aqqC z@PdvtSytK&FeOLhZE>%&o8VR*TVz^?IwO``jrn^1X1f`NGS&pHm{DxR6NO%K6*r?p+ z?U~SB$2O-uZ_k36I+hZA)t(JgI%|@1Ovmi`uvW(=nl{^m@OEcBY5}Z-Z_r=?r1#J; ztLKEh01oMxD_MdfNW}9J8C-4r&|U-^8CwZkO`q9|!7)Iq_Z{w~N}+MECi#DP-`Gpx zG|lT+@9Dh%+B-n@RT{Q4+3e^D{f6SqPRxJiB|5r5Iv$G2naA<_gdSk5&_p+2*m}T| zI`)PCHhWJPH&)~IH}1FhfzIPJ?36vt(H~%fhUEwH9Rp#@L=CG6wsQ=DM=CX}FulK{ z9M0n*9_?>~e+1XrheP*kH0JR1a>oeRqGNwa9^)7Vd+;WNB#i}A9Tl*oO2bkM<~YVd zzv&wGdCDS3B|M3TMUpJfyV)@n23@ORJFyWpkcg*y;$6Z<%z)8&N=EzJ;2LbjY&bt( zV^Vt6!gjpIrPOmJ?{>_E*B5A5K4SBsbG;^c%(qFYgW)>%Q2Hh%1k-iw_5AxB3*dIf znxJpeCS?gcrekBXpK~k)SVUSPO|TJ}H$XO{O>nKcNm&LR7^Ae5U^(<+Y#Zz~A8{;) znRqQqtx$tU9Qdk#v4;KE_m<;EI32_O?N|-xbZkq;Imdcf^gB(m&hWis11wm=SOji1 znVg&9Lk)$q>Ji6Qn1b$Uqe6n);7P`|Sr!M~&fDO5#+ocQ2mOfsUFV%COm|`)>AY_X za}j$-=Z$f+ao!GRblwa{JH$TKc@e9c?%WRNbY_~Gi`Wl3^I2571OBJ;-aw^0zbwJ7IyTr;hL~T+2IO~j-U%5xHYvXhv7m;*O9g$MJE2s^eu(%6B05P&&lZeu z?gn}vOaX42SK-_Px9Zq`3=^IEVC^!Ecg!%&c^912vAxLq13a@_<849SJ>XkGSQ9*D znB}|=sv9-TV4UT=9};iUu-B6#=Nu1!V~vKcNj~Rz5Kgbtu&2y*&WGSuy1GF%b@}a_ zhoBnIb%gy-X>dLY_vzRf#2$xpI`(n$dgoKHWuqo}U*2}-b8r$*i&XD^?{?>l@Ccq4 z2^(hF7jeD<8}Y(}&?%OE&LeOwZQc;uY<|f3Iso3M5Vke{apy7Eu4AjP58s63TQy#0 zPG9G7Xrp6O6OY-CL$!{%koOiW-=<0W41~R|V{X@T&d6KP9`6*$#DBB;GC9 zJP&gX|ay|(_ZGnZ_#z^pnb55E<_|)V4*9JwfR~Z+b=^sk|gMs zNpN35R7ey3Whg@%GZ}wDj@HsBQ8TT%5==`Yi+dbY>sddx-v}T2sB$Yt3%bUQ%4kZd zmJz&#QNvM3d$WP#>{eGJ$?QgBxF=*6FQ$hRp^0YLUuHg*n_@6t#QH+5F_G4LsKXToE z$dzChmus0$=`6!?lr%s&>eLdvHHGuPS;z?QbF#FqY=jBy=+|~q)E1L2UXc-UT|Z}_ zrKAM^@RDQ<(#=K;X;s$3H3j?00A_BVi`zj^hMNMUNOOqVCj-6DX-P?qQDk@!?@KhU z4By1ck!Xd{7$}*O(ZFNc2%Ry2CcrRQ1`6c@0nyHpa(-~o7 zGLL=(yp5w1|4tOsswL%e6$jas-%6LDSyC%&&5$7S756uVIvNSBd^t?yAa})NG;kW? z7~yt|K&XJ0bd;(x#LE!f#F7e-qy$~qBGF~o6=BjNZemdO%HY7BzTAKWb({g0=Suw8 z(aPE=NaH5eVybEhE3wlO+=63D0*$^aiSxe{y_VnuoN#2&s%b(5Ww?lL8JH`G_P z=uF^7Xo3_j=ODD2|3J zRv9vIi?Yl^@Sr0D-P)X&!8#MA3Rr2$fO7dO@Js7J_M{=49Wm!gM^mCG4sjnM|n z?E_l5GnV}Yekq-emCJc3(*!GXW=n&(eIwZQz2Hp9ff4MqTRt3IA+2PYy>LEbhh&v| zAh#Ue^-XnNpHYMSbmzDhkq4}<(Kja8Vda=f0x=Nf&rwUP2t3u$#6cy zMGVUslGgzl-SSekM}nF1Iz8-Fxdn26`T6W(`2AwoI)Bvb{CAwn&Cfn9ll4e!7KX*VvED{+`r zz|dfs@d&&7FP3?gQ*04CL7h@z{1?~S$TBBc#w~TUFEH+hQRW_oCg_pS6Hc;Br5q?+ zY{bzNv28F`LYo8{Z1?B<*;p=5z;Ly}N#j*x8_5`a&G;c3XhPr58fUVj9gzE-v4iwK zGnhI^P79bSV0pG;I?IyhS!O24_?J{o&?#qt$tqukLw5(KIgO5?rYXA9__q>Qn`XjS zIpa*1(CfJ-qqM)E(Nw~0qeOE+x$NLvJsjL&D%TyNod1wRT?r53n5J3bAEt8o8Sa|* zF!da`8UG*bmG=bSGo_%rADDd7iHz?}>8QUB_RFOC0C6Lx19At|qO62c90faIX9L5r^&_VjzY&Vv$L+7~{pJdn>RpVrgZCax|E7v+VDV-%z_@be+L>bdrqHgWQ zlwM4!gkId0D*_qNi@A|BF3{pK$iR&y;(aa+F*477r?6B>6!&DV57R zINN(OcQ;GE!7@Ej=1F+g`>nDcCYygkIK*x+SD@22^L`u!N#>0l+WGLmpil4!w8r2;H1IR-|UuONV*#P`-|+~nFnD=r@;u0&)97Rv?s?nvOEv{zo|*`%aM6?o|?8SeAlZdoX8 z@$5vnyYPU;YIvaVF@#6m1#m&`?0nkdmj7UR-r_cpq7;S~zDQ<#z|{)=JK;Ma<3NT6?7%QX?I$2e@T>rJB^f)=$|x$#4OkkPKVXZ?`Px z3LOl$8%J9^7-nSGS}#ablh76E`>X}lo0xk+8tg2<|<&56gGM z09!WLp~h8+FBfZEZMobQyf7QfX%Iq~2b)~|m_CqUHN!@RtK{KW>n^z`!si+On_-@T zD3O8u$T1SqpJ5Hdl??YXe3s!EhNmqg308vH4Er&xX4uGZ55s2|o@NL(mS@?#Kox?53 z5_yIEft+CIZ5U~|&ald`&hUZZydlw;XPju)ZyOU$$);-4V$*TcIg_M}RhB4?%1))x zyvF>4IcVu*dClU9SO;6Lw;CI zQ(xbqOZS66K3Zs;IliuT(b5s2IfLtJrq7=>6Y6Izs%lM}gS3gWY8KB5$4j-O#AJrl z)JFBN1mYs~iR%+uDHZQM5wJw{5#rV=_L)~zHK1n3Jp3Z);MylmQ7s@gqVrYUU3N)z!_Kv8XmwH!dVLyztf)$Ok9B zxYXd(6i=)P*P$)(+A9HzrfgRD;Hg)hF=uG}!QpTy3=|+P#6gXZ+!*DN;|_>NYDnzB^62LrV3U%^L0*?@Ds_kUW*1N)yN~ zSNh=|8PWxdXFh&F8vR*KKm;N+^d^D?CQJ~emxzEWWv!^FEaIxGvWN`}7WkcW-kXxZSN;C+8$LO6Prc`!dv1MiX#HGi zJ)~^9vf%0OE}jbd=Li(!+oUc4MG}Cj5!cqV-8;eAqegYb^|5v(%tdHYnI&F(CPG(k}5!a%JEM z)*`P=qL5O$+n(~*Y6}4=@!YLJ@+T4s1{?=!+Bh)>hYxYSQt zEzZptDy59B@6+`0kt#yjM(gWH z_q0qyU&SV~$Ek)Y(ATukB5L?Fu_L=o+Pmk~>_L+JZ>wjhca=u(2MpeM?0rIvkJm?M0J z1IV@W3!jiSihN&Z>F;8UuebB>wrE@uCWzdhy^B1eCbOEsStndaq55Ns2PMouD`co=TYAVM|0&ZNLL!6K%VxeNa|6duu5 zHi#y2aipxU+Zjz8<3tw&MU;0mjf6*bf+i(Y6HUEvgXkITEe#Tjf*DeOu`ZZX_s3N> zqm3Q@Y*T0ycXdwqS|;S0cy{2~YllD25`Lr;N6Jus5iUI~71?4-c|pmINm`z0GhK%% z)~qXMhW96-Zi+Zjz8>3_BW|oHD0%(=q{2*t9{i@M zv^hwk-A2(-02 zGbxSN%M{5hh9~t@c@|rboVM}BPLeE)ZRL_b&lc{kXmc!Xd`~Bsx)y4fx%i*Jc zD6B1qsk|I=b@AnJvMB1cu;K`s@LYpSxfHh4H*-AAYUnNuPM@sgh}5iWQLo>z`i|ve=NrnPKwyow}*7E_^5A<{9^K+;(kFX z>srhrUQjn;;gpJKbV0pVEUrqI-%l1-R$VPk6e;~1rAcCS{~@@)d!c`KsZ^ZozslUh z4NWd3JX>5^T@giYM%6bH&qxT;hYl zmC{O)IwT(r_Zreq+&$Qt+y~c2XussO4e6I0LB03_TUODsLL44aBNd3kn!aTfSZ%va z2yJtA_;DXbD<^G2G(uL(GI3>10oHcu(5yg*wXq~T7|m#7IXnW3yroKOnJtdj6k%Vd z4!uBA#5QjmdId%^Z&-z69tv8xSHmk(gm<`GEE?ucq`t0EZy%PFNG(cb+1H0T6RD## z>Z$hB%^Ed$&a%1}Q=_ARY;4~#sR6k1-j}9N0(KQ|CmHlWq z=nqfBvL27y(y5K3U&a2kXj>SZLaZ$lu_psErfaa?66!))@eTE`j1G0`8|r9tGQ(5F zlG-D`H|wrN6Y*L1fe~raK=I;;I)efW|G&(>8H3x;y;Of%hocG3y*DB`KKByVe(tSG zoOh*Jq9rMqL6a>wF?`_eqQDkB-kN`A4$a1Z>hK;7pM>s=)Wh6*Oh?6o1L6Zhu1fFbhYh1|>Wh9SY=QVw7@=4X_oz zan5(iAseR2Qd}z~s~UO}%b~Xrl)JPUKioG96=}~>8mL7WLVaD%6FNZBbcC_V;j2(i zn}KXjPL^{YQES$x~pUtZ;cMx?Aft>apHMF4ItfPptC}@ zA@nv@7c9`7L!`+NSc86ryJd@2V`fP2h(lwh$p6R|mG#r)K{?`v`UmB^a>R)9HcI*8 zz4N+CS;96JXL!+PY!M&Nhq&KGi=Oz=7|+WG#Uo?MRO+~Z^scBLH$m=~E9xz2CNm98 zH23hhb%ht@;z5zy8hQ^clumB(;NT12kw6yH$5#z{ADQKz@Eb%A+ww4)3y{+M0fH5! zkkv&3j6Ha{D-I#iT4qy2|H49`AGS*k9Tp#q50vOuI-$NCF6>}supIah70OL=;D`uL zNVgV{wes}v&^$3}LO6E;%5&yohx4Ie3llOFp1sB43EkzJ@`QV0gS9YGu~^(PF(efV z$E5YS_x-+!hbPrYK5=rA-@O?RcYL-A;zpF#_RvS7Yr{y%FD`B9r~aD=AB(3Og3nxn#n!zB4jzjcfax)k4+>6C8h?=1l#fB;Q(ou2$l&j|DH)Rv)Q!L&Zo39)0^;Bw4CmsUkqyb7+l>7f#R2(5t~yj#4TIW}*u=Q+ZnWd9S!-dKK3D{`A4UFaRz&U_f5E ze$^AsDL{)OsR_N2j9bnZk)Sn7>w-fC;?~(k@{t0uVn&(L6U~dfIaxTbzc8aS!tZDF zm&SiGDzaLIr(D1+&)q6H#4)P9}>d#!Q2AjnAIuY z-;x-igkZ>$)(OG$3n;c?+WBtjH}UHnZ_*DP;vv4Al_rkPbyLl5K(%(!I|btF^8?

    a#VPS*77Ipc$^5r@S(`7kbzGOsW?YwYFU)c5jVr(E6T>gO$ZWt^l^I*!6)#*k zzNpHtIjx@IwA$Y3(H$JVd10LckH9Xce)Cx+zF#;gRYBXq6r&|%#DaeRtcux<1vciG zjd+AMifbE-N~UAQ;YI}c5+p;*e9We16DnPb!BfJtF66J(ZWj+XW{xr=CuBjOUH^qH z!DMKuB0!3~*I=DMHTH7AdNyg~SOc0JF>FzJZG7pG^tm?;O&OCRWJC2}vcmR5Dk69d zK<&ZV$KAyMeQ}J~u;u#sWV3j3QHJk#byT4H>U2N*3 zvnYvj;Y>YkdlQwRX)8g^ls3s`lC|p+@kXeyGhL$av5U9Bm3L!P<R{xNjU1zA30s>?qY)1(2XwCOM#1M;Ae%mVy@6lUrItpc+hK}Nr|@+aQ<8Oxvsl*(N~L=~3KvUw_ikBQmFGr7p%eu6vQEizAQejv*+P3G z6;Y3vyR@o%cXTk2h8#@I^r*b8EG=1LdAm7e#lQzmxKm+03H9DuT9ibx+V+FykWhxO zT=YkA%iPW1DU9^0W(qRNvo#)S5auVajf$k69` zoF4$abcOK(vMG>_X<%*6LFkVkZF57pNC@R2u*IoNR866L@!Tb8gL|Th=1mwHt14fL z-+U>jsw=6;?)%HVMYMxeLteC_o>JSe++2WV+Ub^s3PtAf%*Y56Krb2?O~?(Wl%Y%5 zvuZ2NzTsdDolNNP7&?W}xiNGqp=)9&&Z`T5+`}1J3BsZ($3f zWko@RcM!DUXssk|&gfd|ox7=eW?&8_GMa_TVARqZfyOvh zj)RY$FDijSr1CVXX?-`C)CLz4o1+)+h#^rLALj9n zdG)H4ESk3X;;AUXn%bGHi3eAuruHYLcs)Hd&iku^^>ew1BeAtJ$;20ctuaP|wRF8`0u^tcq!15+pX_?igbL znIfQ>dbJDYjh37PiNkta$q%T~!m+?8s;&Kyt7;afb)S z7$e#1UC_DOk%by)s(CG&?k#F)`wAnRzDF&l9O8Ix;HiZ=p5q4C0)#5oyvoLy}gxj>Jd{ zEp{ELEwtpFL8R4MBgSX$>pC=%Hl`hAc6E?hm>?60rs}>9LbPA)Xy{M}nMG%jInhCe zcCj7pn0v|GpL2$x>JBor>FrqAm<}?yOG=Q@7p=J+glI3^(a_Qk zGPITGD6^@9%(An{>`0V};5eZ@@$)f^qGV##W^hZkHLw!Gl#qh?B+MT0ewHH}zFtVLr~XNkHs84)JZ zpiGpH4?tXAwE>to{t}3^kZa*aW0oRUJ2Cr08Ajp$6o?5KK?YK zINh3|MTZ7qVv{b6M~B8(P>(vo1!6>D8DFfibhrQ!C533nE*=$(aX3E-ATooVG;i+NY+8aCRvaUO?~#cNj; z{cpOs_lfFyuC7k$iw8S=?rL-@fyyj%_Aea(g-$NB5cZ2tAj-S`Xn(QD@|3@w+|vo-MwJN|CqdFCL_agG|UkIea#0-GDO&zmL$D$k8j6 z=QiZZ6MBn}He{Twe)}~AXCn{1CNI(zO{c7V3^b4&Q+013j?lwz+J9 zo>(}X?Y4(^AlYSe*+adM5_pBe)|+_1ad4SkmQWw!#CAQQGsA>@ZhBg&OB}wYdVD|Z z8xOzq+Ki_tHGn5K75k}@?BHafI*nQx&oXKN$E7NV4q?UCvUKgitU+-qPNOlf5?SSn z$9A|oJ*8c;F;za&TU@zucmy-v73fRV_9L5B2(0|1LJj|f?Fp-WaPQb3sik!PtN`wU zfplb#9KyNVn%NL?QiZA(72LmA1MedUW`)hDs*@KG`51!cYBHsUtC2_74l_GQGd(Un zfTY7?P*{6>%{EeSVUeMe?ua2UkbK6Z9mHO`yQqBqT18HV-WGqowy3-b4TP7HJN(u_ z$|)5$+iLS*R0t?|%MmaV7>a0kMIRw=DjgWpkVC_e+#+yf@mp4#v2aS=O6unz!{17r zfO>|J#!cxFoPAt;X=7E&P0hnmJV{oX(E>hPlsVKP)W+BKA_%pjF@cQzOx?i@L$J)i zJ!>y>n)#8t!(?HOIdmA~T7LAf)f`mK+PG2i9uzh4&L_}HrfY?xEiY0{?u;P192$vV z7vTyg1s!U09o0gqU4}2FG6$DADQHvUNw4BN1J`lWx1qu2b5S@j3IS#XKbF8$06gZo z0;7>=_1Ma~tELNE;RvO2X+`tZ*nrjz*p|{^`a_i1wKH-z z5*L9|x+40B#Tqq=?`e)Be@;oIp3)J9(0D{-zDnat>8jlf4d~!N%Dn&{*-&EwId%Z6 zj^w4Jq+Nq+J^o_g^}+ZRn24+$DWOUDg=5YZ{u!mTmo4Piv+y|v3mDWu0}3o9!liBG zSTA`ceH%hIp|9xj7IK;LvNTt78ENxL`9fgN0 zjmuJf7^&fd$k6WKGu7~k7~)XF*1pj|NTv7|Hr_fKI6>_JJO!!_i)LCXHH0frGBgDx z${WKqSmui6>N5b11Gi$bnA7y1PZ)L>0_)I%OTpBj4sV`{0L#;&XWd@Pfq`;JyN%%8USbxG&PikA+Y00G))i z!gI#g*5LOE#8-)oEuBj+a&Qa&;lmz4!~C7)Jia)CH$lvLz$(Jw8aFj}<<1 zU7D+cCz;>~hR?gQbKI~mmu&p%>F!nGXBWYHTq}!JSnUgVoNzjAYpN3#n+Z-zC+L*M z8G6H-Y^(up^$_J1mYJ5d4$Dt)Ig{nzb#09x>47w2I8j-J?oy>eg;xvR(tvQbVs?aN$%$f43JkL($@of68f~~2^@Nai^juZZdWhcx= zqgZhUIk6%=GYuo^3V2jFj?q$KR|@G?V_hCt>Uu8Q6M^T8)_Oc3tZR|c*+LcEu0kiAP+UYYdoq{c0MxQVvhC({C#18BH*k}_LAn#xU_6{KpS6C> zV+xmtVgpo&oM+o5tI(W18vC`Nn95hA6P$?Et1#R{PP~*(ttrB%Ois8KTb2ozW}J|7 zVPVGGC^;`>ms|jc+`_J6V=~h+;bb~-KTCgGcEWwwRx7-K4td}{`&zWQK8Y-su>IR3 z`4pmeGYB4L*cZd)f%A)}q*7YmEEAOQ-)ek$JK&v_>1V7JvDdOR%m{?-)iEQ6G3 z3f-CaxSMRI;&TTHt9N<`OM^blJ6xb)xTHZ+1p4|k6t_qyIzN*zFPy`enMF511kC{a zoI<<}uoetnj0GM}3A-u*+X&a-uup<(QQ8li@Sg!~`ZEb@gUtz&oAJRqS&3+7u7m4& zzM!9reF0nGMyPK+<$u}gg_phi5w;W({59tQLVxaIgrDaS{EFeHh5y0wU0lAH;Rc3J zGMvw_hT&L-J59%}6Izq(FIy)>T905g^{pTHzD0Np%O3bt{T^YK>3gdR=jQ!}uq(qc zxh9(mCkqL7&PhU8$#Ay!Fv@ITSX+1;%O86)Y%bVp^dfxC=tnr-Sc>p#E|2A%H=H#pL7x>mEpgbGS|`zDL-*J$nXc| z_HiFaJDE(WD$aixtG;K63MS+xJ0J% z)5!#nF?^fhflQ+GWtndn&S&~KF56hEj^T7ULZTnBzt?ib;}{NOIFzej%Wkb>heAx> z&+s{h%UE{}!#NDiOgAz7)K0E{!Z431xeWWTWN&A;2(rIqDy3%O7A$m|c9AW#(}C5-y)+crVLb$MTPJc}y`iIEx$8h_R1&U=nx1Q%t&z;ZQ3H z6)=3jOyyM!Ut_qCVJXA&SpGPd&q*aoFT<`3LkN4p4RT+k4~1$j567~EWfe@A|K13E zS5(K0G00d9zWS;OY3SKE@IM;F4@reBl2#g+=cY8W~rfd>wC z)g<3fxe1#(w;N-){vnzPUuY7ns{Rvxk8 z8(KPcR9Ry4!?TR7h8wWLB2X$xay5LG^fy}(+^l1-;)%T!exlhIn-sZ1dC^u1OL6~C zqJHCkTN#`fq+ySuXgSOuO4wG|R&c;p4lmI>jo93R5An*vO!G8iQ`5e%bptx#5_U*{UgUe~djz&MrEVS3cOLUMytl78FHWKVpG|ZM&X0L;}I<_*c zhkX<*#hU?=yw?{QV6TTdylo`(SzoPv9Hh+Fu=~;{*c)II9;b-+mG=VsG)TvD0bvhg zD`vqbI`$+sVh%K3sPQIaBj!O;qlQr;E`Wy_qeNV7zYvb$VV|<=6VK|1y%ENQHBsSi zQWwJoIyNo~PrT5gW6KJ!vNypV#@gUCN?rm7bnImAPWy7m<}Gp?)TK13E1*ipOvO#= zN;sD>N=peZ0VXlF72Z`Jut!!w>r$=yR|^q^{EIZ~Dfi>{HSlW;d%?aI?08#8t?!ln zru{0|q+^Q=@7b@04Hs*?bmM1sTz>IMA4y(a{D6HkT*8=E{T4W=@yyx2@9bM5@FAmZ z<}%+;_AT(4&TK6@W#04MFieoGMpz|)Y*&NryZ#r+K&4rk8Iag@D8})7g3y7j$IVcyV|(3x#FpyVW`Bj_Hn>s84tTpeZifeT>=Q$!V+ZVvtYE+4O~XLPU*IPl zyB(Q#z@e2I?^@*D30>&+29xGV!#R$-VHI9G5GE_r;4> z<1Ki&4R?0Lyb1g8ZRjC1=Ds|y;~f~PW0N{PVtWUVb{g+t z1jUZL@0fQP{$CfT9p8iTukk8=XlLaIa53*PJZYbH#CQ>&lYWFQI`d92I)8*3#%RKL z)btbFqhWBQXrJ*UJjR&Til5t6@iRQHTe%qQ&Y$5Q36j6Gll%n^>XMOO;CB8(PUBI5 zDx4_)reiNkvTdL7bPPLc&35uR1SMaT{$VY4(hY+Icbe!&wH1Z&@;ykA;9qzHAi;2d zl&(p3fDslY6H!AmRC48cJohD163dBP33BmtBg0-BX{}DhTO-)%Cf(noYg~eu|1xM* zl9~b!o#F3q86;yz7Y)!8Z(J343@ej#7oSKct_7WF?;=$nwN{0f4(++SojN5FtDah{ zK#ZZ&+pBeqN@65re1Z|LhRW@^sXn5-l|wRaj#(4FFfiZ~65Z%CZ1>VF8jBqB`j`v3zH>!0Sx2y)(fElAifY?z6bwpyheG58f zMpW|ZXfV-5t$dK1q`}+lLT?1qnlPhU?aT*M)&@le^q4pIALDCV9{q-4Y>GVC%$d&vZGCCTIAxBTa>O*0u7DJGKTd$T;aJSLJpxL^lFSsw^qNx!h$$m-U3*h&RJp^2+cK_Vk(dB}l!MQFv-&^6gfco&Ua?0<=bRx|vDVLi+&%z=6^JH23$kK)+Xj#i*rYT9U|G&Aq7VJ7sGP6$>GKFi~bzQkl(~#b2LD5Q4W;I)+8@@O<0)WV-xj|nY$bR!-y&VW`tBt50>#ttFaoFJi+%8 zQmC@k*qT>i8zdDRgeB4j+efe*FZDlz-AF$URj^q(jWW4KMrn{dIm;%s!5Tvjv_+u7 zgTOy*29scEQB|!g;K5jPo&h!V^xh_g5|GMwQ>(E zKk4&G*<4wz+<-D|P@F$cs$tjb*!At;$GFz9(=ItO&3CD^nuWH*joI5Ii(HTFTDZwg zVV~gJEmg7dI99Ib*woABPF@(tCTeAoP7WQ&)|_}6%daG9<^RF*n{KWA2HK%0Qdhn& zx#TA72<*^^`$H6}_h>?&VEHL-Ur;8ajfDj7@q18VF!uUt4%$>o9GJ_nk>OH?wG7GW zRJm5(olII2eA)7PJ?uuWPaY&M$SaZGL&J4h$$P!G$Q!u40X&}j<$GX>b&u?ldKEv8^mBbiXk_|QhEp+e&&$_wAk$S%(U|$g$Jc-%68BGDXBt2;q?{t1V-0Y1iIOs@acSSvrn-Ej+Mn;rMor(wH1EaH2{ zn1Md-Gp0z9?Dve>Xml~$Ba^w^@-XD?mR~PAYFrILoG!LOUO}1alc<7Y9JwINca@4w zCMC#DoZyaol3@>?PpKIT)aT^Y_9nH5)UD`wLl23vq=%H}iM(N`Vp0{88X%MVufHb; zs*wE#rqVxgWY^07;lzA^lk{#**uzY@lPUk?mR--|XtP4{M{y#;DF_F4tz5<2TUoM= zW%{DblW<$|yAkys*rXmoxXSveT8~~I!}5`&AMt-zqbZZhr_~cAsy2YrodfIPwxldm zt=yfBK8kP^4@ep>g(jDLdCEv*J&3#pQw>IRI@EE5>NqxS(n0@~rsdMb%q9DgHp!N@ z5lLTny3w>vdOztN({>Kpa%pwugIM00`KYNu%5^`5GOP1mH;qH?MEP-~^uq|zL{ueh zR^Bj7W~g~w^0iWNUE&*h5ea>Yxe>Y_R`b-@JlJ<@CbspjR5+yZ zExG4eE@$pZX_~zV6Lvo?X^%^^h}Xi`oi4Og8v5Cq5LTL&TV@$d5!Xh`0z)w64vR}( zi9Kg$WyvrsYq{BpJHfwMoKOR=A{-81TFkg^fz=6Pz-TqYPViat@du?t@F#QK5ms=y z0w3iK$8r|VAQgZ=6?P6}`VfXQ8MZRKOdbi5Ajvdr`)7IsJ^0FOv$F8sk>>IsmXM^>1ESV z(^sbNOxfmA^IG$LW}_v`GSD*Da+4()_jLfBeHD0mxuK{#!icRB;nQ4R%J7gf04Z|e z0P*gl<0BK{0{9Eu3s1mv@DqfjWzu8PkJ2g0Bs=9k@+kREdB5y4lo?hSo-({_c+W6E z8K#`C98m1W6ysE5*tpmDrtxEAPj#|7TWwKin--YfH<`?-=H2EK=3>i4i_(e?wfoHC z!>vxj^9|f%$;0CbZA^_im1qL@$n>#lUkD$vY{&Zp+Q!B|_gDgWEb91q4v#YQNz^rP z9qnnK$haTw_z`w7dv8JZ5_yqCf1jAv$#0w2%U_t+$*1sdh6O;}y0_9;F=x)wkof1` zaqj9lGiKB*Xl`npwR}k9tmfvfJ$vn`dAwK=?>@C?&-SOM8r318MNJDD_jvc+p@@%P z+P`Q2%Zm-py3hp^XN4Ez+au5zx?s<|e?Dt6AZ^c(w-;FV?D_DhwCCoJj+yq{`^93* zo^Ia_G)sBczg{fm?kW6rr022Y$JX*ecf0qLJ3FEoj&pEbp-Dl6d`q-`4VN+-?O@ToPFEZS!omGj%Y9(jJvV~c~*?UEQM YB|YY>kbXAESN3?!)lK?JYU^V9fB$LI)Bpeg diff --git a/Assets/Mirror/Tests/WeaverAssembler.cs b/Assets/Mirror/Tests/WeaverAssembler.cs new file mode 100644 index 000000000..040ca6d61 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverAssembler.cs @@ -0,0 +1,188 @@ +using System.IO; +using System.Linq; +using System.Collections.Generic; +using UnityEditor.Compilation; +using UnityEngine; + +public class WeaverAssembler : MonoBehaviour +{ + public const string OutputDirectory = "Assets/Mirror/Tests/WeaverTests~/"; + public static string OutputFile { get; set; } + public static HashSet SourceFiles { get; private set; } + public static HashSet ReferenceAssemblies { get; private set; } + public static bool AllowUnsafe { get; set; } + public static List CompilerMessages { get; private set; } + public static bool CompilerErrors { get; private set; } + public static bool DeleteOutputOnClear { get; set; } + + // static constructor to initialize static properties + static WeaverAssembler() + { + SourceFiles = new HashSet(); + ReferenceAssemblies = new HashSet(); + CompilerMessages = new List(); + } + + // Add a range of source files to compile + public static void AddSourceFiles(string[] sourceFiles) + { + foreach (string src in sourceFiles) + { + SourceFiles.Add(OutputDirectory + src); + } + } + + // Add a range of reference files by full path + public static void AddReferencesByFullPath(string[] refAsms) + { + foreach (string asm in refAsms) + { + ReferenceAssemblies.Add(asm); + } + } + + // Add a range of reference files by assembly name only + public static void AddReferencesByAssemblyName(string[] refAsms) + { + foreach (string asm in refAsms) + { + string asmFullPath; + if (FindReferenceAssemblyPath(asm, out asmFullPath)) + { + ReferenceAssemblies.Add(asmFullPath); + } + } + } + + // Find reference assembly specified by asmName and store its full path in asmFullPath + // do not pass in paths in asmName, just assembly names + public static bool FindReferenceAssemblyPath(string asmName, out string asmFullPath) + { + asmFullPath = ""; + + Assembly[] asms = CompilationPipeline.GetAssemblies(); + foreach (Assembly asm in asms) + { + foreach (string asmRef in asm.compiledAssemblyReferences) + { + if (asmRef.EndsWith(asmName)) + { + asmFullPath = asmRef; + return true; + } + } + } + + return false; + } + + // Add reference (not cleared during calls to Clear) + public static void ClearReferences() + { + ReferenceAssemblies.Clear(); + } + + // Delete output dll / pdb / mdb + public static void DeleteOutput() + { + if (OutputFile.Length < 5) return; // "x.dll" shortest possible dll name + + string projPathFile = OutputDirectory + OutputFile; + + try + { + File.Delete(projPathFile); + + } + catch { } + + try + { + File.Delete(Path.ChangeExtension(projPathFile, ".pdb")); + + } + catch { } + + try + { + File.Delete(Path.ChangeExtension(projPathFile, ".dll.mdb")); + + } + catch { } + } + + // clear all settings except for referenced assemblies (which are cleared with ClearReferences) + public static void Clear() + { + if (DeleteOutputOnClear) + { + DeleteOutput(); + } + + CompilerErrors = false; + OutputFile = ""; + SourceFiles.Clear(); + CompilerMessages.Clear(); + AllowUnsafe = false; + DeleteOutputOnClear = false; + } + + // build synchronously + public static void Build() + { + BuildAssembly(true); + } + + // build asynchronously - this isn't currently used + public static void BuildAsync() + { + BuildAssembly(false); + } + + private static void BuildAssembly(bool wait) + { + AssemblyBuilder assemblyBuilder = new AssemblyBuilder(OutputDirectory + OutputFile, SourceFiles.ToArray()); + assemblyBuilder.additionalReferences = ReferenceAssemblies.ToArray(); + if (AllowUnsafe) + { + assemblyBuilder.compilerOptions.AllowUnsafeCode = true; + } + + assemblyBuilder.buildStarted += delegate (string assemblyPath) + { + //Debug.LogFormat("Assembly build started for {0}", assemblyPath); + }; + + assemblyBuilder.buildFinished += delegate (string assemblyPath, CompilerMessage[] compilerMessages) + { + CompilerMessages.AddRange(compilerMessages); + foreach (CompilerMessage cm in compilerMessages) + { + if (cm.type == CompilerMessageType.Warning) + { + //Debug.LogWarningFormat("{0}:{1} -- {2}", cm.file, cm.line, cm.message); + } + else if (cm.type == CompilerMessageType.Error) + { + Debug.LogErrorFormat("{0}:{1} -- {2}", cm.file, cm.line, cm.message); + CompilerErrors = true; + } + } + }; + + // Start build of assembly + if (!assemblyBuilder.Build()) + { + Debug.LogErrorFormat("Failed to start build of assembly {0}", assemblyBuilder.assemblyPath); + return; + } + + if (wait) + { + while (assemblyBuilder.status != AssemblyBuilderStatus.Finished) + { + System.Threading.Thread.Sleep(10); + } + } + } +} diff --git a/Assets/Mirror/Tests/WeaverAssembler.cs.meta b/Assets/Mirror/Tests/WeaverAssembler.cs.meta new file mode 100644 index 000000000..d41b1b4f2 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverAssembler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 049ac5abfba3c0943a2694cd502fcc80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Tests/WeaverTest.cs b/Assets/Mirror/Tests/WeaverTest.cs new file mode 100644 index 000000000..bf22c1f92 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTest.cs @@ -0,0 +1,831 @@ +//#define LOG_WEAVER_OUTPUTS + +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; +using UnityEditor.Compilation; + +using Mirror.Weaver; + +namespace Mirror +{ + [TestFixture] + public class WeaverTest + { + #region Private + List m_weaverErrors = new List(); + void HandleWeaverError(string msg) + { +#if LOG_WEAVER_OUTPUTS + Debug.LogError(msg); +#endif + m_weaverErrors.Add(msg); + } + + List m_weaverWarnings = new List(); + void HandleWeaverWarning(string msg) + { +#if LOG_WEAVER_OUTPUTS + Debug.LogWarning(msg); +#endif + m_weaverWarnings.Add(msg); + } + + private void BuildAndWeaveTestAssembly(string baseName) + { + WeaverAssembler.OutputFile = baseName + ".dll"; + WeaverAssembler.AddSourceFiles(new string[] { baseName + ".cs" }); + WeaverAssembler.Build(); + + Assert.That(WeaverAssembler.CompilerErrors, Is.False); + if (m_weaverErrors.Count > 0) + { + Assert.That(m_weaverErrors[0], Does.StartWith("Mirror.Weaver error: ")); + } + } + #endregion + + #region Setup and Teardown + [OneTimeSetUp] + public void FixtureSetup() + { + // TextRenderingModule is only referenced to use TextMesh type to throw errors about types from another module + WeaverAssembler.AddReferencesByAssemblyName(new string[] { "UnityEngine.dll", "UnityEngine.CoreModule.dll", "UnityEngine.TextRenderingModule.dll", "Mirror.dll" }); + + CompilationFinishedHook.UnityLogEnabled = false; + CompilationFinishedHook.OnWeaverError += HandleWeaverError; + CompilationFinishedHook.OnWeaverWarning += HandleWeaverWarning; + } + + [OneTimeTearDown] + public void FixtureCleanup() + { + CompilationFinishedHook.UnityLogEnabled = true; + } + + [SetUp] + public void TestSetup() + { + BuildAndWeaveTestAssembly(TestContext.CurrentContext.Test.Name); + } + + [TearDown] + public void TestCleanup() + { + WeaverAssembler.DeleteOutputOnClear = true; + WeaverAssembler.Clear(); + + m_weaverWarnings.Clear(); + m_weaverErrors.Clear(); + } + #endregion + + #region General tests + [Test] + public void InvalidType() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.AtLeast(1)); + Assert.That(m_weaverErrors[0], Does.Match("please make sure to use a valid type")); + } + + [Test] + public void RecursionCount() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.AtLeast(1)); + Assert.That(m_weaverErrors[0], Does.Match("Check for self-referencing member variables")); + } + + [Test] + public void ClientGuardWrongClass() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("\\[Client\\] guard on non-NetworkBehaviour script")); + } + + [Test] + public void ServerGuardWrongClass() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("\\[Server\\] guard on non-NetworkBehaviour script")); + } + + [Test] + public void GuardCmdWrongClass() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(4)); + Assert.That(m_weaverErrors[0], Does.Match("\\[Server\\] guard on non-NetworkBehaviour script")); + Assert.That(m_weaverErrors[1], Does.Match("\\[Server\\] guard on non-NetworkBehaviour script")); + Assert.That(m_weaverErrors[2], Does.Match("\\[Client\\] guard on non-NetworkBehaviour script")); + Assert.That(m_weaverErrors[3], Does.Match("\\[Client\\] guard on non-NetworkBehaviour script")); + } + + [Test] + public void JaggedArray() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.AtLeast(1)); + Assert.That(m_weaverErrors[0], Does.Match("Jagged and multidimensional arrays are not supported")); + } + #endregion + + #region SyncVar tests + [Test] + public void SyncVarsValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void SyncVarsNoHook() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar Hook function .* not found for")); + } + + [Test] + public void SyncVarsNoHookParams() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* must have one argument")); + } + + [Test] + public void SyncVarsTooManyHookParams() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* must have one argument")); + } + + [Test] + public void SyncVarsWrongHookType() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar Hook function .* has wrong type signature for")); + } + + [Test] + public void SyncVarsDerivedNetworkBehaviour() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be derived from NetworkBehaviour")); + } + + [Test] + public void SyncVarsDerivedScriptableObject() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be derived from ScriptableObject")); + } + + [Test] + public void SyncVarsStatic() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be static")); + } + + [Test] + public void SyncVarsGenericParam() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot have generic parameters")); + } + + [Test] + public void SyncVarsInterface() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be an interface")); + } + + [Test] + public void SyncVarsDifferentModule() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be a different module")); + } + + [Test] + public void SyncVarsCantBeArray() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("SyncVar .* cannot be an array")); + } + + [Test] + public void SyncVarsSyncList() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + Assert.That(m_weaverWarnings.Count, Is.EqualTo(2)); + Assert.That(m_weaverWarnings[0], Does.Match("SyncLists should not be marked with SyncVar")); + Assert.That(m_weaverWarnings[1], Does.Match("SyncLists should not be marked with SyncVar")); + } + + [Test] + public void SyncVarsMoreThan63() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script class .* has too many SyncVars")); + } + #endregion + + #region SyncList tests + [Test] + public void SyncListValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void SyncListMissingParamlessCtor() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Missing parameter-less constructor")); + } + #endregion + + #region SyncListStruct tests + [Test] + public void SyncListStructValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void SyncListStructGenericGeneric() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Struct passed into SyncListStruct can't have generic parameters")); + } + + [Test] + public void SyncListStructMemberGeneric() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("member cannot have generic parameters")); + } + + [Test] + public void SyncListStructMemberInterface() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("member cannot be an interface")); + } + + [Test] + public void SyncListStructMemberBasicType() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(2)); + Assert.That(m_weaverErrors[0], Does.Match("please make sure to use a valid type")); + Assert.That(m_weaverErrors[1], Does.Match("member variables must be basic types")); + } + #endregion + + #region NetworkBehaviour tests + [Test] + public void NetworkBehaviourValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void NetworkBehaviourAbstractBaseValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void NetworkBehaviourGeneric() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("NetworkBehaviour .* cannot have generic parameters")); + } + + [Test] + public void NetworkBehaviourCmdGenericParam() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command .* cannot have generic parameters")); + } + + [Test] + public void NetworkBehaviourCmdCoroutine() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command .* cannot be a coroutine")); + } + + [Test] + public void NetworkBehaviourCmdVoidReturn() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command .* must have a void return type")); + } + + [Test] + public void NetworkBehaviourTargetRpcGenericParam() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc .* cannot have generic parameters")); + } + + [Test] + public void NetworkBehaviourTargetRpcCoroutine() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc .* cannot be a coroutine")); + } + + [Test] + public void NetworkBehaviourTargetRpcVoidReturn() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc .* must have a void return type")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamOut() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* cannot have out parameters")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamOptional() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpcfunction .* cannot have optional parameters")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamRef() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* cannot have ref parameters")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamAbstract() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* cannot have abstract parameters")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamComponent() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* You cannot pass a Component to a remote call")); + } + + [Test] + public void NetworkBehaviourTargetRpcParamNetworkConnection() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc .* first parameter must be a NetworkConnection")); + } + + + [Test] + public void NetworkBehaviourTargetRpcDuplicateName() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Duplicate Target Rpc name")); + } + + [Test] + public void NetworkBehaviourClientRpcGenericParam() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc .* cannot have generic parameters")); + } + + [Test] + public void NetworkBehaviourClientRpcCoroutine() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc .* cannot be a coroutine")); + } + + [Test] + public void NetworkBehaviourClientRpcVoidReturn() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc .* must have a void return type")); + } + + [Test] + public void NetworkBehaviourClientRpcParamOut() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc function .* cannot have out parameters")); + } + + [Test] + public void NetworkBehaviourClientRpcParamOptional() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpcfunction .* cannot have optional parameters")); + } + + [Test] + public void NetworkBehaviourClientRpcParamRef() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc function .* cannot have ref parameters")); + } + + [Test] + public void NetworkBehaviourClientRpcParamAbstract() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc function .* cannot have abstract parameters")); + } + + [Test] + public void NetworkBehaviourClientRpcParamComponent() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc function .* You cannot pass a Component to a remote call")); + } + + [Test] + public void NetworkBehaviourClientRpcParamNetworkConnection() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(2)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc .* cannot use a NetworkConnection as a parameter")); + } + + [Test] + public void NetworkBehaviourClientRpcDuplicateName() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Duplicate ClientRpc name")); + } + + [Test] + public void NetworkBehaviourCmdParamOut() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* cannot have out parameters")); + } + + [Test] + public void NetworkBehaviourCmdParamOptional() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Commandfunction .* cannot have optional parameters")); + } + + [Test] + public void NetworkBehaviourCmdParamRef() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* cannot have ref parameters")); + } + + [Test] + public void NetworkBehaviourCmdParamAbstract() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* cannot have abstract parameters")); + } + + [Test] + public void NetworkBehaviourCmdParamComponent() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* You cannot pass a Component to a remote call")); + } + + [Test] + public void NetworkBehaviourCmdParamNetworkConnection() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(2)); + Assert.That(m_weaverErrors[0], Does.Match("Command .* cannot use a NetworkConnection as a parameter")); + } + + [Test] + public void NetworkBehaviourCmdDuplicateName() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Duplicate Command name")); + } + #endregion + + #region Command tests + [Test] + public void CommandValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void CommandStartsWithCmd() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* doesnt have 'Cmd' prefix")); + } + + [Test] + public void CommandCantBeStatic() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Command function .* cant be a static method")); + } + #endregion + + #region ClientRpc tests + [Test] + public void ClientRpcValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void ClientRpcStartsWithRpc() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Rpc function .* doesnt have 'Rpc' prefix")); + } + + [Test] + public void ClientRpcCantBeStatic() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("ClientRpc function .* cant be a static method")); + } + #endregion + + #region TargetRpc tests + [Test] + public void TargetRpcValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void TargetRpcStartsWithTarget() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* doesnt have 'Target' prefix")); + } + + [Test] + public void TargetRpcCantBeStatic() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("TargetRpc function .* cant be a static method")); + } + + [Test] + public void TargetRpcNetworkConnectionMissing() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* must have a NetworkConnection as the first parameter")); + } + + [Test] + public void TargetRpcNetworkConnectionNotFirst() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Target Rpc function .* first parameter must be a NetworkConnection")); + } + #endregion + + #region TargetRpc tests + [Test] + public void SyncEventValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void SyncEventStartsWithEvent() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Event .* doesnt have 'Event' prefix")); + } + + [Test] + public void SyncEventParamGeneric() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Event .* cannot have generic parameters")); + } + #endregion + + #region MonoBehaviour tests + [Test] + public void MonoBehaviourValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void MonoBehaviourSyncVar() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses \\[SyncVar\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourSyncList() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* defines field .* with type .*, but it's not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourCommand() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses \\[Command\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourClientRpc() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses \\[ClientRpc\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourTargetRpc() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses \\[TargetRpc\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourServer() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses the attribute \\[Server\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourServerCallback() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses the attribute \\[ServerCallback\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourClient() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses the attribute \\[Client\\] .* but is not a NetworkBehaviour")); + } + + [Test] + public void MonoBehaviourClientCallback() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("Script .* uses the attribute \\[ClientCallback\\] .* but is not a NetworkBehaviour")); + } + #endregion + + #region Message tests + [Test] + public void MessageValid() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.False); + Assert.That(m_weaverErrors.Count, Is.EqualTo(0)); + } + + [Test] + public void MessageSelfReferencing() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("GenerateSerialization for .* member cannot be self referencing")); + } + + [Test] + public void MessageInvalidSerializeFieldType() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(2)); + Assert.That(m_weaverErrors[0], Does.Match("please make sure to use a valid type")); + Assert.That(m_weaverErrors[1], Does.Match("GenerateSerialization for .* member variables must be basic types")); + } + + [Test] + public void MessageInvalidDeserializeFieldType() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(3)); + Assert.That(m_weaverErrors[0], Does.Match("please make sure to use a valid type")); + Assert.That(m_weaverErrors[1], Does.Match("GetReadFunc unable to generate function")); + Assert.That(m_weaverErrors[2], Does.Match("GenerateDeSerialization for .* member variables must be basic types")); + } + + [Test] + public void MessageMemberGeneric() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("GenerateSerialization for .* member cannot have generic parameters")); + } + + [Test] + public void MessageMemberInterface() + { + Assert.That(CompilationFinishedHook.WeaveFailed, Is.True); + Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); + Assert.That(m_weaverErrors[0], Does.Match("GenerateSerialization for .* member cannot be an interface")); + } + #endregion + } +} diff --git a/Assets/Mirror/Tests/WeaverTest.cs.meta b/Assets/Mirror/Tests/WeaverTest.cs.meta new file mode 100644 index 000000000..a98d9222f --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3f52dab9c479dd4586d0aceeb2390f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs new file mode 100644 index 000000000..95b5ef3c1 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs @@ -0,0 +1,26 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer + { + // defining a SyncListStruct here will force Weaver to do work on this class + // which will then force it to check for Server / Client guards and fail + struct MyStruct + { + int potato; + float floatingpotato; + double givemetwopotatoes; + } + class MyStructClass : SyncListSTRUCT { }; + MyStructClass Foo; + + [Client] + public void CantClientGuardInThisClass() + { + + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs new file mode 100644 index 000000000..3c2f8a6ac --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + private static void RpcCantBeStatic() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs new file mode 100644 index 000000000..8d12498ce --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + private void DoesntStartWithRpc() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs new file mode 100644 index 000000000..5c8883d1a --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + private void RpcThatIsTotallyValid() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs new file mode 100644 index 000000000..79092fc0b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + private static void CmdCantBeStatic() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs new file mode 100644 index 000000000..4990f0f83 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + private void DoesntStartWithCmd() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs new file mode 100644 index 000000000..b0c4e4c97 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + private void CmdThatIsTotallyValid() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs new file mode 100644 index 000000000..e786ba181 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs @@ -0,0 +1,44 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer + { + // defining a SyncListStruct here will force Weaver to do work on this class + // which will then force it to check for Server / Client guards and fail + struct MyStruct + { + int potato; + float floatingpotato; + double givemetwopotatoes; + } + class MyStructClass : SyncListSTRUCT { }; + MyStructClass Foo; + + [Server] + public void CantServerGuardInThisClass() + { + + } + + [ServerCallback] + public void CantServerCallbackGuardInThisClass() + { + + } + + [Client] + public void CantClientGuardInThisClass() + { + + } + + [ClientCallback] + public void CantClientCallbackGuardInThisClass() + { + + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs new file mode 100644 index 000000000..b904902f3 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs @@ -0,0 +1,18 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + struct MyStruct + { + public AccessViolationException violatedPotato; + } + + class MyStructClass : SyncListSTRUCT { }; + + MyStructClass harpseals; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs new file mode 100644 index 000000000..190029af5 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs @@ -0,0 +1,20 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + // defining a SyncListStruct here will force Weaver to do work on this class + // which will then force it to check for Server / Client guards and fail + struct MyStruct + { + public int[][] jaggedArray; + public float floatingpotato; + public double givemetwopotatoes; + } + class MyStructClass : SyncListSTRUCT { }; + MyStructClass Foo; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs new file mode 100644 index 000000000..655ab089d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public AccessViolationException invalidField; + public byte[] payload; + + // this will cause generate serialization to be skipped, testing generate deserialization + public override void Serialize(NetworkWriter writer) + { + writer.WritePackedUInt32(netId); + writer.Write(assetId); + writer.Write(position); + writer.Write(rotation); + writer.WriteBytesAndSize(payload); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs new file mode 100644 index 000000000..7283242c4 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public AccessViolationException invalidField; + public byte[] payload; + + // this will guarantee only serialize will be generated (even though weaver does serialize first) + public override void Deserialize(NetworkReader reader) + { + netId = reader.ReadPackedUInt32(); + assetId = reader.ReadGuid(); + position = reader.ReadVector3(); + rotation = reader.ReadQuaternion(); + payload = reader.ReadBytesAndSize(); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs new file mode 100644 index 000000000..82e69d6c2 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class HasGeneric { } + + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public HasGeneric invalidField; + public byte[] payload; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs new file mode 100644 index 000000000..1aab35624 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + interface SuperCoolInterface { } + + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public SuperCoolInterface invalidField; + public byte[] payload; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs b/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs new file mode 100644 index 000000000..2ec12b01a --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public PrefabClone selfReference = new PrefabClone(); + public byte[] payload; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs b/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs new file mode 100644 index 000000000..0f18663f8 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class PrefabClone : MessageBase + { + public uint netId; + public Guid assetId; + public Vector3 position; + public Quaternion rotation; + public byte[] payload; + + public override void Deserialize(NetworkReader reader) + { + netId = reader.ReadPackedUInt32(); + assetId = reader.ReadGuid(); + position = reader.ReadVector3(); + rotation = reader.ReadQuaternion(); + payload = reader.ReadBytesAndSize(); + } + + public override void Serialize(NetworkWriter writer) + { + writer.WritePackedUInt32(netId); + writer.Write(assetId); + writer.Write(position); + writer.Write(rotation); + writer.WriteBytesAndSize(payload); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs new file mode 100644 index 000000000..0344b89a0 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [Client] + void ThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs new file mode 100644 index 000000000..40fa186c6 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [ClientCallback] + void ThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs new file mode 100644 index 000000000..1b05dfd81 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [ClientRpc] + void RpcThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs new file mode 100644 index 000000000..0c6a2e591 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [Command] + void CmdThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs new file mode 100644 index 000000000..870610d4e --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [Server] + void ThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs new file mode 100644 index 000000000..b3f19847e --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [ServerCallback] + void ThisCantBeOutsideNetworkBehaviour() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs new file mode 100644 index 000000000..1763d9c87 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + SyncListInt potato; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs new file mode 100644 index 000000000..8c5353850 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [SyncVar] + int potato; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs new file mode 100644 index 000000000..a75cab0e5 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + [TargetRpc] + void TargetThisCantBeOutsideNetworkBehaviour(NetworkConnection nc) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs new file mode 100644 index 000000000..bc969a00b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : MonoBehaviour + { + int monkeys = 12; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs new file mode 100644 index 000000000..d0989bd0d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + public abstract class EntityBase : NetworkBehaviour + { + } + + public class EntityConcrete : EntityBase + { + [SyncVar] + public int abstractDerivedSync; + } + + public class EntityTest : EntityConcrete + { + [SyncVar] + public int concreteDerivedSync; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs new file mode 100644 index 000000000..a31119682 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public IEnumerator RpcCantHaveCoroutine() + { + yield return null; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs new file mode 100644 index 000000000..fc4c27099 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveSameName(int abc) + { + } + + [ClientRpc] + public void RpcCantHaveSameName(int abc, int def) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs new file mode 100644 index 000000000..699ff29fa --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveGeneric() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs new file mode 100644 index 000000000..0e24a5856 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public abstract class AbstractClass + { + int monkeys = 12; + } + + [ClientRpc] + public void RpcCantHaveParamAbstract(AbstractClass monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs new file mode 100644 index 000000000..b84ef372d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public class ComponentClass : UnityEngine.Component + { + int monkeys = 12; + } + + [ClientRpc] + public void RpcCantHaveParamComponent(ComponentClass monkeyComp) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs new file mode 100644 index 000000000..672b9717e --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs @@ -0,0 +1,12 @@ +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveParamOptional(NetworkConnection monkeyCon) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs new file mode 100644 index 000000000..d4bb4421b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveParamOptional(int monkeys = 12) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs new file mode 100644 index 000000000..2a6e319d4 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs @@ -0,0 +1,15 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveParamOut(out int monkeys) + { + monkeys = 12; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs new file mode 100644 index 000000000..5de6327d2 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public void RpcCantHaveParamRef(ref int monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs new file mode 100644 index 000000000..9c1c9a00a --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [ClientRpc] + public int RpcCantHaveNonVoidReturn() + { + return 1; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs new file mode 100644 index 000000000..4dbc106fa --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public IEnumerator CmdCantHaveCoroutine() + { + yield return null; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs new file mode 100644 index 000000000..c8b013057 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveSameName(int abc) + { + } + + [Command] + public void CmdCantHaveSameName(int abc, int def) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs new file mode 100644 index 000000000..e779368f6 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveGeneric() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs new file mode 100644 index 000000000..ca473e861 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public abstract class AbstractClass + { + int monkeys = 12; + } + + [Command] + public void CmdCantHaveParamAbstract(AbstractClass monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs new file mode 100644 index 000000000..d2ddb2fbb --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public class ComponentClass : UnityEngine.Component + { + int monkeys = 12; + } + + [Command] + public void CmdCantHaveParamComponent(ComponentClass monkeyComp) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs new file mode 100644 index 000000000..8171963bc --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs @@ -0,0 +1,12 @@ +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveParamOptional(NetworkConnection monkeyCon) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs new file mode 100644 index 000000000..99a2ca753 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveParamOptional(int monkeys = 12) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs new file mode 100644 index 000000000..e3b7b8079 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs @@ -0,0 +1,15 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveParamOut(out int monkeys) + { + monkeys = 12; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs new file mode 100644 index 000000000..34613781c --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public void CmdCantHaveParamRef(ref int monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs new file mode 100644 index 000000000..bacb7791e --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [Command] + public int CmdCantHaveNonVoidReturn() + { + return 1; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs new file mode 100644 index 000000000..82a98c98c --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + T genericsNotAllowed; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs new file mode 100644 index 000000000..a16591301 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public IEnumerator TargetRpcCantHaveCoroutine() + { + yield return null; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs new file mode 100644 index 000000000..6e4ef4e8d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc) + { + } + + [TargetRpc] + public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc, int def) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs new file mode 100644 index 000000000..6ae18e0ce --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveGeneric() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs new file mode 100644 index 000000000..913de7f01 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public abstract class AbstractClass + { + int monkeys = 12; + } + + [TargetRpc] + public void TargetRpcCantHaveParamAbstract(NetworkConnection monkeyCon, AbstractClass monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs new file mode 100644 index 000000000..ff3c74535 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public class ComponentClass : UnityEngine.Component + { + int monkeys = 12; + } + + [TargetRpc] + public void TargetRpcCantHaveParamComponent(NetworkConnection monkeyCon, ComponentClass monkeyComp) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs new file mode 100644 index 000000000..ea774251f --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs @@ -0,0 +1,12 @@ +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs new file mode 100644 index 000000000..05d9d6f3e --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs @@ -0,0 +1,12 @@ +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveParamOptional(int abc, NetworkConnection monkeyCon) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs new file mode 100644 index 000000000..beddef411 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon, int monkeys = 12) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs new file mode 100644 index 000000000..000a7a194 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs @@ -0,0 +1,15 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveParamOut(NetworkConnection monkeyCon, out int monkeys) + { + monkeys = 12; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs new file mode 100644 index 000000000..154f6d270 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs @@ -0,0 +1,14 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public void TargetRpcCantHaveParamRef(NetworkConnection monkeyCon, ref int monkeys) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs new file mode 100644 index 000000000..3f4d242fc --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + public int TargetRpcCantHaveNonVoidReturn() + { + return 1; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs new file mode 100644 index 000000000..936b96f6b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs @@ -0,0 +1,11 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar] + public int durpatron9000 = 12; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs b/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs new file mode 100644 index 000000000..278b5ab9a --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs @@ -0,0 +1,24 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public class Potato0 + { + public int hamburgers = 17; + public Potato1 p1; + } + + public class Potato1 + { + public int hamburgers = 18; + public Potato0 p0; + } + + [SyncVar] + Potato0 recursionTime; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs new file mode 100644 index 000000000..0611c12eb --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs @@ -0,0 +1,26 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer + { + // defining a SyncListStruct here will force Weaver to do work on this class + // which will then force it to check for Server / Client guards and fail + struct MyStruct + { + int potato; + float floatingpotato; + double givemetwopotatoes; + } + class MyStructClass : SyncListSTRUCT { }; + MyStructClass Foo; + + [Server] + public void CantServerGuardInThisClass() + { + + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs new file mode 100644 index 000000000..289de4e07 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public delegate void MySyncEventDelegate(T amount, float dir); + + [SyncEvent] + public event MySyncEventDelegate EventDoCoolThingsWithExcitingPeople; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs new file mode 100644 index 000000000..97449db80 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public delegate void MySyncEventDelegate(int amount, float dir); + + [SyncEvent] + public event MySyncEventDelegate DoCoolThingsWithExcitingPeople; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs new file mode 100644 index 000000000..07c161c49 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public delegate void MySyncEventDelegate(); + + [SyncEvent] + public event MySyncEventDelegate EventDoCoolThingsWithExcitingPeople; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs new file mode 100644 index 000000000..e54bd509d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public class SyncListString2 : SyncList + { + public SyncListString2(int phooey) {} + protected override void SerializeItem(NetworkWriter w, string item) { } + protected override string DeserializeItem(NetworkReader r) { return ""; } + } + + public SyncListString2 Foo; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs new file mode 100644 index 000000000..8d49bc08b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + struct MyPODStruct + { + float floatingpotato; + } + + struct MyGenericStruct + { + T genericpotato; + } + + struct MyStruct + { + MyGenericStruct potato; + } + + class MyStructClass : SyncListSTRUCT> { }; + + MyStructClass harpseals; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs new file mode 100644 index 000000000..a2de28a85 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + class NonBasicPotato + { + int potato; + } + + struct MyStruct + { + public object nonbasicpotato; + } + + class MyStructClass : SyncListSTRUCT + { + int potatoCount; + public MyStructClass(int numberOfPotatoes) + { + potatoCount = numberOfPotatoes; + } + }; + + MyStructClass harpseals; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs new file mode 100644 index 000000000..4e2c91de9 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + struct MyPODStruct + { + float floatingpotato; + } + + struct MyGenericStruct + { + T genericpotato; + } + + struct MyStruct + { + public MyGenericStruct potato; + } + + class MyStructClass : SyncListSTRUCT { }; + + MyStructClass harpseals; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs new file mode 100644 index 000000000..fad3887bc --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs @@ -0,0 +1,22 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + interface IPotato + { + void Bake(); + } + + struct MyStruct + { + public IPotato potato; + } + + class MyStructClass : SyncListSTRUCT { }; + + MyStructClass harpseals; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs new file mode 100644 index 000000000..73f26d667 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + struct MyStruct + { + int potato; + float floatingpotato; + double givemetwopotatoes; + } + class MyStructClass : SyncListSTRUCT { }; + MyStructClass Foo; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs new file mode 100644 index 000000000..9113986b8 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + public SyncListInt Foo; + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs new file mode 100644 index 000000000..6fa0c9a79 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using Mirror; +using System.Collections.Generic; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar] + int health; + + [SyncVar] + int[] thisShouldntWork = new int[100]; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs new file mode 100644 index 000000000..030d4b1f3 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + class MySyncVar : NetworkBehaviour + { + int abc = 123; + } + [SyncVar] + MySyncVar invalidVar = new MySyncVar(); + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs new file mode 100644 index 000000000..a51b2cec5 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + class MySyncVar : ScriptableObject + { + int abc = 123; + } + [SyncVar] + MySyncVar invalidVar = new MySyncVar(); + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs new file mode 100644 index 000000000..db6459fc3 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + [SyncVar] + TextMesh invalidVar; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs new file mode 100644 index 000000000..76bdd2a5b --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + class MySyncVar + { + T abc; + } + [SyncVar] + MySyncVar invalidVar = new MySyncVar(); + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs new file mode 100644 index 000000000..d754c5702 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + interface MySyncVar + { + void interfaceMethod(); + } + [SyncVar] + MySyncVar invalidVar; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs new file mode 100644 index 000000000..037c6cc39 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + [SyncVar] int var2; + [SyncVar] int var3; + [SyncVar] int var4; + [SyncVar] int var5; + [SyncVar] int var6; + [SyncVar] int var7; + [SyncVar] int var8; + [SyncVar] int var9; + [SyncVar] int var10; + [SyncVar] int var11; + [SyncVar] int var12; + [SyncVar] int var13; + [SyncVar] int var14; + [SyncVar] int var15; + [SyncVar] int var16; + [SyncVar] int var17; + [SyncVar] int var18; + [SyncVar] int var19; + [SyncVar] int var20; + [SyncVar] int var21; + [SyncVar] int var22; + [SyncVar] int var23; + [SyncVar] int var24; + [SyncVar] int var25; + [SyncVar] int var26; + [SyncVar] int var27; + [SyncVar] int var28; + [SyncVar] int var29; + [SyncVar] int var30; + [SyncVar] int var31; + [SyncVar] int var32; + [SyncVar] int var33; + [SyncVar] int var34; + [SyncVar] int var35; + [SyncVar] int var36; + [SyncVar] int var37; + [SyncVar] int var38; + [SyncVar] int var39; + [SyncVar] int var40; + [SyncVar] int var41; + [SyncVar] int var42; + [SyncVar] int var43; + [SyncVar] int var44; + [SyncVar] int var45; + [SyncVar] int var46; + [SyncVar] int var47; + [SyncVar] int var48; + [SyncVar] int var49; + [SyncVar] int var50; + [SyncVar] int var51; + [SyncVar] int var52; + [SyncVar] int var53; + [SyncVar] int var54; + [SyncVar] int var55; + [SyncVar] int var56; + [SyncVar] int var57; + [SyncVar] int var58; + [SyncVar] int var59; + [SyncVar] int var60; + [SyncVar] int var61; + [SyncVar] int var62; + [SyncVar] int var63; + [SyncVar] int var64; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs new file mode 100644 index 000000000..5ef338902 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook = "OnChangeHealth")] + int health; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs new file mode 100644 index 000000000..8c09b8d9a --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook = "OnChangeHealth")] + int health; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth() + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs new file mode 100644 index 000000000..4773f7cc6 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + [SyncVar] + static int invalidVar = 123; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs new file mode 100644 index 000000000..6f205415d --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + public class SyncObjImplementer : SyncObject + { + public bool IsDirty { get; } + public void Flush() { } + public void OnSerializeAll(NetworkWriter writer) { } + public void OnSerializeDelta(NetworkWriter writer) { } + public void OnDeserializeAll(NetworkReader reader) { } + public void OnDeserializeDelta(NetworkReader reader) { } + } + + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook = "OnChangeHealth")] + int health; + + [SyncVar] + SyncObjImplementer syncobj; + + [SyncVar] + SyncListInt syncints; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs new file mode 100644 index 000000000..58201c1bc --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook = "OnChangeHealth")] + int health; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health, int extraFunParam) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs new file mode 100644 index 000000000..afe6eefba --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs @@ -0,0 +1,87 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook="OnChangeHealth")] + int health; + + [SyncVar] int var2; + [SyncVar] int var3; + [SyncVar] int var4; + [SyncVar] int var5; + [SyncVar] int var6; + [SyncVar] int var7; + [SyncVar] int var8; + [SyncVar] int var9; + [SyncVar] int var10; + [SyncVar] int var11; + [SyncVar] int var12; + [SyncVar] int var13; + [SyncVar] int var14; + [SyncVar] int var15; + [SyncVar] int var16; + [SyncVar] int var17; + [SyncVar] int var18; + [SyncVar] int var19; + [SyncVar] int var20; + [SyncVar] int var21; + [SyncVar] int var22; + [SyncVar] int var23; + [SyncVar] int var24; + [SyncVar] int var25; + [SyncVar] int var26; + [SyncVar] int var27; + [SyncVar] int var28; + [SyncVar] int var29; + [SyncVar] int var30; + [SyncVar] int var31; + [SyncVar] int var32; + [SyncVar] int var33; + [SyncVar] int var34; + [SyncVar] int var35; + [SyncVar] int var36; + [SyncVar] int var37; + [SyncVar] int var38; + [SyncVar] int var39; + [SyncVar] int var40; + [SyncVar] int var41; + [SyncVar] int var42; + [SyncVar] int var43; + [SyncVar] int var44; + [SyncVar] int var45; + [SyncVar] int var46; + [SyncVar] int var47; + [SyncVar] int var48; + [SyncVar] int var49; + [SyncVar] int var50; + [SyncVar] int var51; + [SyncVar] int var52; + [SyncVar] int var53; + [SyncVar] int var54; + [SyncVar] int var55; + [SyncVar] int var56; + [SyncVar] int var57; + [SyncVar] int var58; + [SyncVar] int var59; + [SyncVar] int var60; + [SyncVar] int var61; + [SyncVar] int var62; + [SyncVar] int var63; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(int health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs new file mode 100644 index 000000000..c32833222 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [SyncVar(hook = "OnChangeHealth")] + int health; + + public void TakeDamage(int amount) + { + if (!isServer) + return; + + health -= amount; + } + + void OnChangeHealth(bool health) + { + // do things with your health bar + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs new file mode 100644 index 000000000..f529be369 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + private static void TargetCantBeStatic(NetworkConnection nc) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs new file mode 100644 index 000000000..ecd81184f --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + private void TargetRpcMethod() + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs new file mode 100644 index 000000000..d587119df --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + private void TargetRpcMethod(int potatoesRcool, NetworkConnection nc) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs new file mode 100644 index 000000000..d080e95c1 --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + private void DoesntStartWithTarget(NetworkConnection nc) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs new file mode 100644 index 000000000..47eb9e9bd --- /dev/null +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; +using UnityEngine; +using Mirror; + +namespace MirrorTest +{ + class MirrorTestPlayer : NetworkBehaviour + { + [TargetRpc] + private void TargetThatIsTotallyValid(NetworkConnection nc) + { + } + } +} \ No newline at end of file diff --git a/Weaver/Weaver/CompilationFinishedHook.cs b/Weaver/Weaver/CompilationFinishedHook.cs index 785d32910..fb9cd0765 100644 --- a/Weaver/Weaver/CompilationFinishedHook.cs +++ b/Weaver/Weaver/CompilationFinishedHook.cs @@ -1,4 +1,4 @@ -// https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html +// https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html using System.IO; using Mono.Cecil; using UnityEngine; @@ -13,6 +13,35 @@ namespace Mirror.Weaver [InitializeOnLoad] public class CompilationFinishedHook { + public static Action OnWeaverMessage; // delegate for subscription to Weaver debug messages + public static Action OnWeaverWarning; // delegate for subscription to Weaver warning messages + public static Action OnWeaverError; // delete for subscription to Weaver error messages + + public static bool WeaverEnabled { get; set; } // controls whether we weave any assemblies when CompilationPipeline delegates are invoked + public static bool UnityLogEnabled { get; set; } // controls weather Weaver errors are reported direct to the Unity console (tests enable this) + public static bool WeaveFailed { get; private set; } // holds the result status of our latest Weave operation + + // debug message handler that also calls OnMessageMethod delegate + static void HandleMessage(string msg) + { + if (UnityLogEnabled) Debug.Log(msg); + OnWeaverMessage?.Invoke(msg); + } + + // warning message handler that also calls OnWarningMethod delegate + static void HandleWarning(string msg) + { + if (UnityLogEnabled) Debug.LogWarning(msg); + OnWeaverWarning?.Invoke(msg); + } + + // error message handler that also calls OnErrorMethod delegate + static void HandleError(string msg) + { + if (UnityLogEnabled) Debug.LogError(msg); + OnWeaverError?.Invoke(msg); + } + static CompilationFinishedHook() { // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp.dll/ @@ -56,19 +85,21 @@ static CompilationFinishedHook() bool buildingForEditor = assemblyPath.EndsWith("Editor.dll"); if (!buildingForEditor) { - Console.WriteLine("Weaving: " + assemblyPath); + if (UnityLogEnabled) Console.WriteLine("Weaving: " + assemblyPath); // assemblyResolver: unity uses this by default: // ICompilationExtension compilationExtension = GetCompilationExtension(); // IAssemblyResolver assemblyResolver = compilationExtension.GetAssemblyResolver(editor, file, null); // but Weaver creates it's own if null, which is this one: IAssemblyResolver assemblyResolver = new DefaultAssemblyResolver(); - if (Program.Process(unityEngineCoreModuleDLL, mirrorRuntimeDll, outputDirectory, new string[] { assemblyPath }, GetExtraAssemblyPaths(assemblyPath), assemblyResolver, Debug.LogWarning, Debug.LogError)) + if (Program.Process(unityEngineCoreModuleDLL, mirrorRuntimeDll, outputDirectory, new string[] { assemblyPath }, GetExtraAssemblyPaths(assemblyPath), assemblyResolver, HandleWarning, HandleError)) { + WeaveFailed = false; Console.WriteLine("Weaving succeeded for: " + assemblyPath); } else { - Debug.LogError("Weaving failed for: " + assemblyPath); + WeaveFailed = true; + if (UnityLogEnabled) Debug.LogError("Weaving failed for: " + assemblyPath); } } }; @@ -92,7 +123,7 @@ static string[] GetExtraAssemblyPaths(string assemblyPath) } } - Debug.LogWarning("Unable to find configuration for assembly " + assemblyPath); + if (UnityLogEnabled) Debug.LogWarning("Unable to find configuration for assembly " + assemblyPath); return new string[] { }; } @@ -110,4 +141,4 @@ static string FindMirrorRuntime() return ""; } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index 034a64a32..4ec5dab5d 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -1486,7 +1486,8 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes catch (Exception ex) { // workaround until Unity fixes C#7 compiler compability with the UNET weaver - UnityEngine.Debug.LogWarning(string.Format("Unable to delete file {0}: {1}", pdb, ex.Message)); + // un-comment it if you want lot of noise + //UnityEngine.Debug.LogWarning(string.Format("Unable to delete file {0}: {1}", pdb, ex.Message)); } } From 3bb505c0766d57a54e85c3e3bdb76f2504045db5 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Thu, 28 Feb 2019 11:29:06 -0500 Subject: [PATCH 095/276] Docs (#497) * Showcase and ChangeLog docs * Fixed image file extension --- docs/General/ChangeLog.md | 17 ++++++++++++++ docs/General/Cubica.jpg | Bin 0 -> 69081 bytes docs/General/PickupHockey.png | Bin 0 -> 114787 bytes docs/General/ProjectRetrograde.jpg | Bin 0 -> 92282 bytes docs/General/Showcase.md | 36 +++++++++++++++++++++++++++++ docs/General/TheLastIO.png | Bin 0 -> 170443 bytes docs/General/TheWall.jpg | Bin 0 -> 33551 bytes docs/General/uMMORPG.jpg | Bin 0 -> 53261 bytes docs/General/uSurvival.jpg | Bin 0 -> 54823 bytes docs/_data/navigation.yml | 8 +++++-- 10 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 docs/General/ChangeLog.md create mode 100644 docs/General/Cubica.jpg create mode 100644 docs/General/PickupHockey.png create mode 100644 docs/General/ProjectRetrograde.jpg create mode 100644 docs/General/Showcase.md create mode 100644 docs/General/TheLastIO.png create mode 100644 docs/General/TheWall.jpg create mode 100644 docs/General/uMMORPG.jpg create mode 100644 docs/General/uSurvival.jpg diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md new file mode 100644 index 000000000..aa98df3ea --- /dev/null +++ b/docs/General/ChangeLog.md @@ -0,0 +1,17 @@ +# Change Log + +## Version 1.5 -- 2019-Mar-01 + +- Added: Lobby Manager and Lobby Player with example game +- Fixed: SyncVar hook not firing when clients joined + + +## Version 1.4 -- 2019-Feb-01 + +- Mirror is now full source - no more DLL's +- Transports are now components: TCP, UDP, WebGL, Steam + + +## Version 1.3 -- 2019-Jan-01 + + diff --git a/docs/General/Cubica.jpg b/docs/General/Cubica.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50fdc98f56ea05e6ec683236a4ed546f0a77697e GIT binary patch literal 69081 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%0AS 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 H|Bn1W=Wcf7 literal 0 HcmV?d00001 diff --git a/docs/General/PickupHockey.png b/docs/General/PickupHockey.png new file mode 100644 index 0000000000000000000000000000000000000000..23f77026ec4000e256c61c21b32193d5b4b8c939 GIT binary patch literal 114787 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 S_Gpy&QTdU^L)3$(ul^4wzNlva literal 0 HcmV?d00001 diff --git a/docs/General/ProjectRetrograde.jpg b/docs/General/ProjectRetrograde.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7333219358ec94dc69cd3a5b6b612e92ed45cf98 GIT binary patch literal 92282 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%0A+3kol z=3B}6FiBA=qmbk{&*@y#51?tZ`bUF&()`@USG@W?>+*}4UfU9^~UWwW2T~UhdvU7Sl&JYhCe{H zf1UQiaTCR-MmBADA=OxVW${A338gi2MLrbtT~bQ-)dxdBu0yJkdd{qgI6FV&65qq* z&uc!nx%nMlg0F=km)5kUhMY@?L`cGNX42l-YSjguyevbK^1F zg6?P%B0nk%at7##u{+N+-%L$SWq;t8MMadms}TArVr|QJ0D*MN-QJ8BZ$W4BH)Z`q z?NHn$TtZ14cR!JloRr@)Tre{XFBLyZ1);_shd3BY_tV5G9nv@KIiP`-Vq4Zqm1jhB zu+BW($ERSc?V;HR(q3peo3x3>U4I2PQYKs_c}U+ZGKQL)fZPl8F$_O9Ub+DSB9Gu8 zdnL(rpu)IOq%vcP1anE)Wqe|J3F}i7UUepGDqpW}Ltu{EqQ}8L)~Iu_7ipP<^D-PXW}jC8_tJ(PWg%pB#t<_D{4@Eb8el`s<_^E8 zv=8tBPZ+`7*JHnCaQqD&1+!9Hq!e~%UW~SVOcBhy8fwg>0@*LLGAa1N={R0o^r4|T zf2?bdy>;N_)7FcF?{b$D9~L5)-G>&tFiSJiwLn5zl_d6*fE?f%B{aDYhk`=g2`np; zj^JVi9}o>ttzhpacsk5ILnkS5cN@?6!X0UJy^1zirHyswDGB>%szLihlL8~L|L}`` zvnbh~MUQBv%l@7^VjmT;H03TO%`t*OVQM@tceFeRc4ol2T*?)r7Z&Zy8TIj;`BkC$ z#x=FywGP}E9iI-cX=-#GyykHs@UwD&+*V0PXx`Dgl_9LmjEazY+xo1s5&w|b%Dbg3 za5-{0{~jcp)4+;&csfeAekli=Q{zsI4!NM3v!v{9WZ4eC*b2;RMeI-19|UBlf)LaJ zcxQ@rV77D(8&+akgw`|UYt!(VY}BR!bK>OC0$UbI3ZS$Ch$Y^9W?1FTX>@|U9Zy1N z4lwSu68V^Y~hS!i(PTC9-wAh5m;fz_*PX4@ROzgYXoGYVe z8zsUAXM0}Qr^B^J5$E7DK}XJPzLO{U0gS>^eDWz0Emb%v+I7~(l5Iw1Dy@+AI&2)| z*X6l#!yWoL!I`8OM%dvf#fT`pY{$c~%6(rc8MHo-hyCQ!Dwcu))T2B8I>@Q&vgtn=lXFcZbCi>-G5o5yu`8O&1CrXDH`MLyVU$<8ipt;eB zi-GjcV#J%L-vFDmk*%KXSwan46B8X)JDBPP8xUKqtu8c&%;Hc}M-#m%=&F>~t z!taa{b>x7iD4|Z>`n8AuetV<++v_Q9XNn;`{Yh$7Y4n+k21kw@uCds(?V1}(#SyJ5 z9RW9Ix<^%nKYB<8Tmoy7Yk<7rLMvu8@_!RFBt~KM#Rml)NwpHPaIpOJut~4IA|J0X zl~-9Mm!4~5OD-w*oz`ePa$8s&Qrs0xES=u)0mPYHv2KOPK>8kCg%+#U{0Wjjrs5s_ zL3>e$VX_t#*lgKAs$UG zbeS=yQxFJHO{ z55We9Nk^!f4qLhkLL4-5+oYQW#8!8OrJhJkEff?|LFBT>T=w<9vswA|qvPl9ZsvP^ z?`{;jIrZZ+R8V$$;P2gdoM4NnK;3odBkWaR}d}4Ba%Y$>sXs4IFHSR zn$f8_Y~=-9Dx`0PQ63@f%WiJcfp^A~c~ISv!qe*?lp4RV%1d`{QMi28T(f+Ki}sJe zAAUH27X`7x=|as0P-xcICLO^I+%j14JHN{Y?bvh!Iz`$FRAUfN{oilb$=}3iGe4B!$K+c{rHc}7e#-| zp`f7i%&e8l`Ul<4M4yT~_TX;H>>87`D>GGBY$iKH&E^oN7FP|%$

    Bv{LeWb*hTJ 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%0A9syez*r-Z_SSdw1i$-8<3I-ddOL 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 literal 0 HcmV?d00001 diff --git a/docs/General/TheWall.jpg b/docs/General/TheWall.jpg new file mode 100644 index 0000000000000000000000000000000000000000..47b1a765aaf2bb09e468d26431a6cb221d01b1e2 GIT binary patch literal 33551 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 literal 0 HcmV?d00001 diff --git a/docs/General/uMMORPG.jpg b/docs/General/uMMORPG.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b07b201144762ffe095032ad95d2b9dc17c5a9f GIT binary patch literal 53261 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 literal 0 HcmV?d00001 diff --git a/docs/General/uSurvival.jpg b/docs/General/uSurvival.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a2c2bd5042a0adcc5376de7d68cf848a7e2d8cd GIT binary patch literal 54823 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 HKKU|jj9GaKSYd54UJ90P# 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 578890441..c774cf658 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -2,14 +2,18 @@ children: - title: "Overview" url: "/General" - - title: "Why TCP?" - url: "/General/WhyTCP" - title: "Getting Started" url: "/General/Start" - title: "Migration Guide" url: "/General/Migration" - title: "Deprecations" url: "/General/Deprecations" + - title: "ChangeLog" + url: "/General/ChangeLog" + - title: "Showcase" + url: "/General/Showcase" + - title: "Why TCP?" + url: "/General/WhyTCP" - title: "Support" url: "/General/Support" - title: "Concepts" From c8a12eb12e40dfe9434151ede89f226453fc11f7 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Thu, 28 Feb 2019 12:38:01 -0500 Subject: [PATCH 096/276] Update Readme.txt (#498) Removed GitHub link Added notice to restart unity after import --- Assets/Mirror/Readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Readme.txt b/Assets/Mirror/Readme.txt index c16e2d8e0..5c1da3833 100644 --- a/Assets/Mirror/Readme.txt +++ b/Assets/Mirror/Readme.txt @@ -1,7 +1,7 @@ Mirror is a MMO Scale Networking library for Unity, used in uMMORPG, uSurvival and several MMO projects in development. - https://github.com/vis2k/Mirror +*** IMPORTANT -- You must restart Unity after importing Mirror for the Components Menu to update! *** Documentation: https://vis2k.github.io/Mirror/ From 303e9fe1e0391bc8f9ddb0e9cb895d83f6a00bcb Mon Sep 17 00:00:00 2001 From: MrGadget Date: Thu, 28 Feb 2019 13:49:04 -0500 Subject: [PATCH 097/276] Update ChangeLog.md (#500) Added entries for version 1.4 --- docs/General/ChangeLog.md | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md index aa98df3ea..5ccd71061 100644 --- a/docs/General/ChangeLog.md +++ b/docs/General/ChangeLog.md @@ -10,8 +10,23 @@ - Mirror is now full source - no more DLL's - Transports are now components: TCP, UDP, WebGL, Steam - - -## Version 1.3 -- 2019-Jan-01 - - +- Added: HelpURL attirbutes to components +- Added: Automatic targetFramerate for headless builds +- Added: ByteMessage to Messages class +- Fixed: Connectiing state can be cancelled properly +- Fixed: NetworkTransformBase interpolation applied to client's own object +- Fixed: Objects are spawned with correct rotation +- Fixed: SceneId assignment +- Fixed: Changed syncInterval wasn't saved...it is now +- Fixed: Additive Scene loading +- Changed: Transport class now dispatches Unity Events +- Changed: NetworkServer.SendToClientOfPlayer uses NetworkIdentity now +- Changed: NetworkServer.SendToObservers uses NetworkIdentity parameter now +- Changed: NetworkServer.SendToReady uses NetworkIdentity now +- Changed: NetworkServer.DestroyPlayerForConnection uses NetworkIdentity.spawned now +- Changed: NetworkConnection.Dispose uses NetworkIdentity.spawned now +- Changed: NetworkReader.ReadTransform uses NetworkIdentity.spawned now +- Changed: NetworkTransform reimplemented -- physics removed, code simplified +- Removed: NetworkClient.hostPort (port is handled at Transport level) +- Removed: NetworkServer.FindLocalObject (Use NetworkIdentity.spawned\[netId\] instead) +- Removed: ClientScene.FindLocalObject (Use NetworkIdentity.spawned\[netId\] instead) From 16909ce2e7c1eb7250fda4ccf96b17a69ba4bd22 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Thu, 28 Feb 2019 14:10:20 -0500 Subject: [PATCH 098/276] Update ChangeLog.md (#499) Added entries for version 1.5 --- docs/General/ChangeLog.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md index 5ccd71061..4fc30f54b 100644 --- a/docs/General/ChangeLog.md +++ b/docs/General/ChangeLog.md @@ -3,7 +3,19 @@ ## Version 1.5 -- 2019-Mar-01 - Added: Lobby Manager and Lobby Player with example game +- Added: Unit tests for Weaver +- Added: Configurable Server Tickrate in NetworkManager +- Added: New virtual OnClientChangeScene fires right before SceneManager.LoadSceneAsync is executed +- Fixed: Garbage allocations removed from a lot of things (more work to do, we know) - Fixed: SyncVar hook not firing when clients joined +- Fixed: NetworkManager no longer assumes it's on Scene(0) in Build Settings +- Fixed: NetworkAnimator no longer lmited to 6 variables +- Fixed: TelepathyTransport delivering messages when disabled +- Removed: SceneAttribute.cs (merged to CustomAttributes.cs) +- Removed: NetworkClient.allClients (Use NetworkClient.singleton instead) +- Removed: NetworkServer.hostId and NetworkConnection.hostId (holdovers from LLAPI) +- Removed: NetworkConnection.isConnected (NetworkConnection is always connected) +- Changed: Minimum Unity version: 2018.3.6 ## Version 1.4 -- 2019-Feb-01 From abf95651e224b6bc73061a005482536a08d3b02c Mon Sep 17 00:00:00 2001 From: Zac North Date: Thu, 28 Feb 2019 14:53:22 -0500 Subject: [PATCH 099/276] Added modified version of Paul's 2018 WebSockets transport (#369) * Added modified version of Paul's 2018 WebSockets transport, modifications include: - Basic support for WSS - Event format converted to master event format (UnityEvents) * Fixed indentation and added support for Available() * Manually merged in Paul's changes for latest version of Transport * Added comment to CertVerificationCallback to reflect new research done in live environment. * Added NoDelay option and merged in some minor renames from 2018 branch version --- .../Mirror/Runtime/Transport/Websocket.meta | 8 + .../Runtime/Transport/Websocket/Client.cs | 191 ++++++ .../Transport/Websocket/Client.cs.meta | 11 + .../Runtime/Transport/Websocket/ClientJs.cs | 118 ++++ .../Transport/Websocket/ClientJs.cs.meta | 11 + .../Transport/Websocket/Ninja.WebSockets.meta | 8 + .../Websocket/Ninja.WebSockets/BufferPool.cs | 251 ++++++++ .../Ninja.WebSockets/BufferPool.cs.meta | 11 + .../Ninja.WebSockets/Exceptions.meta | 8 + .../Exceptions/EntityTooLargeException.cs | 26 + .../EntityTooLargeException.cs.meta | 11 + .../InvalidHttpResponseCodeException.cs | 35 ++ .../InvalidHttpResponseCodeException.cs.meta | 11 + .../Ninja.WebSockets/Exceptions/README.txt | 1 + .../Exceptions/README.txt.meta | 7 + .../SecWebSocketKeyMissingException.cs | 25 + .../SecWebSocketKeyMissingException.cs.meta | 11 + .../ServerListenerSocketException.cs | 24 + .../ServerListenerSocketException.cs.meta | 11 + .../WebSocketBufferOverflowException.cs | 22 + .../WebSocketBufferOverflowException.cs.meta | 11 + .../WebSocketHandshakeFailedException.cs | 23 + .../WebSocketHandshakeFailedException.cs.meta | 11 + .../WebSocketVersionNotSupportedException.cs | 23 + ...SocketVersionNotSupportedException.cs.meta | 11 + .../Websocket/Ninja.WebSockets/HttpHelper.cs | 202 ++++++ .../Ninja.WebSockets/HttpHelper.cs.meta | 11 + .../Websocket/Ninja.WebSockets/IBufferPool.cs | 17 + .../Ninja.WebSockets/IBufferPool.cs.meta | 11 + .../Ninja.WebSockets/IPingPongManager.cs | 24 + .../Ninja.WebSockets/IPingPongManager.cs.meta | 11 + .../IWebSocketClientFactory.cs | 45 ++ .../IWebSocketClientFactory.cs.meta | 11 + .../IWebSocketServerFactory.cs | 40 ++ .../IWebSocketServerFactory.cs.meta | 11 + .../Websocket/Ninja.WebSockets/Internal.meta | 8 + .../Internal/BinaryReaderWriter.cs | 149 +++++ .../Internal/BinaryReaderWriter.cs.meta | 11 + .../Ninja.WebSockets/Internal/Events.cs | 393 ++++++++++++ .../Ninja.WebSockets/Internal/Events.cs.meta | 11 + .../Internal/WebSocketFrame.cs | 31 + .../Internal/WebSocketFrame.cs.meta | 11 + .../Internal/WebSocketFrameCommon.cs | 62 ++ .../Internal/WebSocketFrameCommon.cs.meta | 11 + .../Internal/WebSocketFrameReader.cs | 168 +++++ .../Internal/WebSocketFrameReader.cs.meta | 11 + .../Internal/WebSocketFrameWriter.cs | 100 +++ .../Internal/WebSocketFrameWriter.cs.meta | 11 + .../Internal/WebSocketImplementation.cs | 585 ++++++++++++++++++ .../Internal/WebSocketImplementation.cs.meta | 11 + .../Internal/WebSocketOpCode.cs | 12 + .../Internal/WebSocketOpCode.cs.meta | 11 + .../Ninja.WebSockets/PingPongManager.cs | 139 +++++ .../Ninja.WebSockets/PingPongManager.cs.meta | 11 + .../Ninja.WebSockets/PongEventArgs.cs | 26 + .../Ninja.WebSockets/PongEventArgs.cs.meta | 11 + .../Ninja.WebSockets/Properties.meta | 8 + .../Properties/PublishProfiles.meta | 8 + .../PublishProfiles/FolderProfile.pubxml | 13 + .../PublishProfiles/FolderProfile.pubxml.meta | 7 + .../WebSocketClientFactory.cs | 289 +++++++++ .../WebSocketClientFactory.cs.meta | 11 + .../WebSocketClientOptions.cs | 66 ++ .../WebSocketClientOptions.cs.meta | 11 + .../Ninja.WebSockets/WebSocketHttpContext.cs | 49 ++ .../WebSocketHttpContext.cs.meta | 11 + .../WebSocketServerFactory.cs | 169 +++++ .../WebSocketServerFactory.cs.meta | 11 + .../WebSocketServerOptions.cs | 45 ++ .../WebSocketServerOptions.cs.meta | 11 + .../Runtime/Transport/Websocket/Plugins.meta | 8 + .../Websocket/Plugins/WebSocket.jslib | 108 ++++ .../Websocket/Plugins/WebSocket.jslib.meta | 34 + .../Runtime/Transport/Websocket/Server.cs | 343 ++++++++++ .../Transport/Websocket/Server.cs.meta | 11 + .../Transport/Websocket/WebsocketTransport.cs | 138 +++++ .../Websocket/WebsocketTransport.cs.meta | 11 + 77 files changed, 4408 insertions(+) create mode 100644 Assets/Mirror/Runtime/Transport/Websocket.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Client.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Client.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Plugins.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Server.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Server.cs.meta create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs.meta diff --git a/Assets/Mirror/Runtime/Transport/Websocket.meta b/Assets/Mirror/Runtime/Transport/Websocket.meta new file mode 100644 index 000000000..5797569d5 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75b15785adf2d4b7c8d779f5ba6a6326 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs new file mode 100644 index 000000000..a90e0fba6 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs @@ -0,0 +1,191 @@ +#if !UNITY_WEBGL || UNITY_EDITOR + +using System; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Net.WebSockets; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets; +using UnityEngine; + +namespace Mirror +{ + + public class Client + { + public event Action Connected; + public event Action ReceivedData; + public event Action Disconnected; + public event Action ReceivedError; + + private const int MaxMessageSize = 1024 * 256; + WebSocket webSocket; + CancellationTokenSource cancellation; + + public bool NoDelay = true; + + public bool Connecting { get; set; } + public bool IsConnected { get; set; } + + private Uri uri; + + public async void Connect(Uri uri) + { + // not if already started + if (webSocket != null) + { + // paul: exceptions are better than silence + ReceivedError?.Invoke(new Exception("Client already connected")); + return; + } + this.uri = uri; + // We are connecting from now until Connect succeeds or fails + Connecting = true; + + WebSocketClientOptions options = new WebSocketClientOptions() + { + NoDelay = true, + KeepAliveInterval = TimeSpan.Zero, + SecWebSocketProtocol = "binary" + }; + + cancellation = new CancellationTokenSource(); + + var clientFactory = new WebSocketClientFactory(); + + try + { + using (webSocket = await clientFactory.ConnectAsync(uri, options, cancellation.Token)) + { + CancellationToken token = cancellation.Token; + IsConnected = true; + Connecting = false; + Connected?.Invoke(); + + await ReceiveLoop(webSocket, token); + } + } + catch (ObjectDisposedException) + { + // No error, the client got closed + } + catch (Exception ex) + { + ReceivedError?.Invoke(ex); + } + finally + { + Disconnect(); + Disconnected?.Invoke(); + } + } + + private async Task ReceiveLoop(WebSocket webSocket, CancellationToken token) + { + var buffer = new byte[MaxMessageSize]; + + while (true) + { + WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), token); + + + if (result == null) + break; + if (result.MessageType == WebSocketMessageType.Close) + break; + + // we got a text or binary message, need the full message + byte[] data = await ReadFrames(result, webSocket, buffer); + + if (data == null) + break; + + try + { + ReceivedData?.Invoke(data); + } + catch (Exception exception) + { + ReceivedError?.Invoke(exception); + } + } + } + + // a message might come splitted in multiple frames + // collect all frames + private async Task ReadFrames(WebSocketReceiveResult result, WebSocket webSocket, byte[] buffer) + { + int count = result.Count; + + while (!result.EndOfMessage) + { + if (count >= MaxMessageSize) + { + string closeMessage = string.Format("Maximum message size: {0} bytes.", MaxMessageSize); + await webSocket.CloseAsync(WebSocketCloseStatus.MessageTooBig, closeMessage, CancellationToken.None); + ReceivedError?.Invoke(new WebSocketException(WebSocketError.HeaderError)); + return null; + } + + result = await webSocket.ReceiveAsync(new ArraySegment(buffer, count, MaxMessageSize - count), CancellationToken.None); + count += result.Count; + + } + return new ArraySegment(buffer, 0, count).ToArray(); + } + + public void Disconnect() + { + cancellation?.Cancel(); + + // only if started + if (webSocket != null) + { + // close client + webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure,"", CancellationToken.None); + webSocket = null; + Connecting = false; + IsConnected = false; + } + } + + // send the data or throw exception + public async void Send(byte[] data) + { + if (webSocket == null) + { + ReceivedError?.Invoke(new SocketException((int)SocketError.NotConnected)); + return; + } + + try + { + await webSocket.SendAsync(new ArraySegment(data), WebSocketMessageType.Binary, true, cancellation.Token); + } + catch (Exception ex) + { + Disconnect(); + ReceivedError?.Invoke(ex); + } + } + + + public override string ToString() + { + if (IsConnected ) + { + return $"Websocket connected to {uri}"; + } + if (Connecting) + { + return $"Websocket connecting to {uri}"; + } + return ""; + } + } + +} + +#endif \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs.meta new file mode 100644 index 000000000..70e22d37a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f69ff0981a33445a89b5e37b245806f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs new file mode 100644 index 000000000..bbe12cd1c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs @@ -0,0 +1,118 @@ +#if UNITY_WEBGL && !UNITY_EDITOR + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Sockets; +using System.Net.WebSockets; +using System.Runtime.InteropServices; +using System.Threading; +using System.Threading.Tasks; +using AOT; +using Ninja.WebSockets; +using UnityEngine; + +namespace Mirror +{ + // this is the client implementation used by browsers + public class Client + { + private static int idGenerator = 0; + private static readonly Dictionary clients = new Dictionary(); + + public bool NoDelay = true; + + public event Action Connected; + public event Action ReceivedData; + public event Action Disconnected; + public event Action ReceivedError; + + public bool Connecting { get; set; } + public bool IsConnected + { + get + { + return SocketState(m_NativeRef) != 0; + } + } + + int m_NativeRef = 0; + readonly int id; + + public Client() + { + id = Interlocked.Increment(ref idGenerator); + } + + public void Connect(Uri uri) + { + clients[id] = this; + + Connecting = true; + + m_NativeRef = SocketCreate(uri.ToString(), id, OnOpen, OnData, OnClose); + } + + public void Disconnect() + { + SocketClose(m_NativeRef); + } + + // send the data or throw exception + public void Send(byte[] data) + { + SocketSend(m_NativeRef, data, data.Length); + } + + + #region Javascript native functions + [DllImport("__Internal")] + private static extern int SocketCreate( + string url, + int id, + Action onpen, + Action ondata, + Action onclose); + + [DllImport("__Internal")] + private static extern int SocketState(int socketInstance); + + [DllImport("__Internal")] + private static extern void SocketSend(int socketInstance, byte[] ptr, int length); + + [DllImport("__Internal")] + private static extern void SocketClose(int socketInstance); + + #endregion + + #region Javascript callbacks + + [MonoPInvokeCallback(typeof(Action))] + public static void OnOpen(int id) + { + clients[id].Connecting = false; + clients[id].Connected?.Invoke(); + } + + [MonoPInvokeCallback(typeof(Action))] + public static void OnClose(int id) + { + clients[id].Connecting = false; + clients[id].Disconnected?.Invoke(); + clients.Remove(id); + } + + [MonoPInvokeCallback(typeof(Action))] + public static void OnData(int id, IntPtr ptr, int length) + { + byte[] data = new byte[length]; + Marshal.Copy(ptr, data, 0, length); + + clients[id].ReceivedData(data); + } + #endregion + } +} + +#endif \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs.meta new file mode 100644 index 000000000..2fdca98f4 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 278e08c90f2324e2e80a0fe8984b0590 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets.meta new file mode 100644 index 000000000..e15657884 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 100fd42034e0d46db8980db4cc0cd178 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs new file mode 100644 index 000000000..ab63130e9 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets +{ + ///

    + /// This buffer pool is instance thread safe + /// Use GetBuffer to get a MemoryStream (with a publically accessible buffer) + /// Calling Close on this MemoryStream will clear its internal buffer and return the buffer to the pool for reuse + /// MemoryStreams can grow larger than the DEFAULT_BUFFER_SIZE (or whatever you passed in) + /// and the underlying buffers will be returned to the pool at their larger sizes + /// + public class BufferPool : IBufferPool + { + const int DEFAULT_BUFFER_SIZE = 16384; + private readonly ConcurrentStack _bufferPoolStack; + private readonly int _bufferSize; + + public BufferPool() : this(DEFAULT_BUFFER_SIZE) + { + } + + public BufferPool(int bufferSize) + { + _bufferSize = bufferSize; + _bufferPoolStack = new ConcurrentStack(); + } + + /// + /// This memory stream is not instance thread safe (not to be confused with the BufferPool which is instance thread safe) + /// + protected class PublicBufferMemoryStream : MemoryStream + { + private readonly BufferPool _bufferPoolInternal; + private byte[] _buffer; + private MemoryStream _ms; + + public PublicBufferMemoryStream(byte[] buffer, BufferPool bufferPool) : base(new byte[0]) + { + _bufferPoolInternal = bufferPool; + _buffer = buffer; + _ms = new MemoryStream(buffer, 0, buffer.Length, true, true); + } + + public override long Length => base.Length; + + public override IAsyncResult BeginRead(byte[] buffer, int offset, int count, AsyncCallback callback, object state) + { + return _ms.BeginRead(buffer, offset, count, callback, state); + } + + public override IAsyncResult BeginWrite(byte[] buffer, int offset, int count, AsyncCallback callback, object state) + { + return _ms.BeginWrite(buffer, offset, count, callback, state); + } + + public override bool CanRead => _ms.CanRead; + public override bool CanSeek => _ms.CanSeek; + public override bool CanTimeout => _ms.CanTimeout; + public override bool CanWrite => _ms.CanWrite; + public override int Capacity + { + get { return _ms.Capacity; } + set { _ms.Capacity = value; } + } + + public override void Close() + { + // clear the buffer - we only need to clear up to the number of bytes we have already written + Array.Clear(_buffer, 0, (int)_ms.Position); + + _ms.Close(); + + // return the buffer to the pool + _bufferPoolInternal.ReturnBuffer(_buffer); + } + + public override Task CopyToAsync(Stream destination, int bufferSize, CancellationToken cancellationToken) + { + return _ms.CopyToAsync(destination, bufferSize, cancellationToken); + } + + public override int EndRead(IAsyncResult asyncResult) + { + return _ms.EndRead(asyncResult); + } + + public override void EndWrite(IAsyncResult asyncResult) + { + _ms.EndWrite(asyncResult); + } + + public override void Flush() + { + _ms.Flush(); + } + + public override Task FlushAsync(CancellationToken cancellationToken) + { + return _ms.FlushAsync(cancellationToken); + } + + public override byte[] GetBuffer() + { + return _buffer; + } + + public override long Position + { + get { return _ms.Position; } + set { _ms.Position = value; } + } + + public override int Read(byte[] buffer, int offset, int count) + { + return _ms.Read(buffer, offset, count); + } + + private void EnlargeBufferIfRequired(int count) + { + // we cannot fit the data into the existing buffer, time for a new buffer + if (count > (_buffer.Length - _ms.Position)) + { + int position = (int)_ms.Position; + + // double the buffer size + int newSize = _buffer.Length * 2; + + // make sure the new size is big enough + int requiredSize = count + _buffer.Length - position; + if (requiredSize > newSize) + { + // compute the power of two larger than requiredSize. so 40000 => 65536 + newSize = (int)Math.Pow(2, Math.Ceiling(Math.Log(requiredSize) / Math.Log(2))); ; + } + + var newBuffer = new byte[newSize]; + Buffer.BlockCopy(_buffer, 0, newBuffer, 0, position); + _ms = new MemoryStream(newBuffer, 0, newBuffer.Length, true, true) + { + Position = position + }; + + _buffer = newBuffer; + } + } + + public override void WriteByte(byte value) + { + EnlargeBufferIfRequired(1); + _ms.WriteByte(value); + } + + public override void Write(byte[] buffer, int offset, int count) + { + EnlargeBufferIfRequired(count); + _ms.Write(buffer, offset, count); + } + + public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + EnlargeBufferIfRequired(count); + return _ms.WriteAsync(buffer, offset, count); + } + + public override object InitializeLifetimeService() + { + return _ms.InitializeLifetimeService(); + } + + public override Task ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) + { + return _ms.ReadAsync(buffer, offset, count, cancellationToken); + } + + public override int ReadByte() + { + return _ms.ReadByte(); + } + + public override int ReadTimeout { + get { return _ms.ReadTimeout; } + set { _ms.ReadTimeout = value; } + } + + public override long Seek(long offset, SeekOrigin loc) + { + return _ms.Seek(offset, loc); + } + + /// + /// Note: This will not make the MemoryStream any smaller, only larger + /// + public override void SetLength(long value) + { + EnlargeBufferIfRequired((int)value); + } + + public override byte[] ToArray() + { + // you should never call this + return _ms.ToArray(); + } + + public override int WriteTimeout + { + get { return _ms.WriteTimeout; } + set { _ms.WriteTimeout = value; } + } + +#if !NET45 + public override bool TryGetBuffer(out ArraySegment buffer) + { + buffer = new ArraySegment(_buffer, 0, (int)_ms.Position); + return true; + } +#endif + + public override void WriteTo(Stream stream) + { + _ms.WriteTo(stream); + } + } + + /// + /// Gets a MemoryStream built from a buffer plucked from a thread safe pool + /// The pool grows automatically. + /// Closing the memory stream clears the buffer and returns it to the pool + /// + public MemoryStream GetBuffer() + { + byte[] buffer; + if (!_bufferPoolStack.TryPop(out buffer)) + { + buffer = new byte[_bufferSize]; + } + + return new PublicBufferMemoryStream(buffer, this); + } + + protected void ReturnBuffer(byte[] buffer) + { + _bufferPoolStack.Push(buffer); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs.meta new file mode 100644 index 000000000..2bfda082f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e362254f82b2a4627bfd83394d093715 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions.meta new file mode 100644 index 000000000..210aa6ba9 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca217a8fd870444d0ae623d3905d603f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs new file mode 100644 index 000000000..7b59162ef --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs @@ -0,0 +1,26 @@ +using System; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class EntityTooLargeException : Exception + { + public EntityTooLargeException() : base() + { + + } + + /// + /// Http header too large to fit in buffer + /// + public EntityTooLargeException(string message) : base(message) + { + + } + + public EntityTooLargeException(string message, Exception inner) : base(message, inner) + { + + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs.meta new file mode 100644 index 000000000..b54345b0d --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ef87d4a0822c4d2da3e8daa392e61d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs new file mode 100644 index 000000000..9b776f687 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class InvalidHttpResponseCodeException : Exception + { + public string ResponseCode { get; private set; } + + public string ResponseHeader { get; private set; } + + public string ResponseDetails { get; private set; } + + public InvalidHttpResponseCodeException() : base() + { + } + + public InvalidHttpResponseCodeException(string message) : base(message) + { + } + + public InvalidHttpResponseCodeException(string responseCode, string responseDetails, string responseHeader) : base(responseCode) + { + ResponseCode = responseCode; + ResponseDetails = responseDetails; + ResponseHeader = responseHeader; + } + + public InvalidHttpResponseCodeException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs.meta new file mode 100644 index 000000000..7e772d50c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c2d7303a1a324f0ebe15cb3faf9b0d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt new file mode 100644 index 000000000..a1d28e4bf --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt @@ -0,0 +1 @@ +Make sure that exceptions follow the microsoft standards \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt.meta new file mode 100644 index 000000000..2ac50596e --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/README.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3488f8d8c73d64a12bc24930c0210a41 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs new file mode 100644 index 000000000..086b6cd12 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class SecWebSocketKeyMissingException : Exception + { + public SecWebSocketKeyMissingException() : base() + { + + } + + public SecWebSocketKeyMissingException(string message) : base(message) + { + + } + + public SecWebSocketKeyMissingException(string message, Exception inner) : base(message, inner) + { + + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs.meta new file mode 100644 index 000000000..ebb2ec031 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 66d99fe90f4cb4471bf01c6f391ffc29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs new file mode 100644 index 000000000..f66ee2760 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Net.Sockets; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class ServerListenerSocketException : Exception + { + public ServerListenerSocketException() : base() + { + } + + public ServerListenerSocketException(string message) : base(message) + { + } + + public ServerListenerSocketException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs.meta new file mode 100644 index 000000000..10b338429 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b188b3dddee84decadd5913a535746b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs new file mode 100644 index 000000000..d91b2deae --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class WebSocketBufferOverflowException : Exception + { + public WebSocketBufferOverflowException() : base() + { + } + + public WebSocketBufferOverflowException(string message) : base(message) + { + } + + public WebSocketBufferOverflowException(string message, Exception inner) : base(message, inner) + { + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs.meta new file mode 100644 index 000000000..419f9d009 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c3188abcb6c441759011da01fa342f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs new file mode 100644 index 000000000..da2e6b590 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class WebSocketHandshakeFailedException : Exception + { + public WebSocketHandshakeFailedException() : base() + { + } + + public WebSocketHandshakeFailedException(string message) : base(message) + { + } + + public WebSocketHandshakeFailedException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs.meta new file mode 100644 index 000000000..8bd42715c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7dd72ca0a28054d258c1d1ad8254a16e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs new file mode 100644 index 000000000..1a54396c7 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Ninja.WebSockets.Exceptions +{ + [Serializable] + public class WebSocketVersionNotSupportedException : Exception + { + public WebSocketVersionNotSupportedException() : base() + { + } + + public WebSocketVersionNotSupportedException(string message) : base(message) + { + } + + public WebSocketVersionNotSupportedException(string message, Exception inner) : base(message, inner) + { + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs.meta new file mode 100644 index 000000000..6f1439494 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc12d4b9cfe854aeeaab3c9f2f3d165e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs new file mode 100644 index 000000000..bd55e2261 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs @@ -0,0 +1,202 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.CompilerServices; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets.Exceptions; +using System.Linq; + +namespace Ninja.WebSockets +{ + public class HttpHelper + { + private const string HTTP_GET_HEADER_REGEX = @"^GET(.*)HTTP\/1\.1"; + + /// + /// Calculates a random WebSocket key that can be used to initiate a WebSocket handshake + /// + /// A random websocket key + public static string CalculateWebSocketKey() + { + // this is not used for cryptography so doing something simple like he code below is op + Random rand = new Random((int)DateTime.Now.Ticks); + byte[] keyAsBytes = new byte[16]; + rand.NextBytes(keyAsBytes); + return Convert.ToBase64String(keyAsBytes); + } + + /// + /// Computes a WebSocket accept string from a given key + /// + /// The web socket key to base the accept string on + /// A web socket accept string + public static string ComputeSocketAcceptString(string secWebSocketKey) + { + // this is a guid as per the web socket spec + const string webSocketGuid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + string concatenated = secWebSocketKey + webSocketGuid; + byte[] concatenatedAsBytes = Encoding.UTF8.GetBytes(concatenated); + + // note an instance of SHA1 is not threadsafe so we have to create a new one every time here + byte[] sha1Hash = SHA1.Create().ComputeHash(concatenatedAsBytes); + string secWebSocketAccept = Convert.ToBase64String(sha1Hash); + return secWebSocketAccept; + } + + /// + /// Reads an http header as per the HTTP spec + /// + /// The stream to read UTF8 text from + /// The cancellation token + /// The HTTP header + public static async Task ReadHttpHeaderAsync(Stream stream, CancellationToken token) + { + int length = 1024*16; // 16KB buffer more than enough for http header + byte[] buffer = new byte[length]; + int offset = 0; + int bytesRead = 0; + + do + { + if (offset >= length) + { + throw new EntityTooLargeException("Http header message too large to fit in buffer (16KB)"); + } + + bytesRead = await stream.ReadAsync(buffer, offset, length - offset, token); + offset += bytesRead; + string header = Encoding.UTF8.GetString(buffer, 0, offset); + + // as per http specification, all headers should end this this + if (header.Contains("\r\n\r\n")) + { + return header; + } + + } while (bytesRead > 0); + + return string.Empty; + } + + /// + /// Decodes the header to detect is this is a web socket upgrade response + /// + /// The HTTP header + /// True if this is an http WebSocket upgrade response + public static bool IsWebSocketUpgradeRequest(String header) + { + Regex getRegex = new Regex(HTTP_GET_HEADER_REGEX, RegexOptions.IgnoreCase); + Match getRegexMatch = getRegex.Match(header); + + if (getRegexMatch.Success) + { + // check if this is a web socket upgrade request + Regex webSocketUpgradeRegex = new Regex("Upgrade: websocket", RegexOptions.IgnoreCase); + Match webSocketUpgradeRegexMatch = webSocketUpgradeRegex.Match(header); + return webSocketUpgradeRegexMatch.Success; + } + + return false; + } + + /// + /// Gets the path from the HTTP header + /// + /// The HTTP header to read + /// The path + public static string GetPathFromHeader(string httpHeader) + { + Regex getRegex = new Regex(HTTP_GET_HEADER_REGEX, RegexOptions.IgnoreCase); + Match getRegexMatch = getRegex.Match(httpHeader); + + if (getRegexMatch.Success) + { + // extract the path attribute from the first line of the header + return getRegexMatch.Groups[1].Value.Trim(); + } + + return null; + } + + public static IList GetSubProtocols(string httpHeader) + { + Regex regex = new Regex(@"Sec-WebSocket-Protocol:(?.+)", RegexOptions.IgnoreCase); + Match match = regex.Match(httpHeader); + + if (match.Success) + { + const int MAX_LEN = 2048; + if (match.Length > MAX_LEN) + { + throw new EntityTooLargeException($"Sec-WebSocket-Protocol exceeded the maximum of length of {MAX_LEN}"); + } + + // extract a csv list of sub protocols (in order of highest preference first) + string csv = match.Groups["protocols"].Value.Trim(); + return csv.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) + .Select(x => x.Trim()) + .ToList(); + } + + return new List(); + } + + /// + /// Reads the HTTP response code from the http response string + /// + /// The response string + /// the response code + public static string ReadHttpResponseCode(string response) + { + Regex getRegex = new Regex(@"HTTP\/1\.1 (.*)", RegexOptions.IgnoreCase); + Match getRegexMatch = getRegex.Match(response); + + if (getRegexMatch.Success) + { + // extract the path attribute from the first line of the header + return getRegexMatch.Groups[1].Value.Trim(); + } + + return null; + } + + /// + /// Writes an HTTP response string to the stream + /// + /// The response (without the new line characters) + /// The stream to write to + /// The cancellation token + public static async Task WriteHttpHeaderAsync(string response, Stream stream, CancellationToken token) + { + response = response.Trim() + "\r\n\r\n"; + Byte[] bytes = Encoding.UTF8.GetBytes(response); + await stream.WriteAsync(bytes, 0, bytes.Length, token); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs.meta new file mode 100644 index 000000000..808420ce2 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c90b5378af58402987e8a2938d763f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs new file mode 100644 index 000000000..08910cc1a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace Ninja.WebSockets +{ + public interface IBufferPool + { + /// + /// Gets a MemoryStream built from a buffer plucked from a thread safe pool + /// The pool grows automatically. + /// Closing the memory stream clears the buffer and returns it to the pool + /// + MemoryStream GetBuffer(); + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs.meta new file mode 100644 index 000000000..cb3da58ed --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 894bb86ff9cbe4179a6764904f9dd742 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs new file mode 100644 index 000000000..7763cb31a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs @@ -0,0 +1,24 @@ +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets +{ + /// + /// Ping Pong Manager used to facilitate ping pong WebSocket messages + /// + interface IPingPongManager + { + /// + /// Raised when a Pong frame is received + /// + event EventHandler Pong; + + /// + /// Sends a ping frame + /// + /// The payload (must be 125 bytes of less) + /// The cancellation token + Task SendPing(ArraySegment payload, CancellationToken cancellation); + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs.meta new file mode 100644 index 000000000..9ac6ac52f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1432676d0074e4a7ca123228797fe0ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs new file mode 100644 index 000000000..171618447 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Net.WebSockets; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets +{ + /// + /// Web socket client factory used to open web socket client connections + /// + public interface IWebSocketClientFactory + { + /// + /// Connect with default options + /// + /// The WebSocket uri to connect to (e.g. ws://example.com or wss://example.com for SSL) + /// The optional cancellation token + /// A connected web socket instance + Task ConnectAsync(Uri uri, CancellationToken token = default(CancellationToken)); + + /// + /// Connect with options specified + /// + /// The WebSocket uri to connect to (e.g. ws://example.com or wss://example.com for SSL) + /// The WebSocket client options + /// The optional cancellation token + /// A connected web socket instance + Task ConnectAsync(Uri uri, WebSocketClientOptions options, CancellationToken token = default(CancellationToken)); + + /// + /// Connect with a stream that has already been opened and HTTP websocket upgrade request sent + /// This function will check the handshake response from the server and proceed if successful + /// Use this function if you have specific requirements to open a conenction like using special http headers and cookies + /// You will have to build your own HTTP websocket upgrade request + /// You may not even choose to use TCP/IP and this function will allow you to do that + /// + /// The full duplex response stream from the server + /// The secWebSocketKey you used in the handshake request + /// The WebSocket client options + /// The optional cancellation token + /// + Task ConnectAsync(Stream responseStream, string secWebSocketKey, WebSocketClientOptions options, CancellationToken token = default(CancellationToken)); + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs.meta new file mode 100644 index 000000000..7039071ad --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 290e337adc73544809ef6db4d09ec5bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs new file mode 100644 index 000000000..437a0aaa1 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs @@ -0,0 +1,40 @@ +using System.IO; +using System.Net.WebSockets; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets +{ + /// + /// Web socket server factory used to open web socket server connections + /// + public interface IWebSocketServerFactory + { + /// + /// Reads a http header information from a stream and decodes the parts relating to the WebSocket protocot upgrade + /// + /// The network stream + /// The optional cancellation token + /// Http data read from the stream + Task ReadHttpHeaderFromStreamAsync(Stream stream, CancellationToken token = default(CancellationToken)); + + /// + /// Accept web socket with default options + /// Call ReadHttpHeaderFromStreamAsync first to get WebSocketHttpContext + /// + /// The http context used to initiate this web socket request + /// The optional cancellation token + /// A connected web socket + Task AcceptWebSocketAsync(WebSocketHttpContext context, CancellationToken token = default(CancellationToken)); + + /// + /// Accept web socket with options specified + /// Call ReadHttpHeaderFromStreamAsync first to get WebSocketHttpContext + /// + /// The http context used to initiate this web socket request + /// The web socket options + /// The optional cancellation token + /// A connected web socket + Task AcceptWebSocketAsync(WebSocketHttpContext context, WebSocketServerOptions options, CancellationToken token = default(CancellationToken)); + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs.meta new file mode 100644 index 000000000..391cb7f59 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33e062311740342db82c2f6e53fbce73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal.meta new file mode 100644 index 000000000..b6bf8b27a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58fcf4fbb7c9b47eeaf267adb27810d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs new file mode 100644 index 000000000..9673e0ccb --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs @@ -0,0 +1,149 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.IO; +using System.Net.Sockets; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets.Internal +{ + internal class BinaryReaderWriter + { + public static async Task ReadExactly(int length, Stream stream, ArraySegment buffer, CancellationToken cancellationToken) + { + if (buffer.Count < length) + { + // This will happen if the calling function supplied a buffer that was too small to fit the payload of the websocket frame. + // Note that this can happen on the close handshake where the message size can be larger than the regular payload + throw new InternalBufferOverflowException($"Unable to read {length} bytes into buffer (offset: {buffer.Offset} size: {buffer.Count}). Use a larger read buffer"); + } + + int offset = 0; + while (offset < length) + { + int bytesRead = 0; + + NetworkStream networkStream = stream as NetworkStream; + if (networkStream != null && networkStream.DataAvailable) + { + // paul: if data is available read it immediatelly. + // in my tests this performed a lot better, because ReadAsync always waited until + // the next frame. + bytesRead = stream.Read(buffer.Array, buffer.Offset + offset, length - offset); + } + else + { + bytesRead = await stream.ReadAsync(buffer.Array, buffer.Offset + offset, length - offset, cancellationToken); + } + + if (bytesRead == 0) + { + throw new EndOfStreamException(string.Format("Unexpected end of stream encountered whilst attempting to read {0:#,##0} bytes", length)); + } + + offset += bytesRead; + } + } + + public static async Task ReadUShortExactly(Stream stream, bool isLittleEndian, ArraySegment buffer, CancellationToken cancellationToken) + { + await ReadExactly(2, stream, buffer, cancellationToken); + + if (!isLittleEndian) + { + Array.Reverse(buffer.Array, buffer.Offset, 2); // big endian + } + + return BitConverter.ToUInt16(buffer.Array, buffer.Offset); + } + + public static async Task ReadULongExactly(Stream stream, bool isLittleEndian, ArraySegment buffer, CancellationToken cancellationToken) + { + await ReadExactly(8, stream, buffer, cancellationToken); + + if (!isLittleEndian) + { + Array.Reverse(buffer.Array, buffer.Offset, 8); // big endian + } + + return BitConverter.ToUInt64(buffer.Array, buffer.Offset); + } + + public static async Task ReadLongExactly(Stream stream, bool isLittleEndian, ArraySegment buffer, CancellationToken cancellationToken) + { + await ReadExactly(8, stream, buffer, cancellationToken); + + if (!isLittleEndian) + { + Array.Reverse(buffer.Array, buffer.Offset, 8); // big endian + } + + return BitConverter.ToInt64(buffer.Array, buffer.Offset); + } + + public static void WriteInt(int value, Stream stream, bool isLittleEndian) + { + byte[] buffer = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian && !isLittleEndian) + { + Array.Reverse(buffer); + } + + stream.Write(buffer, 0, buffer.Length); + } + + public static void WriteULong(ulong value, Stream stream, bool isLittleEndian) + { + byte[] buffer = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian && ! isLittleEndian) + { + Array.Reverse(buffer); + } + + stream.Write(buffer, 0, buffer.Length); + } + + public static void WriteLong(long value, Stream stream, bool isLittleEndian) + { + byte[] buffer = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian && !isLittleEndian) + { + Array.Reverse(buffer); + } + + stream.Write(buffer, 0, buffer.Length); + } + + public static void WriteUShort(ushort value, Stream stream, bool isLittleEndian) + { + byte[] buffer = BitConverter.GetBytes(value); + if (BitConverter.IsLittleEndian && !isLittleEndian) + { + Array.Reverse(buffer); + } + + stream.Write(buffer, 0, buffer.Length); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs.meta new file mode 100644 index 000000000..8671b8180 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2379de83fde9446689e7fd94d8cefca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs new file mode 100644 index 000000000..518fcd337 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs @@ -0,0 +1,393 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.Diagnostics.Tracing; +using System.Net.Security; +using System.Net.WebSockets; + +namespace Ninja.WebSockets.Internal +{ + /// + /// Use the Guid to locate this EventSource in PerfView using the Additional Providers box (without wildcard characters) + /// + [EventSource(Name = "Ninja-WebSockets", Guid = "7DE1A071-4F85-4DBD-8FB1-EE8D3845E087")] + internal sealed class Events : EventSource + { + public static Events Log = new Events(); + + [Event(1, Level = EventLevel.Informational)] + public void ClientConnectingToIpAddress(Guid guid, string ipAddress, int port) + { + if (this.IsEnabled()) + { + WriteEvent(1, guid, ipAddress, port); + } + } + + [Event(2, Level = EventLevel.Informational)] + public void ClientConnectingToHost(Guid guid, string host, int port) + { + if (this.IsEnabled()) + { + WriteEvent(2, guid, host, port); + } + } + + [Event(3, Level = EventLevel.Informational)] + public void AttemtingToSecureSslConnection(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(3, guid); + } + } + + [Event(4, Level = EventLevel.Informational)] + public void ConnectionSecured(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(4, guid); + } + } + + [Event(5, Level = EventLevel.Informational)] + public void ConnectionNotSecure(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(5, guid); + } + } + + [Event(6, Level = EventLevel.Error)] + public void SslCertificateError(SslPolicyErrors sslPolicyErrors) + { + if (this.IsEnabled()) + { + WriteEvent(6, sslPolicyErrors); + } + } + + [Event(7, Level = EventLevel.Informational)] + public void HandshakeSent(Guid guid, string httpHeader) + { + if (this.IsEnabled()) + { + WriteEvent(7, guid, httpHeader ?? string.Empty); + } + } + + [Event(8, Level = EventLevel.Informational)] + public void ReadingHttpResponse(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(8, guid); + } + } + + [Event(9, Level = EventLevel.Error)] + public void ReadHttpResponseError(Guid guid, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(9, guid, exception ?? string.Empty); + } + } + + [Event(10, Level = EventLevel.Warning)] + public void InvalidHttpResponseCode(Guid guid, string response) + { + if (this.IsEnabled()) + { + WriteEvent(10, guid, response ?? string.Empty); + } + } + + [Event(11, Level = EventLevel.Error)] + public void HandshakeFailure(Guid guid, string message) + { + if (this.IsEnabled()) + { + WriteEvent(11, guid, message ?? string.Empty); + } + } + + [Event(12, Level = EventLevel.Informational)] + public void ClientHandshakeSuccess(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(12, guid); + } + } + + [Event(13, Level = EventLevel.Informational)] + public void ServerHandshakeSuccess(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(13, guid); + } + } + + [Event(14, Level = EventLevel.Informational)] + public void AcceptWebSocketStarted(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(14, guid); + } + } + + [Event(15, Level = EventLevel.Informational)] + public void SendingHandshakeResponse(Guid guid, string response) + { + if (this.IsEnabled()) + { + WriteEvent(15, guid, response ?? string.Empty); + } + } + + [Event(16, Level = EventLevel.Error)] + public void WebSocketVersionNotSupported(Guid guid, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(16, guid, exception ?? string.Empty); + } + } + + [Event(17, Level = EventLevel.Error)] + public void BadRequest(Guid guid, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(17, guid, exception ?? string.Empty); + } + } + + [Event(18, Level = EventLevel.Informational)] + public void UsePerMessageDeflate(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(18, guid); + } + } + + [Event(19, Level = EventLevel.Informational)] + public void NoMessageCompression(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(19, guid); + } + } + + [Event(20, Level = EventLevel.Informational)] + public void KeepAliveIntervalZero(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(20, guid); + } + } + + [Event(21, Level = EventLevel.Informational)] + public void PingPongManagerStarted(Guid guid, int keepAliveIntervalSeconds) + { + if (this.IsEnabled()) + { + WriteEvent(21, guid, keepAliveIntervalSeconds); + } + } + + [Event(22, Level = EventLevel.Informational)] + public void PingPongManagerEnded(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(22, guid); + } + } + + [Event(23, Level = EventLevel.Warning)] + public void KeepAliveIntervalExpired(Guid guid, int keepAliveIntervalSeconds) + { + if (this.IsEnabled()) + { + WriteEvent(23, guid, keepAliveIntervalSeconds); + } + } + + [Event(24, Level = EventLevel.Warning)] + public void CloseOutputAutoTimeout(Guid guid, WebSocketCloseStatus closeStatus, string statusDescription, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(24, guid, closeStatus, statusDescription ?? string.Empty, exception ?? string.Empty); + } + } + + [Event(25, Level = EventLevel.Error)] + public void CloseOutputAutoTimeoutCancelled(Guid guid, int timeoutSeconds, WebSocketCloseStatus closeStatus, string statusDescription, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(25, guid, timeoutSeconds, closeStatus, statusDescription ?? string.Empty, exception ?? string.Empty); + } + } + + [Event(26, Level = EventLevel.Error)] + public void CloseOutputAutoTimeoutError(Guid guid, string closeException, WebSocketCloseStatus closeStatus, string statusDescription, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(26, guid, closeException ?? string.Empty, closeStatus, statusDescription ?? string.Empty, exception ?? string.Empty); + } + } + + [Event(27, Level = EventLevel.Warning)] + public void TryGetBufferNotSupported(Guid guid, string streamType) + { + if (this.IsEnabled()) + { + WriteEvent(27, guid, streamType ?? string.Empty); + } + } + + [Event(28, Level = EventLevel.Verbose)] + public void SendingFrame(Guid guid, WebSocketOpCode webSocketOpCode, bool isFinBitSet, int numBytes, bool isPayloadCompressed) + { + if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None)) + { + WriteEvent(28, guid, webSocketOpCode, isFinBitSet, numBytes, isPayloadCompressed); + } + } + + [Event(29, Level = EventLevel.Verbose)] + public void ReceivedFrame(Guid guid, WebSocketOpCode webSocketOpCode, bool isFinBitSet, int numBytes) + { + if (this.IsEnabled(EventLevel.Verbose, EventKeywords.None)) + { + WriteEvent(29, guid, webSocketOpCode, isFinBitSet, numBytes); + } + } + + [Event(30, Level = EventLevel.Informational)] + public void CloseOutputNoHandshake(Guid guid, WebSocketCloseStatus? closeStatus, string statusDescription) + { + if (this.IsEnabled()) + { + string closeStatusDesc = $"{closeStatus}"; + WriteEvent(30, guid, closeStatusDesc, statusDescription ?? string.Empty); + } + } + + [Event(31, Level = EventLevel.Informational)] + public void CloseHandshakeStarted(Guid guid, WebSocketCloseStatus? closeStatus, string statusDescription) + { + if (this.IsEnabled()) + { + string closeStatusDesc = $"{closeStatus}"; + WriteEvent(31, guid, closeStatusDesc, statusDescription ?? string.Empty); + } + } + + [Event(32, Level = EventLevel.Informational)] + public void CloseHandshakeRespond(Guid guid, WebSocketCloseStatus? closeStatus, string statusDescription) + { + if (this.IsEnabled()) + { + string closeStatusDesc = $"{closeStatus}"; + WriteEvent(32, guid, closeStatusDesc, statusDescription ?? string.Empty); + } + } + + [Event(33, Level = EventLevel.Informational)] + public void CloseHandshakeComplete(Guid guid) + { + if (this.IsEnabled()) + { + WriteEvent(33, guid); + } + } + + [Event(34, Level = EventLevel.Warning)] + public void CloseFrameReceivedInUnexpectedState(Guid guid, WebSocketState webSocketState, WebSocketCloseStatus? closeStatus, string statusDescription) + { + if (this.IsEnabled()) + { + string closeStatusDesc = $"{closeStatus}"; + WriteEvent(34, guid, webSocketState, closeStatusDesc, statusDescription ?? string.Empty); + } + } + + [Event(35, Level = EventLevel.Informational)] + public void WebSocketDispose(Guid guid, WebSocketState webSocketState) + { + if (this.IsEnabled()) + { + WriteEvent(35, guid, webSocketState); + } + } + + [Event(36, Level = EventLevel.Warning)] + public void WebSocketDisposeCloseTimeout(Guid guid, WebSocketState webSocketState) + { + if (this.IsEnabled()) + { + WriteEvent(36, guid, webSocketState); + } + } + + [Event(37, Level = EventLevel.Error)] + public void WebSocketDisposeError(Guid guid, WebSocketState webSocketState, string exception) + { + if (this.IsEnabled()) + { + WriteEvent(37, guid, webSocketState, exception ?? string.Empty); + } + } + + [Event(38, Level = EventLevel.Warning)] + public void InvalidStateBeforeClose(Guid guid, WebSocketState webSocketState) + { + if (this.IsEnabled()) + { + WriteEvent(38, guid, webSocketState); + } + } + + [Event(39, Level = EventLevel.Warning)] + public void InvalidStateBeforeCloseOutput(Guid guid, WebSocketState webSocketState) + { + if (this.IsEnabled()) + { + WriteEvent(39, guid, webSocketState); + } + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs.meta new file mode 100644 index 000000000..3e533becb --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7713ae9d113e145389c0a175d58090be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs new file mode 100644 index 000000000..23fe4a111 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs @@ -0,0 +1,31 @@ +using System.Net.WebSockets; + +namespace Ninja.WebSockets.Internal +{ + internal class WebSocketFrame + { + public bool IsFinBitSet { get; private set; } + + public WebSocketOpCode OpCode { get; private set; } + + public int Count { get; private set; } + + public WebSocketCloseStatus? CloseStatus { get; private set; } + + public string CloseStatusDescription { get; private set; } + + public WebSocketFrame(bool isFinBitSet, WebSocketOpCode webSocketOpCode, int count) + { + IsFinBitSet = isFinBitSet; + OpCode = webSocketOpCode; + Count = count; + } + + public WebSocketFrame(bool isFinBitSet, WebSocketOpCode webSocketOpCode, int count, WebSocketCloseStatus closeStatus, string closeStatusDescription) : this(isFinBitSet, webSocketOpCode, count) + { + CloseStatus = closeStatus; + CloseStatusDescription = closeStatusDescription; + } + + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs.meta new file mode 100644 index 000000000..f27e26d89 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4e8a4f1bcb0c49d7a82e5f430c85e2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs new file mode 100644 index 000000000..7941bd497 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs @@ -0,0 +1,62 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; + +namespace Ninja.WebSockets.Internal +{ + internal static class WebSocketFrameCommon + { + public const int MaskKeyLength = 4; + + /// + /// Mutate payload with the mask key + /// This is a reversible process + /// If you apply this to masked data it will be unmasked and visa versa + /// + /// The 4 byte mask key + /// The payload to mutate + public static void ToggleMask(ArraySegment maskKey, ArraySegment payload) + { + if (maskKey.Count != MaskKeyLength) + { + throw new Exception($"MaskKey key must be {MaskKeyLength} bytes"); + } + + byte[] buffer = payload.Array; + byte[] maskKeyArray = maskKey.Array; + int payloadOffset = payload.Offset; + int payloadCount = payload.Count; + int maskKeyOffset = maskKey.Offset; + + // apply the mask key (this is a reversible process so no need to copy the payload) + // NOTE: this is a hot function + // TODO: make this faster + for (int i = payloadOffset; i < payloadCount; i++) + { + int payloadIndex = i - payloadOffset; // index should start at zero + int maskKeyIndex = maskKeyOffset + (payloadIndex % MaskKeyLength); + buffer[i] = (Byte)(buffer[i] ^ maskKeyArray[maskKeyIndex]); + } + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs.meta new file mode 100644 index 000000000..0011ea21e --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adbf6c11b66794c0494acf9c713a6759 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs new file mode 100644 index 000000000..b771a4197 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs @@ -0,0 +1,168 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.IO; +using System.Net.WebSockets; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace Ninja.WebSockets.Internal +{ + /// + /// Reads a WebSocket frame + /// see http://tools.ietf.org/html/rfc6455 for specification + /// + internal static class WebSocketFrameReader + { + /// + /// Read a WebSocket frame from the stream + /// + /// The stream to read from + /// The buffer to read into + /// the cancellation token + /// A websocket frame + public static async Task ReadAsync(Stream fromStream, ArraySegment intoBuffer, CancellationToken cancellationToken) + { + // allocate a small buffer to read small chunks of data from the stream + var smallBuffer = new ArraySegment(new byte[8]); + + await BinaryReaderWriter.ReadExactly(2, fromStream, smallBuffer, cancellationToken); + byte byte1 = smallBuffer.Array[0]; + byte byte2 = smallBuffer.Array[1]; + + // process first byte + byte finBitFlag = 0x80; + byte opCodeFlag = 0x0F; + bool isFinBitSet = (byte1 & finBitFlag) == finBitFlag; + WebSocketOpCode opCode = (WebSocketOpCode) (byte1 & opCodeFlag); + + // read and process second byte + byte maskFlag = 0x80; + bool isMaskBitSet = (byte2 & maskFlag) == maskFlag; + uint len = await ReadLength(byte2, smallBuffer, fromStream, cancellationToken); + int count = (int)len; + + try + { + // use the masking key to decode the data if needed + if (isMaskBitSet) + { + ArraySegment maskKey = new ArraySegment(smallBuffer.Array, 0, WebSocketFrameCommon.MaskKeyLength); + await BinaryReaderWriter.ReadExactly(maskKey.Count, fromStream, maskKey, cancellationToken); + await BinaryReaderWriter.ReadExactly(count, fromStream, intoBuffer, cancellationToken); + ArraySegment payloadToMask = new ArraySegment(intoBuffer.Array, intoBuffer.Offset, count); + WebSocketFrameCommon.ToggleMask(maskKey, payloadToMask); + } + else + { + await BinaryReaderWriter.ReadExactly(count, fromStream, intoBuffer, cancellationToken); + } + } + catch (InternalBufferOverflowException e) + { + throw new InternalBufferOverflowException($"Supplied buffer too small to read {0} bytes from {Enum.GetName(typeof(WebSocketOpCode), opCode)} frame", e); + } + + if (opCode == WebSocketOpCode.ConnectionClose) + { + return DecodeCloseFrame(isFinBitSet, opCode, count, intoBuffer); + } + else + { + // note that by this point the payload will be populated + return new WebSocketFrame(isFinBitSet, opCode, count); + } + } + + /// + /// Extracts close status and close description information from the web socket frame + /// + private static WebSocketFrame DecodeCloseFrame(bool isFinBitSet, WebSocketOpCode opCode, int count, ArraySegment buffer) + { + WebSocketCloseStatus closeStatus; + string closeStatusDescription; + + if (count >= 2) + { + Array.Reverse(buffer.Array, buffer.Offset, 2); // network byte order + int closeStatusCode = (int)BitConverter.ToUInt16(buffer.Array, buffer.Offset); + if (Enum.IsDefined(typeof(WebSocketCloseStatus), closeStatusCode)) + { + closeStatus = (WebSocketCloseStatus)closeStatusCode; + } + else + { + closeStatus = WebSocketCloseStatus.Empty; + } + + int offset = buffer.Offset + 2; + int descCount = count - 2; + + if (descCount > 0) + { + closeStatusDescription = Encoding.UTF8.GetString(buffer.Array, offset, descCount); + } + else + { + closeStatusDescription = null; + } + } + else + { + closeStatus = WebSocketCloseStatus.Empty; + closeStatusDescription = null; + } + + return new WebSocketFrame(isFinBitSet, opCode, count, closeStatus, closeStatusDescription); + } + + /// + /// Reads the length of the payload according to the contents of byte2 + /// + private static async Task ReadLength(byte byte2, ArraySegment smallBuffer, Stream fromStream, CancellationToken cancellationToken) + { + byte payloadLenFlag = 0x7F; + uint len = (uint) (byte2 & payloadLenFlag); + + // read a short length or a long length depending on the value of len + if (len == 126) + { + len = await BinaryReaderWriter.ReadUShortExactly(fromStream, false, smallBuffer, cancellationToken); + } + else if (len == 127) + { + len = (uint) await BinaryReaderWriter.ReadULongExactly(fromStream, false, smallBuffer, cancellationToken); + const uint maxLen = 2147483648; // 2GB - not part of the spec but just a precaution. Send large volumes of data in smaller frames. + + // protect ourselves against bad data + if (len > maxLen || len < 0) + { + throw new ArgumentOutOfRangeException($"Payload length out of range. Min 0 max 2GB. Actual {len:#,##0} bytes."); + } + } + + return len; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs.meta new file mode 100644 index 000000000..370baf452 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 092a4b88aabbc4d3b91f6a82c40b47e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs new file mode 100644 index 000000000..1c00e42e4 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs @@ -0,0 +1,100 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System.IO; +using System; +using System.Net.WebSockets; +using System.Text; + +namespace Ninja.WebSockets.Internal +{ + // see http://tools.ietf.org/html/rfc6455 for specification + // see fragmentation section for sending multi part messages + // EXAMPLE: For a text message sent as three fragments, + // the first fragment would have an opcode of TextFrame and isLastFrame false, + // the second fragment would have an opcode of ContinuationFrame and isLastFrame false, + // the third fragment would have an opcode of ContinuationFrame and isLastFrame true. + internal static class WebSocketFrameWriter + { + /// + /// This is used for data masking so that web proxies don't cache the data + /// Therefore, there are no cryptographic concerns + /// + private static readonly Random _random; + + static WebSocketFrameWriter() + { + _random = new Random((int)DateTime.Now.Ticks); + } + + /// + /// No async await stuff here because we are dealing with a memory stream + /// + /// The web socket opcode + /// Array segment to get payload data from + /// Stream to write to + /// True is this is the last frame in this message (usually true) + public static void Write(WebSocketOpCode opCode, ArraySegment fromPayload, MemoryStream toStream, bool isLastFrame, bool isClient) + { + MemoryStream memoryStream = toStream; + byte finBitSetAsByte = isLastFrame ? (byte)0x80 : (byte)0x00; + byte byte1 = (byte)(finBitSetAsByte | (byte)opCode); + memoryStream.WriteByte(byte1); + + // NB, set the mask flag if we are constructing a client frame + byte maskBitSetAsByte = isClient ? (byte)0x80 : (byte)0x00; + + // depending on the size of the length we want to write it as a byte, ushort or ulong + if (fromPayload.Count < 126) + { + byte byte2 = (byte)(maskBitSetAsByte | (byte)fromPayload.Count); + memoryStream.WriteByte(byte2); + } + else if (fromPayload.Count <= ushort.MaxValue) + { + byte byte2 = (byte)(maskBitSetAsByte | 126); + memoryStream.WriteByte(byte2); + BinaryReaderWriter.WriteUShort((ushort)fromPayload.Count, memoryStream, false); + } + else + { + byte byte2 = (byte)(maskBitSetAsByte | 127); + memoryStream.WriteByte(byte2); + BinaryReaderWriter.WriteULong((ulong)fromPayload.Count, memoryStream, false); + } + + // if we are creating a client frame then we MUST mack the payload as per the spec + if (isClient) + { + byte[] maskKey = new byte[WebSocketFrameCommon.MaskKeyLength]; + _random.NextBytes(maskKey); + memoryStream.Write(maskKey, 0, maskKey.Length); + + // mask the payload + ArraySegment maskKeyArraySegment = new ArraySegment(maskKey, 0, maskKey.Length); + WebSocketFrameCommon.ToggleMask(maskKeyArraySegment, fromPayload); + } + + memoryStream.Write(fromPayload.Array, fromPayload.Offset, fromPayload.Count); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs.meta new file mode 100644 index 000000000..acd29fab7 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df337f1f7ba5245f7acadbe2e44b86bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs new file mode 100644 index 000000000..45975729f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs @@ -0,0 +1,585 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.IO; +using System.IO.Compression; +using System.Net.WebSockets; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +#if RELEASESIGNED +[assembly: InternalsVisibleTo("Ninja.WebSockets.UnitTests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100b1707056f4761b7846ed503642fcde97fc350c939f78026211304a56ba51e094c9cefde77fadce5b83c0a621c17f032c37c520b6d9ab2da8291a21472175d9caad55bf67bab4bffb46a96f864ea441cf695edc854296e02a44062245a4e09ccd9a77ef6146ecf941ce1d9da078add54bc2d4008decdac2fa2b388e17794ee6a6")] +#else +[assembly: InternalsVisibleTo("Ninja.WebSockets.UnitTests")] +#endif + +namespace Ninja.WebSockets.Internal +{ + /// + /// Main implementation of the WebSocket abstract class + /// + internal class WebSocketImplementation : WebSocket + { + private readonly Guid _guid; + private readonly Func _recycledStreamFactory; + private readonly Stream _stream; + private readonly bool _includeExceptionInCloseResponse; + private readonly bool _isClient; + private readonly string _subProtocol; + private CancellationTokenSource _internalReadCts; + private WebSocketState _state; + private bool _isContinuationFrame; + private WebSocketMessageType _continuationFrameMessageType = WebSocketMessageType.Binary; + private readonly bool _usePerMessageDeflate = false; + private bool _tryGetBufferFailureLogged = false; + const int MAX_PING_PONG_PAYLOAD_LEN = 125; + private WebSocketCloseStatus? _closeStatus; + private string _closeStatusDescription; + + public event EventHandler Pong; + + internal WebSocketImplementation(Guid guid, Func recycledStreamFactory, Stream stream, TimeSpan keepAliveInterval, string secWebSocketExtensions, bool includeExceptionInCloseResponse, bool isClient, string subProtocol) + { + _guid = guid; + _recycledStreamFactory = recycledStreamFactory; + _stream = stream; + _isClient = isClient; + _subProtocol = subProtocol; + _internalReadCts = new CancellationTokenSource(); + _state = WebSocketState.Open; + + if (secWebSocketExtensions?.IndexOf("permessage-deflate") >= 0) + { + _usePerMessageDeflate = true; + Events.Log.UsePerMessageDeflate(guid); + } + else + { + Events.Log.NoMessageCompression(guid); + } + + KeepAliveInterval = keepAliveInterval; + _includeExceptionInCloseResponse = includeExceptionInCloseResponse; + if (keepAliveInterval.Ticks < 0) + { + throw new InvalidOperationException("KeepAliveInterval must be Zero or positive"); + } + + if (keepAliveInterval == TimeSpan.Zero) + { + Events.Log.KeepAliveIntervalZero(guid); + } + else + { + // the ping pong manager starts a task + // but we don't have to keep a reference to it +#pragma warning disable 0219 + var pingPongManager = new PingPongManager(guid, this, keepAliveInterval, _internalReadCts.Token); +#pragma warning restore 0219 + } + } + + public override WebSocketCloseStatus? CloseStatus => _closeStatus; + + public override string CloseStatusDescription => _closeStatusDescription; + + public override WebSocketState State { get { return _state; } } + + public override string SubProtocol => _subProtocol; + + public TimeSpan KeepAliveInterval { get; private set; } + + /// + /// Receive web socket result + /// + /// The buffer to copy data into + /// The cancellation token + /// The web socket result details + public override async Task ReceiveAsync(ArraySegment buffer, CancellationToken cancellationToken) + { + try + { + // we may receive control frames so reading needs to happen in an infinite loop + while (true) + { + // allow this operation to be cancelled from iniside OR outside this instance + using (CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(_internalReadCts.Token, cancellationToken)) + { + WebSocketFrame frame = null; + try + { + frame = await WebSocketFrameReader.ReadAsync(_stream, buffer, linkedCts.Token); + Events.Log.ReceivedFrame(_guid, frame.OpCode, frame.IsFinBitSet, frame.Count); + } + catch (InternalBufferOverflowException ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.MessageTooBig, "Frame too large to fit in buffer. Use message fragmentation", ex); + throw; + } + catch (ArgumentOutOfRangeException ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.ProtocolError, "Payload length out of range", ex); + throw; + } + catch (EndOfStreamException ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.InvalidPayloadData, "Unexpected end of stream encountered", ex); + throw; + } + catch (OperationCanceledException ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.EndpointUnavailable, "Operation cancelled", ex); + throw; + } + catch (Exception ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.InternalServerError, "Error reading WebSocket frame", ex); + throw; + } + + switch (frame.OpCode) + { + case WebSocketOpCode.ConnectionClose: + return await RespondToCloseFrame(frame, buffer, linkedCts.Token); + case WebSocketOpCode.Ping: + ArraySegment pingPayload = new ArraySegment(buffer.Array, buffer.Offset, frame.Count); + await SendPongAsync(pingPayload, linkedCts.Token); + break; + case WebSocketOpCode.Pong: + ArraySegment pongBuffer = new ArraySegment(buffer.Array, frame.Count, buffer.Offset); + Pong?.Invoke(this, new PongEventArgs(pongBuffer)); + break; + case WebSocketOpCode.TextFrame: + if (!frame.IsFinBitSet) + { + // continuation frames will follow, record the message type Text + _continuationFrameMessageType = WebSocketMessageType.Text; + } + return new WebSocketReceiveResult(frame.Count, WebSocketMessageType.Text, frame.IsFinBitSet); + case WebSocketOpCode.BinaryFrame: + if (!frame.IsFinBitSet) + { + // continuation frames will follow, record the message type Binary + _continuationFrameMessageType = WebSocketMessageType.Binary; + } + return new WebSocketReceiveResult(frame.Count, WebSocketMessageType.Binary, frame.IsFinBitSet); + case WebSocketOpCode.ContinuationFrame: + return new WebSocketReceiveResult(frame.Count, _continuationFrameMessageType, frame.IsFinBitSet); + default: + Exception ex = new NotSupportedException($"Unknown WebSocket opcode {frame.OpCode}"); + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.ProtocolError, ex.Message, ex); + throw ex; + } + } + } + } + catch (Exception catchAll) + { + // Most exceptions will be caught closer to their source to send an appropriate close message (and set the WebSocketState) + // However, if an unhandled exception is encountered and a close message not sent then send one here + if (_state == WebSocketState.Open) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.InternalServerError, "Unexpected error reading from WebSocket", catchAll); + } + + throw; + } + } + + /// + /// Send data to the web socket + /// + /// the buffer containing data to send + /// The message type. Can be Text or Binary + /// True if this message is a standalone message (this is the norm) + /// If it is a multi-part message then false (and true for the last message) + /// the cancellation token + public override async Task SendAsync(ArraySegment buffer, WebSocketMessageType messageType, bool endOfMessage, CancellationToken cancellationToken) + { + using (MemoryStream stream = _recycledStreamFactory()) + { + WebSocketOpCode opCode = GetOppCode(messageType); + + if (_usePerMessageDeflate) + { + // NOTE: Compression is currently work in progress and should NOT be used in this library. + // The code below is very inefficient for small messages. Ideally we would like to have some sort of moving window + // of data to get the best compression. And we don't want to create new buffers which is bad for GC. + using (MemoryStream temp = new MemoryStream()) + { + DeflateStream deflateStream = new DeflateStream(temp, CompressionMode.Compress); + deflateStream.Write(buffer.Array, buffer.Offset, buffer.Count); + deflateStream.Flush(); + var compressedBuffer = new ArraySegment(temp.ToArray()); + WebSocketFrameWriter.Write(opCode, compressedBuffer, stream, endOfMessage, _isClient); + Events.Log.SendingFrame(_guid, opCode, endOfMessage, compressedBuffer.Count, true); + } + } + else + { + WebSocketFrameWriter.Write(opCode, buffer, stream, endOfMessage, _isClient); + Events.Log.SendingFrame(_guid, opCode, endOfMessage, buffer.Count, false); + } + + await WriteStreamToNetwork(stream, cancellationToken); + _isContinuationFrame = !endOfMessage; // TODO: is this correct?? + } + } + + /// + /// Call this automatically from server side each keepAliveInterval period + /// NOTE: ping payload must be 125 bytes or less + /// + public async Task SendPingAsync(ArraySegment payload, CancellationToken cancellationToken) + { + if (payload.Count > MAX_PING_PONG_PAYLOAD_LEN) + { + throw new InvalidOperationException($"Cannot send Ping: Max ping message size {MAX_PING_PONG_PAYLOAD_LEN} exceeded: {payload.Count}"); + } + + if (_state == WebSocketState.Open) + { + using (MemoryStream stream = _recycledStreamFactory()) + { + WebSocketFrameWriter.Write(WebSocketOpCode.Ping, payload, stream, true, _isClient); + Events.Log.SendingFrame(_guid, WebSocketOpCode.Ping, true, payload.Count, false); + await WriteStreamToNetwork(stream, cancellationToken); + } + } + } + + /// + /// Aborts the WebSocket without sending a Close frame + /// + public override void Abort() + { + _state = WebSocketState.Aborted; + _internalReadCts.Cancel(); + } + + /// + /// Polite close (use the close handshake) + /// + public override async Task CloseAsync(WebSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken) + { + if (_state == WebSocketState.Open) + { + using (MemoryStream stream = _recycledStreamFactory()) + { + ArraySegment buffer = BuildClosePayload(closeStatus, statusDescription); + WebSocketFrameWriter.Write(WebSocketOpCode.ConnectionClose, buffer, stream, true, _isClient); + Events.Log.CloseHandshakeStarted(_guid, closeStatus, statusDescription); + Events.Log.SendingFrame(_guid, WebSocketOpCode.ConnectionClose, true, buffer.Count, true); + await WriteStreamToNetwork(stream, cancellationToken); + _state = WebSocketState.CloseSent; + } + } + else + { + Events.Log.InvalidStateBeforeClose(_guid, _state); + } + } + + /// + /// Fire and forget close + /// + public override async Task CloseOutputAsync(WebSocketCloseStatus closeStatus, string statusDescription, CancellationToken cancellationToken) + { + if (_state == WebSocketState.Open) + { + _state = WebSocketState.Closed; // set this before we write to the network because the write may fail + + using (MemoryStream stream = _recycledStreamFactory()) + { + ArraySegment buffer = BuildClosePayload(closeStatus, statusDescription); + WebSocketFrameWriter.Write(WebSocketOpCode.ConnectionClose, buffer, stream, true, _isClient); + Events.Log.CloseOutputNoHandshake(_guid, closeStatus, statusDescription); + Events.Log.SendingFrame(_guid, WebSocketOpCode.ConnectionClose, true, buffer.Count, true); + await WriteStreamToNetwork(stream, cancellationToken); + } + } + else + { + Events.Log.InvalidStateBeforeCloseOutput(_guid, _state); + } + + // cancel pending reads + _internalReadCts.Cancel(); + } + + /// + /// Dispose will send a close frame if the connection is still open + /// + public override void Dispose() + { + Events.Log.WebSocketDispose(_guid, _state); + + try + { + if (_state == WebSocketState.Open) + { + CancellationTokenSource cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); + try + { + CloseOutputAsync(WebSocketCloseStatus.EndpointUnavailable, "Service is Disposed", cts.Token).Wait(); + } + catch (OperationCanceledException) + { + // log don't throw + Events.Log.WebSocketDisposeCloseTimeout(_guid, _state); + } + } + + // cancel pending reads - usually does nothing + _internalReadCts.Cancel(); + _stream.Close(); + } + catch (Exception ex) + { + // log dont throw + Events.Log.WebSocketDisposeError(_guid, _state, ex.ToString()); + } + } + + /// + /// Called when a Pong frame is received + /// + /// + protected virtual void OnPong(PongEventArgs e) + { + Pong?.Invoke(this, e); + } + + /// + /// As per the spec, write the close status followed by the close reason + /// + /// The close status + /// Optional extra close details + /// The payload to sent in the close frame + private ArraySegment BuildClosePayload(WebSocketCloseStatus closeStatus, string statusDescription) + { + byte[] statusBuffer = BitConverter.GetBytes((ushort)closeStatus); + Array.Reverse(statusBuffer); // network byte order (big endian) + + if (statusDescription == null) + { + return new ArraySegment(statusBuffer); + } + else + { + byte[] descBuffer = Encoding.UTF8.GetBytes(statusDescription); + byte[] payload = new byte[statusBuffer.Length + descBuffer.Length]; + Buffer.BlockCopy(statusBuffer, 0, payload, 0, statusBuffer.Length); + Buffer.BlockCopy(descBuffer, 0, payload, statusBuffer.Length, descBuffer.Length); + return new ArraySegment(payload); + } + } + + /// NOTE: pong payload must be 125 bytes or less + /// Pong should contain the same payload as the ping + private async Task SendPongAsync(ArraySegment payload, CancellationToken cancellationToken) + { + // as per websocket spec + if (payload.Count > MAX_PING_PONG_PAYLOAD_LEN) + { + Exception ex = new InvalidOperationException($"Max ping message size {MAX_PING_PONG_PAYLOAD_LEN} exceeded: {payload.Count}"); + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.ProtocolError, ex.Message, ex); + throw ex; + } + + try + { + if (_state == WebSocketState.Open) + { + using (MemoryStream stream = _recycledStreamFactory()) + { + WebSocketFrameWriter.Write(WebSocketOpCode.Pong, payload, stream, true, _isClient); + Events.Log.SendingFrame(_guid, WebSocketOpCode.Pong, true, payload.Count, false); + await WriteStreamToNetwork(stream, cancellationToken); + } + } + } + catch (Exception ex) + { + await CloseOutputAutoTimeoutAsync(WebSocketCloseStatus.EndpointUnavailable, "Unable to send Pong response", ex); + throw; + } + } + + /// + /// Called when a Close frame is received + /// Send a response close frame if applicable + /// + private async Task RespondToCloseFrame(WebSocketFrame frame, ArraySegment buffer, CancellationToken token) + { + _closeStatus = frame.CloseStatus; + _closeStatusDescription = frame.CloseStatusDescription; + + if (_state == WebSocketState.CloseSent) + { + // this is a response to close handshake initiated by this instance + _state = WebSocketState.Closed; + Events.Log.CloseHandshakeComplete(_guid); + } + else if (_state == WebSocketState.Open) + { + // do not echo the close payload back to the client, there is no requirement for it in the spec. + // However, the same CloseStatus as recieved should be sent back. + ArraySegment closePayload = new ArraySegment(new byte[0], 0, 0); + _state = WebSocketState.CloseReceived; + Events.Log.CloseHandshakeRespond(_guid, frame.CloseStatus, frame.CloseStatusDescription); + + using (MemoryStream stream = _recycledStreamFactory()) + { + WebSocketFrameWriter.Write(WebSocketOpCode.ConnectionClose, closePayload, stream, true, _isClient); + Events.Log.SendingFrame(_guid, WebSocketOpCode.ConnectionClose, true, closePayload.Count, false); + await WriteStreamToNetwork(stream, token); + } + } + else + { + Events.Log.CloseFrameReceivedInUnexpectedState(_guid, _state, frame.CloseStatus, frame.CloseStatusDescription); + } + + return new WebSocketReceiveResult(frame.Count, WebSocketMessageType.Close, frame.IsFinBitSet, frame.CloseStatus, frame.CloseStatusDescription); + } + + /// + /// Note that the way in which the stream buffer is accessed can lead to significant performance problems + /// You want to avoid a call to stream.ToArray to avoid extra memory allocation + /// MemoryStream can be configured to have its internal buffer accessible. + /// + private ArraySegment GetBuffer(MemoryStream stream) + { +#if NET45 + // NET45 does not have a TryGetBuffer function on Stream + if (_tryGetBufferFailureLogged) + { + return new ArraySegment(stream.ToArray(), 0, (int)stream.Position); + } + + // note that a MemoryStream will throw an UnuthorizedAccessException if the internal buffer is not public. Set publiclyVisible = true + try + { + return new ArraySegment(stream.GetBuffer(), 0, (int)stream.Position); + } + catch (UnauthorizedAccessException) + { + Events.Log.TryGetBufferNotSupported(_guid, stream?.GetType()?.ToString()); + _tryGetBufferFailureLogged = true; + return new ArraySegment(stream.ToArray(), 0, (int)stream.Position); + } +#else + // Avoid calling ToArray on the MemoryStream because it allocates a new byte array on tha heap + // We avaoid this by attempting to access the internal memory stream buffer + // This works with supported streams like the recyclable memory stream and writable memory streams + ArraySegment buffer; + if (!stream.TryGetBuffer(out buffer)) + { + if (!_tryGetBufferFailureLogged) + { + Events.Log.TryGetBufferNotSupported(_guid, stream?.GetType()?.ToString()); + _tryGetBufferFailureLogged = true; + } + + // internal buffer not suppoted, fall back to ToArray() + byte[] array = stream.ToArray(); + buffer = new ArraySegment(array, 0, array.Length); + } + + return new ArraySegment(buffer.Array, buffer.Offset, (int)stream.Position); +#endif + } + + /// + /// Puts data on the wire + /// + /// The stream to read data from + private async Task WriteStreamToNetwork(MemoryStream stream, CancellationToken cancellationToken) + { + ArraySegment buffer = GetBuffer(stream); + await _stream.WriteAsync(buffer.Array, buffer.Offset, buffer.Count, cancellationToken).ConfigureAwait(false); + } + + /// + /// Turns a spec websocket frame opcode into a WebSocketMessageType + /// + private WebSocketOpCode GetOppCode(WebSocketMessageType messageType) + { + if (_isContinuationFrame) + { + return WebSocketOpCode.ContinuationFrame; + } + else + { + switch (messageType) + { + case WebSocketMessageType.Binary: + return WebSocketOpCode.BinaryFrame; + case WebSocketMessageType.Text: + return WebSocketOpCode.TextFrame; + case WebSocketMessageType.Close: + throw new NotSupportedException("Cannot use Send function to send a close frame. Use Close function."); + default: + throw new NotSupportedException($"MessageType {messageType} not supported"); + } + } + } + + /// + /// Automatic WebSocket close in response to some invalid data from the remote websocket host + /// + /// The close status to use + /// A description of why we are closing + /// The exception (for logging) + private async Task CloseOutputAutoTimeoutAsync(WebSocketCloseStatus closeStatus, string statusDescription, Exception ex) + { + TimeSpan timeSpan = TimeSpan.FromSeconds(5); + Events.Log.CloseOutputAutoTimeout(_guid, closeStatus, statusDescription, ex.ToString()); + + try + { + // we may not want to send sensitive information to the client / server + if (_includeExceptionInCloseResponse) + { + statusDescription = statusDescription + "\r\n\r\n" + ex.ToString(); + } + + var autoCancel = new CancellationTokenSource(timeSpan); + await CloseOutputAsync(closeStatus, statusDescription, autoCancel.Token); + } + catch (OperationCanceledException) + { + // do not throw an exception because that will mask the original exception + Events.Log.CloseOutputAutoTimeoutCancelled(_guid, (int)timeSpan.TotalSeconds, closeStatus, statusDescription, ex.ToString()); + } + catch (Exception closeException) + { + // do not throw an exception because that will mask the original exception + Events.Log.CloseOutputAutoTimeoutError(_guid, closeException.ToString(), closeStatus, statusDescription, ex.ToString()); + } + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs.meta new file mode 100644 index 000000000..a573a6252 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087dfa54efe9345b390e0758d42e52cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs new file mode 100644 index 000000000..1dc004515 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs @@ -0,0 +1,12 @@ +namespace Ninja.WebSockets.Internal +{ + internal enum WebSocketOpCode + { + ContinuationFrame = 0, + TextFrame = 1, + BinaryFrame = 2, + ConnectionClose = 8, + Ping = 9, + Pong = 10 + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs.meta new file mode 100644 index 000000000..f568d565c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f2106e8022034b9180513e27b488b4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs new file mode 100644 index 000000000..0ba79807b --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs @@ -0,0 +1,139 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.Diagnostics; +using System.Net.WebSockets; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets.Internal; + +namespace Ninja.WebSockets +{ + /// + /// Ping Pong Manager used to facilitate ping pong WebSocket messages + /// + public class PingPongManager : IPingPongManager + { + private readonly WebSocketImplementation _webSocket; + private readonly Guid _guid; + private readonly TimeSpan _keepAliveInterval; + private readonly Task _pingTask; + private readonly CancellationToken _cancellationToken; + private Stopwatch _stopwatch; + private long _pingSentTicks; + + /// + /// Raised when a Pong frame is received + /// + public event EventHandler Pong; + + /// + /// Initialises a new instance of the PingPongManager to facilitate ping pong WebSocket messages. + /// If you are manually creating an instance of this class then it is advisable to set keepAliveInterval to + /// TimeSpan.Zero when you create the WebSocket instance (using a factory) otherwise you may be automatically + /// be sending duplicate Ping messages (see keepAliveInterval below) + /// + /// The web socket used to listen to ping messages and send pong messages + /// The time between automatically sending ping messages. + /// Set this to TimeSpan.Zero if you with to manually control sending ping messages. + /// + /// The token used to cancel a pending ping send AND the automatic sending of ping messages + /// if keepAliveInterval is positive + public PingPongManager(Guid guid, WebSocket webSocket, TimeSpan keepAliveInterval, CancellationToken cancellationToken) + { + var webSocketImpl = webSocket as WebSocketImplementation; + _webSocket = webSocketImpl; + if (_webSocket == null) + throw new InvalidCastException("Cannot cast WebSocket to an instance of WebSocketImplementation. Please use the web socket factories to create a web socket"); + _guid = guid; + _keepAliveInterval = keepAliveInterval; + _cancellationToken = cancellationToken; + webSocketImpl.Pong += WebSocketImpl_Pong; + _stopwatch = Stopwatch.StartNew(); + + if (keepAliveInterval != TimeSpan.Zero) + { + Task.Run(PingForever, cancellationToken); + } + } + + /// + /// Sends a ping frame + /// + /// The payload (must be 125 bytes of less) + /// The cancellation token + public async Task SendPing(ArraySegment payload, CancellationToken cancellation) + { + await _webSocket.SendPingAsync(payload, cancellation); + } + + protected virtual void OnPong(PongEventArgs e) + { + Pong?.Invoke(this, e); + } + + private async Task PingForever() + { + Events.Log.PingPongManagerStarted(_guid, (int)_keepAliveInterval.TotalSeconds); + + try + { + while (!_cancellationToken.IsCancellationRequested) + { + await Task.Delay(_keepAliveInterval, _cancellationToken); + + if (_webSocket.State != WebSocketState.Open) + { + break; + } + + if (_pingSentTicks != 0) + { + Events.Log.KeepAliveIntervalExpired(_guid, (int)_keepAliveInterval.TotalSeconds); + await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, $"No Pong message received in response to a Ping after KeepAliveInterval {_keepAliveInterval}", _cancellationToken); + break; + } + + if (!_cancellationToken.IsCancellationRequested) + { + _pingSentTicks = _stopwatch.Elapsed.Ticks; + ArraySegment buffer = new ArraySegment(BitConverter.GetBytes(_pingSentTicks)); + await SendPing(buffer, _cancellationToken); + } + } + } + catch (OperationCanceledException) + { + // normal, do nothing + } + + Events.Log.PingPongManagerEnded(_guid); + } + + private void WebSocketImpl_Pong(object sender, PongEventArgs e) + { + _pingSentTicks = 0; + OnPong(e); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs.meta new file mode 100644 index 000000000..80bb880b3 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e69d99db8e5024dda9afb8bb5d494260 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs new file mode 100644 index 000000000..25fcebfa0 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ninja.WebSockets +{ + /// + /// Pong EventArgs + /// + public class PongEventArgs : EventArgs + { + /// + /// The data extracted from a Pong WebSocket frame + /// + public ArraySegment Payload { get; private set; } + + /// + /// Initialises a new instance of the PongEventArgs class + /// + /// The pong payload must be 125 bytes or less (can be zero bytes) + public PongEventArgs(ArraySegment payload) + { + Payload = payload; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs.meta new file mode 100644 index 000000000..6b75b1650 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57068e417e3ea4201a8de864e9a223a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties.meta new file mode 100644 index 000000000..afecd370c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1e6c099dd56f4b30b02f4258c38ff05 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles.meta new file mode 100644 index 000000000..5fc2e6604 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52998228355394f00bf8c88cfad8e362 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 000000000..f873eee3c --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + FileSystem + ReleaseSigned + netstandard2.0 + bin\ReleaseSigned\PublishOutput + Any CPU + + \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml.meta new file mode 100644 index 000000000..a829e200f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Properties/PublishProfiles/FolderProfile.pubxml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e1a5037feecd49deb7892a8b0b755c6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs new file mode 100644 index 000000000..7f96e7c3f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs @@ -0,0 +1,289 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Net.WebSockets; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets.Exceptions; +using Ninja.WebSockets.Internal; + +namespace Ninja.WebSockets +{ + /// + /// Web socket client factory used to open web socket client connections + /// + public class WebSocketClientFactory : IWebSocketClientFactory + { + private readonly Func _bufferFactory; + private readonly IBufferPool _bufferPool; + + /// + /// Initialises a new instance of the WebSocketClientFactory class without caring about internal buffers + /// + public WebSocketClientFactory() + { + _bufferPool = new BufferPool(); + _bufferFactory = _bufferPool.GetBuffer; + } + + /// + /// Initialises a new instance of the WebSocketClientFactory class with control over internal buffer creation + /// + /// Used to get a memory stream. Feel free to implement your own buffer pool. MemoryStreams will be disposed when no longer needed and can be returned to the pool. + public WebSocketClientFactory(Func bufferFactory) + { + _bufferFactory = bufferFactory; + } + + /// + /// Connect with default options + /// + /// The WebSocket uri to connect to (e.g. ws://example.com or wss://example.com for SSL) + /// The optional cancellation token + /// A connected web socket instance + public async Task ConnectAsync(Uri uri, CancellationToken token = default(CancellationToken)) + { + return await ConnectAsync(uri, new WebSocketClientOptions(), token); + } + + /// + /// Connect with options specified + /// + /// The WebSocket uri to connect to (e.g. ws://example.com or wss://example.com for SSL) + /// The WebSocket client options + /// The optional cancellation token + /// A connected web socket instance + public async Task ConnectAsync(Uri uri, WebSocketClientOptions options, CancellationToken token = default(CancellationToken)) + { + Guid guid = Guid.NewGuid(); + string host = uri.Host; + int port = uri.Port; + var tcpClient = new TcpClient(AddressFamily.InterNetworkV6); + tcpClient.NoDelay = options.NoDelay; + tcpClient.Client.DualMode = true; + string uriScheme = uri.Scheme.ToLower(); + bool useSsl = uriScheme == "wss" || uriScheme == "https"; + IPAddress ipAddress; + if (IPAddress.TryParse(host, out ipAddress)) + { + Events.Log.ClientConnectingToIpAddress(guid, ipAddress.ToString(), port); + await tcpClient.ConnectAsync(ipAddress, port); + } + else + { + Events.Log.ClientConnectingToHost(guid, host, port); + await tcpClient.ConnectAsync(host, port); + } + + token.ThrowIfCancellationRequested(); + Stream stream = GetStream(guid, tcpClient, useSsl, host); + return await PerformHandshake(guid, uri, stream, options, token); + } + + /// + /// Connect with a stream that has already been opened and HTTP websocket upgrade request sent + /// This function will check the handshake response from the server and proceed if successful + /// Use this function if you have specific requirements to open a conenction like using special http headers and cookies + /// You will have to build your own HTTP websocket upgrade request + /// You may not even choose to use TCP/IP and this function will allow you to do that + /// + /// The full duplex response stream from the server + /// The secWebSocketKey you used in the handshake request + /// The WebSocket client options + /// The optional cancellation token + /// + public async Task ConnectAsync(Stream responseStream, string secWebSocketKey, WebSocketClientOptions options, CancellationToken token = default(CancellationToken)) + { + Guid guid = Guid.NewGuid(); + return await ConnectAsync(guid, responseStream, secWebSocketKey, options.KeepAliveInterval, options.SecWebSocketExtensions, options.IncludeExceptionInCloseResponse, token); + } + + private async Task ConnectAsync(Guid guid, Stream responseStream, string secWebSocketKey, TimeSpan keepAliveInterval, string secWebSocketExtensions, bool includeExceptionInCloseResponse, CancellationToken token) + { + Events.Log.ReadingHttpResponse(guid); + string response = string.Empty; + + try + { + response = await HttpHelper.ReadHttpHeaderAsync(responseStream, token); + } + catch (Exception ex) + { + Events.Log.ReadHttpResponseError(guid, ex.ToString()); + throw new WebSocketHandshakeFailedException("Handshake unexpected failure", ex); + } + + ThrowIfInvalidResponseCode(response); + ThrowIfInvalidAcceptString(guid, response, secWebSocketKey); + string subProtocol = GetSubProtocolFromHeader(response); + return new WebSocketImplementation(guid, _bufferFactory, responseStream, keepAliveInterval, secWebSocketExtensions, includeExceptionInCloseResponse, true, subProtocol); + } + + private string GetSubProtocolFromHeader(string response) + { + // make sure we escape the accept string which could contain special regex characters + string regexPattern = "Sec-WebSocket-Protocol: (.*)"; + Regex regex = new Regex(regexPattern, RegexOptions.IgnoreCase); + Match match = regex.Match(response); + if (match.Success) + { + return match.Groups[1].Value.Trim(); + } + + return null; + } + + private void ThrowIfInvalidAcceptString(Guid guid, string response, string secWebSocketKey) + { + // make sure we escape the accept string which could contain special regex characters + string regexPattern = "Sec-WebSocket-Accept: (.*)"; + Regex regex = new Regex(regexPattern, RegexOptions.IgnoreCase); + string actualAcceptString = regex.Match(response).Groups[1].Value.Trim(); + + // check the accept string + string expectedAcceptString = HttpHelper.ComputeSocketAcceptString(secWebSocketKey); + if (expectedAcceptString != actualAcceptString) + { + string warning = string.Format($"Handshake failed because the accept string from the server '{expectedAcceptString}' was not the expected string '{actualAcceptString}'"); + Events.Log.HandshakeFailure(guid, warning); + throw new WebSocketHandshakeFailedException(warning); + } + else + { + Events.Log.ClientHandshakeSuccess(guid); + } + } + + private void ThrowIfInvalidResponseCode(string responseHeader) + { + string responseCode = HttpHelper.ReadHttpResponseCode(responseHeader); + if (!string.Equals(responseCode, "101 Switching Protocols", StringComparison.InvariantCultureIgnoreCase)) + { + string[] lines = responseHeader.Split(new string[] { "\r\n" }, StringSplitOptions.None); + + for (int i = 0; i < lines.Length; i++) + { + // if there is more to the message than just the header + if (string.IsNullOrWhiteSpace(lines[i])) + { + StringBuilder builder = new StringBuilder(); + for (int j = i + 1; j < lines.Length - 1; j++) + { + builder.AppendLine(lines[j]); + } + + string responseDetails = builder.ToString(); + throw new InvalidHttpResponseCodeException(responseCode, responseDetails, responseHeader); + } + } + } + } + + private Stream GetStream(Guid guid, TcpClient tcpClient, bool isSecure, string host) + { + Stream stream = tcpClient.GetStream(); + + if (isSecure) + { + SslStream sslStream = new SslStream(stream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); + Events.Log.AttemtingToSecureSslConnection(guid); + + // This will throw an AuthenticationException if the certificate is not valid + sslStream.AuthenticateAsClient(host); + Events.Log.ConnectionSecured(guid); + return sslStream; + } + else + { + Events.Log.ConnectionNotSecure(guid); + return stream; + } + } + + /// + /// Invoked by the RemoteCertificateValidationDelegate + /// If you want to ignore certificate errors (for debugging) then return true + /// + private static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + if (sslPolicyErrors == SslPolicyErrors.None) + { + return true; + } + + Events.Log.SslCertificateError(sslPolicyErrors); + + // Do not allow this client to communicate with unauthenticated servers. + return false; + } + + private static string GetAdditionalHeaders(Dictionary additionalHeaders) + { + if (additionalHeaders == null || additionalHeaders.Count == 0) + { + return string.Empty; + } + else + { + StringBuilder builder = new StringBuilder(); + foreach (KeyValuePair pair in additionalHeaders) + { + builder.Append($"{pair.Key}: {pair.Value}\r\n"); + } + + return builder.ToString(); + } + } + + private async Task PerformHandshake(Guid guid, Uri uri, Stream stream, WebSocketClientOptions options, CancellationToken token) + { + Random rand = new Random(); + byte[] keyAsBytes = new byte[16]; + rand.NextBytes(keyAsBytes); + string secWebSocketKey = Convert.ToBase64String(keyAsBytes); + string additionalHeaders = GetAdditionalHeaders(options.AdditionalHttpHeaders); + string handshakeHttpRequest = $"GET {uri.PathAndQuery} HTTP/1.1\r\n" + + $"Host: {uri.Host}:{uri.Port}\r\n" + + "Upgrade: websocket\r\n" + + "Connection: Upgrade\r\n" + + $"Sec-WebSocket-Key: {secWebSocketKey}\r\n" + + $"Origin: http://{uri.Host}:{uri.Port}\r\n" + + $"Sec-WebSocket-Protocol: {options.SecWebSocketProtocol}\r\n" + + additionalHeaders + + "Sec-WebSocket-Version: 13\r\n\r\n"; + + byte[] httpRequest = Encoding.UTF8.GetBytes(handshakeHttpRequest); + stream.Write(httpRequest, 0, httpRequest.Length); + Events.Log.HandshakeSent(guid, handshakeHttpRequest); + return await ConnectAsync(stream, secWebSocketKey, options, token); + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs.meta new file mode 100644 index 000000000..a93bf3e9e --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38af07c5cfa1940f2bd0b981bccea293 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs new file mode 100644 index 000000000..ab67975dc --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ninja.WebSockets +{ + /// + /// Client WebSocket init options + /// + public class WebSocketClientOptions + { + /// + /// How often to send ping requests to the Server + /// This is done to prevent proxy servers from closing your connection + /// The default is TimeSpan.Zero meaning that it is disabled. + /// WebSocket servers usually send ping messages so it is not normally necessary for the client to send them (hence the TimeSpan.Zero default) + /// You can manually control ping pong messages using the PingPongManager class. + /// If you do that it is advisible to set this KeepAliveInterval to zero for the WebSocketClientFactory + /// + public TimeSpan KeepAliveInterval { get; set; } + + /// + /// Set to true to send a message immediately with the least amount of latency (typical usage for chat) + /// This will disable Nagle's algorithm which can cause high tcp latency for small packets sent infrequently + /// However, if you are streaming large packets or sending large numbers of small packets frequently it is advisable to set NoDelay to false + /// This way data will be bundled into larger packets for better throughput + /// + public bool NoDelay { get; set; } + + /// + /// Add any additional http headers to this dictionary + /// + public Dictionary AdditionalHttpHeaders { get; set; } + + /// + /// Include the full exception (with stack trace) in the close response + /// when an exception is encountered and the WebSocket connection is closed + /// The default is false + /// + public bool IncludeExceptionInCloseResponse { get; set; } + + /// + /// WebSocket Extensions as an HTTP header value + /// + public string SecWebSocketExtensions { get; set; } + + /// + /// A comma separated list of sub protocols in preference order (first one being the most preferred) + /// The server will return the first supported sub protocol (or none if none are supported) + /// Can be null + /// + public string SecWebSocketProtocol { get; set; } + + /// + /// Initialises a new instance of the WebSocketClientOptions class + /// + public WebSocketClientOptions() + { + KeepAliveInterval = TimeSpan.Zero; + NoDelay = true; + AdditionalHttpHeaders = new Dictionary(); + IncludeExceptionInCloseResponse = false; + SecWebSocketProtocol = null; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs.meta new file mode 100644 index 000000000..45c830509 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2911aa44c1154bf88781555542a9de3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs new file mode 100644 index 000000000..e91100cd4 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using System.IO; + +namespace Ninja.WebSockets +{ + /// + /// The WebSocket HTTP Context used to initiate a WebSocket handshake + /// + public class WebSocketHttpContext + { + /// + /// True if this is a valid WebSocket request + /// + public bool IsWebSocketRequest { get; private set; } + + public IList WebSocketRequestedProtocols { get; private set; } + + /// + /// The raw http header extracted from the stream + /// + public string HttpHeader { get; private set; } + + /// + /// The Path extracted from the http header + /// + public string Path { get; private set; } + + /// + /// The stream AFTER the header has already been read + /// + public Stream Stream { get; private set; } + + /// + /// Initialises a new instance of the WebSocketHttpContext class + /// + /// True if this is a valid WebSocket request + /// The raw http header extracted from the stream + /// The Path extracted from the http header + /// The stream AFTER the header has already been read + public WebSocketHttpContext(bool isWebSocketRequest, IList webSocketRequestedProtocols, string httpHeader, string path, Stream stream) + { + IsWebSocketRequest = isWebSocketRequest; + WebSocketRequestedProtocols = webSocketRequestedProtocols; + HttpHeader = httpHeader; + Path = path; + Stream = stream; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs.meta new file mode 100644 index 000000000..7e38e8a83 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efbbd1ab9e45e4dd3b88faaca1048c7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs new file mode 100644 index 000000000..c187f46e8 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs @@ -0,0 +1,169 @@ +// --------------------------------------------------------------------- +// Copyright 2018 David Haig +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// --------------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net.WebSockets; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets.Exceptions; +using Ninja.WebSockets.Internal; + +namespace Ninja.WebSockets +{ + /// + /// Web socket server factory used to open web socket server connections + /// + public class WebSocketServerFactory : IWebSocketServerFactory + { + private readonly Func _bufferFactory; + private readonly IBufferPool _bufferPool; + + /// + /// Initialises a new instance of the WebSocketServerFactory class without caring about internal buffers + /// + public WebSocketServerFactory() + { + _bufferPool = new BufferPool(); + _bufferFactory = _bufferPool.GetBuffer; + } + + /// + /// Initialises a new instance of the WebSocketClientFactory class with control over internal buffer creation + /// + /// Used to get a memory stream. Feel free to implement your own buffer pool. MemoryStreams will be disposed when no longer needed and can be returned to the pool. + /// + public WebSocketServerFactory(Func bufferFactory) + { + _bufferFactory = bufferFactory; + } + + /// + /// Reads a http header information from a stream and decodes the parts relating to the WebSocket protocot upgrade + /// + /// The network stream + /// The optional cancellation token + /// Http data read from the stream + public async Task ReadHttpHeaderFromStreamAsync(Stream stream, CancellationToken token = default(CancellationToken)) + { + string header = await HttpHelper.ReadHttpHeaderAsync(stream, token); + string path = HttpHelper.GetPathFromHeader(header); + bool isWebSocketRequest = HttpHelper.IsWebSocketUpgradeRequest(header); + IList subProtocols = HttpHelper.GetSubProtocols(header); + return new WebSocketHttpContext(isWebSocketRequest, subProtocols, header, path, stream); + } + + /// + /// Accept web socket with default options + /// Call ReadHttpHeaderFromStreamAsync first to get WebSocketHttpContext + /// + /// The http context used to initiate this web socket request + /// The optional cancellation token + /// A connected web socket + public async Task AcceptWebSocketAsync(WebSocketHttpContext context, CancellationToken token = default(CancellationToken)) + { + return await AcceptWebSocketAsync(context, new WebSocketServerOptions(), token); + } + + /// + /// Accept web socket with options specified + /// Call ReadHttpHeaderFromStreamAsync first to get WebSocketHttpContext + /// + /// The http context used to initiate this web socket request + /// The web socket options + /// The optional cancellation token + /// A connected web socket + public async Task AcceptWebSocketAsync(WebSocketHttpContext context, WebSocketServerOptions options, CancellationToken token = default(CancellationToken)) + { + Guid guid = Guid.NewGuid(); + Events.Log.AcceptWebSocketStarted(guid); + await PerformHandshakeAsync(guid, context.HttpHeader, options.SubProtocol, context.Stream, token); + Events.Log.ServerHandshakeSuccess(guid); + string secWebSocketExtensions = null; + return new WebSocketImplementation(guid, _bufferFactory, context.Stream, options.KeepAliveInterval, secWebSocketExtensions, options.IncludeExceptionInCloseResponse, false, options.SubProtocol); + } + + private static void CheckWebSocketVersion(string httpHeader) + { + Regex webSocketVersionRegex = new Regex("Sec-WebSocket-Version: (.*)", RegexOptions.IgnoreCase); + + // check the version. Support version 13 and above + const int WebSocketVersion = 13; + Match match = webSocketVersionRegex.Match(httpHeader); + if (match.Success) + { + int secWebSocketVersion = Convert.ToInt32(match.Groups[1].Value.Trim()); + if (secWebSocketVersion < WebSocketVersion) + { + throw new WebSocketVersionNotSupportedException(string.Format("WebSocket Version {0} not suported. Must be {1} or above", secWebSocketVersion, WebSocketVersion)); + } + } + else + { + throw new WebSocketVersionNotSupportedException("Cannot find \"Sec-WebSocket-Version\" in http header"); + } + } + + private static async Task PerformHandshakeAsync(Guid guid, String httpHeader, string subProtocol, Stream stream, CancellationToken token) + { + try + { + Regex webSocketKeyRegex = new Regex("Sec-WebSocket-Key: (.*)", RegexOptions.IgnoreCase); + CheckWebSocketVersion(httpHeader); + + Match match = webSocketKeyRegex.Match(httpHeader); + if (match.Success) + { + string secWebSocketKey = match.Groups[1].Value.Trim(); + string setWebSocketAccept = HttpHelper.ComputeSocketAcceptString(secWebSocketKey); + string response = ("HTTP/1.1 101 Switching Protocols\r\n" + + "Connection: Upgrade\r\n" + + "Upgrade: websocket\r\n" + + (subProtocol != null ? $"Sec-WebSocket-Protocol: {subProtocol}\r\n" : "") + + $"Sec-WebSocket-Accept: {setWebSocketAccept}"); + + Events.Log.SendingHandshakeResponse(guid, response); + await HttpHelper.WriteHttpHeaderAsync(response, stream, token); + } + else + { + throw new SecWebSocketKeyMissingException("Unable to read \"Sec-WebSocket-Key\" from http header"); + } + } + catch (WebSocketVersionNotSupportedException ex) + { + Events.Log.WebSocketVersionNotSupported(guid, ex.ToString()); + string response = "HTTP/1.1 426 Upgrade Required\r\nSec-WebSocket-Version: 13" + ex.Message; + await HttpHelper.WriteHttpHeaderAsync(response, stream, token); + throw; + } + catch (Exception ex) + { + Events.Log.BadRequest(guid, ex.ToString()); + await HttpHelper.WriteHttpHeaderAsync("HTTP/1.1 400 Bad Request", stream, token); + throw; + } + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs.meta new file mode 100644 index 000000000..920e27a24 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5fcfcd10538542edb4842d81798f4dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs new file mode 100644 index 000000000..18de58a3f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs @@ -0,0 +1,45 @@ +using System; + +namespace Ninja.WebSockets +{ + /// + /// Server WebSocket init options + /// + public class WebSocketServerOptions + { + /// + /// How often to send ping requests to the Client + /// The default is 60 seconds + /// This is done to prevent proxy servers from closing your connection + /// A timespan of zero will disable the automatic ping pong mechanism + /// You can manually control ping pong messages using the PingPongManager class. + /// If you do that it is advisible to set this KeepAliveInterval to zero in the WebSocketServerFactory + /// + public TimeSpan KeepAliveInterval { get; set; } + + /// + /// Include the full exception (with stack trace) in the close response + /// when an exception is encountered and the WebSocket connection is closed + /// The default is false + /// + public bool IncludeExceptionInCloseResponse { get; set; } + + /// + /// Specifies the sub protocol to send back to the client in the opening handshake + /// Can be null (the most common use case) + /// The client can specify multiple preferred protocols in the opening handshake header + /// The server should use the first supported one or set this to null if none of the requested sub protocols are supported + /// + public string SubProtocol { get; set; } + + /// + /// Initialises a new instance of the WebSocketServerOptions class + /// + public WebSocketServerOptions() + { + KeepAliveInterval = TimeSpan.FromSeconds(60); + IncludeExceptionInCloseResponse = false; + SubProtocol = null; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs.meta new file mode 100644 index 000000000..adfcf1dea --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f8d9d315d665461a94bc139e46cbfce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Plugins.meta b/Assets/Mirror/Runtime/Transport/Websocket/Plugins.meta new file mode 100644 index 000000000..6d6de23ad --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b64fa4674492a4cf1857ecee9f73fcb1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib b/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib new file mode 100644 index 000000000..ff1e6220f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib @@ -0,0 +1,108 @@ +var LibraryWebSockets = { + $webSocketInstances: [], + + SocketCreate: function(url, id, onopen, ondata, onclose) + { + var str = Pointer_stringify(url); + + var socket = new WebSocket(str, "binary"); + + socket.binaryType = 'arraybuffer'; + + socket.onopen = function(e) { + Runtime.dynCall('vi', onopen, [id]); + } + + socket.onerror = function(e) { + console.log("websocket error " + JSON.stringify(e)); + } + + socket.onmessage = function (e) { + // Todo: handle other data types? + if (e.data instanceof Blob) + { + var reader = new FileReader(); + reader.addEventListener("loadend", function() { + var array = new Uint8Array(reader.result); + }); + reader.readAsArrayBuffer(e.data); + } + else if (e.data instanceof ArrayBuffer) + { + var array = new Uint8Array(e.data); + var ptr = _malloc(array.length); + var dataHeap = new Uint8Array(HEAPU8.buffer, ptr, array.length); + dataHeap.set(array); + Runtime.dynCall('viii', ondata, [id, ptr, array.length]); + _free(ptr); + } + else if(typeof e.data === "string") { + var reader = new FileReader(); + reader.addEventListener("loadend", function() { + var array = new Uint8Array(reader.result); + }); + var blob = new Blob([e.data]); + reader.readAsArrayBuffer(blob); + } + }; + + socket.onclose = function (e) { + Runtime.dynCall('vi', onclose, [id]); + + if (e.code != 1000) + { + if (e.reason != null && e.reason.length > 0) + socket.error = e.reason; + else + { + switch (e.code) + { + case 1001: + socket.error = "Endpoint going away."; + break; + case 1002: + socket.error = "Protocol error."; + break; + case 1003: + socket.error = "Unsupported message."; + break; + case 1005: + socket.error = "No status."; + break; + case 1006: + socket.error = "Abnormal disconnection."; + break; + case 1009: + socket.error = "Data frame too large."; + break; + default: + socket.error = "Error "+e.code; + } + } + } + } + var instance = webSocketInstances.push(socket) - 1; + return instance; + }, + + SocketState: function (socketInstance) + { + var socket = webSocketInstances[socketInstance]; + return socket.readyState; + }, + + SocketSend: function (socketInstance, ptr, length) + { + var socket = webSocketInstances[socketInstance]; + socket.send (HEAPU8.buffer.slice(ptr, ptr+length)); + }, + + SocketClose: function (socketInstance) + { + var socket = webSocketInstances[socketInstance]; + socket.close(); + } +}; + +autoAddDeps(LibraryWebSockets, '$webSocketInstances'); +mergeInto(LibraryManager.library, LibraryWebSockets); \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib.meta b/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib.meta new file mode 100644 index 000000000..67daa5e12 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Plugins/WebSocket.jslib.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 3fba16b22ae274c729f6e8f91c425355 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Facebook: WebGL + second: + enabled: 1 + settings: {} + - first: + WebGL: WebGL + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs new file mode 100644 index 000000000..9d378e0dd --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs @@ -0,0 +1,343 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net.Security; +using System.Net.Sockets; +using System.Net.WebSockets; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Threading.Tasks; +using Ninja.WebSockets; +using UnityEngine; + +namespace Mirror +{ + public class Server + { + public event Action Connected; + public event Action ReceivedData; + public event Action Disconnected; + public event Action ReceivedError; + + private const int MaxMessageSize = 256 * 1024; + + // listener + TcpListener listener; + private readonly IWebSocketServerFactory webSocketServerFactory = new WebSocketServerFactory(); + + CancellationTokenSource cancellation; + + // clients with + Dictionary clients = new Dictionary(); + + public bool NoDelay = true; + + // connectionId counter + // (right now we only use it from one listener thread, but we might have + // multiple threads later in case of WebSockets etc.) + // -> static so that another server instance doesn't start at 0 again. + static int counter = 0; + + // public next id function in case someone needs to reserve an id + // (e.g. if hostMode should always have 0 connection and external + // connections should start at 1, etc.) + public static int NextConnectionId() + { + int id = Interlocked.Increment(ref counter); + + // it's very unlikely that we reach the uint limit of 2 billion. + // even with 1 new connection per second, this would take 68 years. + // -> but if it happens, then we should throw an exception because + // the caller probably should stop accepting clients. + // -> it's hardly worth using 'bool Next(out id)' for that case + // because it's just so unlikely. + if (id == int.MaxValue) + { + throw new Exception("connection id limit reached: " + id); + } + + return id; + } + + // check if the server is running + public bool Active + { + get { return listener != null; } + } + + public WebSocket GetClient(int connectionId) + { + // paul: null is evil, throw exception if not found + return clients[connectionId]; + } + + public bool _secure = false; + + public SslConfiguration _sslConfig; + + public class SslConfiguration + { + public System.Security.Cryptography.X509Certificates.X509Certificate2 Certificate; + public bool ClientCertificateRequired; + public System.Security.Authentication.SslProtocols EnabledSslProtocols; + public bool CheckCertificateRevocation; + } + + public async void Listen(int port) + { + try + { + cancellation = new CancellationTokenSource(); + + listener = TcpListener.Create(port); + listener.Server.NoDelay = this.NoDelay; + listener.Start(); + Debug.Log($"Websocket server started listening on port {port}"); + while (true) + { + TcpClient tcpClient = await listener.AcceptTcpClientAsync(); + ProcessTcpClient(tcpClient, cancellation.Token); + } + } + catch (ObjectDisposedException) + { + // do nothing. This will be thrown if the Listener has been stopped + } + catch (Exception ex) + { + ReceivedError?.Invoke(0, ex); + } + } + + private async void ProcessTcpClient(TcpClient tcpClient, CancellationToken token) + { + + try + { + // this worker thread stays alive until either of the following happens: + // Client sends a close conection request OR + // An unhandled exception is thrown OR + // The server is disposed + + // get a secure or insecure stream + Stream stream = tcpClient.GetStream(); + if (_secure) + { + var sslStream = new SslStream(stream, false, CertVerificationCallback); + sslStream.AuthenticateAsServer(_sslConfig.Certificate, _sslConfig.ClientCertificateRequired, _sslConfig.EnabledSslProtocols, _sslConfig.CheckCertificateRevocation); + stream = sslStream; + } + WebSocketHttpContext context = await webSocketServerFactory.ReadHttpHeaderFromStreamAsync(stream, token); + if (context.IsWebSocketRequest) + { + var options = new WebSocketServerOptions() { KeepAliveInterval = TimeSpan.FromSeconds(30), SubProtocol = "binary" }; + + WebSocket webSocket = await webSocketServerFactory.AcceptWebSocketAsync(context, options); + + await ReceiveLoopAsync(webSocket, token); + } + else + { + Debug.Log("Http header contains no web socket upgrade request. Ignoring"); + } + + } + catch (ObjectDisposedException) + { + // do nothing. This will be thrown if the Listener has been stopped + } + catch (Exception ex) + { + ReceivedError?.Invoke(0, ex); + } + finally + { + try + { + tcpClient.Client.Close(); + tcpClient.Close(); + } + catch (Exception ex) + { + ReceivedError?.Invoke(0, ex); + } + } + } + + private bool CertVerificationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + // Much research has been done on this. When this is initiated from a HTTPS/WSS stream, + // the certificate is null and the SslPolicyErrors is RemoteCertificateNotAvailable. + // Meaning we CAN'T verify this and this is all we can do. + return true; + } + + private async Task ReceiveLoopAsync(WebSocket webSocket, CancellationToken token) + { + int connectionId = NextConnectionId(); + clients.Add(connectionId, webSocket); + + byte[] buffer = new byte[MaxMessageSize]; + + try + { + // someone connected, raise event + Connected?.Invoke(connectionId); + + + while (true) + { + WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment(buffer), token); + + if (result.MessageType == WebSocketMessageType.Close) + { + Debug.Log($"Client initiated close. Status: {result.CloseStatus} Description: {result.CloseStatusDescription}"); + break; + } + + byte[] data = await ReadFrames(connectionId, result, webSocket, buffer, token); + + if (data == null) + break; + + try + { + // we received some data, raise event + ReceivedData?.Invoke(connectionId, data); + } + catch (Exception exception) + { + ReceivedError?.Invoke(connectionId, exception); + } + } + + } + catch (Exception exception) + { + ReceivedError?.Invoke(connectionId, exception); + } + finally + { + clients.Remove(connectionId); + Disconnected?.Invoke(connectionId); + } + } + + // a message might come splitted in multiple frames + // collect all frames + private async Task ReadFrames(int connectionId, WebSocketReceiveResult result, WebSocket webSocket, byte[] buffer, CancellationToken token) + { + int count = result.Count; + + while (!result.EndOfMessage) + { + if (count >= MaxMessageSize) + { + string closeMessage = string.Format("Maximum message size: {0} bytes.", MaxMessageSize); + await webSocket.CloseAsync(WebSocketCloseStatus.MessageTooBig, closeMessage, CancellationToken.None); + ReceivedError?.Invoke(connectionId, new WebSocketException(WebSocketError.HeaderError)); + return null; + } + + result = await webSocket.ReceiveAsync(new ArraySegment(buffer, count, MaxMessageSize - count), CancellationToken.None); + count += result.Count; + + } + return new ArraySegment(buffer, 0, count).ToArray(); + } + + public void Stop() + { + // only if started + if (!Active) return; + + Debug.Log("Server: stopping..."); + cancellation.Cancel(); + + // stop listening to connections so that no one can connect while we + // close the client connections + listener.Stop(); + + // clear clients list + clients.Clear(); + listener = null; + } + + // send message to client using socket connection or throws exception + public async void Send(int connectionId, byte[] data) + { + // find the connection + WebSocket client; + if (clients.TryGetValue(connectionId, out client)) + { + try + { + await client.SendAsync(new ArraySegment(data), WebSocketMessageType.Binary, true, cancellation.Token); + } + catch (ObjectDisposedException) { + // connection has been closed, swallow exception + Disconnect(connectionId); + } + catch (Exception exception) + { + if (clients.ContainsKey(connectionId)) + { + // paul: If someone unplugs their internet + // we can potentially get hundreds of errors here all at once + // because all the WriteAsync wake up at once and throw exceptions + + // by hiding inside this if, I ensure that we only report the first error + // all other errors are swallowed. + // this prevents a log storm that freezes the server for several seconds + ReceivedError?.Invoke(connectionId, exception); + } + + Disconnect(connectionId); + } + } + else + { + ReceivedError?.Invoke(connectionId, new SocketException((int)SocketError.NotConnected)); + } + } + + // get connection info in case it's needed (IP etc.) + // (we should never pass the TcpClient to the outside) + public string GetClientAddress(int connectionId) + { + // find the connection + WebSocket client; + if (clients.TryGetValue(connectionId, out client)) + { + return ""; + } + return null; + } + + // disconnect (kick) a client + public bool Disconnect(int connectionId) + { + // find the connection + WebSocket client; + if (clients.TryGetValue(connectionId, out client)) + { + clients.Remove(connectionId); + // just close it. client thread will take care of the rest. + client.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); + Debug.Log("Server.Disconnect connectionId:" + connectionId); + return true; + } + return false; + } + + public override string ToString() + { + if (Active) + { + return $"Websocket server {listener.LocalEndpoint}"; + } + return ""; + } + } +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs.meta new file mode 100644 index 000000000..44d8af0d1 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4bf9040513294fa4939bb9f2f0cda4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs new file mode 100644 index 000000000..1a7035f2a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -0,0 +1,138 @@ +// wraps Telepathy for use as HLAPI TransportLayer +using System; +using UnityEngine; + +namespace Mirror +{ + public class WebsocketTransport : Transport + { + + protected Client client = new Client(); + protected Server server = new Server(); + + public int port; + + [Tooltip("Nagle Algorithm can be disabled by enabling NoDelay")] + public bool NoDelay = true; + + public bool Secure = false; + + public string CertificatePath; + + public string CertificatePassword; + + public WebsocketTransport() + { + // dispatch the events from the server + server.Connected += (connectionId) => OnServerConnected.Invoke(connectionId); + server.Disconnected += (connectionId) => OnServerDisconnected.Invoke(connectionId); + server.ReceivedData += (connectionId, data) => OnServerDataReceived.Invoke(connectionId, data); + server.ReceivedError += (connectionId, error) => OnServerError.Invoke(connectionId, error); + + // dispatch events from the client + client.Connected += () => OnClientConnected.Invoke(); + client.Disconnected += () => OnClientDisconnected.Invoke(); + client.ReceivedData += (data) => OnClientDataReceived.Invoke(data); + client.ReceivedError += (error) => OnClientError.Invoke(error); + + // configure + client.NoDelay = NoDelay; + server.NoDelay = NoDelay; + + // HLAPI's local connection uses hard coded connectionId '0', so we + // need to make sure that external connections always start at '1' + // by simple eating the first one before the server starts + Server.NextConnectionId(); + + Debug.Log("Websocket transport initialized!"); + } + + public override bool Available() + { + // WebSockets should be available on all platforms, including WebGL (automatically) using our included JSLIB code + return true; + } + + // client + public override bool ClientConnected() { return client.IsConnected; } + + public override void ClientConnect(string host) + { + if (Secure) + { + client.Connect(new Uri($"wss://{host}:{port}")); + } + else + { + client.Connect(new Uri($"ws://{host}:{port}")); + } + } + + public override bool ClientSend(int channelId, byte[] data) { client.Send(data); return true; } + + public override void ClientDisconnect() { client.Disconnect(); } + + // server + public override bool ServerActive() { return server.Active; } + + public override void ServerStart() + { + + if (Secure) + { + server._secure = Secure; + server._sslConfig = new Server.SslConfiguration + { + Certificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(Application.dataPath + CertificatePath, CertificatePassword), + ClientCertificateRequired = false, + CheckCertificateRevocation = false, + EnabledSslProtocols = System.Security.Authentication.SslProtocols.Default + }; + } + server.Listen(port); + } + + public override bool ServerSend(int connectionId, int channelId, byte[] data) + { + server.Send(connectionId, data); + return true; + } + + public override bool ServerDisconnect(int connectionId) + { + return server.Disconnect(connectionId); + } + + public override string ServerGetClientAddress(int connectionId) + { + return server.GetClientAddress(connectionId); + } + public override void ServerStop() { server.Stop(); } + + // common + public override void Shutdown() + { + client.Disconnect(); + server.Stop(); + } + + public override int GetMaxPacketSize(int channelId) + { + // Telepathy's limit is Array.Length, which is int + return int.MaxValue; + } + + public override string ToString() + { + if (client.Connecting || client.IsConnected) + { + return client.ToString(); + } + if (server.Active) + { + return server.ToString(); + } + return ""; + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs.meta b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs.meta new file mode 100644 index 000000000..aab93802f --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f039183eda8945448b822a77e2a9d0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 8f041331de9814518638f37e5fa245b2fac2a42e Mon Sep 17 00:00:00 2001 From: Zac North Date: Thu, 28 Feb 2019 16:13:34 -0500 Subject: [PATCH 100/276] Fix WebSocket transport default port (#502) --- .../Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs index 1a7035f2a..8fdc2a8e2 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -1,4 +1,3 @@ -// wraps Telepathy for use as HLAPI TransportLayer using System; using UnityEngine; @@ -10,7 +9,7 @@ public class WebsocketTransport : Transport protected Client client = new Client(); protected Server server = new Server(); - public int port; + public int port = 7777; [Tooltip("Nagle Algorithm can be disabled by enabling NoDelay")] public bool NoDelay = true; @@ -135,4 +134,4 @@ public override string ToString() return ""; } } -} \ No newline at end of file +} From 2bc401897badc691b8b59c620a560ddf8c4ae9ee Mon Sep 17 00:00:00 2001 From: MrGadget Date: Thu, 28 Feb 2019 16:17:39 -0500 Subject: [PATCH 101/276] Update ChangeLog.md (#501) * Update ChangeLog.md Added entry for web sockets * Update ChangeLog.md * Update ChangeLog.md * Update ChangeLog.md Added entry for Multiplex * Update ChangeLog.md Rearranged the order, formatting --- docs/General/ChangeLog.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md index 4fc30f54b..a6c34f5e9 100644 --- a/docs/General/ChangeLog.md +++ b/docs/General/ChangeLog.md @@ -2,10 +2,13 @@ ## Version 1.5 -- 2019-Mar-01 +- Added: **Migration Tool** to (mostly) automate conversion from UNet +- Added: Full support for WebSockets and WebSocketsSecure to replace UNet LLAPI +- Added: Transport Multiplexer - allows the use of multiple concurrent transports - Added: Lobby Manager and Lobby Player with example game -- Added: Unit tests for Weaver - Added: Configurable Server Tickrate in NetworkManager - Added: New virtual OnClientChangeScene fires right before SceneManager.LoadSceneAsync is executed +- Added: Unit tests for Weaver - Fixed: Garbage allocations removed from a lot of things (more work to do, we know) - Fixed: SyncVar hook not firing when clients joined - Fixed: NetworkManager no longer assumes it's on Scene(0) in Build Settings @@ -15,13 +18,11 @@ - Removed: NetworkClient.allClients (Use NetworkClient.singleton instead) - Removed: NetworkServer.hostId and NetworkConnection.hostId (holdovers from LLAPI) - Removed: NetworkConnection.isConnected (NetworkConnection is always connected) -- Changed: Minimum Unity version: 2018.3.6 +- Changed: Minimum Unity version: **2018.3.6** ## Version 1.4 -- 2019-Feb-01 -- Mirror is now full source - no more DLL's -- Transports are now components: TCP, UDP, WebGL, Steam - Added: HelpURL attirbutes to components - Added: Automatic targetFramerate for headless builds - Added: ByteMessage to Messages class @@ -31,6 +32,8 @@ - Fixed: SceneId assignment - Fixed: Changed syncInterval wasn't saved...it is now - Fixed: Additive Scene loading +- Changed: **Mirror is now full source** -- no more DLL's +- Changed: **Transports are now components** -- TCP, UDP, WebGL, Steam - Changed: Transport class now dispatches Unity Events - Changed: NetworkServer.SendToClientOfPlayer uses NetworkIdentity now - Changed: NetworkServer.SendToObservers uses NetworkIdentity parameter now From fbada30e019321442c5a88272c51e6fb99b00e6a Mon Sep 17 00:00:00 2001 From: Zac North Date: Thu, 28 Feb 2019 16:55:12 -0500 Subject: [PATCH 102/276] Changed WebSockets default port to 7778 in case we add Multiplex (#503) --- Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs index 8fdc2a8e2..e9d479f6f 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -9,7 +9,7 @@ public class WebsocketTransport : Transport protected Client client = new Client(); protected Server server = new Server(); - public int port = 7777; + public int port = 7778; [Tooltip("Nagle Algorithm can be disabled by enabling NoDelay")] public bool NoDelay = true; From 848e9cfbe920bc363bada3aadfb62c408d82973c Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 23:07:08 -0800 Subject: [PATCH 103/276] Removed unused line. (#506) --- Assets/Mirror/Runtime/NetworkIdentity.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 750887069..c01ccae87 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -142,7 +142,6 @@ internal void SetNetworkInstanceId(uint newNetId) // only used when fixing duplicate scene IDs during post-processing public void ForceSceneId(uint newSceneId) => m_SceneId = newSceneId; internal void EnableIsClient() => isClient = true; - internal void EnableIsServer() => m_IsServer = true; // used when the player object for a connection changes internal void SetNotLocalPlayer() From 32c89f4f3391bb71efffb71ceb88cbaa9e749c2b Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Fri, 1 Mar 2019 01:11:46 -0600 Subject: [PATCH 104/276] Use property setter instead of custom setter --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- Assets/Mirror/Runtime/LocalClient.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 5 ++--- Assets/Mirror/Runtime/NetworkServer.cs | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index ea479c303..e0c072765 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -402,7 +402,7 @@ static void ApplySpawnPayload(NetworkIdentity identity, Vector3 position, Quater // objects spawned as part of initial state are started on a second pass if (s_IsSpawnFinished) { - identity.EnableIsClient(); + identity.isClient = true; identity.OnStartClient(); CheckForOwner(identity); } diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index e94b1f3c4..b7a7f8c6d 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -52,7 +52,7 @@ internal void AddLocalPlayer(NetworkIdentity localPlayer) connection.SetPlayerController(localPlayer); if (localPlayer != null) { - localPlayer.EnableIsClient(); + localPlayer.isClient = true; NetworkIdentity.spawned[localPlayer.netId] = localPlayer; localPlayer.connectionToServer = connection; } diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index c01ccae87..fd6704481 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -32,7 +32,7 @@ public sealed class NetworkIdentity : MonoBehaviour bool m_Reset; // properties - public bool isClient { get; private set; } + public bool isClient { get; internal set; } public bool isServer => m_IsServer && NetworkServer.active; // dont return true if server stopped. public bool isLocalPlayer { get; private set; } public bool hasAuthority { get; private set; } @@ -141,7 +141,6 @@ internal void SetNetworkInstanceId(uint newNetId) // only used when fixing duplicate scene IDs during post-processing public void ForceSceneId(uint newSceneId) => m_SceneId = newSceneId; - internal void EnableIsClient() => isClient = true; // used when the player object for a connection changes internal void SetNotLocalPlayer() @@ -274,7 +273,7 @@ internal void OnStartServer(bool allowNonZeroNetId) if (NetworkClient.active && NetworkServer.localClientActive) { // there will be no spawn message, so start the client here too - EnableIsClient(); + isClient=true; OnStartClient(); } diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 5f7386039..a9661b710 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -158,7 +158,7 @@ internal static void ActivateLocalClientScene() { if (LogFilter.Debug) { Debug.Log("ActivateClientScene " + identity.netId + " " + identity); } - identity.EnableIsClient(); + identity.isClient = true; identity.OnStartClient(); } } From e30ec76581c28b3231d6e699fd2fb2ceb733ed5b Mon Sep 17 00:00:00 2001 From: rodolphito Date: Thu, 28 Feb 2019 23:18:20 -0800 Subject: [PATCH 105/276] Made client authority setter internal to remove internal setter method. (#508) --- Assets/Mirror/Runtime/NetworkConnection.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 5 +---- Assets/Mirror/Runtime/NetworkServer.cs | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 326fb4099..cf4dd41e9 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -64,7 +64,7 @@ protected virtual void Dispose(bool disposing) { if (NetworkIdentity.spawned.TryGetValue(netId, out NetworkIdentity identity)) { - identity.ClearClientOwner(); + identity.clientAuthorityOwner = null; } } } diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index fd6704481..e52fef4db 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -44,7 +44,7 @@ public sealed class NetworkIdentity : MonoBehaviour public uint sceneId => m_SceneId; public bool serverOnly { get { return m_ServerOnly; } set { m_ServerOnly = value; } } public bool localPlayerAuthority { get { return m_LocalPlayerAuthority; } set { m_LocalPlayerAuthority = value; } } - public NetworkConnection clientAuthorityOwner { get; private set; } + public NetworkConnection clientAuthorityOwner { get; internal set; } public NetworkConnection connectionToServer { get; internal set; } public NetworkConnection connectionToClient { get; internal set; } @@ -102,9 +102,6 @@ internal void SetClientOwner(NetworkConnection conn) clientAuthorityOwner.AddOwnedObject(this); } - // used during dispose after disconnect - internal void ClearClientOwner() => clientAuthorityOwner = null; - internal void ForceAuthority(bool authority) { if (hasAuthority == authority) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index a9661b710..dd18ae640 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -605,7 +605,7 @@ internal static bool InternalReplacePlayerForConnection(NetworkConnection conn, if (conn.playerController != null) { conn.playerController.SetNotLocalPlayer(); - conn.playerController.ClearClientOwner(); + conn.playerController.clientAuthorityOwner = null; } conn.SetPlayerController(playerNetworkIdentity); From f0949f299e8bae0dc065650c6f3ad06ac37fb13c Mon Sep 17 00:00:00 2001 From: MrGadget Date: Fri, 1 Mar 2019 02:20:26 -0500 Subject: [PATCH 106/276] Update ChangeLog.md (#505) Added another entry --- docs/General/ChangeLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md index a6c34f5e9..06700e194 100644 --- a/docs/General/ChangeLog.md +++ b/docs/General/ChangeLog.md @@ -18,6 +18,7 @@ - Removed: NetworkClient.allClients (Use NetworkClient.singleton instead) - Removed: NetworkServer.hostId and NetworkConnection.hostId (holdovers from LLAPI) - Removed: NetworkConnection.isConnected (NetworkConnection is always connected) +- Removed: Transport.GetConnectionInfo (Use ServerGetClientAddress instead) - Changed: Minimum Unity version: **2018.3.6** From fcc3f06feb5d1794f739f44de298d30343e5e184 Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 1 Mar 2019 11:38:00 +0100 Subject: [PATCH 107/276] move RegisterSystemHandlers from ClientScene to NetworkClient. There is no reason why it should be in ClientScene, especially since it passes a NetworkClient, which is very strange. Additionally, not all delegates are in ClientScene anyway (like NetworkTime) (#473) --- Assets/Mirror/Runtime/ClientScene.cs | 64 ++++++-------------------- Assets/Mirror/Runtime/NetworkClient.cs | 33 ++++++++++++- 2 files changed, 46 insertions(+), 51 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index e0c072765..acebc40ed 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -190,42 +190,6 @@ internal static NetworkIdentity SpawnSceneObject(uint sceneId) return null; } - internal static void RegisterSystemHandlers(NetworkClient client, bool localClient) - { - // local client / regular client react to some messages differently. - // but we still need to add handlers for all of them to avoid - // 'message id not found' errors. - if (localClient) - { - client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); - client.RegisterHandler(MsgType.ObjectDestroy, OnLocalClientObjectDestroy); - client.RegisterHandler(MsgType.ObjectHide, OnLocalClientObjectHide); - client.RegisterHandler(MsgType.Owner, (msg) => {}); - client.RegisterHandler(MsgType.Pong, (msg) => {}); - client.RegisterHandler(MsgType.SpawnPrefab, OnLocalClientSpawnPrefab); - client.RegisterHandler(MsgType.SpawnSceneObject, OnLocalClientSpawnSceneObject); - client.RegisterHandler(MsgType.SpawnStarted, (msg) => {}); - client.RegisterHandler(MsgType.SpawnFinished, (msg) => {}); - client.RegisterHandler(MsgType.UpdateVars, (msg) => {}); - } - else - { - client.RegisterHandler(MsgType.LocalClientAuthority, OnClientAuthority); - client.RegisterHandler(MsgType.ObjectDestroy, OnObjectDestroy); - client.RegisterHandler(MsgType.ObjectHide, OnObjectDestroy); - client.RegisterHandler(MsgType.Owner, OnOwnerMessage); - client.RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); - client.RegisterHandler(MsgType.SpawnPrefab, OnSpawnPrefab); - client.RegisterHandler(MsgType.SpawnSceneObject, OnSpawnSceneObject); - client.RegisterHandler(MsgType.SpawnStarted, OnObjectSpawnStarted); - client.RegisterHandler(MsgType.SpawnFinished, OnObjectSpawnFinished); - client.RegisterHandler(MsgType.UpdateVars, OnUpdateVarsMessage); - } - - client.RegisterHandler(MsgType.Rpc, OnRPCMessage); - client.RegisterHandler(MsgType.SyncEvent, OnSyncEventMessage); - } - // spawn handlers and prefabs ////////////////////////////////////////// internal static bool GetPrefab(Guid assetId, out GameObject prefab) { @@ -408,7 +372,7 @@ static void ApplySpawnPayload(NetworkIdentity identity, Vector3 position, Quater } } - static void OnSpawnPrefab(NetworkMessage netMsg) + internal static void OnSpawnPrefab(NetworkMessage netMsg) { SpawnPrefabMessage msg = netMsg.ReadMessage(); @@ -469,7 +433,7 @@ static void OnSpawnPrefab(NetworkMessage netMsg) } } - static void OnSpawnSceneObject(NetworkMessage netMsg) + internal static void OnSpawnSceneObject(NetworkMessage netMsg) { SpawnSceneObjectMessage msg = netMsg.ReadMessage(); @@ -498,7 +462,7 @@ static void OnSpawnSceneObject(NetworkMessage netMsg) ApplySpawnPayload(spawnedId, msg.position, msg.rotation, msg.payload, msg.netId); } - static void OnObjectSpawnStarted(NetworkMessage netMsg) + internal static void OnObjectSpawnStarted(NetworkMessage netMsg) { if (LogFilter.Debug) { Debug.Log("SpawnStarted"); } @@ -506,7 +470,7 @@ static void OnObjectSpawnStarted(NetworkMessage netMsg) s_IsSpawnFinished = false; } - static void OnObjectSpawnFinished(NetworkMessage netMsg) + internal static void OnObjectSpawnFinished(NetworkMessage netMsg) { if (LogFilter.Debug) { Debug.Log("SpawnFinished"); } @@ -524,7 +488,7 @@ static void OnObjectSpawnFinished(NetworkMessage netMsg) s_IsSpawnFinished = true; } - static void OnObjectDestroy(NetworkMessage netMsg) + internal static void OnObjectDestroy(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); if (LogFilter.Debug) { Debug.Log("ClientScene::OnObjDestroy netId:" + msg.netId); } @@ -556,7 +520,7 @@ static void OnObjectDestroy(NetworkMessage netMsg) } } - static void OnLocalClientObjectDestroy(NetworkMessage netMsg) + internal static void OnLocalClientObjectDestroy(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjDestroy netId:" + msg.netId); } @@ -564,7 +528,7 @@ static void OnLocalClientObjectDestroy(NetworkMessage netMsg) NetworkIdentity.spawned.Remove(msg.netId); } - static void OnLocalClientObjectHide(NetworkMessage netMsg) + internal static void OnLocalClientObjectHide(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); } @@ -575,7 +539,7 @@ static void OnLocalClientObjectHide(NetworkMessage netMsg) } } - static void OnLocalClientSpawnPrefab(NetworkMessage netMsg) + internal static void OnLocalClientSpawnPrefab(NetworkMessage netMsg) { SpawnPrefabMessage msg = netMsg.ReadMessage(); @@ -585,7 +549,7 @@ static void OnLocalClientSpawnPrefab(NetworkMessage netMsg) } } - static void OnLocalClientSpawnSceneObject(NetworkMessage netMsg) + internal static void OnLocalClientSpawnSceneObject(NetworkMessage netMsg) { SpawnSceneObjectMessage msg = netMsg.ReadMessage(); @@ -595,7 +559,7 @@ static void OnLocalClientSpawnSceneObject(NetworkMessage netMsg) } } - static void OnUpdateVarsMessage(NetworkMessage netMsg) + internal static void OnUpdateVarsMessage(NetworkMessage netMsg) { UpdateVarsMessage msg = netMsg.ReadMessage(); @@ -611,7 +575,7 @@ static void OnUpdateVarsMessage(NetworkMessage netMsg) } } - static void OnRPCMessage(NetworkMessage netMsg) + internal static void OnRPCMessage(NetworkMessage netMsg) { RpcMessage msg = netMsg.ReadMessage(); @@ -623,7 +587,7 @@ static void OnRPCMessage(NetworkMessage netMsg) } } - static void OnSyncEventMessage(NetworkMessage netMsg) + internal static void OnSyncEventMessage(NetworkMessage netMsg) { SyncEventMessage msg = netMsg.ReadMessage(); @@ -639,7 +603,7 @@ static void OnSyncEventMessage(NetworkMessage netMsg) } } - static void OnClientAuthority(NetworkMessage netMsg) + internal static void OnClientAuthority(NetworkMessage netMsg) { ClientAuthorityMessage msg = netMsg.ReadMessage(); @@ -652,7 +616,7 @@ static void OnClientAuthority(NetworkMessage netMsg) } // OnClientAddedPlayer? - static void OnOwnerMessage(NetworkMessage netMsg) + internal static void OnOwnerMessage(NetworkMessage netMsg) { OwnerMessage msg = netMsg.ReadMessage(); diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 8e474f30c..cfb695fe3 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -224,7 +224,38 @@ public float GetRTT() internal void RegisterSystemHandlers(bool localClient) { - ClientScene.RegisterSystemHandlers(this, localClient); + // local client / regular client react to some messages differently. + // but we still need to add handlers for all of them to avoid + // 'message id not found' errors. + if (localClient) + { + RegisterHandler(MsgType.LocalClientAuthority, ClientScene.OnClientAuthority); + RegisterHandler(MsgType.ObjectDestroy, ClientScene.OnLocalClientObjectDestroy); + RegisterHandler(MsgType.ObjectHide, ClientScene.OnLocalClientObjectHide); + RegisterHandler(MsgType.Owner, (msg) => {}); + RegisterHandler(MsgType.Pong, (msg) => {}); + RegisterHandler(MsgType.SpawnPrefab, ClientScene.OnLocalClientSpawnPrefab); + RegisterHandler(MsgType.SpawnSceneObject, ClientScene.OnLocalClientSpawnSceneObject); + RegisterHandler(MsgType.SpawnStarted, (msg) => {}); + RegisterHandler(MsgType.SpawnFinished, (msg) => {}); + RegisterHandler(MsgType.UpdateVars, (msg) => {}); + } + else + { + RegisterHandler(MsgType.LocalClientAuthority, ClientScene.OnClientAuthority); + RegisterHandler(MsgType.ObjectDestroy, ClientScene.OnObjectDestroy); + RegisterHandler(MsgType.ObjectHide, ClientScene.OnObjectDestroy); + RegisterHandler(MsgType.Owner, ClientScene.OnOwnerMessage); + RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); + RegisterHandler(MsgType.SpawnPrefab, ClientScene.OnSpawnPrefab); + RegisterHandler(MsgType.SpawnSceneObject, ClientScene.OnSpawnSceneObject); + RegisterHandler(MsgType.SpawnStarted, ClientScene.OnObjectSpawnStarted); + RegisterHandler(MsgType.SpawnFinished, ClientScene.OnObjectSpawnFinished); + RegisterHandler(MsgType.UpdateVars, ClientScene.OnUpdateVarsMessage); + } + + RegisterHandler(MsgType.Rpc, ClientScene.OnRPCMessage); + RegisterHandler(MsgType.SyncEvent, ClientScene.OnSyncEventMessage); } public void RegisterHandler(short msgType, NetworkMessageDelegate handler) From 1e13ef5c31bf91523909b078ce9350bb83962a77 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Fri, 1 Mar 2019 02:45:01 -0800 Subject: [PATCH 108/276] Made it more clear that the checkboxes on the NetworkAnimator are referring to whether the parameter should be synced or not. (#512) --- Assets/Mirror/Editor/NetworkAnimatorEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Editor/NetworkAnimatorEditor.cs b/Assets/Mirror/Editor/NetworkAnimatorEditor.cs index 250a166c0..5ef50e9b9 100644 --- a/Assets/Mirror/Editor/NetworkAnimatorEditor.cs +++ b/Assets/Mirror/Editor/NetworkAnimatorEditor.cs @@ -63,7 +63,7 @@ void DrawControls() } bool oldSend = m_AnimSync.GetParameterAutoSend(i); - bool send = EditorGUILayout.Toggle(p.name, oldSend); + bool send = EditorGUILayout.Toggle("Sync " + p.name, oldSend); if (send != oldSend) { m_AnimSync.SetParameterAutoSend(i, send); From 5a9f10ec47c52010d248e0d56673fa58d4893e75 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Fri, 1 Mar 2019 05:29:38 -0800 Subject: [PATCH 109/276] Made member accessor debug logs consistent. (#513) --- .../Mirror/Components/NetworkLobbyManager.cs | 2 +- Assets/Mirror/Runtime/ClientScene.cs | 28 +++++++++---------- Assets/Mirror/Runtime/LocalConnections.cs | 2 +- Assets/Mirror/Runtime/NetworkConnection.cs | 4 +-- Assets/Mirror/Runtime/NetworkManager.cs | 22 +++++++-------- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Assets/Mirror/Components/NetworkLobbyManager.cs b/Assets/Mirror/Components/NetworkLobbyManager.cs index dd0b79a45..29dbd73ed 100644 --- a/Assets/Mirror/Components/NetworkLobbyManager.cs +++ b/Assets/Mirror/Components/NetworkLobbyManager.cs @@ -203,7 +203,7 @@ public override void OnServerAddPlayer(NetworkConnection conn) allPlayersReady = false; - if (LogFilter.Debug) Debug.LogFormat("NetworkLobbyManager:OnServerAddPlayer playerPrefab:{0}", lobbyPlayerPrefab.name); + if (LogFilter.Debug) Debug.LogFormat("NetworkLobbyManager.OnServerAddPlayer playerPrefab:{0}", lobbyPlayerPrefab.name); GameObject newLobbyGameObject = OnLobbyServerCreateLobbyPlayer(conn); if (newLobbyGameObject == null) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index acebc40ed..91fe5877c 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -41,7 +41,7 @@ internal static void Shutdown() // this is called from message handler for Owner message internal static void InternalAddPlayer(NetworkIdentity identity) { - if (LogFilter.Debug) { Debug.LogWarning("ClientScene::InternalAddPlayer"); } + if (LogFilter.Debug) { Debug.LogWarning("ClientScene.InternalAddPlayer"); } // NOTE: It can be "normal" when changing scenes for the player to be destroyed and recreated. // But, the player structures are not cleaned up, we'll just replace the old player @@ -81,11 +81,11 @@ public static bool AddPlayer(NetworkConnection readyConn, MessageBase extraMessa if (readyConnection.playerController != null) { - Debug.LogError("ClientScene::AddPlayer: a PlayerController was already added. Did you call AddPlayer twice?"); + Debug.LogError("ClientScene.AddPlayer: a PlayerController was already added. Did you call AddPlayer twice?"); return false; } - if (LogFilter.Debug) { Debug.Log("ClientScene::AddPlayer() called with connection [" + readyConnection + "]"); } + if (LogFilter.Debug) { Debug.Log("ClientScene.AddPlayer() called with connection [" + readyConnection + "]"); } AddPlayerMessage msg = new AddPlayerMessage(); if (extraMessage != null) @@ -100,7 +100,7 @@ public static bool AddPlayer(NetworkConnection readyConn, MessageBase extraMessa public static bool RemovePlayer() { - if (LogFilter.Debug) { Debug.Log("ClientScene::RemovePlayer() called with connection [" + readyConnection + "]"); } + if (LogFilter.Debug) { Debug.Log("ClientScene.RemovePlayer() called with connection [" + readyConnection + "]"); } if (readyConnection.playerController != null) { @@ -125,7 +125,7 @@ public static bool Ready(NetworkConnection conn) return false; } - if (LogFilter.Debug) { Debug.Log("ClientScene::Ready() called with connection [" + conn + "]"); } + if (LogFilter.Debug) { Debug.Log("ClientScene.Ready() called with connection [" + conn + "]"); } if (conn != null) { @@ -491,7 +491,7 @@ internal static void OnObjectSpawnFinished(NetworkMessage netMsg) internal static void OnObjectDestroy(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnObjDestroy netId:" + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnObjDestroy netId:" + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -523,7 +523,7 @@ internal static void OnObjectDestroy(NetworkMessage netMsg) internal static void OnLocalClientObjectDestroy(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjDestroy netId:" + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnLocalObjectObjDestroy netId:" + msg.netId); } NetworkIdentity.spawned.Remove(msg.netId); } @@ -531,7 +531,7 @@ internal static void OnLocalClientObjectDestroy(NetworkMessage netMsg) internal static void OnLocalClientObjectHide(NetworkMessage netMsg) { ObjectDestroyMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnLocalObjectObjHide netId:" + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -563,7 +563,7 @@ internal static void OnUpdateVarsMessage(NetworkMessage netMsg) { UpdateVarsMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnUpdateVarsMessage " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnUpdateVarsMessage " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -579,7 +579,7 @@ internal static void OnRPCMessage(NetworkMessage netMsg) { RpcMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnRPCMessage hash:" + msg.functionHash + " netId:" + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnRPCMessage hash:" + msg.functionHash + " netId:" + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -591,7 +591,7 @@ internal static void OnSyncEventMessage(NetworkMessage netMsg) { SyncEventMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnSyncEventMessage " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnSyncEventMessage " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -607,7 +607,7 @@ internal static void OnClientAuthority(NetworkMessage netMsg) { ClientAuthorityMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnClientAuthority for connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnClientAuthority for connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -620,7 +620,7 @@ internal static void OnOwnerMessage(NetworkMessage netMsg) { OwnerMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnOwnerMessage - connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } // is there already an owner that is a different object?? netMsg.conn.playerController?.SetNotLocalPlayer(); @@ -651,7 +651,7 @@ static void CheckForOwner(NetworkIdentity identity) identity.connectionToServer = readyConnection; identity.SetLocalPlayer(); - if (LogFilter.Debug) { Debug.Log("ClientScene::OnOwnerMessage - player=" + identity.name); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - player=" + identity.name); } if (readyConnection.connectionId < 0) { Debug.LogError("Owner message received on a local client."); diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index 893d34bce..8ef48bdca 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -32,7 +32,7 @@ internal override bool SendBytes(byte[] bytes, int channelId = Channels.DefaultR { if (bytes.Length == 0) { - Debug.LogError("LocalConnection:SendBytes cannot send zero bytes"); + Debug.LogError("LocalConnection.SendBytes cannot send zero bytes"); return false; } diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index cf4dd41e9..123dd90c7 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -140,14 +140,14 @@ internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultR if (bytes.Length > Transport.activeTransport.GetMaxPacketSize(channelId)) { - Debug.LogError("NetworkConnection:SendBytes cannot send packet larger than " + Transport.activeTransport.GetMaxPacketSize(channelId) + " bytes"); + Debug.LogError("NetworkConnection.SendBytes cannot send packet larger than " + Transport.activeTransport.GetMaxPacketSize(channelId) + " bytes"); return false; } if (bytes.Length == 0) { // zero length packets getting into the packet queues are bad. - Debug.LogError("NetworkConnection:SendBytes cannot send zero bytes"); + Debug.LogError("NetworkConnection.SendBytes cannot send zero bytes"); return false; } diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 06fee5a64..14e09a758 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -523,7 +523,7 @@ public static void Shutdown() internal void OnServerConnectInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerConnectInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerConnectInternal"); } if (networkSceneName != "" && networkSceneName != offlineScene) { @@ -536,19 +536,19 @@ internal void OnServerConnectInternal(NetworkMessage netMsg) internal void OnServerDisconnectInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerDisconnectInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerDisconnectInternal"); } OnServerDisconnect(netMsg.conn); } internal void OnServerReadyMessageInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerReadyMessageInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerReadyMessageInternal"); } OnServerReady(netMsg.conn); } internal void OnServerAddPlayerMessageInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerAddPlayerMessageInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerAddPlayerMessageInternal"); } AddPlayerMessage msg = netMsg.ReadMessage(); @@ -571,7 +571,7 @@ internal void OnServerAddPlayerMessageInternal(NetworkMessage netMsg) internal void OnServerRemovePlayerMessageInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerRemovePlayerMessageInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerRemovePlayerMessageInternal"); } if (netMsg.conn.playerController != null) { @@ -582,7 +582,7 @@ internal void OnServerRemovePlayerMessageInternal(NetworkMessage netMsg) internal void OnServerErrorInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnServerErrorInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerErrorInternal"); } ErrorMessage msg = netMsg.ReadMessage(); OnServerError(netMsg.conn, msg.value); @@ -592,7 +592,7 @@ internal void OnServerErrorInternal(NetworkMessage netMsg) internal void OnClientConnectInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientConnectInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientConnectInternal"); } string loadedSceneName = SceneManager.GetActiveScene().name; if (string.IsNullOrEmpty(onlineScene) || onlineScene == offlineScene || loadedSceneName == onlineScene) @@ -609,14 +609,14 @@ internal void OnClientConnectInternal(NetworkMessage netMsg) internal void OnClientDisconnectInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientDisconnectInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientDisconnectInternal"); } OnClientDisconnect(netMsg.conn); } internal void OnClientNotReadyMessageInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientNotReadyMessageInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientNotReadyMessageInternal"); } ClientScene.ready = false; OnClientNotReady(netMsg.conn); @@ -626,7 +626,7 @@ internal void OnClientNotReadyMessageInternal(NetworkMessage netMsg) internal void OnClientErrorInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientErrorInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientErrorInternal"); } ErrorMessage msg = netMsg.ReadMessage(); OnClientError(netMsg.conn, msg.value); @@ -634,7 +634,7 @@ internal void OnClientErrorInternal(NetworkMessage netMsg) internal void OnClientSceneInternal(NetworkMessage netMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientSceneInternal"); } + if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientSceneInternal"); } string newSceneName = netMsg.reader.ReadString(); From 4d40ddb891a88b305137b07256d7ec39d4b3f430 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Fri, 1 Mar 2019 06:01:42 -0800 Subject: [PATCH 110/276] Minor style fixes. (#514) --- Assets/Mirror/Components/NetworkAnimator.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 4add52d06..e4768b746 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -10,13 +10,13 @@ namespace Mirror public class NetworkAnimator : NetworkBehaviour { // configuration - [SerializeField] Animator m_Animator; - [SerializeField] uint m_ParameterSendBits; + [SerializeField] Animator m_Animator; + [SerializeField] uint m_ParameterSendBits; // properties public Animator animator { - get { return m_Animator; } + get => m_Animator; set { m_Animator = value; @@ -41,9 +41,9 @@ public bool GetParameterAutoSend(int index) return (m_ParameterSendBits & (uint)(1 << index)) != 0; } - int m_AnimationHash; - int m_TransitionHash; - float m_SendTimer; + int m_AnimationHash; + int m_TransitionHash; + float m_SendTimer; bool sendMessagesAllowed { From 6b6d2b00a5361f9b9bcb9891b8674b27e51f2563 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Fri, 1 Mar 2019 06:26:20 -0800 Subject: [PATCH 111/276] Spaces around equal signs. (#515) --- Assets/Mirror/Components/NetworkTransformBase.cs | 8 ++++---- Assets/Mirror/Runtime/NetworkIdentity.cs | 2 +- Assets/Mirror/Runtime/Transport/Transport.cs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index 6250fdd2a..2c7216c63 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -152,10 +152,10 @@ void DeserializeFromReader(NetworkReader reader) if (start == null) { start = new DataPoint{ - timeStamp=Time.time - syncInterval, - position=targetComponent.transform.position, - rotation=targetComponent.transform.rotation, - movementSpeed=temp.movementSpeed + timeStamp = Time.time - syncInterval, + position = targetComponent.transform.position, + rotation = targetComponent.transform.rotation, + movementSpeed = temp.movementSpeed }; } // -> second or nth data point? then update previous, but: diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index e52fef4db..197160989 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -270,7 +270,7 @@ internal void OnStartServer(bool allowNonZeroNetId) if (NetworkClient.active && NetworkServer.localClientActive) { // there will be no spawn message, so start the client here too - isClient=true; + isClient = true; OnStartClient(); } diff --git a/Assets/Mirror/Runtime/Transport/Transport.cs b/Assets/Mirror/Runtime/Transport/Transport.cs index 6283da63f..66c21bd67 100644 --- a/Assets/Mirror/Runtime/Transport/Transport.cs +++ b/Assets/Mirror/Runtime/Transport/Transport.cs @@ -54,7 +54,7 @@ public virtual bool Available() // common public abstract void Shutdown(); - public abstract int GetMaxPacketSize(int channelId=Channels.DefaultReliable); + public abstract int GetMaxPacketSize(int channelId = Channels.DefaultReliable); // block Update() to force Transports to use LateUpdate to avoid race // conditions. messages should be processed after all the game state From 0e5181f26aa2ee09f690f7812973ef3ce79bd9fe Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 1 Mar 2019 15:29:50 +0100 Subject: [PATCH 112/276] NetworkClient: move PrepareForConnect code into Connect --- Assets/Mirror/Runtime/NetworkClient.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index cfb695fe3..be5aefc7e 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -52,10 +52,13 @@ internal void SetHandlers(NetworkConnection conn) public void Connect(string ip) { - PrepareForConnect(); - if (LogFilter.Debug) { Debug.Log("Client Connect: " + ip); } + active = true; + RegisterSystemHandlers(false); + Transport.activeTransport.enabled = true; + InitializeTransportHandlers(); + serverIp = ip; connectState = ConnectState.Connecting; @@ -114,14 +117,6 @@ void OnConnected() else Debug.LogError("Skipped Connect message handling because m_Connection is null."); } - void PrepareForConnect() - { - active = true; - RegisterSystemHandlers(false); - Transport.activeTransport.enabled = true; - InitializeTransportHandlers(); - } - public virtual void Disconnect() { connectState = ConnectState.Disconnected; From 32b9fcc98781b06c3eb4b79ab375d729df409fa5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 1 Mar 2019 15:30:20 +0100 Subject: [PATCH 113/276] Remove old comment --- Assets/Mirror/Runtime/NetworkClient.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index be5aefc7e..93175c160 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -71,7 +71,6 @@ public void Connect(string ip) private void InitializeTransportHandlers() { - // TODO do this in inspector? Transport.activeTransport.OnClientConnected.AddListener(OnConnected); Transport.activeTransport.OnClientDataReceived.AddListener(OnDataReceived); Transport.activeTransport.OnClientDisconnected.AddListener(OnDisconnected); From d41701e0c5b9bc936904485427905a655a833539 Mon Sep 17 00:00:00 2001 From: Zac North Date: Fri, 1 Mar 2019 15:29:02 -0500 Subject: [PATCH 114/276] Added a license for Ninja.WebSockets (#518) --- .../Websocket/Ninja.WebSockets/LICENCE.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md new file mode 100644 index 000000000..6fd6c111a --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright 2018 David Haig + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file From 400382be761aa95f9ff0b4e48a75561dbed94f38 Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 1 Mar 2019 22:51:45 +0100 Subject: [PATCH 115/276] ProximityChecker NonAlloc to avoid GC (see https://github.com/vis2k/Mirror/pull/228/) --- .../Components/NetworkProximityChecker.cs | 30 ++++++++++++++----- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Assets/Mirror/Components/NetworkProximityChecker.cs b/Assets/Mirror/Components/NetworkProximityChecker.cs index 2626d1efd..de4dbedb1 100644 --- a/Assets/Mirror/Components/NetworkProximityChecker.cs +++ b/Assets/Mirror/Components/NetworkProximityChecker.cs @@ -19,7 +19,7 @@ public enum CheckMethod // how often to refresh the list of observers, in seconds [Tooltip("How often (in seconds) that this object should update the set of players that can see it.")] - public float visUpdateInterval = 1.0f; + public float visUpdateInterval = 1; [Tooltip("Which method to use for checking proximity of players.\n\nPhysics3D uses 3D physics to determine proximity.\n\nPhysics2D uses 2D physics to determine proximity.")] public CheckMethod checkMethod = CheckMethod.Physics3D; @@ -29,10 +29,18 @@ public enum CheckMethod // ~0 means 'Everything'. layers are used anyway, might as well expose them to the user. [Tooltip("Select only the Player's layer to avoid unnecessary SphereCasts against the Terrain, etc.")] - public LayerMask castLayers = ~0; + public LayerMask castLayers = ~0; float m_VisUpdateTime; + // OverlapSphereNonAlloc array to avoid allocations. + // -> static so we don't create one per component + // -> this is worth it because proximity checking happens for just about + // every entity on the server! + // -> should be big enough to work in just about all cases + static Collider[] hitsBuffer3D = new Collider[10000]; + static Collider2D[] hitsBuffer2D = new Collider2D[10000]; + void Update() { if (!NetworkServer.active) @@ -77,10 +85,13 @@ public override bool OnRebuildObservers(HashSet observers, bo { case CheckMethod.Physics3D: { - Collider[] hits = Physics.OverlapSphere(transform.position, visRange, castLayers); - for (int i = 0; i < hits.Length; i++) + // cast without allocating GC for maximum performance + int hitCount = Physics.OverlapSphereNonAlloc(transform.position, visRange, hitsBuffer3D, castLayers); + if (hitCount == hitsBuffer3D.Length) { Debug.LogWarning("NetworkProximityChecker's OverlapSphere test for " + name + " has filled the whole buffer(" + hitsBuffer3D.Length + "). Some results might have been omitted. Consider increasing buffer size."); } + + for (int i = 0; i < hitCount; i++) { - Collider hit = hits[i]; + Collider hit = hitsBuffer3D[i]; // collider might be on pelvis, often the NetworkIdentity is in a parent // (looks in the object itself and then parents) NetworkIdentity identity = hit.GetComponentInParent(); @@ -95,10 +106,13 @@ public override bool OnRebuildObservers(HashSet observers, bo case CheckMethod.Physics2D: { - Collider2D[] hits = Physics2D.OverlapCircleAll(transform.position, visRange, castLayers); - for (int i = 0; i < hits.Length; i++) + // cast without allocating GC for maximum performance + int hitCount = Physics2D.OverlapCircleNonAlloc(transform.position, visRange, hitsBuffer2D, castLayers); + if (hitCount == hitsBuffer2D.Length) { Debug.LogWarning("NetworkProximityChecker's OverlapCircle test for " + name + " has filled the whole buffer(" + hitsBuffer2D.Length + "). Some results might have been omitted. Consider increasing buffer size."); } + + for (int i = 0; i < hitCount; i++) { - Collider2D hit = hits[i]; + Collider2D hit = hitsBuffer2D[i]; // collider might be on pelvis, often the NetworkIdentity is in a parent // (looks in the object itself and then parents) NetworkIdentity identity = hit.GetComponentInParent(); From 92596de38a4854b3d904c444d538aa5e306c84c1 Mon Sep 17 00:00:00 2001 From: c6burns Date: Sat, 2 Mar 2019 01:45:38 -0700 Subject: [PATCH 116/276] Weaver follow on pr to 490 (#519) * removed workaround from previous cecil version that now causes sharing violation console warning * fixed language feature error -- null prop op is C#4 but .sln target is net35 * separated editor logging (required) from console logging (optional) * fix issue introduced by flipping boolean property meaning in 9895bff * added updated weaver assembly * updated to release assembly - wrong assembly in ef0c903 * commenting weave target debug log to retain prev behaviour (oops) --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 78848 -> 77824 bytes Weaver/Weaver/CompilationFinishedHook.cs | 10 +++++---- Weaver/Weaver/Weaver.cs | 25 ----------------------- 3 files changed, 6 insertions(+), 29 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index c59a3e8d34bb661c6e9602f684fb3efb2120a372..d1e4cf0bf4709f36f92a5318214f811dfd232fc1 100644 GIT binary patch delta 22200 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 S8>Cyh?{{|QU-FiYrvC?B9r=I& delta 22866 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 diff --git a/Weaver/Weaver/CompilationFinishedHook.cs b/Weaver/Weaver/CompilationFinishedHook.cs index fb9cd0765..9b08e5a9f 100644 --- a/Weaver/Weaver/CompilationFinishedHook.cs +++ b/Weaver/Weaver/CompilationFinishedHook.cs @@ -25,25 +25,26 @@ public class CompilationFinishedHook static void HandleMessage(string msg) { if (UnityLogEnabled) Debug.Log(msg); - OnWeaverMessage?.Invoke(msg); + if (OnWeaverMessage != null) OnWeaverMessage.Invoke(msg); } // warning message handler that also calls OnWarningMethod delegate static void HandleWarning(string msg) { if (UnityLogEnabled) Debug.LogWarning(msg); - OnWeaverWarning?.Invoke(msg); + if (OnWeaverWarning != null) OnWeaverWarning.Invoke(msg); } // error message handler that also calls OnErrorMethod delegate static void HandleError(string msg) { if (UnityLogEnabled) Debug.LogError(msg); - OnWeaverError?.Invoke(msg); + if (OnWeaverError != null) OnWeaverError.Invoke(msg); } static CompilationFinishedHook() { + UnityLogEnabled = true; // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp.dll/ // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp-Editor.dll CompilationPipeline.assemblyCompilationFinished += (assemblyPath, messages) => @@ -85,7 +86,8 @@ static CompilationFinishedHook() bool buildingForEditor = assemblyPath.EndsWith("Editor.dll"); if (!buildingForEditor) { - if (UnityLogEnabled) Console.WriteLine("Weaving: " + assemblyPath); + //if (UnityLogEnabled) Debug.Log("Weaving: " + assemblyPath); // uncomment to easily observe weave targets + Console.WriteLine("Weaving: " + assemblyPath); // assemblyResolver: unity uses this by default: // ICompilationExtension compilationExtension = GetCompilationExtension(); // IAssemblyResolver assemblyResolver = compilationExtension.GetAssemblyResolver(editor, file, null); diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index 4ec5dab5d..b22036d1a 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -1466,31 +1466,6 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes //Console.WriteLine ("Output:" + dest); WriterParameters writeParams = Helpers.GetWriterParameters(readParams); - - // PdbWriterProvider uses ISymUnmanagedWriter2 COM interface but Mono can't invoke a method on it and crashes (actually it first throws the following exception and then crashes). - // One solution would be to convert UNetWeaver to exe file and run it on .NET on Windows (I have tested that and it works). - // However it's much more simple to just write mdb file. - // System.NullReferenceException: Object reference not set to an instance of an object - // at(wrapper cominterop - invoke) Mono.Cecil.Pdb.ISymUnmanagedWriter2:DefineDocument(string, System.Guid &, System.Guid &, System.Guid &, Mono.Cecil.Pdb.ISymUnmanagedDocumentWriter &) - // at Mono.Cecil.Pdb.SymWriter.DefineDocument(System.String url, Guid language, Guid languageVendor, Guid documentType)[0x00000] in < filename unknown >:0 - if (writeParams.SymbolWriterProvider is PdbWriterProvider) - { - writeParams.SymbolWriterProvider = new MdbWriterProvider(); - // old pdb file is out of date so delete it. symbols will be stored in mdb - string pdb = Path.ChangeExtension(assName, ".pdb"); - - try - { - File.Delete(pdb); - } - catch (Exception ex) - { - // workaround until Unity fixes C#7 compiler compability with the UNET weaver - // un-comment it if you want lot of noise - //UnityEngine.Debug.LogWarning(string.Format("Unable to delete file {0}: {1}", pdb, ex.Message)); - } - } - CurrentAssembly.Write(dest, writeParams); } From cfc5a0888fdc6a200e578f89bb792c785ccf6639 Mon Sep 17 00:00:00 2001 From: vis2k Date: Sat, 2 Mar 2019 09:46:26 +0100 Subject: [PATCH 117/276] Rebuild Weaver.dll --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77824 -> 77824 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index d1e4cf0bf4709f36f92a5318214f811dfd232fc1..720faac59946f3564ffb6f8c13d7b1a3a40f5cf1 100644 GIT binary patch delta 42 ycmZp8z|!!5WkLt@Ri~=P?ycR7wvqxYQM1LHueEyYe%`|7Vx3XH{e~o?h8O^Tm=M Date: Sat, 2 Mar 2019 09:52:45 +0100 Subject: [PATCH 118/276] Weaver: set UnityLogEnabled to true by default --- Weaver/Weaver/CompilationFinishedHook.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Weaver/Weaver/CompilationFinishedHook.cs b/Weaver/Weaver/CompilationFinishedHook.cs index 9b08e5a9f..7cdd7574c 100644 --- a/Weaver/Weaver/CompilationFinishedHook.cs +++ b/Weaver/Weaver/CompilationFinishedHook.cs @@ -18,7 +18,7 @@ public class CompilationFinishedHook public static Action OnWeaverError; // delete for subscription to Weaver error messages public static bool WeaverEnabled { get; set; } // controls whether we weave any assemblies when CompilationPipeline delegates are invoked - public static bool UnityLogEnabled { get; set; } // controls weather Weaver errors are reported direct to the Unity console (tests enable this) + public static bool UnityLogEnabled = true; // controls weather Weaver errors are reported direct to the Unity console (tests enable this) public static bool WeaveFailed { get; private set; } // holds the result status of our latest Weave operation // debug message handler that also calls OnMessageMethod delegate @@ -44,7 +44,6 @@ static void HandleError(string msg) static CompilationFinishedHook() { - UnityLogEnabled = true; // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp.dll/ // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp-Editor.dll CompilationPipeline.assemblyCompilationFinished += (assemblyPath, messages) => From 7da51e62ffccd1099beaae51bc251397d8c1686f Mon Sep 17 00:00:00 2001 From: Zac North Date: Sat, 2 Mar 2019 03:53:36 -0500 Subject: [PATCH 119/276] Removed an unused override in the Example NetworkLobbyPlayer (#521) --- .../Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs index 938bdb4e4..0e452e277 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs @@ -27,12 +27,6 @@ in ServerChangeScene and OnClientChangeScene. gameObject.transform.SetParent(GameObject.Find("Players").transform); } - public override void ClientLoadedScene(Scene arg0, LoadSceneMode arg1) - { - NetworkLobbyManager lobby = NetworkManager.singleton as NetworkLobbyManager; - base.ClientLoadedScene(arg0, arg1); - } - public override void OnClientEnterLobby() { if (LogFilter.Debug) Debug.LogFormat("OnClientEnterLobby {0}", SceneManager.GetActiveScene().name); From a44fc29475ddecc6726676eceba5bca1d83804a0 Mon Sep 17 00:00:00 2001 From: c6burns Date: Sat, 2 Mar 2019 01:55:02 -0700 Subject: [PATCH 120/276] added tasks to delete weaver symbols after debug builds (#523) --- Weaver/Weaver/Mirror.Weaver.csproj | 32 ++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/Weaver/Weaver/Mirror.Weaver.csproj b/Weaver/Weaver/Mirror.Weaver.csproj index c48cf1cd2..bd1bee843 100644 --- a/Weaver/Weaver/Mirror.Weaver.csproj +++ b/Weaver/Weaver/Mirror.Weaver.csproj @@ -17,7 +17,7 @@ DEBUG; prompt 4 - true + false 4 @@ -26,7 +26,7 @@ bin\Release prompt 4 - true + false @@ -67,15 +67,31 @@ + + $(ProjectDir)..\..\Assets\Mirror\Plugins\ + + - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file From c4f436d71e12b19e28aa5a00929deea7814ee782 Mon Sep 17 00:00:00 2001 From: vis2k Date: Sat, 2 Mar 2019 09:55:37 +0100 Subject: [PATCH 121/276] Rebuild Weaver.dll --- Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77824 -> 77312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll index 720faac59946f3564ffb6f8c13d7b1a3a40f5cf1..11a79f1b46250ed773c9965be7113b93429d5bfb 100644 GIT binary patch literal 77312 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 PxPD4={qpDk9S8mwy328& literal 77824 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%0AG)W`;j8mB(kQFCz@!nlk8AM5U9{8? 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 Date: Sat, 2 Mar 2019 10:27:48 +0100 Subject: [PATCH 122/276] Ninja.Websockets license.meta file generated by Unity --- .../Transport/Websocket/Ninja.WebSockets/LICENCE.md.meta | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md.meta diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md.meta b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md.meta new file mode 100644 index 000000000..9a7423ed2 --- /dev/null +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/LICENCE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 681505da4aa4b48b8b6251521a495d64 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 953cd8f762876aafa01c01f7ea7c6e4e51c519fa Mon Sep 17 00:00:00 2001 From: MrGadget Date: Sat, 2 Mar 2019 14:56:08 -0500 Subject: [PATCH 123/276] Update ChangeLog.md (#525) Added entry --- docs/General/ChangeLog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/General/ChangeLog.md b/docs/General/ChangeLog.md index 06700e194..e05b00e85 100644 --- a/docs/General/ChangeLog.md +++ b/docs/General/ChangeLog.md @@ -10,6 +10,7 @@ - Added: New virtual OnClientChangeScene fires right before SceneManager.LoadSceneAsync is executed - Added: Unit tests for Weaver - Fixed: Garbage allocations removed from a lot of things (more work to do, we know) +- Fixed: NetworkProximityChecker now uses OverlapSphereNonAlloc and OverlapCircleNonAlloc - Fixed: SyncVar hook not firing when clients joined - Fixed: NetworkManager no longer assumes it's on Scene(0) in Build Settings - Fixed: NetworkAnimator no longer lmited to 6 variables From ac97a3aac194d0836a7ce4fad513d2400b165797 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sat, 2 Mar 2019 13:57:18 -0600 Subject: [PATCH 124/276] More technical rationale (#524) * More technical rationale Less opinion, more technical focused analysis on the issue. * grammar fixes * Improved grammar * Fix year * Fixed typo * wording improvement * no need parenthesis --- docs/General/WhyTCP.md | 66 +++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 37 deletions(-) diff --git a/docs/General/WhyTCP.md b/docs/General/WhyTCP.md index 1b551aa5c..e2a7853ba 100644 --- a/docs/General/WhyTCP.md +++ b/docs/General/WhyTCP.md @@ -2,61 +2,48 @@ ## The same old Discussion -It's the year 2018 and every game developer swears by UDP. Yet we chose TCP as default for Mirror. Why is that? +It's the year 2019 and every game developer swears by UDP. Yet we chose TCP as default for Mirror. Why is that? UDP vs. TCP, the technical aspects First of all, a quick word about the major differences between UDP and TCP. -- UDP has lower latency and is unreliable by default and hard to use correctly -- TCP has higher latency and is reliable by default and easy to use +- UDP has lower latency, unreliable and hard to use correctly +- TCP has higher latency, reliable and easy to use -Now instead of having yet another technical UDP vs. TCP discussion, let's take a look at a real world example to see why we chose TCP over UDP. +## TCP (Transmision Control Protocol) -## That Game again +[Tcp](https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Congestion_control) is a protocol built on top of IP. It is by far the most popular protocol on the internet. Everything you are seeing in this page was sent to your browser via TCP. It is designed to be simple to use, scalable and for transmiting large amounts of data. -Back in 2011, some guy named Markus Persson (aka Notch) created arguably the biggest multiplayer game of all time. The game is called Minecraft. +A server opens a port and waits for connections. Clients send an initial message to establish the connection (handshake) and after that a connection is considered established. Data flows both ways as a stream, one byte after another, always in the right order, without missing anything. Some of the key features include: -Minecraft uses TCP, but why is that? Nobody knows, except Markus Persson. +* Reliable: if you try to send data, it will either make it to the other end, or you will get an error, nothing is ever silently dropped. +* Fragmented: Your network card cannot just send 1 MB of data, it can only send small packets of 1.5Kb or less. If you try to send a lot of data, TCP will split your data into small packets and reassemble the data on the receiving end. +* Sequenced: If you send data a,b,c in that order, TCP guarantees that it will arrive in the same order or an error will be generated. +* Connection oriented: you don't just send data, TCP will send a message first to let the server know that they will be talking together. Both the client and server can disconnect and react to the disconnection. +* Congestion control: If a server is being overwhelmed, TCP will throttle the data to avoid congestion collapse. -But we can make an educated guess. +These are great features that make it very easy for programmers to work with TCP, but they come at a cost: Latency. -## On Java vs. C++ +Suppose an object is moving from point a to b to c. Our server sends 3 messages: a, b, c. Suppose b gets lost (wify drops a lot of packages for example) and c arrives fine. We could skip b and move towards c instead, but we can't because the operating system won't give us c until b is retransmited. -But wait, let's go back a bit further. Minecraft was written in Java, which is outrageous given that back in 2011 every game developer used to swear by C++. +For this reason, AAA studios consistently prefer UDP for fast paced action games. -Here are the major differences between C++ and Java: +## UDP (User Datagram Protocol) -- C++ has a lower footprint, it's faster and it's hard to use correctly -- Java is slow, uses ungodly amounts of memory and is easy to use +[UDP](https://en.wikipedia.org/wiki/User_Datagram_Protocol) is also a protocol based on IP. It is used for real time applications such as fast paced action games or voice over ip, where low latency is more important than reliability. -That discussion sounds oddly familiar. Speed vs. ease of use, just like UDP vs. TCP. +A server opens a port and waits for messages. Clients send messages to such port, and the server may send messages back. Data flows in both ways as individual messages. -## Why? +There is no concept of connection, so there is no built in way to determine if a client disconnects. Messages are delivered as soon as possible, there is no guarantee that the order will be preserved or that they will be delivered at all. Messages must be small, typically 1.5Kb or less. -Okay so, why did Notch chose Java instead of C++ and TCP instead of UDP, given that they are both so much slower than their counter parts? +Mirror does need reliability, fragmentation, sequenced, connections for many things, so we would not use raw UDP. We would use a library that implements those features on top of UDP such as [ENet](http://enet.bespin.org/), [LiteNetLib](https://github.com/RevenantX/LiteNetLib) or LLAPI, typically refered to as RUDP (Reliable UDP) -Well, obviously because Notch is an idiot and knows nothing about game development. +The obvious question is: do RUDP libraries just reinventing TCP? yes, to some degree they do. But the point is that those features would be optional and we would be able to send messages without the extra features for low latency data such as movement or voice. -But wait, something doesn't add up. Every kid on the planet plays Minecraft and right now there are thousands of people who are having a blast building shelters, surviving zombies at night, making friends and occasionally falling in love. +## Dark ages -Oh, and Notch is a billionaire now. - -All the evidence points us to the fact that back in 2011, Notch knew something that others didn't. - -## The Riddle - -The answer to the riddle is the question about optimization. - -Notch never optimized for performance. That's why he didn't care about C++ or UDP. - -Notch optimized for probability of success. That's why he chose Java and TCP. - -And it worked. What good would it be if Minecraft ran at twice the framerate and half the latency without ever seeing the light of day? - -## Summary - -Back in 2015 when we started uMMORPG and Cubica, we originally used Unity's built in Networking system aka UNET. UNET used UDP and avoided garbage collection at all costs. +Back in 2015 when we started uMMORPG and Cubica, we originally used Unity's built in Networking system aka UNET. UNET used LLAPI, an RUDP library that avoided garbage collection at all costs. What sounds good in theory, was terrible in practice. We spent about half our work hours from 2015 to 2018 dealing with UNET bugs. There was packet loss, highly complex code due to GC avoidance, synchronization issues, memory leaks and random errors. Most importantly, no decent way to debug any of it. @@ -69,8 +56,13 @@ If a monster didn't spawn on a client, we wouldn't know what caused it. - Did we use the right networking config for the host that we tested it on? - Or was it a bug in our own project? -After 3 years in UDP hell, we realized what Notch had realized a long time ago: if we ever wanted to finish our games, we would need a networking layer that just works. +After 3 years in UDP/LLAPI hell, we realized if we ever wanted to finish our games, we would need a networking layer that just works. We could have tried other RUDP transports, but we would end up debugging them instead. That's why we made Telepathy and Mirror. **Life is short. We just need the damn thing to work.** -We acknowledge not everyone will agree with our reasoning. Rather than push our views on users, we made Mirror transport independent. You can easily swap out the transport for one of the several RUDP implementations simply by dragging it into your NetworkManager gameobject. Pick whatever works best for you. We recommend you profile your game and collect real world numbers before you make a final decision. +## The choice is yours + +We acknowledge not everyone will agree with our reasoning. Rather than push our views on users, we made Mirror transport independent. A few months later, Unity did the same thing. You can easily swap out the transport for one of the several RUDP implementations simply by dragging it into your NetworkManager gameobject. Pick whatever works best for you. We recommend you profile your game and collect real world numbers before you make a final decision. + +After we made Mirror transport independent, the community stepped up and several RUDP transports have been adapted to work with Mirror as we hoped. While the default is Telepathy (simple "just works" TCP transport), you can choose any of [these](../Transports) transports or even write your own. + From 11a755e96114ad3153fa702773c88125cb3a95a0 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Sat, 2 Mar 2019 15:03:26 -0500 Subject: [PATCH 125/276] Restored GetConnectionInfo with [Obsolete] (#504) * Restored GetConnectionInfo with [Obsolete] * Update Transport.cs * Update Transport.cs * Update Transport.cs --- Assets/Mirror/Runtime/Transport/Transport.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/Transport/Transport.cs b/Assets/Mirror/Runtime/Transport/Transport.cs index 66c21bd67..ec582b609 100644 --- a/Assets/Mirror/Runtime/Transport/Transport.cs +++ b/Assets/Mirror/Runtime/Transport/Transport.cs @@ -49,6 +49,14 @@ public virtual bool Available() public abstract void ServerStart(); public abstract bool ServerSend(int connectionId, int channelId, byte[] data); public abstract bool ServerDisconnect(int connectionId); + + [Obsolete("Use ServerGetClientAddress(int connectionId) instead")] + public virtual bool GetConnectionInfo(int connectionId, out string address) + { + address = ServerGetClientAddress(connectionId); + return true; + } + public abstract string ServerGetClientAddress(int connectionId); public abstract void ServerStop(); @@ -72,4 +80,4 @@ public virtual bool Available() // spawns at the point before shoulder rotation. public void Update() {} } -} \ No newline at end of file +} From 24b8003b744316668adad24d58aac28761f19576 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Sat, 2 Mar 2019 22:46:12 -0500 Subject: [PATCH 126/276] Fixed guidance for hostId It should be `typeof(NetworkConnection)` --- Assets/Mirror/Runtime/NetworkConnection.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 123dd90c7..140d2b341 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -25,7 +25,7 @@ public class NetworkConnection : IDisposable // this is always 0 for regular connections, -1 for local // connections because it's set in the constructor and never reset. - [Obsolete("hostId will be removed because it's not needed ever since we removed LLAPI as default. It's always 0 for regular connections and -1 for local connections. Use connection.GetType() == NetworkConnection to check if it's a regular or local connection.")] + [Obsolete("hostId will be removed because it's not needed ever since we removed LLAPI as default. It's always 0 for regular connections and -1 for local connections. Use connection.GetType() == typeof(NetworkConnection) to check if it's a regular or local connection.")] public int hostId = -1; public NetworkConnection(string networkAddress) From d9be5cf941658a0785f603bc2416731899756502 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sat, 2 Mar 2019 21:13:38 -0800 Subject: [PATCH 127/276] Update tooltip in NetworkTransform. (#527) --- Assets/Mirror/Components/NetworkTransformBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index 2c7216c63..3d64c5726 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -28,7 +28,7 @@ public abstract class NetworkTransformBase : NetworkBehaviour // to save bandwidth in the first place. // -> can still be modified in the Inspector while the game is running, // but would cause errors immediately and be pretty obvious. - [Tooltip("Compresses 16 Byte Quaternion into None=12, Some=6, Much=3, Lots=2 Byte")] + [Tooltip("Compresses 16 Byte Quaternion into None=12, Much=3, Lots=2 Byte")] [SerializeField] Compression compressRotation = Compression.Much; public enum Compression { None, Much, Lots }; // easily understandable and funny From bc9982e1870873b335abd46a57fe08435fd58a17 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sat, 2 Mar 2019 21:25:10 -0800 Subject: [PATCH 128/276] Remove useless comment (#528) --- Assets/Mirror/Components/NetworkTransformBase.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Assets/Mirror/Components/NetworkTransformBase.cs b/Assets/Mirror/Components/NetworkTransformBase.cs index 3d64c5726..e8f9628b2 100644 --- a/Assets/Mirror/Components/NetworkTransformBase.cs +++ b/Assets/Mirror/Components/NetworkTransformBase.cs @@ -139,7 +139,6 @@ void DeserializeFromReader(NetworkReader reader) temp.rotation = Quaternion.Euler(xyz[0], xyz[1], xyz[2]); } - // timestamp temp.timeStamp = Time.time; // movement speed: based on how far it moved since last time From c0ba0073b23a8b4d83ad37c6aab7afb19ea99c32 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 01:30:59 -0800 Subject: [PATCH 129/276] Removed RequireComponent(Animator) because NetworkAnimator does not have to be on the same game object as the Animator. (#529) --- Assets/Mirror/Components/NetworkAnimator.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index e4768b746..9db454094 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -5,7 +5,6 @@ namespace Mirror [DisallowMultipleComponent] [AddComponentMenu("Network/NetworkAnimator")] [RequireComponent(typeof(NetworkIdentity))] - [RequireComponent(typeof(Animator))] [HelpURL("https://vis2k.github.io/Mirror/Components/NetworkAnimator")] public class NetworkAnimator : NetworkBehaviour { From 8b2f99b3c4b423f42f1c2cb44d5b75183ebf8a03 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 01:32:49 -0800 Subject: [PATCH 130/276] Made SetDynamicAssetId a setter on the assetId property. (#530) * Made SetDynamicAssetId a setter on the assetId property. * Update NetworkIdentity.cs --- Assets/Mirror/Runtime/ClientScene.cs | 4 ++-- Assets/Mirror/Runtime/NetworkIdentity.cs | 18 +++++++----------- Assets/Mirror/Runtime/NetworkServer.cs | 6 +++--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 91fe5877c..341426967 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -204,7 +204,7 @@ public static void RegisterPrefab(GameObject prefab, Guid newAssetId) NetworkIdentity identity = prefab.GetComponent(); if (identity) { - identity.SetDynamicAssetId(newAssetId); + identity.assetId = newAssetId; if (LogFilter.Debug) { Debug.Log("Registering prefab '" + prefab.name + "' as asset:" + identity.assetId); } prefabs[identity.assetId] = prefab; @@ -424,7 +424,7 @@ internal static void OnSpawnPrefab(NetworkMessage netMsg) return; } localObject.Reset(); - localObject.SetDynamicAssetId(msg.assetId); + localObject.assetId = msg.assetId; ApplySpawnPayload(localObject, msg.position, msg.rotation, msg.payload, msg.netId); } else diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 197160989..d99e8bfab 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -76,18 +76,14 @@ public Guid assetId // we would use 'new Guid("")' return string.IsNullOrEmpty(m_AssetId) ? Guid.Empty : new Guid(m_AssetId); } - } - - internal void SetDynamicAssetId(Guid newAssetId) - { - string newAssetIdString = newAssetId.ToString("N"); - if (string.IsNullOrEmpty(m_AssetId) || m_AssetId == newAssetIdString) + internal set { - m_AssetId = newAssetIdString; - } - else - { - Debug.LogWarning("SetDynamicAssetId object already has an assetId <" + m_AssetId + ">"); + string newAssetIdString = value.ToString("N"); + if (string.IsNullOrEmpty(m_AssetId) || m_AssetId == newAssetIdString) + { + m_AssetId = newAssetIdString; + } + else Debug.LogWarning("SetDynamicAssetId object already has an assetId <" + m_AssetId + ">"); } } diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index dd18ae640..7c52c924c 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -478,7 +478,7 @@ public static bool ReplacePlayerForConnection(NetworkConnection conn, GameObject { if (GetNetworkIdentity(player, out NetworkIdentity identity)) { - identity.SetDynamicAssetId(assetId); + identity.assetId = assetId; } return InternalReplacePlayerForConnection(conn, player); } @@ -492,7 +492,7 @@ public static bool AddPlayerForConnection(NetworkConnection conn, GameObject pla { if (GetNetworkIdentity(player, out NetworkIdentity identity)) { - identity.SetDynamicAssetId(assetId); + identity.assetId = assetId; } return InternalAddPlayerForConnection(conn, player); } @@ -1011,7 +1011,7 @@ public static void Spawn(GameObject obj, Guid assetId) { if (GetNetworkIdentity(obj, out NetworkIdentity identity)) { - identity.SetDynamicAssetId(assetId); + identity.assetId = assetId; } SpawnObject(obj); } From 834fab5ba4af78d235df44d6916d4d1e4a049ee8 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 01:34:23 -0800 Subject: [PATCH 131/276] Changed several mentions of UNet to instead say Mirror. (#531) --- Assets/Mirror/Editor/NetworkScenePostProcess.cs | 2 +- Assets/Mirror/Runtime/NetworkClient.cs | 6 +++--- Assets/Mirror/Runtime/NetworkIdentity.cs | 6 +++--- Assets/Mirror/Runtime/NetworkManager.cs | 4 ++-- Assets/Mirror/Runtime/NetworkServer.cs | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Assets/Mirror/Editor/NetworkScenePostProcess.cs b/Assets/Mirror/Editor/NetworkScenePostProcess.cs index 3ebca0f16..2d8878206 100644 --- a/Assets/Mirror/Editor/NetworkScenePostProcess.cs +++ b/Assets/Mirror/Editor/NetworkScenePostProcess.cs @@ -101,7 +101,7 @@ public static void OnPostProcessScene() // problem: // * FindObjectsOfType order is not guaranteed. restarting the // editor results in a different order - // * connecting to a build again would cause UNET to deserialize + // * connecting to a build again would cause Mirror to deserialize // the wrong objects, causing all kinds of weird errors like // 'ReadString out of range' // diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 93175c160..edf750ccd 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -168,21 +168,21 @@ internal virtual void Update() /* TODO use or remove void GenerateConnectError(byte error) { - Debug.LogError("UNet Client Error Connect Error: " + error); + Debug.LogError("Mirror Client Error Connect Error: " + error); GenerateError(error); } void GenerateDataError(byte error) { NetworkError dataError = (NetworkError)error; - Debug.LogError("UNet Client Data Error: " + dataError); + Debug.LogError("Mirror Client Data Error: " + dataError); GenerateError(error); } void GenerateDisconnectError(byte error) { NetworkError disconnectError = (NetworkError)error; - Debug.LogError("UNet Client Disconnect Error: " + disconnectError); + Debug.LogError("Mirror Client Disconnect Error: " + disconnectError); GenerateError(error); } diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index d99e8bfab..148d58aeb 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -851,12 +851,12 @@ internal void Reset() } - // UNetUpdate is in hot path. caching the vars msg is really worth it to + // MirrorUpdate is a hot path. Caching the vars msg is really worth it to // avoid large amounts of allocations. static UpdateVarsMessage varsMessage = new UpdateVarsMessage(); - // invoked by unity runtime immediately after the regular "Update()" function. - internal void UNetUpdate() + // invoked by NetworkServer during Update() + internal void MirrorUpdate() { // SendToReady sends to all observers. no need to serialize if we // don't have any. diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 14e09a758..4cccbb7dc 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -56,8 +56,8 @@ public class NetworkManager : MonoBehaviour public int numPlayers => NetworkServer.connections.Count(kv => kv.Value.playerController != null); // runtime data - // this is used to make sure that all scene changes are initialized by UNET. - // Loading a scene manually wont set networkSceneName, so UNET would still load it again on start. + // this is used to make sure that all scene changes are initialized by Mirror. + // Loading a scene manually wont set networkSceneName, so Mirror would still load it again on start. public static string networkSceneName = ""; [NonSerialized] public bool isNetworkActive; diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 7c52c924c..458e6d6bf 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -258,7 +258,7 @@ static void UpdateServerObjects() { if (kvp.Value != null && kvp.Value.gameObject != null) { - kvp.Value.UNetUpdate(); + kvp.Value.MirrorUpdate(); } else { @@ -383,7 +383,7 @@ static void OnData(NetworkConnection conn, byte[] data) static void GenerateConnectError(byte error) { - Debug.LogError("UNet Server Connect Error: " + error); + Debug.LogError("Mirror Server Connect Error: " + error); GenerateError(null, error); } @@ -391,14 +391,14 @@ static void GenerateConnectError(byte error) static void GenerateDataError(NetworkConnection conn, byte error) { NetworkError dataError = (NetworkError)error; - Debug.LogError("UNet Server Data Error: " + dataError); + Debug.LogError("Mirror Server Data Error: " + dataError); GenerateError(conn, error); } static void GenerateDisconnectError(NetworkConnection conn, byte error) { NetworkError disconnectError = (NetworkError)error; - Debug.LogError("UNet Server Disconnect Error: " + disconnectError + " conn:[" + conn + "]:" + conn.connectionId); + Debug.LogError("Mirror Server Disconnect Error: " + disconnectError + " conn:[" + conn + "]:" + conn.connectionId); GenerateError(conn, error); } */ From c7b8f78aaed9eaf5d9febf5cce8a71ffddedac2b Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 3 Mar 2019 07:52:35 -0600 Subject: [PATCH 132/276] #418 Send messages without id (#422) * Client can send/receive messages without id * Server can send and receive messages without id * Move message id to one common place * Client use the new send method * Obsolete the message ids * Remove player uses the new api * Refactor AddPlayer with new message api * Provide a Pack method that gets the message id * Convert ready message to new api * Use new api for ObjectDestroy and ObjectHide * Refactored ready message to new API * Refactored SpawnSceneObjectMessage to new api * Convert local authority message to new api * Convert spawn started message to new api * Convert spawn finished message to new api * Convert upate vars message to new api * Convert owner message to new api * Convert pong message to new api * Convert RPC message to new api * Convert SyncEvent rpc to new api * Refactor Command to new api * Refactor Ping to new api * Convert ErrorMessage to new api * Convert ErrorMessage to new api * Use int instead of short for message id to avoid collisions * Keep only 16 bit hash for message id * Converted Disconnect Message to new api * Convert Connect to new message api * Convert not ready message to new api * Convert scene message to new api * the Enum is no longer used for message id * Add non obsolete version of SendToClient * Document how to use new API With this PR, we no longer use Message id, document the proper use of the api * use C# syntax highlight * Update NetworkMessages.md (#5) Punctuation changes, added `cs` to code blocks. * Write message id in short instead of packed int * Use packer method with id * Pass the NetworkConnection to the client message handlers --- Assets/Mirror/Runtime/ClientScene.cs | 83 +++----- Assets/Mirror/Runtime/LocalClient.cs | 4 +- Assets/Mirror/Runtime/MessagePacker.cs | 28 ++- Assets/Mirror/Runtime/Messages.cs | 38 +++- Assets/Mirror/Runtime/NetworkBehaviour.cs | 8 +- Assets/Mirror/Runtime/NetworkClient.cs | 103 ++++++--- Assets/Mirror/Runtime/NetworkConnection.cs | 42 ++-- Assets/Mirror/Runtime/NetworkIdentity.cs | 6 +- Assets/Mirror/Runtime/NetworkManager.cs | 93 ++++---- Assets/Mirror/Runtime/NetworkMessage.cs | 2 +- Assets/Mirror/Runtime/NetworkServer.cs | 201 ++++++++++++++---- Assets/Mirror/Runtime/NetworkTime.cs | 23 +- Assets/Mirror/Runtime/UNetwork.cs | 1 + .../Communications/NetworkMessages.md | 90 ++------ 14 files changed, 432 insertions(+), 290 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 341426967..f5bd252cf 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -94,7 +94,7 @@ public static bool AddPlayer(NetworkConnection readyConn, MessageBase extraMessa extraMessage.Serialize(writer); msg.value = writer.ToArray(); } - readyConnection.Send((short)MsgType.AddPlayer, msg); + readyConnection.Send(msg); return true; } @@ -105,7 +105,7 @@ public static bool RemovePlayer() if (readyConnection.playerController != null) { RemovePlayerMessage msg = new RemovePlayerMessage(); - readyConnection.Send((short)MsgType.RemovePlayer, msg); + readyConnection.Send(msg); Object.Destroy(readyConnection.playerController.gameObject); @@ -129,8 +129,7 @@ public static bool Ready(NetworkConnection conn) if (conn != null) { - ReadyMessage msg = new ReadyMessage(); - conn.Send((short)MsgType.Ready, msg); + conn.Send(new ReadyMessage()); ready = true; readyConnection = conn; readyConnection.isReady = true; @@ -372,10 +371,8 @@ static void ApplySpawnPayload(NetworkIdentity identity, Vector3 position, Quater } } - internal static void OnSpawnPrefab(NetworkMessage netMsg) + internal static void OnSpawnPrefab(NetworkConnection conn, SpawnPrefabMessage msg) { - SpawnPrefabMessage msg = netMsg.ReadMessage(); - if (msg.assetId == Guid.Empty) { Debug.LogError("OnObjSpawn netId: " + msg.netId + " has invalid asset Id"); @@ -433,10 +430,8 @@ internal static void OnSpawnPrefab(NetworkMessage netMsg) } } - internal static void OnSpawnSceneObject(NetworkMessage netMsg) + internal static void OnSpawnSceneObject(NetworkConnection conn, SpawnSceneObjectMessage msg) { - SpawnSceneObjectMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("Client spawn scene handler instantiating [netId:" + msg.netId + " sceneId:" + msg.sceneId + " pos:" + msg.position); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) @@ -462,7 +457,7 @@ internal static void OnSpawnSceneObject(NetworkMessage netMsg) ApplySpawnPayload(spawnedId, msg.position, msg.rotation, msg.payload, msg.netId); } - internal static void OnObjectSpawnStarted(NetworkMessage netMsg) + internal static void OnObjectSpawnStarted(NetworkConnection conn, ObjectSpawnStartedMessage msg) { if (LogFilter.Debug) { Debug.Log("SpawnStarted"); } @@ -470,7 +465,7 @@ internal static void OnObjectSpawnStarted(NetworkMessage netMsg) s_IsSpawnFinished = false; } - internal static void OnObjectSpawnFinished(NetworkMessage netMsg) + internal static void OnObjectSpawnFinished(NetworkConnection conn, ObjectSpawnFinishedMessage msg) { if (LogFilter.Debug) { Debug.Log("SpawnFinished"); } @@ -488,12 +483,20 @@ internal static void OnObjectSpawnFinished(NetworkMessage netMsg) s_IsSpawnFinished = true; } - internal static void OnObjectDestroy(NetworkMessage netMsg) + internal static void OnObjectHide(NetworkConnection conn, ObjectHideMessage msg) { - ObjectDestroyMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnObjDestroy netId:" + msg.netId); } + DestroyObject(msg.netId); + } + internal static void OnObjectDestroy(NetworkConnection conn, ObjectDestroyMessage msg) + { + DestroyObject(msg.netId); + } - if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) + static void DestroyObject(uint netId) + { + if (LogFilter.Debug) { Debug.Log("ClientScene.OnObjDestroy netId:" + netId); } + + if (NetworkIdentity.spawned.TryGetValue(netId, out NetworkIdentity localObject) && localObject != null) { localObject.OnNetworkDestroy(); @@ -511,27 +514,25 @@ internal static void OnObjectDestroy(NetworkMessage netMsg) spawnableObjects[localObject.sceneId] = localObject; } } - NetworkIdentity.spawned.Remove(msg.netId); + NetworkIdentity.spawned.Remove(netId); localObject.MarkForReset(); } else { - if (LogFilter.Debug) { Debug.LogWarning("Did not find target for destroy message for " + msg.netId); } + if (LogFilter.Debug) { Debug.LogWarning("Did not find target for destroy message for " + netId); } } } - internal static void OnLocalClientObjectDestroy(NetworkMessage netMsg) + internal static void OnLocalClientObjectDestroy(NetworkConnection conn, ObjectDestroyMessage msg) { - ObjectDestroyMessage msg = netMsg.ReadMessage(); if (LogFilter.Debug) { Debug.Log("ClientScene.OnLocalObjectObjDestroy netId:" + msg.netId); } NetworkIdentity.spawned.Remove(msg.netId); } - internal static void OnLocalClientObjectHide(NetworkMessage netMsg) + internal static void OnLocalClientObjectHide(NetworkConnection conn, ObjectHideMessage msg) { - ObjectDestroyMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnLocalObjectObjHide netId:" + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -539,30 +540,24 @@ internal static void OnLocalClientObjectHide(NetworkMessage netMsg) } } - internal static void OnLocalClientSpawnPrefab(NetworkMessage netMsg) + internal static void OnLocalClientSpawnPrefab(NetworkConnection conn, SpawnPrefabMessage msg) { - SpawnPrefabMessage msg = netMsg.ReadMessage(); - if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { localObject.OnSetLocalVisibility(true); } } - internal static void OnLocalClientSpawnSceneObject(NetworkMessage netMsg) + internal static void OnLocalClientSpawnSceneObject(NetworkConnection conn, SpawnSceneObjectMessage msg) { - SpawnSceneObjectMessage msg = netMsg.ReadMessage(); - if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { localObject.OnSetLocalVisibility(true); } } - internal static void OnUpdateVarsMessage(NetworkMessage netMsg) + internal static void OnUpdateVarsMessage(NetworkConnection conn, UpdateVarsMessage msg) { - UpdateVarsMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnUpdateVarsMessage " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) @@ -575,10 +570,8 @@ internal static void OnUpdateVarsMessage(NetworkMessage netMsg) } } - internal static void OnRPCMessage(NetworkMessage netMsg) + internal static void OnRPCMessage(NetworkConnection conn, RpcMessage msg) { - RpcMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnRPCMessage hash:" + msg.functionHash + " netId:" + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) @@ -587,10 +580,8 @@ internal static void OnRPCMessage(NetworkMessage netMsg) } } - internal static void OnSyncEventMessage(NetworkMessage netMsg) + internal static void OnSyncEventMessage(NetworkConnection conn, SyncEventMessage msg) { - SyncEventMessage msg = netMsg.ReadMessage(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnSyncEventMessage " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) @@ -603,11 +594,9 @@ internal static void OnSyncEventMessage(NetworkMessage netMsg) } } - internal static void OnClientAuthority(NetworkMessage netMsg) + internal static void OnClientAuthority(NetworkConnection conn, ClientAuthorityMessage msg) { - ClientAuthorityMessage msg = netMsg.ReadMessage(); - - if (LogFilter.Debug) { Debug.Log("ClientScene.OnClientAuthority for connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnClientAuthority for netId: " + msg.netId); } if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -616,19 +605,17 @@ internal static void OnClientAuthority(NetworkMessage netMsg) } // OnClientAddedPlayer? - internal static void OnOwnerMessage(NetworkMessage netMsg) + internal static void OnOwnerMessage(NetworkConnection conn, OwnerMessage msg) { - OwnerMessage msg = netMsg.ReadMessage(); - - if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - connectionId=" + netMsg.conn.connectionId + " netId: " + msg.netId); } + if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - connectionId=" + readyConnection.connectionId + " netId: " + msg.netId); } // is there already an owner that is a different object?? - netMsg.conn.playerController?.SetNotLocalPlayer(); + readyConnection.playerController?.SetNotLocalPlayer(); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { // this object already exists - localObject.connectionToServer = netMsg.conn; + localObject.connectionToServer = readyConnection; localObject.SetLocalPlayer(); InternalAddPlayer(localObject); } diff --git a/Assets/Mirror/Runtime/LocalClient.cs b/Assets/Mirror/Runtime/LocalClient.cs index b7a7f8c6d..316f55bfe 100644 --- a/Assets/Mirror/Runtime/LocalClient.cs +++ b/Assets/Mirror/Runtime/LocalClient.cs @@ -20,7 +20,7 @@ internal void InternalConnectLocalServer() active = true; RegisterSystemHandlers(true); - packetQueue.Enqueue(MessagePacker.PackMessage((ushort)MsgType.Connect, new EmptyMessage())); + packetQueue.Enqueue(MessagePacker.Pack(new ConnectMessage())); } public override void Disconnect() @@ -29,7 +29,7 @@ public override void Disconnect() ClientScene.HandleClientDisconnect(connection); if (isConnected) { - packetQueue.Enqueue(MessagePacker.PackMessage((ushort)MsgType.Disconnect, new EmptyMessage())); + packetQueue.Enqueue(MessagePacker.Pack(new DisconnectMessage())); } NetworkServer.RemoveLocalClient(); } diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs index 3ce855393..2fc4682ab 100644 --- a/Assets/Mirror/Runtime/MessagePacker.cs +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -1,3 +1,5 @@ +using System; + namespace Mirror { // message packing all in one place, instead of constructing headers in all @@ -19,13 +21,14 @@ public static class MessagePacker // pack message before sending // -> pass writer instead of byte[] so we can reuse it - public static byte[] PackMessage(ushort msgType, MessageBase msg) + [Obsolete("Use Pack instead")] + public static byte[] PackMessage(int msgType, MessageBase msg) { // reset cached writer length and position packWriter.SetLength(0); // write message type - packWriter.WritePackedUInt32(msgType); + packWriter.Write((short)msgType); // serialize message into writer msg.Serialize(packWriter); @@ -34,14 +37,31 @@ public static byte[] PackMessage(ushort msgType, MessageBase msg) return packWriter.ToArray(); } + // pack message before sending + public static byte[] Pack(T message) where T : MessageBase + { + // reset cached writer length and position + packWriter.SetLength(0); + + // write message type + int msgType = MessageBase.GetId(); + packWriter.Write((ushort)msgType); + + // serialize message into writer + message.Serialize(packWriter); + + // return byte[] + return packWriter.ToArray(); + } + // unpack message after receiving // -> pass NetworkReader so it's less strange if we create it in here // and pass it upwards. // -> NetworkReader will point at content afterwards! - public static bool UnpackMessage(NetworkReader messageReader, out ushort msgType) + public static bool UnpackMessage(NetworkReader messageReader, out int msgType) { // read message type (varint) - msgType = (ushort)messageReader.ReadPackedUInt32(); + msgType = (int)messageReader.ReadUInt16(); return true; } } diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index 42dc1c41c..19287ebc7 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -12,6 +12,14 @@ public virtual void Deserialize(NetworkReader reader) {} // Serialize the contents of this message into the writer public virtual void Serialize(NetworkWriter writer) {} + + public static int GetId() where T: MessageBase + { + // paul: 16 bits is enough to avoid collisions + // - keeps the message size small because it gets varinted + // - in case of collisions, Mirror will display an error + return typeof(T).FullName.GetStableHashCode() & 0xFFFF; + } } // ---------- General Typed Messages ------------------- @@ -159,6 +167,19 @@ public class AddPlayerMessage : BytesMessage {} public class RemovePlayerMessage : EmptyMessage {} + public class DisconnectMessage : EmptyMessage { } + + public class ConnectMessage : EmptyMessage { } + + public class SceneMessage : StringMessage + { + public SceneMessage(string value) : base(value) + { + } + + public SceneMessage() { } + } + // ---------- System Messages requried for code gen path ------------------- // remote calls like Rpc/Cmd/SyncEvent all use the same message type @@ -267,7 +288,22 @@ public override void Serialize(NetworkWriter writer) } } - class OwnerMessage : MessageBase + class ObjectHideMessage : MessageBase + { + public uint netId; + + public override void Deserialize(NetworkReader reader) + { + netId = reader.ReadPackedUInt32(); + } + + public override void Serialize(NetworkWriter writer) + { + writer.WritePackedUInt32(netId); + } + } + + class OwnerMessage : MessageBase { public uint netId; diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 27a4d5d62..3f5391ed0 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -104,7 +104,7 @@ protected void SendCommandInternal(Type invokeClass, string cmdName, NetworkWrit payload = writer.ToArray() }; - ClientScene.readyConnection.Send((short)MsgType.Command, message, channelId); + ClientScene.readyConnection.Send(message, channelId); } [EditorBrowsable(EditorBrowsableState.Never)] @@ -140,7 +140,7 @@ protected void SendRPCInternal(Type invokeClass, string rpcName, NetworkWriter w payload = writer.ToArray() }; - NetworkServer.SendToReady(netIdentity, (short)MsgType.Rpc, message, channelId); + NetworkServer.SendToReady(netIdentity, message, channelId); } [EditorBrowsable(EditorBrowsableState.Never)] @@ -174,7 +174,7 @@ protected void SendTargetRPCInternal(NetworkConnection conn, Type invokeClass, s payload = writer.ToArray() }; - conn.Send((short)MsgType.Rpc, message, channelId); + conn.Send(message, channelId); } [EditorBrowsable(EditorBrowsableState.Never)] @@ -203,7 +203,7 @@ protected void SendEventInternal(Type invokeClass, string eventName, NetworkWrit payload = writer.ToArray() }; - NetworkServer.SendToReady(netIdentity, (short)MsgType.SyncEvent, message, channelId); + NetworkServer.SendToReady(netIdentity,message, channelId); } [EditorBrowsable(EditorBrowsableState.Never)] diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index edf750ccd..f1b522745 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -12,7 +12,7 @@ public class NetworkClient [Obsolete("Use NetworkClient.singleton instead. There is always exactly one client.")] public static List allClients => new List{singleton}; - public readonly Dictionary handlers = new Dictionary(); + public readonly Dictionary handlers = new Dictionary(); public NetworkConnection connection { get; protected set; } @@ -88,7 +88,7 @@ void OnDisconnected() ClientScene.HandleClientDisconnect(connection); - connection?.InvokeHandlerNoData((short)MsgType.Disconnect); + connection?.InvokeHandler(new DisconnectMessage()); } protected void OnDataReceived(byte[] data) @@ -111,7 +111,7 @@ void OnConnected() // thus we should set the connected state before calling the handler connectState = ConnectState.Connected; NetworkTime.UpdateClient(this); - connection.InvokeHandlerNoData((short)MsgType.Connect); + connection.InvokeHandler(new ConnectMessage()); } else Debug.LogError("Skipped Connect message handling because m_Connection is null."); } @@ -141,6 +141,7 @@ void RemoveTransportHandlers() Transport.activeTransport.OnClientError.RemoveListener(OnError); } + [Obsolete("Use SendMessage instead with no message id instead")] public bool Send(short msgType, MessageBase msg) { if (connection != null) @@ -156,6 +157,21 @@ public bool Send(short msgType, MessageBase msg) return false; } + public bool Send(T message) where T : MessageBase + { + if (connection != null) + { + if (connectState != ConnectState.Connected) + { + Debug.LogError("NetworkClient Send when not connected to a server"); + return false; + } + return connection.Send(message); + } + Debug.LogError("NetworkClient Send with no connection"); + return false; + } + internal virtual void Update() { // only update things while connected @@ -188,7 +204,8 @@ void GenerateDisconnectError(byte error) void GenerateError(byte error) { - if (handlers.TryGetValue((short)MsgType.Error, out NetworkMessageDelegate msgDelegate)) + int msgId = MessageBase.GetId(); + if (handlers.TryGetValue(msgId, out NetworkMessageDelegate msgDelegate)) { ErrorMessage msg = new ErrorMessage { @@ -201,7 +218,7 @@ void GenerateError(byte error) NetworkMessage netMsg = new NetworkMessage { - msgType = (short)MsgType.Error, + msgType = msgId, reader = new NetworkReader(writer.ToArray()), conn = connection }; @@ -223,36 +240,35 @@ internal void RegisterSystemHandlers(bool localClient) // 'message id not found' errors. if (localClient) { - RegisterHandler(MsgType.LocalClientAuthority, ClientScene.OnClientAuthority); - RegisterHandler(MsgType.ObjectDestroy, ClientScene.OnLocalClientObjectDestroy); - RegisterHandler(MsgType.ObjectHide, ClientScene.OnLocalClientObjectHide); - RegisterHandler(MsgType.Owner, (msg) => {}); - RegisterHandler(MsgType.Pong, (msg) => {}); - RegisterHandler(MsgType.SpawnPrefab, ClientScene.OnLocalClientSpawnPrefab); - RegisterHandler(MsgType.SpawnSceneObject, ClientScene.OnLocalClientSpawnSceneObject); - RegisterHandler(MsgType.SpawnStarted, (msg) => {}); - RegisterHandler(MsgType.SpawnFinished, (msg) => {}); - RegisterHandler(MsgType.UpdateVars, (msg) => {}); + RegisterHandler(ClientScene.OnLocalClientObjectDestroy); + RegisterHandler(ClientScene.OnLocalClientObjectHide); + RegisterHandler((conn, msg) => {}); + RegisterHandler((conn, msg) => {}); + RegisterHandler(ClientScene.OnLocalClientSpawnPrefab); + RegisterHandler(ClientScene.OnLocalClientSpawnSceneObject); + RegisterHandler((conn, msg) => {}); + RegisterHandler((conn, msg) => {}); + RegisterHandler((conn, msg) => {}); } else { - RegisterHandler(MsgType.LocalClientAuthority, ClientScene.OnClientAuthority); - RegisterHandler(MsgType.ObjectDestroy, ClientScene.OnObjectDestroy); - RegisterHandler(MsgType.ObjectHide, ClientScene.OnObjectDestroy); - RegisterHandler(MsgType.Owner, ClientScene.OnOwnerMessage); - RegisterHandler(MsgType.Pong, NetworkTime.OnClientPong); - RegisterHandler(MsgType.SpawnPrefab, ClientScene.OnSpawnPrefab); - RegisterHandler(MsgType.SpawnSceneObject, ClientScene.OnSpawnSceneObject); - RegisterHandler(MsgType.SpawnStarted, ClientScene.OnObjectSpawnStarted); - RegisterHandler(MsgType.SpawnFinished, ClientScene.OnObjectSpawnFinished); - RegisterHandler(MsgType.UpdateVars, ClientScene.OnUpdateVarsMessage); + RegisterHandler(ClientScene.OnObjectDestroy); + RegisterHandler(ClientScene.OnObjectHide); + RegisterHandler(ClientScene.OnOwnerMessage); + RegisterHandler(NetworkTime.OnClientPong); + RegisterHandler(ClientScene.OnSpawnPrefab); + RegisterHandler(ClientScene.OnSpawnSceneObject); + RegisterHandler(ClientScene.OnObjectSpawnStarted); + RegisterHandler(ClientScene.OnObjectSpawnFinished); + RegisterHandler(ClientScene.OnUpdateVarsMessage); } - - RegisterHandler(MsgType.Rpc, ClientScene.OnRPCMessage); - RegisterHandler(MsgType.SyncEvent, ClientScene.OnSyncEventMessage); + RegisterHandler(ClientScene.OnClientAuthority); + RegisterHandler(ClientScene.OnRPCMessage); + RegisterHandler(ClientScene.OnSyncEventMessage); } - public void RegisterHandler(short msgType, NetworkMessageDelegate handler) + [Obsolete("Use RegisterHandler instead")] + public void RegisterHandler(int msgType, NetworkMessageDelegate handler) { if (handlers.ContainsKey(msgType)) { @@ -261,19 +277,42 @@ public void RegisterHandler(short msgType, NetworkMessageDelegate handler) handlers[msgType] = handler; } + [Obsolete("Use RegisterHandler instead")] public void RegisterHandler(MsgType msgType, NetworkMessageDelegate handler) { - RegisterHandler((short)msgType, handler); + RegisterHandler((int)msgType, handler); } - public void UnregisterHandler(short msgType) + public void RegisterHandler(Action handler) where T : MessageBase, new() + { + int msgType = MessageBase.GetId(); + if (handlers.ContainsKey(msgType)) + { + if (LogFilter.Debug) { Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } + } + handlers[msgType] = (networkMessage) => + { + handler(networkMessage.conn, networkMessage.ReadMessage()); + }; + } + + [Obsolete("Use UnregisterHandler instead")] + public void UnregisterHandler(int msgType) { handlers.Remove(msgType); } + [Obsolete("Use UnregisterHandler instead")] public void UnregisterHandler(MsgType msgType) { - UnregisterHandler((short)msgType); + UnregisterHandler((int)msgType); + } + + public void UnregisterHandler() where T : MessageBase + { + // use int to minimize collisions + int msgType = MessageBase.GetId(); + handlers.Remove(msgType); } internal static void UpdateClient() diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 140d2b341..3a0853237 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -8,7 +8,7 @@ public class NetworkConnection : IDisposable { public HashSet visList = new HashSet(); - Dictionary m_MessageHandlers; + Dictionary m_MessageHandlers; public int connectionId = -1; public bool isReady; @@ -96,7 +96,7 @@ public void Disconnect() RemoveObservers(); } - internal void SetHandlers(Dictionary handlers) + internal void SetHandlers(Dictionary handlers) { m_MessageHandlers = handlers; } @@ -125,10 +125,18 @@ internal void RemovePlayerController() playerController = null; } - public virtual bool Send(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) + [Obsolete("use Send instead")] + public virtual bool Send(int msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { // pack message and send - byte[] message = MessagePacker.PackMessage((ushort)msgType, msg); + byte[] message = MessagePacker.PackMessage(msgType, msg); + return SendBytes(message, channelId); + } + + public virtual bool Send(T msg, int channelId = Channels.DefaultReliable) where T: MessageBase + { + // pack message and send + byte[] message = MessagePacker.Pack(msg); return SendBytes(message, channelId); } @@ -187,12 +195,12 @@ internal void RemoveObservers() visList.Clear(); } - public bool InvokeHandlerNoData(short msgType) + public bool InvokeHandlerNoData(int msgType) { return InvokeHandler(msgType, null); } - public bool InvokeHandler(short msgType, NetworkReader reader) + public bool InvokeHandler(int msgType, NetworkReader reader) { if (m_MessageHandlers.TryGetValue(msgType, out NetworkMessageDelegate msgDelegate)) { @@ -210,6 +218,13 @@ public bool InvokeHandler(short msgType, NetworkReader reader) return false; } + public bool InvokeHandler(T msg) where T : MessageBase + { + int msgType = MessageBase.GetId(); + byte[] data = MessagePacker.Pack(msg); + return InvokeHandler(msgType, new NetworkReader(data)); + } + // handle this message // note: original HLAPI HandleBytes function handled >1 message in a while loop, but this wasn't necessary // anymore because NetworkServer/NetworkClient.Update both use while loops to handle >1 data events per @@ -221,24 +236,15 @@ public virtual void TransportReceive(byte[] buffer) { // unpack message NetworkReader reader = new NetworkReader(buffer); - if (MessagePacker.UnpackMessage(reader, out ushort msgType)) + if (MessagePacker.UnpackMessage(reader, out int msgType)) { if (logNetworkMessages) { - if (Enum.IsDefined(typeof(MsgType), msgType)) - { - // one of Mirror mesage types, display the message name - Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + (MsgType)msgType + " buffer:" + BitConverter.ToString(buffer)); - } - else - { - // user defined message, display the number - Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + msgType + " buffer:" + BitConverter.ToString(buffer)); - } + Debug.Log("ConnectionRecv con:" + connectionId + " msgType:" + msgType + " content:" + BitConverter.ToString(buffer)); } // try to invoke the handler for that message - if (InvokeHandler((short)msgType, reader)) + if (InvokeHandler(msgType, reader)) { lastMessageTime = Time.time; } diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 148d58aeb..14dab4f54 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -775,7 +775,7 @@ public bool RemoveClientAuthority(NetworkConnection conn) netId = netId, authority = false }; - conn.Send((short)MsgType.LocalClientAuthority, msg); + conn.Send(msg); clientAuthorityCallback?.Invoke(conn, this, false); return true; @@ -818,7 +818,7 @@ public bool AssignClientAuthority(NetworkConnection conn) netId = netId, authority = true }; - conn.Send((short)MsgType.LocalClientAuthority, msg); + conn.Send(msg); clientAuthorityCallback?.Invoke(conn, this, true); return true; @@ -870,7 +870,7 @@ internal void MirrorUpdate() // populate cached UpdateVarsMessage and send varsMessage.netId = netId; varsMessage.payload = payload; - NetworkServer.SendToReady(this, (short)MsgType.UpdateVars, varsMessage); + NetworkServer.SendToReady(this, varsMessage); } } } diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 4cccbb7dc..24125dbe9 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -194,12 +194,12 @@ public virtual void OnValidate() internal void RegisterServerMessages() { - NetworkServer.RegisterHandler(MsgType.Connect, OnServerConnectInternal); - NetworkServer.RegisterHandler(MsgType.Disconnect, OnServerDisconnectInternal); - NetworkServer.RegisterHandler(MsgType.Ready, OnServerReadyMessageInternal); - NetworkServer.RegisterHandler(MsgType.AddPlayer, OnServerAddPlayerMessageInternal); - NetworkServer.RegisterHandler(MsgType.RemovePlayer, OnServerRemovePlayerMessageInternal); - NetworkServer.RegisterHandler(MsgType.Error, OnServerErrorInternal); + NetworkServer.RegisterHandler(OnServerConnectInternal); + NetworkServer.RegisterHandler(OnServerDisconnectInternal); + NetworkServer.RegisterHandler(OnServerReadyMessageInternal); + NetworkServer.RegisterHandler(OnServerAddPlayerMessageInternal); + NetworkServer.RegisterHandler(OnServerRemovePlayerMessageInternal); + NetworkServer.RegisterHandler(OnServerErrorInternal); } public bool StartServer() @@ -257,11 +257,11 @@ public bool StartServer() internal void RegisterClientMessages(NetworkClient client) { - client.RegisterHandler(MsgType.Connect, OnClientConnectInternal); - client.RegisterHandler(MsgType.Disconnect, OnClientDisconnectInternal); - client.RegisterHandler(MsgType.NotReady, OnClientNotReadyMessageInternal); - client.RegisterHandler(MsgType.Error, OnClientErrorInternal); - client.RegisterHandler(MsgType.Scene, OnClientSceneInternal); + client.RegisterHandler(OnClientConnectInternal); + client.RegisterHandler(OnClientDisconnectInternal); + client.RegisterHandler(OnClientNotReadyMessageInternal); + client.RegisterHandler(OnClientErrorInternal); + client.RegisterHandler(OnClientSceneInternal); if (playerPrefab != null) { @@ -386,8 +386,8 @@ public virtual void ServerChangeScene(string newSceneName) s_LoadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName); - StringMessage msg = new StringMessage(networkSceneName); - NetworkServer.SendToAll((short)MsgType.Scene, msg); + SceneMessage msg = new SceneMessage(networkSceneName); + NetworkServer.SendToAll(msg); s_StartPositionIndex = 0; startPositions.Clear(); @@ -521,37 +521,35 @@ public static void Shutdown() // ----------------------------- Server Internal Message Handlers -------------------------------- - internal void OnServerConnectInternal(NetworkMessage netMsg) + internal void OnServerConnectInternal(NetworkConnection conn, ConnectMessage connectMsg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerConnectInternal"); } if (networkSceneName != "" && networkSceneName != offlineScene) { - StringMessage msg = new StringMessage(networkSceneName); - netMsg.conn.Send((short)MsgType.Scene, msg); + SceneMessage msg = new SceneMessage(networkSceneName); + conn.Send(msg); } - OnServerConnect(netMsg.conn); + OnServerConnect(conn); } - internal void OnServerDisconnectInternal(NetworkMessage netMsg) + internal void OnServerDisconnectInternal(NetworkConnection conn, DisconnectMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerDisconnectInternal"); } - OnServerDisconnect(netMsg.conn); + OnServerDisconnect(conn); } - internal void OnServerReadyMessageInternal(NetworkMessage netMsg) + internal void OnServerReadyMessageInternal(NetworkConnection conn, ReadyMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerReadyMessageInternal"); } - OnServerReady(netMsg.conn); + OnServerReady(conn); } - internal void OnServerAddPlayerMessageInternal(NetworkMessage netMsg) + internal void OnServerAddPlayerMessageInternal(NetworkConnection conn, AddPlayerMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerAddPlayerMessageInternal"); } - AddPlayerMessage msg = netMsg.ReadMessage(); - if (msg.value != null && msg.value.Length > 0) { // convert payload to extra message and call OnServerAddPlayer @@ -559,38 +557,36 @@ internal void OnServerAddPlayerMessageInternal(NetworkMessage netMsg) NetworkMessage extraMessage = new NetworkMessage { reader = new NetworkReader(msg.value), - conn = netMsg.conn + conn = conn }; - OnServerAddPlayer(netMsg.conn, extraMessage); + OnServerAddPlayer(conn, extraMessage); } else { - OnServerAddPlayer(netMsg.conn); + OnServerAddPlayer(conn); } } - internal void OnServerRemovePlayerMessageInternal(NetworkMessage netMsg) + internal void OnServerRemovePlayerMessageInternal(NetworkConnection conn, RemovePlayerMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerRemovePlayerMessageInternal"); } - if (netMsg.conn.playerController != null) + if (conn.playerController != null) { - OnServerRemovePlayer(netMsg.conn, netMsg.conn.playerController); - netMsg.conn.RemovePlayerController(); + OnServerRemovePlayer(conn, conn.playerController); + conn.RemovePlayerController(); } } - internal void OnServerErrorInternal(NetworkMessage netMsg) + internal void OnServerErrorInternal(NetworkConnection conn, ErrorMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerErrorInternal"); } - - ErrorMessage msg = netMsg.ReadMessage(); - OnServerError(netMsg.conn, msg.value); + OnServerError(conn, msg.value); } // ----------------------------- Client Internal Message Handlers -------------------------------- - internal void OnClientConnectInternal(NetworkMessage netMsg) + internal void OnClientConnectInternal(NetworkConnection conn, ConnectMessage message) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientConnectInternal"); } @@ -598,45 +594,42 @@ internal void OnClientConnectInternal(NetworkMessage netMsg) if (string.IsNullOrEmpty(onlineScene) || onlineScene == offlineScene || loadedSceneName == onlineScene) { clientLoadedScene = false; - OnClientConnect(netMsg.conn); + OnClientConnect(conn); } else { // will wait for scene id to come from the server. - s_ClientReadyConnection = netMsg.conn; + s_ClientReadyConnection = conn; } } - internal void OnClientDisconnectInternal(NetworkMessage netMsg) + internal void OnClientDisconnectInternal(NetworkConnection conn, DisconnectMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientDisconnectInternal"); } - - OnClientDisconnect(netMsg.conn); + OnClientDisconnect(conn); } - internal void OnClientNotReadyMessageInternal(NetworkMessage netMsg) + internal void OnClientNotReadyMessageInternal(NetworkConnection conn, NotReadyMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientNotReadyMessageInternal"); } ClientScene.ready = false; - OnClientNotReady(netMsg.conn); + OnClientNotReady(conn); // NOTE: s_ClientReadyConnection is not set here! don't want OnClientConnect to be invoked again after scene changes. } - internal void OnClientErrorInternal(NetworkMessage netMsg) + internal void OnClientErrorInternal(NetworkConnection conn, ErrorMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientErrorInternal"); } - - ErrorMessage msg = netMsg.ReadMessage(); - OnClientError(netMsg.conn, msg.value); + if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientErrorInternal"); } + OnClientError(conn, msg.value); } - internal void OnClientSceneInternal(NetworkMessage netMsg) + internal void OnClientSceneInternal(NetworkConnection conn, SceneMessage msg) { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientSceneInternal"); } - string newSceneName = netMsg.reader.ReadString(); + string newSceneName = msg.value; if (IsClientConnected() && !NetworkServer.active) { diff --git a/Assets/Mirror/Runtime/NetworkMessage.cs b/Assets/Mirror/Runtime/NetworkMessage.cs index c2ac3c458..32351657f 100644 --- a/Assets/Mirror/Runtime/NetworkMessage.cs +++ b/Assets/Mirror/Runtime/NetworkMessage.cs @@ -2,7 +2,7 @@ namespace Mirror { public struct NetworkMessage { - public short msgType; + public int msgType; public NetworkConnection conn; public NetworkReader reader; diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 458e6d6bf..b5d4cb002 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -17,7 +17,7 @@ public static class NetworkServer // public static Dictionary connections = new Dictionary(); - public static Dictionary handlers = new Dictionary(); + public static Dictionary handlers = new Dictionary(); public static bool dontListen; @@ -74,10 +74,10 @@ static void Initialize() internal static void RegisterMessageHandlers() { - RegisterHandler(MsgType.Ready, OnClientReadyMessage); - RegisterHandler(MsgType.Command, OnCommandMessage); - RegisterHandler(MsgType.RemovePlayer, OnRemovePlayerMessage); - RegisterHandler(MsgType.Ping, NetworkTime.OnServerPing); + RegisterHandler(OnClientReadyMessage); + RegisterHandler(OnCommandMessage); + RegisterHandler(OnRemovePlayerMessage); + RegisterHandler(NetworkTime.OnServerPing); } public static bool Listen(int maxConnections) @@ -166,6 +166,7 @@ internal static void ActivateLocalClientScene() // this is like SendToReady - but it doesn't check the ready flag on the connection. // this is used for ObjectDestroy messages. + [Obsolete("use SendToObservers instead")] static bool SendToObservers(NetworkIdentity identity, short msgType, MessageBase msg) { if (LogFilter.Debug) { Debug.Log("Server.SendToObservers id:" + msgType); } @@ -186,7 +187,29 @@ static bool SendToObservers(NetworkIdentity identity, short msgType, MessageBase return false; } - public static bool SendToAll(short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) + // this is like SendToReady - but it doesn't check the ready flag on the connection. + // this is used for ObjectDestroy messages. + static bool SendToObservers(NetworkIdentity identity, T msg) where T: MessageBase + { + if (LogFilter.Debug) { Debug.Log("Server.SendToObservers id:" + typeof(T)); } + + if (identity != null && identity.observers != null) + { + // pack message into byte[] once + byte[] bytes = MessagePacker.Pack(msg); + + bool result = true; + foreach (KeyValuePair kvp in identity.observers) + { + result &= kvp.Value.SendBytes(bytes); + } + return result; + } + return false; + } + + [Obsolete("Use SendToAll instead")] + public static bool SendToAll(int msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { if (LogFilter.Debug) { Debug.Log("Server.SendToAll id:" + msgType); } @@ -202,6 +225,22 @@ public static bool SendToAll(short msgType, MessageBase msg, int channelId = Cha return result; } + public static bool SendToAll(T msg, int channelId = Channels.DefaultReliable) where T : MessageBase + { + if (LogFilter.Debug) { Debug.Log("Server.SendToAll id:" + typeof(T)); } + + // pack message into byte[] once + byte[] bytes = MessagePacker.Pack(msg); + + bool result = true; + foreach (KeyValuePair kvp in connections) + { + result &= kvp.Value.SendBytes(bytes, channelId); + } + return result; + } + + [Obsolete("Use SendToReady instead")] public static bool SendToReady(NetworkIdentity identity, short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { if (LogFilter.Debug) { Debug.Log("Server.SendToReady msgType:" + msgType); } @@ -225,6 +264,28 @@ public static bool SendToReady(NetworkIdentity identity, short msgType, MessageB return false; } + public static bool SendToReady(NetworkIdentity identity,T msg, int channelId = Channels.DefaultReliable) where T: MessageBase + { + if (LogFilter.Debug) { Debug.Log("Server.SendToReady msgType:" + typeof(T)); } + + if (identity != null && identity.observers != null) + { + // pack message into byte[] once + byte[] bytes = MessagePacker.Pack(msg); + + bool result = true; + foreach (KeyValuePair kvp in identity.observers) + { + if (kvp.Value.isReady) + { + result &= kvp.Value.SendBytes(bytes, channelId); + } + } + return result; + } + return false; + } + public static void DisconnectAll() { DisconnectAllConnections(); @@ -326,7 +387,7 @@ static void OnConnected(NetworkConnection conn) // add connection and invoke connected event AddConnection(conn); - conn.InvokeHandlerNoData((short)MsgType.Connect); + conn.InvokeHandler(new ConnectMessage()); } static void OnDisconnected(int connectionId) @@ -345,7 +406,7 @@ static void OnDisconnected(int connectionId) static void OnDisconnected(NetworkConnection conn) { - conn.InvokeHandlerNoData((short)MsgType.Disconnect); + conn.InvokeHandler(new DisconnectMessage()); if (conn.playerController != null) { @@ -405,7 +466,8 @@ static void GenerateDisconnectError(NetworkConnection conn, byte error) static void GenerateError(NetworkConnection conn, byte error) { - if (handlers.ContainsKey((short)MsgType.Error)) + int msgId = MessageBase.GetId(); + if (handlers.ContainsKey(msgId)) { ErrorMessage msg = new ErrorMessage { @@ -418,11 +480,12 @@ static void GenerateError(NetworkConnection conn, byte error) // pass a reader (attached to local buffer) to handler NetworkReader reader = new NetworkReader(writer.ToArray()); - conn.InvokeHandler((short)MsgType.Error, reader); + conn.InvokeHandler(msgId, reader); } } - public static void RegisterHandler(short msgType, NetworkMessageDelegate handler) + [Obsolete("Use RegisterHandler instead")] + public static void RegisterHandler(int msgType, NetworkMessageDelegate handler) { if (handlers.ContainsKey(msgType)) { @@ -431,19 +494,42 @@ public static void RegisterHandler(short msgType, NetworkMessageDelegate handler handlers[msgType] = handler; } + [Obsolete("Use RegisterHandler instead")] public static void RegisterHandler(MsgType msgType, NetworkMessageDelegate handler) { - RegisterHandler((short)msgType, handler); + RegisterHandler((int)msgType, handler); } - public static void UnregisterHandler(short msgType) + public static void RegisterHandler(Action handler) where T: MessageBase, new() + { + int msgType = MessageBase.GetId(); + if (handlers.ContainsKey(msgType)) + { + if (LogFilter.Debug) { Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } + } + handlers[msgType] = networkMessage => + { + T message = networkMessage.ReadMessage(); + handler(networkMessage.conn, message); + }; + } + + [Obsolete("Use UnregisterHandler instead")] + public static void UnregisterHandler(int msgType) { handlers.Remove(msgType); } + [Obsolete("Use UnregisterHandler instead")] public static void UnregisterHandler(MsgType msgType) { - UnregisterHandler((short)msgType); + UnregisterHandler((int)msgType); + } + + public static void UnregisterHandler() where T:MessageBase + { + int msgType = MessageBase.GetId(); + handlers.Remove(msgType); } public static void ClearHandlers() @@ -451,7 +537,8 @@ public static void ClearHandlers() handlers.Clear(); } - public static void SendToClient(int connectionId, short msgType, MessageBase msg) + [Obsolete("Use SendToClient instead")] + public static void SendToClient(int connectionId, int msgType, MessageBase msg) { if (connections.TryGetValue(connectionId, out NetworkConnection conn)) { @@ -461,8 +548,20 @@ public static void SendToClient(int connectionId, short msgType, MessageBase msg Debug.LogError("Failed to send message to connection ID '" + connectionId + ", not found in connection list"); } - // send this message to the player only - public static void SendToClientOfPlayer(NetworkIdentity identity, short msgType, MessageBase msg) + public static void SendToClient(int connectionId, T msg) where T : MessageBase + { + NetworkConnection conn; + if (connections.TryGetValue(connectionId, out conn)) + { + conn.Send(msg); + return; + } + Debug.LogError("Failed to send message to connection ID '" + connectionId + ", not found in connection list"); + } + + + [Obsolete("Use SendToClientOfPlayer instead")] + public static void SendToClientOfPlayer(NetworkIdentity identity, int msgType, MessageBase msg) { if (identity != null) { @@ -474,6 +573,19 @@ public static void SendToClientOfPlayer(NetworkIdentity identity, short msgType, } } + // send this message to the player only + public static void SendToClientOfPlayer(NetworkIdentity identity, T msg) where T: MessageBase + { + if (identity != null) + { + identity.connectionToClient.Send(msg); + } + else + { + Debug.LogError("SendToClientOfPlayer: player has no NetworkIdentity: " + identity.name); + } + } + public static bool ReplacePlayerForConnection(NetworkConnection conn, GameObject player, Guid assetId) { if (GetNetworkIdentity(player, out NetworkIdentity identity)) @@ -586,7 +698,7 @@ static void FinishPlayerForConnection(NetworkConnection conn, NetworkIdentity id { netId = identity.netId }; - conn.Send((short)MsgType.Owner, owner); + conn.Send(owner); } internal static bool InternalReplacePlayerForConnection(NetworkConnection conn, GameObject playerGameObject) @@ -692,7 +804,7 @@ public static void SetClientReady(NetworkConnection conn) // Spawn/update all current server objects if (LogFilter.Debug) { Debug.Log("Spawning " + NetworkIdentity.spawned.Count + " objects for conn " + conn.connectionId); } - conn.Send((short)MsgType.SpawnStarted, new ObjectSpawnStartedMessage()); + conn.Send(new ObjectSpawnStartedMessage()); foreach (NetworkIdentity identity in NetworkIdentity.spawned.Values) { @@ -715,7 +827,7 @@ public static void SetClientReady(NetworkConnection conn) } } - conn.Send((short)MsgType.SpawnFinished, new ObjectSpawnFinishedMessage()); + conn.Send(new ObjectSpawnFinishedMessage()); } internal static void ShowForConnection(NetworkIdentity identity, NetworkConnection conn) @@ -726,11 +838,11 @@ internal static void ShowForConnection(NetworkIdentity identity, NetworkConnecti internal static void HideForConnection(NetworkIdentity identity, NetworkConnection conn) { - ObjectDestroyMessage msg = new ObjectDestroyMessage + ObjectHideMessage msg = new ObjectHideMessage { netId = identity.netId }; - conn.Send((short)MsgType.ObjectHide, msg); + conn.Send(msg); } // call this to make all the clients not ready, such as when changing levels. @@ -756,25 +868,24 @@ internal static void InternalSetClientNotReady(NetworkConnection conn) conn.isReady = false; conn.RemoveObservers(); - NotReadyMessage msg = new NotReadyMessage(); - conn.Send((short)MsgType.NotReady, msg); + conn.Send(new NotReadyMessage()); } } // default ready handler. - static void OnClientReadyMessage(NetworkMessage netMsg) + static void OnClientReadyMessage(NetworkConnection conn, ReadyMessage msg) { - if (LogFilter.Debug) { Debug.Log("Default handler for ready message from " + netMsg.conn); } - SetClientReady(netMsg.conn); + if (LogFilter.Debug) { Debug.Log("Default handler for ready message from " + conn); } + SetClientReady(conn); } // default remove player handler - static void OnRemovePlayerMessage(NetworkMessage netMsg) + static void OnRemovePlayerMessage(NetworkConnection conn, RemovePlayerMessage msg) { - if (netMsg.conn.playerController != null) + if (conn.playerController != null) { - Destroy(netMsg.conn.playerController.gameObject); - netMsg.conn.RemovePlayerController(); + Destroy(conn.playerController.gameObject); + conn.RemovePlayerController(); } else { @@ -783,30 +894,28 @@ static void OnRemovePlayerMessage(NetworkMessage netMsg) } // Handle command from specific player, this could be one of multiple players on a single client - static void OnCommandMessage(NetworkMessage netMsg) + static void OnCommandMessage(NetworkConnection conn, CommandMessage msg) { - CommandMessage message = netMsg.ReadMessage(); - - if (!NetworkIdentity.spawned.TryGetValue(message.netId, out NetworkIdentity identity)) + if (!NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { - Debug.LogWarning("Spawned object not found when handling Command message [netId=" + message.netId + "]"); + Debug.LogWarning("Spawned object not found when handling Command message [netId=" + msg.netId + "]"); return; } // Commands can be for player objects, OR other objects with client-authority // -> so if this connection's controller has a different netId then // only allow the command if clientAuthorityOwner - if (netMsg.conn.playerController != null && netMsg.conn.playerController.netId != identity.netId) + if (conn.playerController != null && conn.playerController.netId != identity.netId) { - if (identity.clientAuthorityOwner != netMsg.conn) + if (identity.clientAuthorityOwner != conn) { - Debug.LogWarning("Command for object without authority [netId=" + message.netId + "]"); + Debug.LogWarning("Command for object without authority [netId=" + msg.netId + "]"); return; } } - if (LogFilter.Debug) { Debug.Log("OnCommandMessage for netId=" + message.netId + " conn=" + netMsg.conn); } - identity.HandleCommand(message.componentIndex, message.functionHash, new NetworkReader(message.payload)); + if (LogFilter.Debug) { Debug.Log("OnCommandMessage for netId=" + msg.netId + " conn=" + conn); } + identity.HandleCommand(msg.componentIndex, msg.functionHash, new NetworkReader(msg.payload)); } internal static void SpawnObject(GameObject obj) @@ -857,12 +966,12 @@ internal static void SendSpawnMessage(NetworkIdentity identity, NetworkConnectio // conn is != null when spawning it for a client if (conn != null) { - conn.Send((short)MsgType.SpawnPrefab, msg); + conn.Send(msg); } // conn is == null when spawning it for the local player else { - SendToReady(identity, (short)MsgType.SpawnPrefab, msg); + SendToReady(identity, msg); } } // 'identity' is a scene object that should be spawned again @@ -882,12 +991,12 @@ internal static void SendSpawnMessage(NetworkIdentity identity, NetworkConnectio // conn is != null when spawning it for a client if (conn != null) { - conn.Send((short)MsgType.SpawnSceneObject, msg); + conn.Send(msg); } // conn is == null when spawning it for the local player else { - SendToReady(identity, (short)MsgType.SpawnSceneObject, msg); + SendToReady(identity, msg); } } } @@ -1028,7 +1137,7 @@ static void DestroyObject(NetworkIdentity identity, bool destroyServerObject) { netId = identity.netId }; - SendToObservers(identity, (short)MsgType.ObjectDestroy, msg); + SendToObservers(identity, msg); identity.ClearObservers(); if (NetworkClient.active && localClientActive) diff --git a/Assets/Mirror/Runtime/NetworkTime.cs b/Assets/Mirror/Runtime/NetworkTime.cs index 40d1ad693..1b899e5eb 100644 --- a/Assets/Mirror/Runtime/NetworkTime.cs +++ b/Assets/Mirror/Runtime/NetworkTime.cs @@ -55,7 +55,7 @@ internal static void UpdateClient(NetworkClient networkClient) if (Time.time - lastPingTime >= PingFrequency) { NetworkPingMessage pingMessage = GetPing(); - networkClient.Send((short)MsgType.Ping, pingMessage); + networkClient.Send(pingMessage); lastPingTime = Time.time; } } @@ -63,40 +63,37 @@ internal static void UpdateClient(NetworkClient networkClient) // executed at the server when we receive a ping message // reply with a pong containing the time from the client // and time from the server - internal static void OnServerPing(NetworkMessage netMsg) + internal static void OnServerPing(NetworkConnection conn, NetworkPingMessage msg) { - NetworkPingMessage pingMsg = netMsg.ReadMessage(); - - if (LogFilter.Debug) { Debug.Log("OnPingServerMessage conn=" + netMsg.conn); } + if (LogFilter.Debug) { Debug.Log("OnPingServerMessage conn=" + conn); } NetworkPongMessage pongMsg = new NetworkPongMessage { - clientTime = pingMsg.value, + clientTime = msg.value, serverTime = LocalTime() }; - netMsg.conn.Send((short)MsgType.Pong, pongMsg); + conn.Send(pongMsg); } // Executed at the client when we receive a Pong message // find out how long it took since we sent the Ping // and update time offset - internal static void OnClientPong(NetworkMessage netMsg) + internal static void OnClientPong(NetworkConnection conn, NetworkPongMessage msg) { - NetworkPongMessage pongMsg = netMsg.ReadMessage(); double now = LocalTime(); // how long did this message take to come back - double rtt = now - pongMsg.clientTime; + double rtt = now - msg.clientTime; _rtt.Add(rtt); // the difference in time between the client and the server // but subtract half of the rtt to compensate for latency // half of rtt is the best approximation we have - double offset = now - rtt * 0.5f - pongMsg.serverTime; + double offset = now - rtt * 0.5f - msg.serverTime; - double newOffsetMin = now - rtt - pongMsg.serverTime; - double newOffsetMax = now - pongMsg.serverTime; + double newOffsetMin = now - rtt - msg.serverTime; + double newOffsetMax = now - msg.serverTime; offsetMin = Math.Max(offsetMin, newOffsetMin); offsetMax = Math.Min(offsetMax, newOffsetMax); diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index e37ef9ec7..718bd5c69 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -24,6 +24,7 @@ public enum UNetInvokeType // original HLAPI uses short, so let's keep short to not break packet header etc. // => use .ToString() to get the field name from the field value // => we specify the short values so it's easier to look up opcodes when debugging packets + [Obsolete("Use Send with no message id instead")] public enum MsgType : short { // internal system messages - cannot be replaced by user code diff --git a/docs/Concepts/Communications/NetworkMessages.md b/docs/Concepts/Communications/NetworkMessages.md index a79ae5411..ac7b817a6 100644 --- a/docs/Concepts/Communications/NetworkMessages.md +++ b/docs/Concepts/Communications/NetworkMessages.md @@ -1,14 +1,15 @@ # Network Messages -In addition to “high-level” Commands and RPC calls, you can also send raw network messages. +For the most part we recommend the high level [Commands and RPC](RemoteActions.md) calls and [SyncVar](../StateSync.md), but you can also send low level network messages. This can be useful if you want clients to send messages that are not tied to gameobjects, such as logging, analytics or profiling information. -There is a class called MessageBase that you can extend to make serializable network message classes. This class has Serialize and Deserialize functions that take writer and reader objects. You can implement these functions yourself, or you can rely on code-generated implementations that are automatically created by the networking -system. The base class looks like this: +There is a class called MessageBase that you can extend to make serializable network message classes. This class has Serialize and Deserialize functions that take writer and reader objects. You can implement these functions yourself, but we recommend you let Mirror generate them for you. -``` +The base class looks like this: + +```cs public abstract class MessageBase { - // De-serialize the contents of the reader into this message + // Deserialize the contents of the reader into this message public virtual void Deserialize(NetworkReader reader) {} // Serialize the contents of this message into the writer @@ -16,49 +17,13 @@ public abstract class MessageBase } ``` -Message classes can contain members that are basic types, structs, and arrays, including most of the common Unity Engine types (such as Vector3). They cannot contain members that are complex classes or generic containers. Remember that if you want to rely on the code-generated implementations, you must make sure your types are publicly visible. +The auto generated Serialize/Deserialize can efficiently deal with basic types, structs, arrays and common Unity value types such as Color, Vector3, Quaternion. Make your members public. If you need class members or complex containers such as List and Dictionary, you must implement the Serialize and Deserialize methods yourself. -There are built-in message classes for common types of network messages: - -- EmptyMessage -- StringMessage -- IntegerMessage - -To send a message, use the `Send()` method on the NetworkClient, NetworkServer, and NetworkConnection classes which work the same way. It takes a message ID, and a message object that is derived from MessageBase. The code below demonstrates how to send and handle a message using one of the built-in message classes: - -``` -using UnityEngine; -using Mirror; - -public class Begin : NetworkBehaviour -{ - const short MyBeginMsg = 1002; - - NetworkClient m_client; - - public void SendReadyToBeginMessage(int myId) - { - var msg = new IntegerMessage(myId); - m_client.Send(MyBeginMsg, msg); - } - - public void Init(NetworkClient client) - { - m_client = client; - NetworkServer.RegisterHandler(MyBeginMsg, OnServerReadyToBeginMessage); - } - - void OnServerReadyToBeginMessage(NetworkMessage netMsg) - { - var beginMessage = netMsg.ReadMessage(); - Debug.Log("received OnServerReadyToBeginMessage " + beginMessage.value); - } -} -``` +To send a message, use the `Send()` method on the NetworkClient, NetworkServer, and NetworkConnection classes which work the same way. It takes a message object that is derived from MessageBase. The code below demonstrates how to send and handle a message: To declare a custom network message class and use it: -``` +```cs using UnityEngine; using Mirror; @@ -66,11 +31,6 @@ public class Scores : MonoBehaviour { NetworkClient myClient; - public class MyMsgType - { - public static short Score = MsgType.Highest + 1; - }; - public class ScoreMessage : MessageBase { public int score; @@ -80,33 +40,28 @@ public class Scores : MonoBehaviour public void SendScore(int score, Vector3 scorePos, int lives) { - ScoreMessage msg = new ScoreMessage(); - msg.score = score; - msg.scorePos = scorePos; - msg.lives = lives; - - NetworkServer.SendToAll(MyMsgType.Score, msg); + ScoreMessage msg = new ScoreMessage() + { + score = score, + scorePos = scorePos, + lives = lives + }; + + NetworkServer.SendToAll(msg); } // Create a client and connect to the server port public void SetupClient() { myClient = new NetworkClient(); - myClient.RegisterHandler(MsgType.Connect, OnConnected); - myClient.RegisterHandler(MyMsgType.Score, OnScore); + myClient.RegisterHandler(OnScore); myClient.Connect("127.0.0.1", 4444); } - public void OnScore(NetworkMessage netMsg) + public void OnScore(ScoreMessage msg) { - ScoreMessage msg = netMsg.ReadMessage(); Debug.Log("OnScoreMessage " + msg.score); } - - public void OnConnected(NetworkMessage netMsg) - { - Debug.Log("Connected to server"); - } } ``` @@ -118,7 +73,7 @@ There is also an ErrorMessage class that is derived from `MessageBase`. This cla The errorCode in the ErrorMessage class corresponds to the Networking.NetworkError enumeration. -``` +```cs class MyClient { NetworkClient client; @@ -126,12 +81,11 @@ class MyClient void Start() { client = new NetworkClient(); - client.RegisterHandler(MsgType.Error, OnError); + client.RegisterHandler(OnError); } - void OnError(NetworkMessage netMsg) + void OnError(ErrorMessage errorMsg) { - var errorMsg = netMsg.ReadMessage(); Debug.Log("Error:" + errorMsg.errorCode); } } From 480bd8c9c666890f87bcdfced1e7849f80c23621 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 3 Mar 2019 09:51:03 -0600 Subject: [PATCH 133/276] Transport should be protected so that people can implement their own OnValidate logic (#539) --- Assets/Mirror/Runtime/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 24125dbe9..b38853228 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -35,7 +35,7 @@ public class NetworkManager : MonoBehaviour [Header("Network Info")] // transport layer - [SerializeField] Transport transport; + [SerializeField] protected Transport transport; [FormerlySerializedAs("m_NetworkAddress")] public string networkAddress = "localhost"; [FormerlySerializedAs("m_MaxConnections")] public int maxConnections = 4; From 440a6dfc6fc247269d3eaa0ad0dac7b6a509b265 Mon Sep 17 00:00:00 2001 From: vis2k Date: Sun, 3 Mar 2019 18:16:29 +0100 Subject: [PATCH 134/276] NetworkManager.InitializeSingleton: show warning if destroying self. No need to show an error, since this can be completely normal if we use zones/multiple scenes and switch back to the main scene, which still has a networkmanager. --- Assets/Mirror/Runtime/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index b38853228..06c757012 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -113,7 +113,7 @@ void InitializeSingleton() { if (singleton != null) { - Debug.LogError("Multiple NetworkManagers detected in the scene. Only one NetworkManager can exist at a time. The duplicate NetworkManager will not be used."); + Debug.LogWarning("Multiple NetworkManagers detected in the scene. Only one NetworkManager can exist at a time. The duplicate NetworkManager will be destroyed."); Destroy(gameObject); return; } From 001cec6d82d8624f65ef7213fe1f0437a9365f20 Mon Sep 17 00:00:00 2001 From: vis2k Date: Sun, 3 Mar 2019 18:19:07 +0100 Subject: [PATCH 135/276] NetworkManager.InitializeSingleton: set active transport AFTER setting singleton or destroying self. not before. Otherwise we would set it to a transport that is destroyed a moment later. --- Assets/Mirror/Runtime/NetworkManager.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 06c757012..5fa53e418 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -104,8 +104,6 @@ void InitializeSingleton() return; } - Transport.activeTransport = transport; - // do this early LogFilter.Debug = showDebugMessages; @@ -127,6 +125,10 @@ void InitializeSingleton() singleton = this; } + // set active transport AFTER setting singleton. + // so only if we didn't destroy ourselves. + Transport.activeTransport = transport; + // persistent network address between scene changes if (networkAddress != "") { From e4fbbeddc3b47550d8c633e1c013e4c32da83a43 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 3 Mar 2019 12:53:24 -0600 Subject: [PATCH 136/276] Simplify add player extra data (#537) * Simplify add player extra data * Pass byte[] in the client too * Renamed to extra message --- .../Mirror/Components/NetworkLobbyManager.cs | 2 +- .../Lobby/Scripts/NetworkLobbyPlayerExt.cs | 2 +- Assets/Mirror/Runtime/ClientScene.cs | 11 ++++----- Assets/Mirror/Runtime/NetworkManager.cs | 23 ++----------------- 4 files changed, 8 insertions(+), 30 deletions(-) diff --git a/Assets/Mirror/Components/NetworkLobbyManager.cs b/Assets/Mirror/Components/NetworkLobbyManager.cs index 29dbd73ed..9f654df60 100644 --- a/Assets/Mirror/Components/NetworkLobbyManager.cs +++ b/Assets/Mirror/Components/NetworkLobbyManager.cs @@ -195,7 +195,7 @@ public override void OnServerDisconnect(NetworkConnection conn) OnLobbyServerDisconnect(conn); } - public override void OnServerAddPlayer(NetworkConnection conn) + public override void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { if (SceneManager.GetActiveScene().name != LobbyScene) return; diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs index 0e452e277..e39b955c4 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs @@ -18,7 +18,7 @@ This demonstrates how to set the parent of the LobbyPlayerPrefab to an arbitrary A similar technique would be used if a full canvas layout UI existed and we wanted to show something more visual for each player in that layout, such as a name, avatar, etc. - Note: LobbyPlayer prefab will be marked DontDestroyOnLoad and carried forward to the game scene. + Note: LobbyPAlayer prefab will be marked DontDestroyOnLoad and carried forward to the game scene. Because of this, NetworkLobbyManager must automatically set the parent to null in ServerChangeScene and OnClientChangeScene. */ diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index f5bd252cf..80cd06526 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -64,7 +64,7 @@ internal static void InternalAddPlayer(NetworkIdentity identity) // use this to implicitly become ready // -> extraMessage can contain character selection, etc. - public static bool AddPlayer(NetworkConnection readyConn, MessageBase extraMessage) + public static bool AddPlayer(NetworkConnection readyConn, byte[] extraData) { // ensure valid ready connection if (readyConn != null) @@ -87,13 +87,10 @@ public static bool AddPlayer(NetworkConnection readyConn, MessageBase extraMessa if (LogFilter.Debug) { Debug.Log("ClientScene.AddPlayer() called with connection [" + readyConnection + "]"); } - AddPlayerMessage msg = new AddPlayerMessage(); - if (extraMessage != null) + AddPlayerMessage msg = new AddPlayerMessage() { - NetworkWriter writer = new NetworkWriter(); - extraMessage.Serialize(writer); - msg.value = writer.ToArray(); - } + value = extraData + }; readyConnection.Send(msg); return true; } diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 5fa53e418..d15f32be3 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -552,21 +552,7 @@ internal void OnServerAddPlayerMessageInternal(NetworkConnection conn, AddPlayer { if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerAddPlayerMessageInternal"); } - if (msg.value != null && msg.value.Length > 0) - { - // convert payload to extra message and call OnServerAddPlayer - // (usually for character selection information) - NetworkMessage extraMessage = new NetworkMessage - { - reader = new NetworkReader(msg.value), - conn = conn - }; - OnServerAddPlayer(conn, extraMessage); - } - else - { - OnServerAddPlayer(conn); - } + OnServerAddPlayer(conn, msg); } internal void OnServerRemovePlayerMessageInternal(NetworkConnection conn, RemovePlayerMessage msg) @@ -661,12 +647,7 @@ public virtual void OnServerReady(NetworkConnection conn) NetworkServer.SetClientReady(conn); } - public virtual void OnServerAddPlayer(NetworkConnection conn, NetworkMessage extraMessage) - { - OnServerAddPlayerInternal(conn); - } - - public virtual void OnServerAddPlayer(NetworkConnection conn) + public virtual void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { OnServerAddPlayerInternal(conn); } From 4749abd3079d1e9e73c5fcbd5fc359d547ce215f Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 3 Mar 2019 14:02:34 -0600 Subject: [PATCH 137/276] Move GetId to MessagePacker (#540) Now we have the logic of how many bits in just one place and we free up MessageBase for eventually converting to an interface --- Assets/Mirror/Runtime/MessagePacker.cs | 10 +++++++++- Assets/Mirror/Runtime/Messages.cs | 8 -------- Assets/Mirror/Runtime/NetworkClient.cs | 4 ++-- Assets/Mirror/Runtime/NetworkConnection.cs | 2 +- Assets/Mirror/Runtime/NetworkServer.cs | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs index 2fc4682ab..e23e98a21 100644 --- a/Assets/Mirror/Runtime/MessagePacker.cs +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -19,6 +19,14 @@ public static class MessagePacker // avoid large amounts of allocations. static NetworkWriter packWriter = new NetworkWriter(); + public static int GetId() where T : MessageBase + { + // paul: 16 bits is enough to avoid collisions + // - keeps the message size small because it gets varinted + // - in case of collisions, Mirror will display an error + return typeof(T).FullName.GetStableHashCode() & 0xFFFF; + } + // pack message before sending // -> pass writer instead of byte[] so we can reuse it [Obsolete("Use Pack instead")] @@ -44,7 +52,7 @@ public static byte[] Pack(T message) where T : MessageBase packWriter.SetLength(0); // write message type - int msgType = MessageBase.GetId(); + int msgType = GetId(); packWriter.Write((ushort)msgType); // serialize message into writer diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index 19287ebc7..78261a908 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -12,14 +12,6 @@ public virtual void Deserialize(NetworkReader reader) {} // Serialize the contents of this message into the writer public virtual void Serialize(NetworkWriter writer) {} - - public static int GetId() where T: MessageBase - { - // paul: 16 bits is enough to avoid collisions - // - keeps the message size small because it gets varinted - // - in case of collisions, Mirror will display an error - return typeof(T).FullName.GetStableHashCode() & 0xFFFF; - } } // ---------- General Typed Messages ------------------- diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index f1b522745..95e9d0101 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -285,7 +285,7 @@ public void RegisterHandler(MsgType msgType, NetworkMessageDelegate handler) public void RegisterHandler(Action handler) where T : MessageBase, new() { - int msgType = MessageBase.GetId(); + int msgType = MessagePacker.GetId(); if (handlers.ContainsKey(msgType)) { if (LogFilter.Debug) { Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } @@ -311,7 +311,7 @@ public void UnregisterHandler(MsgType msgType) public void UnregisterHandler() where T : MessageBase { // use int to minimize collisions - int msgType = MessageBase.GetId(); + int msgType = MessagePacker.GetId(); handlers.Remove(msgType); } diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index 3a0853237..adce23d83 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -220,7 +220,7 @@ public bool InvokeHandler(int msgType, NetworkReader reader) public bool InvokeHandler(T msg) where T : MessageBase { - int msgType = MessageBase.GetId(); + int msgType = MessagePacker.GetId(); byte[] data = MessagePacker.Pack(msg); return InvokeHandler(msgType, new NetworkReader(data)); } diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index b5d4cb002..1e9e2263b 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -466,7 +466,7 @@ static void GenerateDisconnectError(NetworkConnection conn, byte error) static void GenerateError(NetworkConnection conn, byte error) { - int msgId = MessageBase.GetId(); + int msgId = MessagePacker.GetId(); if (handlers.ContainsKey(msgId)) { ErrorMessage msg = new ErrorMessage @@ -502,7 +502,7 @@ public static void RegisterHandler(MsgType msgType, NetworkMessageDelegate handl public static void RegisterHandler(Action handler) where T: MessageBase, new() { - int msgType = MessageBase.GetId(); + int msgType = MessagePacker.GetId(); if (handlers.ContainsKey(msgType)) { if (LogFilter.Debug) { Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } @@ -528,7 +528,7 @@ public static void UnregisterHandler(MsgType msgType) public static void UnregisterHandler() where T:MessageBase { - int msgType = MessageBase.GetId(); + int msgType = MessagePacker.GetId(); handlers.Remove(msgType); } From 9a0af7cb5563b1afa0914848427c4a312cac2b9c Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 3 Mar 2019 18:06:36 -0600 Subject: [PATCH 138/276] Allow users to unpack messages too (#543) --- Assets/Mirror/Runtime/MessagePacker.cs | 16 ++++++++++++++ Assets/Mirror/Tests/MessagePackerTest.cs | 22 +++++++++++++++++++ Assets/Mirror/Tests/MessagePackerTest.cs.meta | 11 ++++++++++ 3 files changed, 49 insertions(+) create mode 100644 Assets/Mirror/Tests/MessagePackerTest.cs create mode 100644 Assets/Mirror/Tests/MessagePackerTest.cs.meta diff --git a/Assets/Mirror/Runtime/MessagePacker.cs b/Assets/Mirror/Runtime/MessagePacker.cs index e23e98a21..20c9f15ae 100644 --- a/Assets/Mirror/Runtime/MessagePacker.cs +++ b/Assets/Mirror/Runtime/MessagePacker.cs @@ -62,6 +62,22 @@ public static byte[] Pack(T message) where T : MessageBase return packWriter.ToArray(); } + // unpack a message we received + public static T Unpack(byte[] data) where T : MessageBase, new() + { + NetworkReader reader = new NetworkReader(data); + + int msgType = GetId(); + + int id = reader.ReadUInt16(); + if (id != msgType) + throw new FormatException("Invalid message, could not unpack " + typeof(T).FullName); + + T message = new T(); + message.Deserialize(reader); + return message; + } + // unpack message after receiving // -> pass NetworkReader so it's less strange if we create it in here // and pass it upwards. diff --git a/Assets/Mirror/Tests/MessagePackerTest.cs b/Assets/Mirror/Tests/MessagePackerTest.cs new file mode 100644 index 000000000..71e68fc0d --- /dev/null +++ b/Assets/Mirror/Tests/MessagePackerTest.cs @@ -0,0 +1,22 @@ +using NUnit.Framework; +namespace Mirror +{ + [TestFixture] + public class MessagePackerTest + { + [Test] + public void TestPacking() + { + SceneMessage message = new SceneMessage() + { + value = "Hello world" + }; + + byte[] data = MessagePacker.Pack(message); + + SceneMessage unpacked = MessagePacker.Unpack(data); + + Assert.That(unpacked.value, Is.EqualTo("Hello world")); + } + } +} \ No newline at end of file diff --git a/Assets/Mirror/Tests/MessagePackerTest.cs.meta b/Assets/Mirror/Tests/MessagePackerTest.cs.meta new file mode 100644 index 000000000..70e62403b --- /dev/null +++ b/Assets/Mirror/Tests/MessagePackerTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d57c17d9ee7c49e6bacc54ddbeac751 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 70cfe9e8ce920ddbc34c46cf4e277a54756c9257 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Mon, 4 Mar 2019 01:42:17 -0600 Subject: [PATCH 139/276] Websocket transport should be namespaced (#542) --- Assets/Mirror/Runtime/Transport/Websocket/Client.cs | 2 +- Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs | 2 +- Assets/Mirror/Runtime/Transport/Websocket/Server.cs | 2 +- Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs index a90e0fba6..74ddb682e 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs @@ -10,7 +10,7 @@ using Ninja.WebSockets; using UnityEngine; -namespace Mirror +namespace Mirror.Websocket { public class Client diff --git a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs index bbe12cd1c..1446b6d89 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs @@ -13,7 +13,7 @@ using Ninja.WebSockets; using UnityEngine; -namespace Mirror +namespace Mirror.Websocket { // this is the client implementation used by browsers public class Client diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs index 9d378e0dd..f36561c3f 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs @@ -11,7 +11,7 @@ using Ninja.WebSockets; using UnityEngine; -namespace Mirror +namespace Mirror.Websocket { public class Server { diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs index e9d479f6f..a2cbacecb 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace Mirror +namespace Mirror.Websocket { public class WebsocketTransport : Transport { From a9deb56282799183e88c2a3adba2f616e89419f5 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:43:33 -0800 Subject: [PATCH 140/276] Remove one liner braces in ClientScene (#549) --- Assets/Mirror/Runtime/ClientScene.cs | 46 ++++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 80cd06526..68ba460a6 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -41,7 +41,7 @@ internal static void Shutdown() // this is called from message handler for Owner message internal static void InternalAddPlayer(NetworkIdentity identity) { - if (LogFilter.Debug) { Debug.LogWarning("ClientScene.InternalAddPlayer"); } + if (LogFilter.Debug) Debug.LogWarning("ClientScene.InternalAddPlayer"); // NOTE: It can be "normal" when changing scenes for the player to be destroyed and recreated. // But, the player structures are not cleaned up, we'll just replace the old player @@ -85,7 +85,7 @@ public static bool AddPlayer(NetworkConnection readyConn, byte[] extraData) return false; } - if (LogFilter.Debug) { Debug.Log("ClientScene.AddPlayer() called with connection [" + readyConnection + "]"); } + if (LogFilter.Debug) Debug.Log("ClientScene.AddPlayer() called with connection [" + readyConnection + "]"); AddPlayerMessage msg = new AddPlayerMessage() { @@ -97,7 +97,7 @@ public static bool AddPlayer(NetworkConnection readyConn, byte[] extraData) public static bool RemovePlayer() { - if (LogFilter.Debug) { Debug.Log("ClientScene.RemovePlayer() called with connection [" + readyConnection + "]"); } + if (LogFilter.Debug) Debug.Log("ClientScene.RemovePlayer() called with connection [" + readyConnection + "]"); if (readyConnection.playerController != null) { @@ -122,7 +122,7 @@ public static bool Ready(NetworkConnection conn) return false; } - if (LogFilter.Debug) { Debug.Log("ClientScene.Ready() called with connection [" + conn + "]"); } + if (LogFilter.Debug) Debug.Log("ClientScene.Ready() called with connection [" + conn + "]"); if (conn != null) { @@ -202,7 +202,7 @@ public static void RegisterPrefab(GameObject prefab, Guid newAssetId) { identity.assetId = newAssetId; - if (LogFilter.Debug) { Debug.Log("Registering prefab '" + prefab.name + "' as asset:" + identity.assetId); } + if (LogFilter.Debug) Debug.Log("Registering prefab '" + prefab.name + "' as asset:" + identity.assetId); prefabs[identity.assetId] = prefab; } else @@ -216,7 +216,7 @@ public static void RegisterPrefab(GameObject prefab) NetworkIdentity identity = prefab.GetComponent(); if (identity) { - if (LogFilter.Debug) { Debug.Log("Registering prefab '" + prefab.name + "' as asset:" + identity.assetId); } + if (LogFilter.Debug) Debug.Log("Registering prefab '" + prefab.name + "' as asset:" + identity.assetId); prefabs[identity.assetId] = prefab; NetworkIdentity[] identities = prefab.GetComponentsInChildren(); @@ -253,7 +253,7 @@ public static void RegisterPrefab(GameObject prefab, SpawnDelegate spawnHandler, return; } - if (LogFilter.Debug) { Debug.Log("Registering custom prefab '" + prefab.name + "' as asset:" + identity.assetId + " " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); } + if (LogFilter.Debug) Debug.Log("Registering custom prefab '" + prefab.name + "' as asset:" + identity.assetId + " " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); spawnHandlers[identity.assetId] = spawnHandler; unspawnHandlers[identity.assetId] = unspawnHandler; @@ -279,7 +279,7 @@ public static void RegisterSpawnHandler(Guid assetId, SpawnDelegate spawnHandler return; } - if (LogFilter.Debug) { Debug.Log("RegisterSpawnHandler asset '" + assetId + "' " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); } + if (LogFilter.Debug) Debug.Log("RegisterSpawnHandler asset '" + assetId + "' " + spawnHandler.GetMethodName() + "/" + unspawnHandler.GetMethodName()); spawnHandlers[assetId] = spawnHandler; unspawnHandlers[assetId] = unspawnHandler; @@ -375,7 +375,7 @@ internal static void OnSpawnPrefab(NetworkConnection conn, SpawnPrefabMessage ms Debug.LogError("OnObjSpawn netId: " + msg.netId + " has invalid asset Id"); return; } - if (LogFilter.Debug) { Debug.Log("Client spawn handler instantiating [netId:" + msg.netId + " asset ID:" + msg.assetId + " pos:" + msg.position + "]"); } + if (LogFilter.Debug) Debug.Log("Client spawn handler instantiating [netId:" + msg.netId + " asset ID:" + msg.assetId + " pos:" + msg.position + "]"); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -429,7 +429,7 @@ internal static void OnSpawnPrefab(NetworkConnection conn, SpawnPrefabMessage ms internal static void OnSpawnSceneObject(NetworkConnection conn, SpawnSceneObjectMessage msg) { - if (LogFilter.Debug) { Debug.Log("Client spawn scene handler instantiating [netId:" + msg.netId + " sceneId:" + msg.sceneId + " pos:" + msg.position); } + if (LogFilter.Debug) Debug.Log("Client spawn scene handler instantiating [netId:" + msg.netId + " sceneId:" + msg.sceneId + " pos:" + msg.position); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -449,14 +449,14 @@ internal static void OnSpawnSceneObject(NetworkConnection conn, SpawnSceneObject return; } - if (LogFilter.Debug) { Debug.Log("Client spawn for [netId:" + msg.netId + "] [sceneId:" + msg.sceneId + "] obj:" + spawnedId.gameObject.name); } + if (LogFilter.Debug) Debug.Log("Client spawn for [netId:" + msg.netId + "] [sceneId:" + msg.sceneId + "] obj:" + spawnedId.gameObject.name); spawnedId.Reset(); ApplySpawnPayload(spawnedId, msg.position, msg.rotation, msg.payload, msg.netId); } internal static void OnObjectSpawnStarted(NetworkConnection conn, ObjectSpawnStartedMessage msg) { - if (LogFilter.Debug) { Debug.Log("SpawnStarted"); } + if (LogFilter.Debug) Debug.Log("SpawnStarted"); PrepareToSpawnSceneObjects(); s_IsSpawnFinished = false; @@ -464,7 +464,7 @@ internal static void OnObjectSpawnStarted(NetworkConnection conn, ObjectSpawnSta internal static void OnObjectSpawnFinished(NetworkConnection conn, ObjectSpawnFinishedMessage msg) { - if (LogFilter.Debug) { Debug.Log("SpawnFinished"); } + if (LogFilter.Debug) Debug.Log("SpawnFinished"); // paul: Initialize the objects in the same order as they were initialized // in the server. This is important if spawned objects @@ -491,7 +491,7 @@ internal static void OnObjectDestroy(NetworkConnection conn, ObjectDestroyMessag static void DestroyObject(uint netId) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnObjDestroy netId:" + netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnObjDestroy netId:" + netId); if (NetworkIdentity.spawned.TryGetValue(netId, out NetworkIdentity localObject) && localObject != null) { @@ -516,20 +516,20 @@ static void DestroyObject(uint netId) } else { - if (LogFilter.Debug) { Debug.LogWarning("Did not find target for destroy message for " + netId); } + if (LogFilter.Debug) Debug.LogWarning("Did not find target for destroy message for " + netId); } } internal static void OnLocalClientObjectDestroy(NetworkConnection conn, ObjectDestroyMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnLocalObjectObjDestroy netId:" + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnLocalObjectObjDestroy netId:" + msg.netId); NetworkIdentity.spawned.Remove(msg.netId); } internal static void OnLocalClientObjectHide(NetworkConnection conn, ObjectHideMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene::OnLocalObjectObjHide netId:" + msg.netId); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -555,7 +555,7 @@ internal static void OnLocalClientSpawnSceneObject(NetworkConnection conn, Spawn internal static void OnUpdateVarsMessage(NetworkConnection conn, UpdateVarsMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnUpdateVarsMessage " + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnUpdateVarsMessage " + msg.netId); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity localObject) && localObject != null) { @@ -569,7 +569,7 @@ internal static void OnUpdateVarsMessage(NetworkConnection conn, UpdateVarsMessa internal static void OnRPCMessage(NetworkConnection conn, RpcMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnRPCMessage hash:" + msg.functionHash + " netId:" + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnRPCMessage hash:" + msg.functionHash + " netId:" + msg.netId); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -579,7 +579,7 @@ internal static void OnRPCMessage(NetworkConnection conn, RpcMessage msg) internal static void OnSyncEventMessage(NetworkConnection conn, SyncEventMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnSyncEventMessage " + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnSyncEventMessage " + msg.netId); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -593,7 +593,7 @@ internal static void OnSyncEventMessage(NetworkConnection conn, SyncEventMessage internal static void OnClientAuthority(NetworkConnection conn, ClientAuthorityMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnClientAuthority for netId: " + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnClientAuthority for netId: " + msg.netId); if (NetworkIdentity.spawned.TryGetValue(msg.netId, out NetworkIdentity identity)) { @@ -604,7 +604,7 @@ internal static void OnClientAuthority(NetworkConnection conn, ClientAuthorityMe // OnClientAddedPlayer? internal static void OnOwnerMessage(NetworkConnection conn, OwnerMessage msg) { - if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - connectionId=" + readyConnection.connectionId + " netId: " + msg.netId); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnOwnerMessage - connectionId=" + readyConnection.connectionId + " netId: " + msg.netId); // is there already an owner that is a different object?? readyConnection.playerController?.SetNotLocalPlayer(); @@ -635,7 +635,7 @@ static void CheckForOwner(NetworkIdentity identity) identity.connectionToServer = readyConnection; identity.SetLocalPlayer(); - if (LogFilter.Debug) { Debug.Log("ClientScene.OnOwnerMessage - player=" + identity.name); } + if (LogFilter.Debug) Debug.Log("ClientScene.OnOwnerMessage - player=" + identity.name); if (readyConnection.connectionId < 0) { Debug.LogError("Owner message received on a local client."); From 45e886e2c4024bff24e2befc5acd5602fc7765f7 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:44:27 -0800 Subject: [PATCH 141/276] Removed one liner braces in NetworkIdentity. (#546) --- Assets/Mirror/Runtime/NetworkIdentity.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 14dab4f54..1ed98dcb1 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -245,7 +245,7 @@ internal void OnStartServer(bool allowNonZeroNetId) } } - if (LogFilter.Debug) { Debug.Log("OnStartServer " + this + " GUID:" + netId); } + if (LogFilter.Debug) Debug.Log("OnStartServer " + this + " GUID:" + netId); // add to spawned (note: the original EnableIsServer isn't needed // because we already set m_isServer=true above) @@ -280,7 +280,7 @@ internal void OnStartClient() { isClient = true; - if (LogFilter.Debug) { Debug.Log("OnStartClient " + gameObject + " GUID:" + netId + " localPlayerAuthority:" + localPlayerAuthority); } + if (LogFilter.Debug) Debug.Log("OnStartClient " + gameObject + " GUID:" + netId + " localPlayerAuthority:" + localPlayerAuthority); foreach (NetworkBehaviour comp in NetworkBehaviours) { try @@ -396,7 +396,7 @@ internal bool OnSerializeSafely(NetworkBehaviour comp, NetworkWriter writer, boo writer.Write(endPosition - contentPosition); writer.Position = endPosition; - if (LogFilter.Debug) { Debug.Log("OnSerializeSafely written for object=" + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + "header@" + headerPosition + " content@" + contentPosition + " end@" + endPosition + " contentSize=" + (endPosition - contentPosition)); } + if (LogFilter.Debug) Debug.Log("OnSerializeSafely written for object=" + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + "header@" + headerPosition + " content@" + contentPosition + " end@" + endPosition + " contentSize=" + (endPosition - contentPosition)); return result; } @@ -432,7 +432,7 @@ internal byte[] OnSerializeAllSafely(bool initialState) if (initialState || comp.IsDirty()) { // serialize the data - if (LogFilter.Debug) { Debug.Log("OnSerializeAllSafely: " + name + " -> " + comp.GetType() + " initial=" + initialState); } + if (LogFilter.Debug) Debug.Log("OnSerializeAllSafely: " + name + " -> " + comp.GetType() + " initial=" + initialState); OnSerializeSafely(comp, onSerializeWriter, initialState); // Clear dirty bits only if we are synchronizing data and not sending a spawn message. @@ -472,7 +472,7 @@ internal void OnDeserializeSafely(NetworkBehaviour comp, NetworkReader reader, b // read content byte[] bytes = reader.ReadBytes(contentSize); - if (LogFilter.Debug) { Debug.Log("OnDeserializeSafely extracted: " + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + " length=" + bytes.Length); } + if (LogFilter.Debug) Debug.Log("OnDeserializeSafely extracted: " + comp.name + " component=" + comp.GetType() + " sceneId=" + m_SceneId + " length=" + bytes.Length); // call OnDeserialize with a temporary reader, so that the // original one can't be messed with. we also wrap it in a @@ -639,7 +639,7 @@ internal void AddObserver(NetworkConnection conn) return; } - if (LogFilter.Debug) { Debug.Log("Added observer " + conn.address + " added for " + gameObject); } + if (LogFilter.Debug) Debug.Log("Added observer " + conn.address + " added for " + gameObject); observers[conn.connectionId] = conn; conn.AddToVisList(this); @@ -706,7 +706,7 @@ public void RebuildObservers(bool initialize) { // new observer conn.AddToVisList(this); - if (LogFilter.Debug) { Debug.Log("New Observer for " + gameObject + " " + conn); } + if (LogFilter.Debug) Debug.Log("New Observer for " + gameObject + " " + conn); changed = true; } } @@ -717,7 +717,7 @@ public void RebuildObservers(bool initialize) { // removed observer conn.RemoveFromVisList(this, false); - if (LogFilter.Debug) { Debug.Log("Removed Observer for " + gameObject + " " + conn); } + if (LogFilter.Debug) Debug.Log("Removed Observer for " + gameObject + " " + conn); changed = true; } } From b3e61946653b63432fa891db770b9cc75804ebb3 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:44:39 -0800 Subject: [PATCH 142/276] Remove one liner braces. (#550) --- Assets/Mirror/Components/NetworkAnimator.cs | 2 +- Assets/Mirror/Components/NetworkProximityChecker.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 9db454094..4c600b11c 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -309,7 +309,7 @@ public void SetTrigger(int hash) [Command] void CmdOnAnimationServerMessage(int stateHash, float normalizedTime, byte[] parameters) { - if (LogFilter.Debug) { Debug.Log("OnAnimationMessage for netId=" + netId); } + if (LogFilter.Debug) Debug.Log("OnAnimationMessage for netId=" + netId); // handle and broadcast HandleAnimMsg(stateHash, normalizedTime, new NetworkReader(parameters)); diff --git a/Assets/Mirror/Components/NetworkProximityChecker.cs b/Assets/Mirror/Components/NetworkProximityChecker.cs index de4dbedb1..b8f5643e7 100644 --- a/Assets/Mirror/Components/NetworkProximityChecker.cs +++ b/Assets/Mirror/Components/NetworkProximityChecker.cs @@ -87,7 +87,7 @@ public override bool OnRebuildObservers(HashSet observers, bo { // cast without allocating GC for maximum performance int hitCount = Physics.OverlapSphereNonAlloc(transform.position, visRange, hitsBuffer3D, castLayers); - if (hitCount == hitsBuffer3D.Length) { Debug.LogWarning("NetworkProximityChecker's OverlapSphere test for " + name + " has filled the whole buffer(" + hitsBuffer3D.Length + "). Some results might have been omitted. Consider increasing buffer size."); } + if (hitCount == hitsBuffer3D.Length) Debug.LogWarning("NetworkProximityChecker's OverlapSphere test for " + name + " has filled the whole buffer(" + hitsBuffer3D.Length + "). Some results might have been omitted. Consider increasing buffer size."); for (int i = 0; i < hitCount; i++) { @@ -108,7 +108,7 @@ public override bool OnRebuildObservers(HashSet observers, bo { // cast without allocating GC for maximum performance int hitCount = Physics2D.OverlapCircleNonAlloc(transform.position, visRange, hitsBuffer2D, castLayers); - if (hitCount == hitsBuffer2D.Length) { Debug.LogWarning("NetworkProximityChecker's OverlapCircle test for " + name + " has filled the whole buffer(" + hitsBuffer2D.Length + "). Some results might have been omitted. Consider increasing buffer size."); } + if (hitCount == hitsBuffer2D.Length) Debug.LogWarning("NetworkProximityChecker's OverlapCircle test for " + name + " has filled the whole buffer(" + hitsBuffer2D.Length + "). Some results might have been omitted. Consider increasing buffer size."); for (int i = 0; i < hitCount; i++) { From 0790dd2ac9f3ac2a5cebb9939606d47ce02fc881 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:46:54 -0800 Subject: [PATCH 143/276] Remove one liner braces on NetworkServer. (#548) --- Assets/Mirror/Runtime/NetworkServer.cs | 80 +++++++++++++------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkServer.cs b/Assets/Mirror/Runtime/NetworkServer.cs index 1e9e2263b..a456047f9 100644 --- a/Assets/Mirror/Runtime/NetworkServer.cs +++ b/Assets/Mirror/Runtime/NetworkServer.cs @@ -61,7 +61,7 @@ static void Initialize() return; s_Initialized = true; - if (LogFilter.Debug) { Debug.Log("NetworkServer Created version " + Version.Current); } + if (LogFilter.Debug) Debug.Log("NetworkServer Created version " + Version.Current); //Make sure connections are cleared in case any old connections references exist from previous sessions connections.Clear(); @@ -89,7 +89,7 @@ public static bool Listen(int maxConnections) if (!dontListen) { Transport.activeTransport.ServerStart(); - if (LogFilter.Debug) { Debug.Log("Server started listening"); } + if (LogFilter.Debug) Debug.Log("Server started listening"); } active = true; @@ -156,7 +156,7 @@ internal static void ActivateLocalClientScene() { if (!identity.isClient) { - if (LogFilter.Debug) { Debug.Log("ActivateClientScene " + identity.netId + " " + identity); } + if (LogFilter.Debug) Debug.Log("ActivateClientScene " + identity.netId + " " + identity); identity.isClient = true; identity.OnStartClient(); @@ -169,7 +169,7 @@ internal static void ActivateLocalClientScene() [Obsolete("use SendToObservers instead")] static bool SendToObservers(NetworkIdentity identity, short msgType, MessageBase msg) { - if (LogFilter.Debug) { Debug.Log("Server.SendToObservers id:" + msgType); } + if (LogFilter.Debug) Debug.Log("Server.SendToObservers id:" + msgType); if (identity != null && identity.observers != null) { @@ -191,7 +191,7 @@ static bool SendToObservers(NetworkIdentity identity, short msgType, MessageBase // this is used for ObjectDestroy messages. static bool SendToObservers(NetworkIdentity identity, T msg) where T: MessageBase { - if (LogFilter.Debug) { Debug.Log("Server.SendToObservers id:" + typeof(T)); } + if (LogFilter.Debug) Debug.Log("Server.SendToObservers id:" + typeof(T)); if (identity != null && identity.observers != null) { @@ -211,7 +211,7 @@ static bool SendToObservers(NetworkIdentity identity, T msg) where T: Message [Obsolete("Use SendToAll instead")] public static bool SendToAll(int msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { - if (LogFilter.Debug) { Debug.Log("Server.SendToAll id:" + msgType); } + if (LogFilter.Debug) Debug.Log("Server.SendToAll id:" + msgType); // pack message into byte[] once byte[] bytes = MessagePacker.PackMessage((ushort)msgType, msg); @@ -227,7 +227,7 @@ public static bool SendToAll(int msgType, MessageBase msg, int channelId = Chann public static bool SendToAll(T msg, int channelId = Channels.DefaultReliable) where T : MessageBase { - if (LogFilter.Debug) { Debug.Log("Server.SendToAll id:" + typeof(T)); } + if (LogFilter.Debug) Debug.Log("Server.SendToAll id:" + typeof(T)); // pack message into byte[] once byte[] bytes = MessagePacker.Pack(msg); @@ -243,7 +243,7 @@ public static bool SendToAll(T msg, int channelId = Channels.DefaultReliable) [Obsolete("Use SendToReady instead")] public static bool SendToReady(NetworkIdentity identity, short msgType, MessageBase msg, int channelId = Channels.DefaultReliable) { - if (LogFilter.Debug) { Debug.Log("Server.SendToReady msgType:" + msgType); } + if (LogFilter.Debug) Debug.Log("Server.SendToReady msgType:" + msgType); if (identity != null && identity.observers != null) { @@ -266,7 +266,7 @@ public static bool SendToReady(NetworkIdentity identity, short msgType, MessageB public static bool SendToReady(NetworkIdentity identity,T msg, int channelId = Channels.DefaultReliable) where T: MessageBase { - if (LogFilter.Debug) { Debug.Log("Server.SendToReady msgType:" + typeof(T)); } + if (LogFilter.Debug) Debug.Log("Server.SendToReady msgType:" + typeof(T)); if (identity != null && identity.observers != null) { @@ -341,7 +341,7 @@ internal static void Update() static void OnConnected(int connectionId) { - if (LogFilter.Debug) { Debug.Log("Server accepted client:" + connectionId); } + if (LogFilter.Debug) Debug.Log("Server accepted client:" + connectionId); // connectionId needs to be > 0 because 0 is reserved for local player if (connectionId <= 0) @@ -355,7 +355,7 @@ static void OnConnected(int connectionId) if (connections.ContainsKey(connectionId)) { Transport.activeTransport.ServerDisconnect(connectionId); - if (LogFilter.Debug) { Debug.Log("Server connectionId " + connectionId + " already in use. kicked client:" + connectionId); } + if (LogFilter.Debug) Debug.Log("Server connectionId " + connectionId + " already in use. kicked client:" + connectionId); return; } @@ -377,13 +377,13 @@ static void OnConnected(int connectionId) { // kick Transport.activeTransport.ServerDisconnect(connectionId); - if (LogFilter.Debug) { Debug.Log("Server full, kicked client:" + connectionId); } + if (LogFilter.Debug) Debug.Log("Server full, kicked client:" + connectionId); } } static void OnConnected(NetworkConnection conn) { - if (LogFilter.Debug) { Debug.Log("Server accepted client:" + conn.connectionId); } + if (LogFilter.Debug) Debug.Log("Server accepted client:" + conn.connectionId); // add connection and invoke connected event AddConnection(conn); @@ -392,13 +392,13 @@ static void OnConnected(NetworkConnection conn) static void OnDisconnected(int connectionId) { - if (LogFilter.Debug) { Debug.Log("Server disconnect client:" + connectionId); } + if (LogFilter.Debug) Debug.Log("Server disconnect client:" + connectionId); if (connections.TryGetValue(connectionId, out NetworkConnection conn)) { conn.Disconnect(); RemoveConnection(connectionId); - if (LogFilter.Debug) { Debug.Log("Server lost client:" + connectionId); } + if (LogFilter.Debug) Debug.Log("Server lost client:" + connectionId); OnDisconnected(conn); } @@ -414,7 +414,7 @@ static void OnDisconnected(NetworkConnection conn) Debug.LogWarning("Player not destroyed when connection disconnected."); } - if (LogFilter.Debug) { Debug.Log("Server lost client:" + conn.connectionId); } + if (LogFilter.Debug) Debug.Log("Server lost client:" + conn.connectionId); conn.RemoveObservers(); conn.Dispose(); } @@ -489,7 +489,7 @@ public static void RegisterHandler(int msgType, NetworkMessageDelegate handler) { if (handlers.ContainsKey(msgType)) { - if (LogFilter.Debug) { Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } + if (LogFilter.Debug) Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } handlers[msgType] = handler; } @@ -505,7 +505,7 @@ public static void RegisterHandler(MsgType msgType, NetworkMessageDelegate handl int msgType = MessagePacker.GetId(); if (handlers.ContainsKey(msgType)) { - if (LogFilter.Debug) { Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } + if (LogFilter.Debug) Debug.Log("NetworkServer.RegisterHandler replacing " + msgType); } handlers[msgType] = networkMessage => { @@ -643,7 +643,7 @@ internal static bool InternalAddPlayerForConnection(NetworkConnection conn, Game return true; } - if (LogFilter.Debug) { Debug.Log("Adding new playerGameObject object netId: " + playerGameObject.GetComponent().netId + " asset ID " + playerGameObject.GetComponent().assetId); } + if (LogFilter.Debug) Debug.Log("Adding new playerGameObject object netId: " + playerGameObject.GetComponent().netId + " asset ID " + playerGameObject.GetComponent().assetId); FinishPlayerForConnection(conn, identity, playerGameObject); if (identity.localPlayerAuthority) @@ -655,11 +655,11 @@ internal static bool InternalAddPlayerForConnection(NetworkConnection conn, Game static bool SetupLocalPlayerForConnection(NetworkConnection conn, NetworkIdentity identity) { - if (LogFilter.Debug) { Debug.Log("NetworkServer SetupLocalPlayerForConnection netID:" + identity.netId); } + if (LogFilter.Debug) Debug.Log("NetworkServer SetupLocalPlayerForConnection netID:" + identity.netId); if (conn is ULocalConnectionToClient localConnection) { - if (LogFilter.Debug) { Debug.Log("NetworkServer AddPlayer handling ULocalConnectionToClient"); } + if (LogFilter.Debug) Debug.Log("NetworkServer AddPlayer handling ULocalConnectionToClient"); // Spawn this player for other players, instead of SpawnObject: if (identity.netId == 0) @@ -711,7 +711,7 @@ internal static bool InternalReplacePlayerForConnection(NetworkConnection conn, } //NOTE: there can be an existing player - if (LogFilter.Debug) { Debug.Log("NetworkServer ReplacePlayer"); } + if (LogFilter.Debug) Debug.Log("NetworkServer ReplacePlayer"); // is there already an owner that is a different object?? if (conn.playerController != null) @@ -727,14 +727,14 @@ internal static bool InternalReplacePlayerForConnection(NetworkConnection conn, //NOTE: DONT set connection ready. - if (LogFilter.Debug) { Debug.Log("NetworkServer ReplacePlayer setup local"); } + if (LogFilter.Debug) Debug.Log("NetworkServer ReplacePlayer setup local"); if (SetupLocalPlayerForConnection(conn, playerNetworkIdentity)) { return true; } - if (LogFilter.Debug) { Debug.Log("Replacing playerGameObject object netId: " + playerGameObject.GetComponent().netId + " asset ID " + playerGameObject.GetComponent().assetId); } + if (LogFilter.Debug) Debug.Log("Replacing playerGameObject object netId: " + playerGameObject.GetComponent().netId + " asset ID " + playerGameObject.GetComponent().assetId); FinishPlayerForConnection(conn, playerNetworkIdentity, playerGameObject); if (playerNetworkIdentity.localPlayerAuthority) @@ -757,25 +757,25 @@ static bool GetNetworkIdentity(GameObject go, out NetworkIdentity identity) public static void SetClientReady(NetworkConnection conn) { - if (LogFilter.Debug) { Debug.Log("SetClientReadyInternal for conn:" + conn.connectionId); } + if (LogFilter.Debug) Debug.Log("SetClientReadyInternal for conn:" + conn.connectionId); if (conn.isReady) { - if (LogFilter.Debug) { Debug.Log("SetClientReady conn " + conn.connectionId + " already ready"); } + if (LogFilter.Debug) Debug.Log("SetClientReady conn " + conn.connectionId + " already ready"); return; } if (conn.playerController == null) { // this is now allowed - if (LogFilter.Debug) { Debug.LogWarning("Ready with no player object"); } + if (LogFilter.Debug) Debug.LogWarning("Ready with no player object"); } conn.isReady = true; if (conn is ULocalConnectionToClient localConnection) { - if (LogFilter.Debug) { Debug.Log("NetworkServer Ready handling ULocalConnectionToClient"); } + if (LogFilter.Debug) Debug.Log("NetworkServer Ready handling ULocalConnectionToClient"); // Setup spawned objects for local player // Only handle the local objects for the first player (no need to redo it when doing more local players) @@ -793,7 +793,7 @@ public static void SetClientReady(NetworkConnection conn) } if (!identity.isClient) { - if (LogFilter.Debug) { Debug.Log("LocalClient.SetSpawnObject calling OnStartClient"); } + if (LogFilter.Debug) Debug.Log("LocalClient.SetSpawnObject calling OnStartClient"); identity.OnStartClient(); } } @@ -802,7 +802,7 @@ public static void SetClientReady(NetworkConnection conn) } // Spawn/update all current server objects - if (LogFilter.Debug) { Debug.Log("Spawning " + NetworkIdentity.spawned.Count + " objects for conn " + conn.connectionId); } + if (LogFilter.Debug) Debug.Log("Spawning " + NetworkIdentity.spawned.Count + " objects for conn " + conn.connectionId); conn.Send(new ObjectSpawnStartedMessage()); @@ -818,7 +818,7 @@ public static void SetClientReady(NetworkConnection conn) continue; } - if (LogFilter.Debug) { Debug.Log("Sending spawn message for current server objects name='" + identity.name + "' netId=" + identity.netId); } + if (LogFilter.Debug) Debug.Log("Sending spawn message for current server objects name='" + identity.name + "' netId=" + identity.netId); bool visible = identity.OnCheckObserver(conn); if (visible) @@ -864,7 +864,7 @@ internal static void InternalSetClientNotReady(NetworkConnection conn) { if (conn.isReady) { - if (LogFilter.Debug) { Debug.Log("PlayerNotReady " + conn); } + if (LogFilter.Debug) Debug.Log("PlayerNotReady " + conn); conn.isReady = false; conn.RemoveObservers(); @@ -875,7 +875,7 @@ internal static void InternalSetClientNotReady(NetworkConnection conn) // default ready handler. static void OnClientReadyMessage(NetworkConnection conn, ReadyMessage msg) { - if (LogFilter.Debug) { Debug.Log("Default handler for ready message from " + conn); } + if (LogFilter.Debug) Debug.Log("Default handler for ready message from " + conn); SetClientReady(conn); } @@ -914,7 +914,7 @@ static void OnCommandMessage(NetworkConnection conn, CommandMessage msg) } } - if (LogFilter.Debug) { Debug.Log("OnCommandMessage for netId=" + msg.netId + " conn=" + conn); } + if (LogFilter.Debug) Debug.Log("OnCommandMessage for netId=" + msg.netId + " conn=" + conn); identity.HandleCommand(msg.componentIndex, msg.functionHash, new NetworkReader(msg.payload)); } @@ -936,7 +936,7 @@ internal static void SpawnObject(GameObject obj) identity.OnStartServer(false); - if (LogFilter.Debug) { Debug.Log("SpawnObject instance ID " + identity.netId + " asset ID " + identity.assetId); } + if (LogFilter.Debug) Debug.Log("SpawnObject instance ID " + identity.netId + " asset ID " + identity.assetId); identity.RebuildObservers(true); //SendSpawnMessage(objNetworkIdentity, null); @@ -947,7 +947,7 @@ internal static void SendSpawnMessage(NetworkIdentity identity, NetworkConnectio if (identity.serverOnly) return; - if (LogFilter.Debug) { Debug.Log("Server SendSpawnMessage: name=" + identity.name + " sceneId=" + identity.sceneId + " netid=" + identity.netId); } // for easier debugging + if (LogFilter.Debug) Debug.Log("Server SendSpawnMessage: name=" + identity.name + " sceneId=" + identity.sceneId + " netid=" + identity.netId); // for easier debugging // 'identity' is a prefab that should be spawned if (identity.sceneId == 0) @@ -1128,7 +1128,7 @@ public static void Spawn(GameObject obj, Guid assetId) static void DestroyObject(NetworkIdentity identity, bool destroyServerObject) { - if (LogFilter.Debug) { Debug.Log("DestroyObject instance:" + identity.netId); } + if (LogFilter.Debug) Debug.Log("DestroyObject instance:" + identity.netId); NetworkIdentity.spawned.Remove(identity.netId); identity.clientAuthorityOwner?.RemoveOwnedObject(identity); @@ -1157,7 +1157,7 @@ public static void Destroy(GameObject obj) { if (obj == null) { - if (LogFilter.Debug) { Debug.Log("NetworkServer DestroyObject is null"); } + if (LogFilter.Debug) Debug.Log("NetworkServer DestroyObject is null"); return; } @@ -1171,7 +1171,7 @@ public static void UnSpawn(GameObject obj) { if (obj == null) { - if (LogFilter.Debug) { Debug.Log("NetworkServer UnspawnObject is null"); } + if (LogFilter.Debug) Debug.Log("NetworkServer UnspawnObject is null"); return; } @@ -1215,7 +1215,7 @@ public static bool SpawnObjects() { if (ValidateSceneObject(identity)) { - if (LogFilter.Debug) { Debug.Log("SpawnObjects sceneId:" + identity.sceneId + " name:" + identity.gameObject.name); } + if (LogFilter.Debug) Debug.Log("SpawnObjects sceneId:" + identity.sceneId + " name:" + identity.gameObject.name); identity.Reset(); identity.gameObject.SetActive(true); } From 335ed683a598185da9eeb30daaf4aeaf1177dc05 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:47:11 -0800 Subject: [PATCH 144/276] Remove one liner braces in NetworkManager. (#547) --- Assets/Mirror/Runtime/NetworkManager.cs | 58 ++++++++++++------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index d15f32be3..ba4e67502 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -115,13 +115,13 @@ void InitializeSingleton() Destroy(gameObject); return; } - if (LogFilter.Debug) { Debug.Log("NetworkManager created singleton (DontDestroyOnLoad)"); } + if (LogFilter.Debug) Debug.Log("NetworkManager created singleton (DontDestroyOnLoad)"); singleton = this; if (Application.isPlaying) DontDestroyOnLoad(gameObject); } else { - if (LogFilter.Debug) { Debug.Log("NetworkManager created singleton (ForScene)"); } + if (LogFilter.Debug) Debug.Log("NetworkManager created singleton (ForScene)"); singleton = this; } @@ -241,7 +241,7 @@ public bool StartServer() // this must be after Listen(), since that registers the default message handlers RegisterServerMessages(); - if (LogFilter.Debug) { Debug.Log("NetworkManager StartServer"); } + if (LogFilter.Debug) Debug.Log("NetworkManager StartServer"); isNetworkActive = true; // Only change scene if the requested online scene is not blank, and is not already loaded @@ -297,7 +297,7 @@ public NetworkClient StartClient() Debug.LogError("Must set the Network Address field in the manager"); return null; } - if (LogFilter.Debug) { Debug.Log("NetworkManager StartClient address:" + networkAddress); } + if (LogFilter.Debug) Debug.Log("NetworkManager StartClient address:" + networkAddress); client.Connect(networkAddress); @@ -320,7 +320,7 @@ public virtual NetworkClient StartHost() NetworkClient ConnectLocalClient() { - if (LogFilter.Debug) { Debug.Log("NetworkManager StartHost"); } + if (LogFilter.Debug) Debug.Log("NetworkManager StartHost"); networkAddress = "localhost"; client = ClientScene.ConnectLocalServer(); RegisterClientMessages(client); @@ -342,7 +342,7 @@ public void StopServer() OnStopServer(); - if (LogFilter.Debug) { Debug.Log("NetworkManager StopServer"); } + if (LogFilter.Debug) Debug.Log("NetworkManager StopServer"); isNetworkActive = false; NetworkServer.Shutdown(); if (!string.IsNullOrEmpty(offlineScene)) @@ -356,7 +356,7 @@ public void StopClient() { OnStopClient(); - if (LogFilter.Debug) { Debug.Log("NetworkManager StopClient"); } + if (LogFilter.Debug) Debug.Log("NetworkManager StopClient"); isNetworkActive = false; if (client != null) { @@ -382,7 +382,7 @@ public virtual void ServerChangeScene(string newSceneName) return; } - if (LogFilter.Debug) { Debug.Log("ServerChangeScene " + newSceneName); } + if (LogFilter.Debug) Debug.Log("ServerChangeScene " + newSceneName); NetworkServer.SetAllClientsNotReady(); networkSceneName = newSceneName; @@ -411,7 +411,7 @@ internal void ClientChangeScene(string newSceneName, bool forceReload) return; } - if (LogFilter.Debug) { Debug.Log("ClientChangeScene newSceneName:" + newSceneName + " networkSceneName:" + networkSceneName); } + if (LogFilter.Debug) Debug.Log("ClientChangeScene newSceneName:" + newSceneName + " networkSceneName:" + networkSceneName); if (newSceneName == networkSceneName) { @@ -427,7 +427,7 @@ internal void ClientChangeScene(string newSceneName, bool forceReload) // (client may be null after StopClient etc.) if (client != null) { - if (LogFilter.Debug) { Debug.Log("ClientChangeScene: pausing handlers while scene is loading to avoid data loss after scene was loaded."); } + if (LogFilter.Debug) Debug.Log("ClientChangeScene: pausing handlers while scene is loading to avoid data loss after scene was loaded."); Transport.activeTransport.enabled = false; } @@ -445,7 +445,7 @@ void FinishLoadScene() if (client != null) { // process queued messages that we received while loading the scene - if (LogFilter.Debug) { Debug.Log("FinishLoadScene: resuming handlers after scene was loading."); } + if (LogFilter.Debug) Debug.Log("FinishLoadScene: resuming handlers after scene was loading."); Transport.activeTransport.enabled = true; if (s_ClientReadyConnection != null) @@ -457,7 +457,7 @@ void FinishLoadScene() } else { - if (LogFilter.Debug) { Debug.Log("FinishLoadScene client is null"); } + if (LogFilter.Debug) Debug.Log("FinishLoadScene client is null"); } if (NetworkServer.active) @@ -477,7 +477,7 @@ internal static void UpdateScene() { if (singleton != null && s_LoadingSceneAsync != null && s_LoadingSceneAsync.isDone) { - if (LogFilter.Debug) { Debug.Log("ClientChangeScene done readyCon:" + s_ClientReadyConnection); } + if (LogFilter.Debug) Debug.Log("ClientChangeScene done readyCon:" + s_ClientReadyConnection); singleton.FinishLoadScene(); s_LoadingSceneAsync.allowSceneActivation = true; s_LoadingSceneAsync = null; @@ -487,18 +487,18 @@ internal static void UpdateScene() // virtual so that inheriting classes' OnDestroy() can call base.OnDestroy() too public virtual void OnDestroy() { - if (LogFilter.Debug) { Debug.Log("NetworkManager destroyed"); } + if (LogFilter.Debug) Debug.Log("NetworkManager destroyed"); } public static void RegisterStartPosition(Transform start) { - if (LogFilter.Debug) { Debug.Log("RegisterStartPosition: (" + start.gameObject.name + ") " + start.position); } + if (LogFilter.Debug) Debug.Log("RegisterStartPosition: (" + start.gameObject.name + ") " + start.position); startPositions.Add(start); } public static void UnRegisterStartPosition(Transform start) { - if (LogFilter.Debug) { Debug.Log("UnRegisterStartPosition: (" + start.gameObject.name + ") " + start.position); } + if (LogFilter.Debug) Debug.Log("UnRegisterStartPosition: (" + start.gameObject.name + ") " + start.position); startPositions.Remove(start); } @@ -525,7 +525,7 @@ public static void Shutdown() internal void OnServerConnectInternal(NetworkConnection conn, ConnectMessage connectMsg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerConnectInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerConnectInternal"); if (networkSceneName != "" && networkSceneName != offlineScene) { @@ -538,26 +538,26 @@ internal void OnServerConnectInternal(NetworkConnection conn, ConnectMessage con internal void OnServerDisconnectInternal(NetworkConnection conn, DisconnectMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerDisconnectInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerDisconnectInternal"); OnServerDisconnect(conn); } internal void OnServerReadyMessageInternal(NetworkConnection conn, ReadyMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerReadyMessageInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerReadyMessageInternal"); OnServerReady(conn); } internal void OnServerAddPlayerMessageInternal(NetworkConnection conn, AddPlayerMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerAddPlayerMessageInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerAddPlayerMessageInternal"); OnServerAddPlayer(conn, msg); } internal void OnServerRemovePlayerMessageInternal(NetworkConnection conn, RemovePlayerMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerRemovePlayerMessageInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerRemovePlayerMessageInternal"); if (conn.playerController != null) { @@ -568,7 +568,7 @@ internal void OnServerRemovePlayerMessageInternal(NetworkConnection conn, Remove internal void OnServerErrorInternal(NetworkConnection conn, ErrorMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnServerErrorInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerErrorInternal"); OnServerError(conn, msg.value); } @@ -576,7 +576,7 @@ internal void OnServerErrorInternal(NetworkConnection conn, ErrorMessage msg) internal void OnClientConnectInternal(NetworkConnection conn, ConnectMessage message) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientConnectInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnClientConnectInternal"); string loadedSceneName = SceneManager.GetActiveScene().name; if (string.IsNullOrEmpty(onlineScene) || onlineScene == offlineScene || loadedSceneName == onlineScene) @@ -593,13 +593,13 @@ internal void OnClientConnectInternal(NetworkConnection conn, ConnectMessage mes internal void OnClientDisconnectInternal(NetworkConnection conn, DisconnectMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientDisconnectInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnClientDisconnectInternal"); OnClientDisconnect(conn); } internal void OnClientNotReadyMessageInternal(NetworkConnection conn, NotReadyMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientNotReadyMessageInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnClientNotReadyMessageInternal"); ClientScene.ready = false; OnClientNotReady(conn); @@ -609,13 +609,13 @@ internal void OnClientNotReadyMessageInternal(NetworkConnection conn, NotReadyMe internal void OnClientErrorInternal(NetworkConnection conn, ErrorMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager:OnClientErrorInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager:OnClientErrorInternal"); OnClientError(conn, msg.value); } internal void OnClientSceneInternal(NetworkConnection conn, SceneMessage msg) { - if (LogFilter.Debug) { Debug.Log("NetworkManager.OnClientSceneInternal"); } + if (LogFilter.Debug) Debug.Log("NetworkManager.OnClientSceneInternal"); string newSceneName = msg.value; @@ -634,7 +634,7 @@ public virtual void OnServerConnect(NetworkConnection conn) public virtual void OnServerDisconnect(NetworkConnection conn) { NetworkServer.DestroyPlayerForConnection(conn); - if (LogFilter.Debug) { Debug.Log("OnServerDisconnect: Client disconnected."); } + if (LogFilter.Debug) Debug.Log("OnServerDisconnect: Client disconnected."); } public virtual void OnServerReady(NetworkConnection conn) @@ -642,7 +642,7 @@ public virtual void OnServerReady(NetworkConnection conn) if (conn.playerController == null) { // this is now allowed (was not for a while) - if (LogFilter.Debug) { Debug.Log("Ready with no player object"); } + if (LogFilter.Debug) Debug.Log("Ready with no player object"); } NetworkServer.SetClientReady(conn); } From 8141c44e50e1934b1e897e77aa1fe85448905340 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 3 Mar 2019 23:48:28 -0800 Subject: [PATCH 145/276] Brace crunching (#554) * Made bracing consistent in WeaverTests. * Made bracing consistent everywhere else. --- .../Mirror/Components/NetworkLobbyManager.cs | 28 +++++------ .../Mirror/Components/NetworkLobbyPlayer.cs | 6 +-- Assets/Mirror/Runtime/CustomAttributes.cs | 20 ++------ Assets/Mirror/Runtime/LocalConnections.cs | 4 +- Assets/Mirror/Runtime/Messages.cs | 46 ++++++------------- Assets/Mirror/Runtime/NetworkBehaviour.cs | 4 +- Assets/Mirror/Runtime/NetworkManager.cs | 22 +++------ Assets/Mirror/Runtime/SyncList.cs | 2 +- .../Runtime/Transport/LLAPITransport.cs | 4 +- .../Runtime/Transport/TelepathyTransport.cs | 4 +- Assets/Mirror/Tests/SyncListTest.cs | 2 +- Assets/Mirror/Tests/WeaverAssembler.cs | 6 +-- .../WeaverTests~/ClientGuardWrongClass.cs | 7 +-- .../WeaverTests~/ClientRpcCantBeStatic.cs | 4 +- .../WeaverTests~/ClientRpcStartsWithRpc.cs | 4 +- .../Tests/WeaverTests~/ClientRpcValid.cs | 4 +- .../Tests/WeaverTests~/CommandCantBeStatic.cs | 4 +- .../WeaverTests~/CommandStartsWithCmd.cs | 4 +- .../Mirror/Tests/WeaverTests~/CommandValid.cs | 4 +- .../Tests/WeaverTests~/GuardCmdWrongClass.cs | 22 ++------- .../Mirror/Tests/WeaverTests~/InvalidType.cs | 2 +- .../Mirror/Tests/WeaverTests~/JaggedArray.cs | 2 +- .../WeaverTests~/MessageMemberGeneric.cs | 2 +- .../WeaverTests~/MessageMemberInterface.cs | 2 +- .../Tests/WeaverTests~/MonoBehaviourClient.cs | 4 +- .../MonoBehaviourClientCallback.cs | 4 +- .../WeaverTests~/MonoBehaviourClientRpc.cs | 4 +- .../WeaverTests~/MonoBehaviourCommand.cs | 4 +- .../Tests/WeaverTests~/MonoBehaviourServer.cs | 4 +- .../MonoBehaviourServerCallback.cs | 4 +- .../WeaverTests~/MonoBehaviourTargetRpc.cs | 4 +- .../NetworkBehaviourAbstractBaseValid.cs | 4 +- .../NetworkBehaviourClientRpcDuplicateName.cs | 8 +--- .../NetworkBehaviourClientRpcGenericParam.cs | 4 +- .../NetworkBehaviourClientRpcParamAbstract.cs | 4 +- ...NetworkBehaviourClientRpcParamComponent.cs | 4 +- ...ehaviourClientRpcParamNetworkConnection.cs | 4 +- .../NetworkBehaviourClientRpcParamOptional.cs | 4 +- .../NetworkBehaviourClientRpcParamRef.cs | 4 +- .../NetworkBehaviourCmdDuplicateName.cs | 8 +--- .../NetworkBehaviourCmdGenericParam.cs | 4 +- .../NetworkBehaviourCmdParamAbstract.cs | 4 +- .../NetworkBehaviourCmdParamComponent.cs | 4 +- ...tworkBehaviourCmdParamNetworkConnection.cs | 4 +- .../NetworkBehaviourCmdParamOptional.cs | 4 +- .../NetworkBehaviourCmdParamRef.cs | 4 +- .../NetworkBehaviourTargetRpcDuplicateName.cs | 8 +--- .../NetworkBehaviourTargetRpcGenericParam.cs | 4 +- .../NetworkBehaviourTargetRpcParamAbstract.cs | 4 +- ...NetworkBehaviourTargetRpcParamComponent.cs | 4 +- ...ehaviourTargetRpcParamNetworkConnection.cs | 4 +- ...TargetRpcParamNetworkConnectionNotFirst.cs | 4 +- .../NetworkBehaviourTargetRpcParamOptional.cs | 4 +- .../NetworkBehaviourTargetRpcParamRef.cs | 4 +- .../WeaverTests~/ServerGuardWrongClass.cs | 7 +-- .../SyncListMissingParamlessCtor.cs | 2 +- .../SyncListStructGenericGeneric.cs | 2 +- .../SyncListStructMemberGeneric.cs | 2 +- .../SyncListStructMemberInterface.cs | 2 +- .../Tests/WeaverTests~/SyncListStructValid.cs | 2 +- .../Tests/WeaverTests~/SyncVarsSyncList.cs | 10 ++-- .../WeaverTests~/TargetRpcCantBeStatic.cs | 4 +- .../TargetRpcNetworkConnectionMissing.cs | 4 +- .../TargetRpcNetworkConnectionNotFirst.cs | 4 +- .../WeaverTests~/TargetRpcStartsWithTarget.cs | 4 +- .../Tests/WeaverTests~/TargetRpcValid.cs | 4 +- 66 files changed, 119 insertions(+), 269 deletions(-) diff --git a/Assets/Mirror/Components/NetworkLobbyManager.cs b/Assets/Mirror/Components/NetworkLobbyManager.cs index 9f654df60..be4214a9d 100644 --- a/Assets/Mirror/Components/NetworkLobbyManager.cs +++ b/Assets/Mirror/Components/NetworkLobbyManager.cs @@ -400,17 +400,17 @@ public override void OnClientSceneChanged(NetworkConnection conn) #region lobby server virtuals - public virtual void OnLobbyStartHost() { } + public virtual void OnLobbyStartHost() {} - public virtual void OnLobbyStopHost() { } + public virtual void OnLobbyStopHost() {} - public virtual void OnLobbyStartServer() { } + public virtual void OnLobbyStartServer() {} - public virtual void OnLobbyServerConnect(NetworkConnection conn) { } + public virtual void OnLobbyServerConnect(NetworkConnection conn) {} - public virtual void OnLobbyServerDisconnect(NetworkConnection conn) { } + public virtual void OnLobbyServerDisconnect(NetworkConnection conn) {} - public virtual void OnLobbyServerSceneChanged(string sceneName) { } + public virtual void OnLobbyServerSceneChanged(string sceneName) {} public virtual GameObject OnLobbyServerCreateLobbyPlayer(NetworkConnection conn) { @@ -438,22 +438,22 @@ public virtual void OnLobbyServerPlayersReady() #region lobby client virtuals - public virtual void OnLobbyClientEnter() { } + public virtual void OnLobbyClientEnter() {} - public virtual void OnLobbyClientExit() { } + public virtual void OnLobbyClientExit() {} - public virtual void OnLobbyClientConnect(NetworkConnection conn) { } + public virtual void OnLobbyClientConnect(NetworkConnection conn) {} - public virtual void OnLobbyClientDisconnect(NetworkConnection conn) { } + public virtual void OnLobbyClientDisconnect(NetworkConnection conn) {} - public virtual void OnLobbyStartClient(NetworkClient lobbyClient) { } + public virtual void OnLobbyStartClient(NetworkClient lobbyClient) {} - public virtual void OnLobbyStopClient() { } + public virtual void OnLobbyStopClient() {} - public virtual void OnLobbyClientSceneChanged(NetworkConnection conn) { } + public virtual void OnLobbyClientSceneChanged(NetworkConnection conn) {} // for users to handle adding a player failed on the server - public virtual void OnLobbyClientAddPlayerFailed() { } + public virtual void OnLobbyClientAddPlayerFailed() {} #endregion diff --git a/Assets/Mirror/Components/NetworkLobbyPlayer.cs b/Assets/Mirror/Components/NetworkLobbyPlayer.cs index 2d760ea64..718f65e8b 100644 --- a/Assets/Mirror/Components/NetworkLobbyPlayer.cs +++ b/Assets/Mirror/Components/NetworkLobbyPlayer.cs @@ -61,11 +61,11 @@ public void CmdSendLevelLoaded() #region lobby client virtuals - public virtual void OnClientEnterLobby() { } + public virtual void OnClientEnterLobby() {} - public virtual void OnClientExitLobby() { } + public virtual void OnClientExitLobby() {} - public virtual void OnClientReady(bool readyState) { } + public virtual void OnClientReady(bool readyState) {} #endregion diff --git a/Assets/Mirror/Runtime/CustomAttributes.cs b/Assets/Mirror/Runtime/CustomAttributes.cs index c742a1dea..6b3b1f45d 100644 --- a/Assets/Mirror/Runtime/CustomAttributes.cs +++ b/Assets/Mirror/Runtime/CustomAttributes.cs @@ -41,27 +41,17 @@ public class SyncEventAttribute : Attribute } [AttributeUsage(AttributeTargets.Method)] - public class ServerAttribute : Attribute - { - } + public class ServerAttribute : Attribute {} [AttributeUsage(AttributeTargets.Method)] - public class ServerCallbackAttribute : Attribute - { - } + public class ServerCallbackAttribute : Attribute {} [AttributeUsage(AttributeTargets.Method)] - public class ClientAttribute : Attribute - { - } + public class ClientAttribute : Attribute {} [AttributeUsage(AttributeTargets.Method)] - public class ClientCallbackAttribute : Attribute - { - } + public class ClientCallbackAttribute : Attribute {} // For Scene property Drawer - public class SceneAttribute : PropertyAttribute - { - } + public class SceneAttribute : PropertyAttribute {} } diff --git a/Assets/Mirror/Runtime/LocalConnections.cs b/Assets/Mirror/Runtime/LocalConnections.cs index 8ef48bdca..2fd36b367 100644 --- a/Assets/Mirror/Runtime/LocalConnections.cs +++ b/Assets/Mirror/Runtime/LocalConnections.cs @@ -24,9 +24,7 @@ internal override bool SendBytes(byte[] bytes, int channelId = Channels.DefaultR // send messages on this connection causes the server's handler function to be invoked directly. internal class ULocalConnectionToServer : NetworkConnection { - public ULocalConnectionToServer() : base("localServer") - { - } + public ULocalConnectionToServer() : base("localServer") {} internal override bool SendBytes(byte[] bytes, int channelId = Channels.DefaultReliable) { diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index 78261a908..8e17d06ea 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -20,9 +20,7 @@ public class StringMessage : MessageBase { public string value; - public StringMessage() - { - } + public StringMessage() {} public StringMessage(string v) { @@ -44,9 +42,7 @@ public class ByteMessage : MessageBase { public byte value; - public ByteMessage() - { - } + public ByteMessage() {} public ByteMessage(byte v) { @@ -68,9 +64,7 @@ public class BytesMessage : MessageBase { public byte[] value; - public BytesMessage() - { - } + public BytesMessage() {} public BytesMessage(byte[] v) { @@ -92,9 +86,7 @@ public class IntegerMessage : MessageBase { public int value; - public IntegerMessage() - { - } + public IntegerMessage() {} public IntegerMessage(int v) { @@ -116,9 +108,7 @@ public class DoubleMessage : MessageBase { public double value; - public DoubleMessage() - { - } + public DoubleMessage() {} public DoubleMessage(double v) { @@ -138,13 +128,9 @@ public override void Serialize(NetworkWriter writer) public class EmptyMessage : MessageBase { - public override void Deserialize(NetworkReader reader) - { - } + public override void Deserialize(NetworkReader reader) {} - public override void Serialize(NetworkWriter writer) - { - } + public override void Serialize(NetworkWriter writer) {} } // ---------- Public System Messages ------------------- @@ -159,17 +145,15 @@ public class AddPlayerMessage : BytesMessage {} public class RemovePlayerMessage : EmptyMessage {} - public class DisconnectMessage : EmptyMessage { } + public class DisconnectMessage : EmptyMessage {} - public class ConnectMessage : EmptyMessage { } + public class ConnectMessage : EmptyMessage {} public class SceneMessage : StringMessage { - public SceneMessage(string value) : base(value) - { - } + public SceneMessage(string value) : base(value) {} - public SceneMessage() { } + public SceneMessage() {} } // ---------- System Messages requried for code gen path ------------------- @@ -350,13 +334,9 @@ public override void Serialize(NetworkWriter writer) // to calculate RTT and synchronize time class NetworkPingMessage : DoubleMessage { - public NetworkPingMessage() - { - } + public NetworkPingMessage() {} - public NetworkPingMessage(double value) : base(value) - { - } + public NetworkPingMessage(double value) : base(value) {} } // The server responds with this message diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 3f5391ed0..497350d7a 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -557,9 +557,7 @@ public virtual bool OnRebuildObservers(HashSet observers, boo return false; } - public virtual void OnSetLocalVisibility(bool vis) - { - } + public virtual void OnSetLocalVisibility(bool vis) {} public virtual bool OnCheckObserver(NetworkConnection conn) { diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index ba4e67502..2aff0e128 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -627,9 +627,7 @@ internal void OnClientSceneInternal(NetworkConnection conn, SceneMessage msg) // ----------------------------- Server System Callbacks -------------------------------- - public virtual void OnServerConnect(NetworkConnection conn) - { - } + public virtual void OnServerConnect(NetworkConnection conn) {} public virtual void OnServerDisconnect(NetworkConnection conn) { @@ -713,13 +711,9 @@ public virtual void OnServerRemovePlayer(NetworkConnection conn, NetworkIdentity } } - public virtual void OnServerError(NetworkConnection conn, int errorCode) - { - } + public virtual void OnServerError(NetworkConnection conn, int errorCode) {} - public virtual void OnServerSceneChanged(string sceneName) - { - } + public virtual void OnServerSceneChanged(string sceneName) {} // ----------------------------- Client System Callbacks -------------------------------- @@ -741,17 +735,13 @@ public virtual void OnClientDisconnect(NetworkConnection conn) StopClient(); } - public virtual void OnClientError(NetworkConnection conn, int errorCode) - { - } + public virtual void OnClientError(NetworkConnection conn, int errorCode) {} - public virtual void OnClientNotReady(NetworkConnection conn) - { - } + public virtual void OnClientNotReady(NetworkConnection conn) {} // Called from ClientChangeScene immediately before SceneManager.LoadSceneAsync is executed // This allows client to do work / cleanup / prep before the scene changes. - public virtual void OnClientChangeScene(string newSceneName) { } + public virtual void OnClientChangeScene(string newSceneName) {} public virtual void OnClientSceneChanged(NetworkConnection conn) { diff --git a/Assets/Mirror/Runtime/SyncList.cs b/Assets/Mirror/Runtime/SyncList.cs index a207338b9..b13997b19 100644 --- a/Assets/Mirror/Runtime/SyncList.cs +++ b/Assets/Mirror/Runtime/SyncList.cs @@ -45,7 +45,7 @@ public class SyncListBool : SyncList // TODO rename back to SyncListStruct after 2019.1! public class SyncListSTRUCT : SyncList where T : struct { - protected override void SerializeItem(NetworkWriter writer, T item) { } + protected override void SerializeItem(NetworkWriter writer, T item) {} protected override T DeserializeItem(NetworkReader reader) => new T(); public T GetItem(int i) => base[i]; } diff --git a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs index 253862907..3f177ab51 100644 --- a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs +++ b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs @@ -163,8 +163,8 @@ public bool ProcessClientMessage() public void LateUpdate() { // process all messages - while (ProcessClientMessage()) { } - while (ProcessServerMessage()) { } + while (ProcessClientMessage()) {} + while (ProcessServerMessage()) {} } public string ClientGetAddress() diff --git a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs index 6a2e7685e..f873765cc 100644 --- a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs +++ b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs @@ -74,8 +74,8 @@ public void LateUpdate() // note: we need to check enabled in case we set it to false // when LateUpdate already started. // (https://github.com/vis2k/Mirror/pull/379) - while (enabled && ProcessClientMessage()) { } - while (enabled && ProcessServerMessage()) { } + while (enabled && ProcessClientMessage()) {} + while (enabled && ProcessServerMessage()) {} } // server diff --git a/Assets/Mirror/Tests/SyncListTest.cs b/Assets/Mirror/Tests/SyncListTest.cs index 255d13f4f..74057ae40 100644 --- a/Assets/Mirror/Tests/SyncListTest.cs +++ b/Assets/Mirror/Tests/SyncListTest.cs @@ -58,7 +58,7 @@ public void TestClear() { serverSyncList.Clear(); SerializeDeltaTo(serverSyncList, clientSyncList); - Assert.That(clientSyncList, Is.EquivalentTo(new string[] { })); + Assert.That(clientSyncList, Is.EquivalentTo(new string[] {})); } [Test] diff --git a/Assets/Mirror/Tests/WeaverAssembler.cs b/Assets/Mirror/Tests/WeaverAssembler.cs index 040ca6d61..61b830efa 100644 --- a/Assets/Mirror/Tests/WeaverAssembler.cs +++ b/Assets/Mirror/Tests/WeaverAssembler.cs @@ -94,21 +94,21 @@ public static void DeleteOutput() File.Delete(projPathFile); } - catch { } + catch {} try { File.Delete(Path.ChangeExtension(projPathFile, ".pdb")); } - catch { } + catch {} try { File.Delete(Path.ChangeExtension(projPathFile, ".dll.mdb")); } - catch { } + catch {} } // clear all settings except for referenced assemblies (which are cleared with ClearReferences) diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs index 95b5ef3c1..0f512c030 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs @@ -14,13 +14,10 @@ struct MyStruct float floatingpotato; double givemetwopotatoes; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; [Client] - public void CantClientGuardInThisClass() - { - - } + public void CantClientGuardInThisClass() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs index 3c2f8a6ac..5a36245bd 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - private static void RpcCantBeStatic() - { - } + private static void RpcCantBeStatic() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs index 8d12498ce..3c8bf88ad 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - private void DoesntStartWithRpc() - { - } + private void DoesntStartWithRpc() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs index 5c8883d1a..218a7437e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - private void RpcThatIsTotallyValid() - { - } + private void RpcThatIsTotallyValid() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs index 79092fc0b..083d3473a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - private static void CmdCantBeStatic() - { - } + private static void CmdCantBeStatic() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs index 4990f0f83..9935edd98 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - private void DoesntStartWithCmd() - { - } + private void DoesntStartWithCmd() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs index b0c4e4c97..eb89029f3 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - private void CmdThatIsTotallyValid() - { - } + private void CmdThatIsTotallyValid() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs index e786ba181..0f2582cdc 100644 --- a/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs @@ -14,31 +14,19 @@ struct MyStruct float floatingpotato; double givemetwopotatoes; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; [Server] - public void CantServerGuardInThisClass() - { - - } + public void CantServerGuardInThisClass() {} [ServerCallback] - public void CantServerCallbackGuardInThisClass() - { - - } + public void CantServerCallbackGuardInThisClass() {} [Client] - public void CantClientGuardInThisClass() - { - - } + public void CantClientGuardInThisClass() {} [ClientCallback] - public void CantClientCallbackGuardInThisClass() - { - - } + public void CantClientCallbackGuardInThisClass() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs index b904902f3..112e92a7a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs @@ -11,7 +11,7 @@ struct MyStruct public AccessViolationException violatedPotato; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } diff --git a/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs index 190029af5..0c33ba4f8 100644 --- a/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs +++ b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs @@ -14,7 +14,7 @@ struct MyStruct public float floatingpotato; public double givemetwopotatoes; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs index 82e69d6c2..da068ddbf 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs @@ -5,7 +5,7 @@ namespace MirrorTest { - class HasGeneric { } + class HasGeneric {} class PrefabClone : MessageBase { diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs index 1aab35624..74548223a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs @@ -5,7 +5,7 @@ namespace MirrorTest { - interface SuperCoolInterface { } + interface SuperCoolInterface {} class PrefabClone : MessageBase { diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs index 0344b89a0..0ff05f637 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [Client] - void ThisCantBeOutsideNetworkBehaviour() - { - } + void ThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs index 40fa186c6..7e67386ab 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [ClientCallback] - void ThisCantBeOutsideNetworkBehaviour() - { - } + void ThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs index 1b05dfd81..ec9d66593 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [ClientRpc] - void RpcThisCantBeOutsideNetworkBehaviour() - { - } + void RpcThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs index 0c6a2e591..5986568e7 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [Command] - void CmdThisCantBeOutsideNetworkBehaviour() - { - } + void CmdThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs index 870610d4e..1fc9eea37 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [Server] - void ThisCantBeOutsideNetworkBehaviour() - { - } + void ThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs index b3f19847e..a4d69aafb 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [ServerCallback] - void ThisCantBeOutsideNetworkBehaviour() - { - } + void ThisCantBeOutsideNetworkBehaviour() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs index a75cab0e5..ba860aa6d 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : MonoBehaviour { [TargetRpc] - void TargetThisCantBeOutsideNetworkBehaviour(NetworkConnection nc) - { - } + void TargetThisCantBeOutsideNetworkBehaviour(NetworkConnection nc) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs index d0989bd0d..6497e1a24 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs @@ -3,9 +3,7 @@ namespace MirrorTest { - public abstract class EntityBase : NetworkBehaviour - { - } + public abstract class EntityBase : NetworkBehaviour {} public class EntityConcrete : EntityBase { diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs index fc4c27099..54d298139 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs @@ -8,13 +8,9 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - public void RpcCantHaveSameName(int abc) - { - } + public void RpcCantHaveSameName(int abc) {} [ClientRpc] - public void RpcCantHaveSameName(int abc, int def) - { - } + public void RpcCantHaveSameName(int abc, int def) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs index 699ff29fa..3f407089a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - public void RpcCantHaveGeneric() - { - } + public void RpcCantHaveGeneric() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs index 0e24a5856..08d80004e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs @@ -12,8 +12,6 @@ public abstract class AbstractClass } [ClientRpc] - public void RpcCantHaveParamAbstract(AbstractClass monkeys) - { - } + public void RpcCantHaveParamAbstract(AbstractClass monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs index b84ef372d..356403aca 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs @@ -12,8 +12,6 @@ public class ComponentClass : UnityEngine.Component } [ClientRpc] - public void RpcCantHaveParamComponent(ComponentClass monkeyComp) - { - } + public void RpcCantHaveParamComponent(ComponentClass monkeyComp) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs index 672b9717e..ae9cff4e7 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs @@ -5,8 +5,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - public void RpcCantHaveParamOptional(NetworkConnection monkeyCon) - { - } + public void RpcCantHaveParamOptional(NetworkConnection monkeyCon) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs index d4bb4421b..c0fea08c2 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - public void RpcCantHaveParamOptional(int monkeys = 12) - { - } + public void RpcCantHaveParamOptional(int monkeys = 12) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs index 5de6327d2..c64365598 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [ClientRpc] - public void RpcCantHaveParamRef(ref int monkeys) - { - } + public void RpcCantHaveParamRef(ref int monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs index c8b013057..36d576a12 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs @@ -8,13 +8,9 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - public void CmdCantHaveSameName(int abc) - { - } + public void CmdCantHaveSameName(int abc) {} [Command] - public void CmdCantHaveSameName(int abc, int def) - { - } + public void CmdCantHaveSameName(int abc, int def) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs index e779368f6..dbea2fd5f 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - public void CmdCantHaveGeneric() - { - } + public void CmdCantHaveGeneric() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs index ca473e861..ebdbdeb22 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs @@ -12,8 +12,6 @@ public abstract class AbstractClass } [Command] - public void CmdCantHaveParamAbstract(AbstractClass monkeys) - { - } + public void CmdCantHaveParamAbstract(AbstractClass monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs index d2ddb2fbb..daf33b24b 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs @@ -12,8 +12,6 @@ public class ComponentClass : UnityEngine.Component } [Command] - public void CmdCantHaveParamComponent(ComponentClass monkeyComp) - { - } + public void CmdCantHaveParamComponent(ComponentClass monkeyComp) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs index 8171963bc..96ff843a4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs @@ -5,8 +5,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - public void CmdCantHaveParamOptional(NetworkConnection monkeyCon) - { - } + public void CmdCantHaveParamOptional(NetworkConnection monkeyCon) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs index 99a2ca753..78a26c26c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - public void CmdCantHaveParamOptional(int monkeys = 12) - { - } + public void CmdCantHaveParamOptional(int monkeys = 12) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs index 34613781c..2be25b29e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [Command] - public void CmdCantHaveParamRef(ref int monkeys) - { - } + public void CmdCantHaveParamRef(ref int monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs index 6e4ef4e8d..be40e9a22 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs @@ -8,13 +8,9 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc) - { - } + public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc) {} [TargetRpc] - public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc, int def) - { - } + public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc, int def) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs index 6ae18e0ce..2f1818e84 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveGeneric() - { - } + public void TargetRpcCantHaveGeneric() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs index 913de7f01..bcf675b36 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs @@ -12,8 +12,6 @@ public abstract class AbstractClass } [TargetRpc] - public void TargetRpcCantHaveParamAbstract(NetworkConnection monkeyCon, AbstractClass monkeys) - { - } + public void TargetRpcCantHaveParamAbstract(NetworkConnection monkeyCon, AbstractClass monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs index ff3c74535..38e4c1240 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs @@ -12,8 +12,6 @@ public class ComponentClass : UnityEngine.Component } [TargetRpc] - public void TargetRpcCantHaveParamComponent(NetworkConnection monkeyCon, ComponentClass monkeyComp) - { - } + public void TargetRpcCantHaveParamComponent(NetworkConnection monkeyCon, ComponentClass monkeyComp) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs index ea774251f..78285f0f4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs @@ -5,8 +5,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon) - { - } + public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs index 05d9d6f3e..08b0f55c0 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs @@ -5,8 +5,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveParamOptional(int abc, NetworkConnection monkeyCon) - { - } + public void TargetRpcCantHaveParamOptional(int abc, NetworkConnection monkeyCon) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs index beddef411..ea0d6e98a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon, int monkeys = 12) - { - } + public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon, int monkeys = 12) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs index 154f6d270..bf246b072 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs @@ -7,8 +7,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - public void TargetRpcCantHaveParamRef(NetworkConnection monkeyCon, ref int monkeys) - { - } + public void TargetRpcCantHaveParamRef(NetworkConnection monkeyCon, ref int monkeys) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs index 0611c12eb..ed53c8025 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs @@ -14,13 +14,10 @@ struct MyStruct float floatingpotato; double givemetwopotatoes; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; [Server] - public void CantServerGuardInThisClass() - { - - } + public void CantServerGuardInThisClass() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs index e54bd509d..dfd98aaf6 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs @@ -8,7 +8,7 @@ class MirrorTestPlayer : NetworkBehaviour public class SyncListString2 : SyncList { public SyncListString2(int phooey) {} - protected override void SerializeItem(NetworkWriter w, string item) { } + protected override void SerializeItem(NetworkWriter w, string item) {} protected override string DeserializeItem(NetworkReader r) { return ""; } } diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs index 8d49bc08b..559306a83 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs @@ -20,7 +20,7 @@ struct MyStruct MyGenericStruct potato; } - class MyStructClass : SyncListSTRUCT> { }; + class MyStructClass : SyncListSTRUCT> {}; MyStructClass harpseals; } diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs index 4e2c91de9..00ceb5c9c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs @@ -20,7 +20,7 @@ struct MyStruct public MyGenericStruct potato; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs index fad3887bc..4e3544c28 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs @@ -15,7 +15,7 @@ struct MyStruct public IPotato potato; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs index 73f26d667..be44e81b6 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs @@ -11,7 +11,7 @@ struct MyStruct float floatingpotato; double givemetwopotatoes; } - class MyStructClass : SyncListSTRUCT { }; + class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs index 6f205415d..f75cabe65 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs @@ -6,11 +6,11 @@ namespace MirrorTest public class SyncObjImplementer : SyncObject { public bool IsDirty { get; } - public void Flush() { } - public void OnSerializeAll(NetworkWriter writer) { } - public void OnSerializeDelta(NetworkWriter writer) { } - public void OnDeserializeAll(NetworkReader reader) { } - public void OnDeserializeDelta(NetworkReader reader) { } + public void Flush() {} + public void OnSerializeAll(NetworkWriter writer) {} + public void OnSerializeDelta(NetworkWriter writer) {} + public void OnDeserializeAll(NetworkReader reader) {} + public void OnDeserializeDelta(NetworkReader reader) {} } class MirrorTestPlayer : NetworkBehaviour diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs index f529be369..1257e8c7c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - private static void TargetCantBeStatic(NetworkConnection nc) - { - } + private static void TargetCantBeStatic(NetworkConnection nc) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs index ecd81184f..a18289fed 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - private void TargetRpcMethod() - { - } + private void TargetRpcMethod() {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs index d587119df..6d46a3f4c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - private void TargetRpcMethod(int potatoesRcool, NetworkConnection nc) - { - } + private void TargetRpcMethod(int potatoesRcool, NetworkConnection nc) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs index d080e95c1..83f1ce1e9 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - private void DoesntStartWithTarget(NetworkConnection nc) - { - } + private void DoesntStartWithTarget(NetworkConnection nc) {} } } \ No newline at end of file diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs index 47eb9e9bd..0f12f63e4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs @@ -8,8 +8,6 @@ namespace MirrorTest class MirrorTestPlayer : NetworkBehaviour { [TargetRpc] - private void TargetThatIsTotallyValid(NetworkConnection nc) - { - } + private void TargetThatIsTotallyValid(NetworkConnection nc) {} } } \ No newline at end of file From c1179fbd0d51ce3cd81ab53783ec9153f33417e3 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Mon, 4 Mar 2019 00:56:59 -0800 Subject: [PATCH 146/276] Renamed UNetInvokeType to MirrorInvokeType. (#553) --- Assets/Mirror/Runtime/NetworkBehaviour.cs | 20 ++++++++++---------- Assets/Mirror/Runtime/NetworkIdentity.cs | 8 ++++---- Assets/Mirror/Runtime/UNetwork.cs | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 497350d7a..384d8c340 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -110,7 +110,7 @@ protected void SendCommandInternal(Type invokeClass, string cmdName, NetworkWrit [EditorBrowsable(EditorBrowsableState.Never)] public virtual bool InvokeCommand(int cmdHash, NetworkReader reader) { - return InvokeHandlerDelegate(cmdHash, UNetInvokeType.Command, reader); + return InvokeHandlerDelegate(cmdHash, MirrorInvokeType.Command, reader); } // ----------------------------- Client RPCs -------------------------------- @@ -180,7 +180,7 @@ protected void SendTargetRPCInternal(NetworkConnection conn, Type invokeClass, s [EditorBrowsable(EditorBrowsableState.Never)] public virtual bool InvokeRPC(int rpcHash, NetworkReader reader) { - return InvokeHandlerDelegate(rpcHash, UNetInvokeType.ClientRpc, reader); + return InvokeHandlerDelegate(rpcHash, MirrorInvokeType.ClientRpc, reader); } // ----------------------------- Sync Events -------------------------------- @@ -209,7 +209,7 @@ protected void SendEventInternal(Type invokeClass, string eventName, NetworkWrit [EditorBrowsable(EditorBrowsableState.Never)] public virtual bool InvokeSyncEvent(int eventHash, NetworkReader reader) { - return InvokeHandlerDelegate(eventHash, UNetInvokeType.SyncEvent, reader); + return InvokeHandlerDelegate(eventHash, MirrorInvokeType.SyncEvent, reader); } // ----------------------------- Code Gen Path Helpers -------------------------------- @@ -218,7 +218,7 @@ public virtual bool InvokeSyncEvent(int eventHash, NetworkReader reader) protected class Invoker { - public UNetInvokeType invokeType; + public MirrorInvokeType invokeType; public Type invokeClass; public CmdDelegate invokeFunction; } @@ -227,7 +227,7 @@ protected class Invoker // helper function register a Command/Rpc/SyncEvent delegate [EditorBrowsable(EditorBrowsableState.Never)] - protected static void RegisterDelegate(Type invokeClass, string cmdName, UNetInvokeType invokerType, CmdDelegate func) + protected static void RegisterDelegate(Type invokeClass, string cmdName, MirrorInvokeType invokerType, CmdDelegate func) { int cmdHash = (invokeClass + ":" + cmdName).GetStableHashCode(); // type+func so Inventory.RpcUse != Equipment.RpcUse @@ -256,22 +256,22 @@ protected static void RegisterDelegate(Type invokeClass, string cmdName, UNetInv [EditorBrowsable(EditorBrowsableState.Never)] protected static void RegisterCommandDelegate(Type invokeClass, string cmdName, CmdDelegate func) { - RegisterDelegate(invokeClass, cmdName, UNetInvokeType.Command, func); + RegisterDelegate(invokeClass, cmdName, MirrorInvokeType.Command, func); } [EditorBrowsable(EditorBrowsableState.Never)] protected static void RegisterRpcDelegate(Type invokeClass, string rpcName, CmdDelegate func) { - RegisterDelegate(invokeClass, rpcName, UNetInvokeType.ClientRpc, func); + RegisterDelegate(invokeClass, rpcName, MirrorInvokeType.ClientRpc, func); } [EditorBrowsable(EditorBrowsableState.Never)] protected static void RegisterEventDelegate(Type invokeClass, string eventName, CmdDelegate func) { - RegisterDelegate(invokeClass, eventName, UNetInvokeType.SyncEvent, func); + RegisterDelegate(invokeClass, eventName, MirrorInvokeType.SyncEvent, func); } - static bool GetInvokerForHash(int cmdHash, UNetInvokeType invokeType, out Invoker invoker) + static bool GetInvokerForHash(int cmdHash, MirrorInvokeType invokeType, out Invoker invoker) { if (s_CmdHandlerDelegates.TryGetValue(cmdHash, out invoker) && invoker != null && @@ -288,7 +288,7 @@ static bool GetInvokerForHash(int cmdHash, UNetInvokeType invokeType, out Invoke } // InvokeCmd/Rpc/SyncEventDelegate can all use the same function here - internal bool InvokeHandlerDelegate(int cmdHash, UNetInvokeType invokeType, NetworkReader reader) + internal bool InvokeHandlerDelegate(int cmdHash, MirrorInvokeType invokeType, NetworkReader reader) { if (GetInvokerForHash(cmdHash, invokeType, out Invoker invoker) && invoker.invokeClass.IsInstanceOfType(this)) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 1ed98dcb1..ffdebc312 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -526,7 +526,7 @@ internal void HandleClientAuthority(bool authority) } // helper function to handle SyncEvent/Command/Rpc - internal void HandleRemoteCall(int componentIndex, int functionHash, UNetInvokeType invokeType, NetworkReader reader) + internal void HandleRemoteCall(int componentIndex, int functionHash, MirrorInvokeType invokeType, NetworkReader reader) { if (gameObject == null) { @@ -552,19 +552,19 @@ internal void HandleRemoteCall(int componentIndex, int functionHash, UNetInvokeT // happens on client internal void HandleSyncEvent(int componentIndex, int eventHash, NetworkReader reader) { - HandleRemoteCall(componentIndex, eventHash, UNetInvokeType.SyncEvent, reader); + HandleRemoteCall(componentIndex, eventHash, MirrorInvokeType.SyncEvent, reader); } // happens on server internal void HandleCommand(int componentIndex, int cmdHash, NetworkReader reader) { - HandleRemoteCall(componentIndex, cmdHash, UNetInvokeType.Command, reader); + HandleRemoteCall(componentIndex, cmdHash, MirrorInvokeType.Command, reader); } // happens on client internal void HandleRPC(int componentIndex, int rpcHash, NetworkReader reader) { - HandleRemoteCall(componentIndex, rpcHash, UNetInvokeType.ClientRpc, reader); + HandleRemoteCall(componentIndex, rpcHash, MirrorInvokeType.ClientRpc, reader); } internal void OnUpdateVars(NetworkReader reader, bool initialState) diff --git a/Assets/Mirror/Runtime/UNetwork.cs b/Assets/Mirror/Runtime/UNetwork.cs index 718bd5c69..a4b81414e 100644 --- a/Assets/Mirror/Runtime/UNetwork.cs +++ b/Assets/Mirror/Runtime/UNetwork.cs @@ -13,7 +13,7 @@ namespace Mirror public delegate void UnSpawnDelegate(GameObject spawned); // invoke type for Cmd/Rpc/SyncEvents - public enum UNetInvokeType + public enum MirrorInvokeType { Command, ClientRpc, From 15c3991905caf5ac63f1a225c03203df3591e9a2 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Mon, 4 Mar 2019 00:57:27 -0800 Subject: [PATCH 147/276] Removed braces from everything else. (#551) --- Assets/Mirror/Editor/NetworkScenePostProcess.cs | 2 +- Assets/Mirror/Runtime/NetworkBehaviour.cs | 10 +++++----- Assets/Mirror/Runtime/NetworkClient.cs | 8 ++++---- Assets/Mirror/Runtime/NetworkConnection.cs | 4 ++-- Assets/Mirror/Runtime/NetworkReader.cs | 6 +++--- Assets/Mirror/Runtime/NetworkTime.cs | 2 +- .../Tests/WeaverTests~/SyncListMissingParamlessCtor.cs | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Assets/Mirror/Editor/NetworkScenePostProcess.cs b/Assets/Mirror/Editor/NetworkScenePostProcess.cs index 2d8878206..6e0edfdff 100644 --- a/Assets/Mirror/Editor/NetworkScenePostProcess.cs +++ b/Assets/Mirror/Editor/NetworkScenePostProcess.cs @@ -183,7 +183,7 @@ public static void OnPostProcessScene() uint offset = (uint)identity.gameObject.scene.buildIndex * offsetPerScene; identity.ForceSceneId(offset + nextSceneId++); - if (LogFilter.Debug) { Debug.Log("PostProcess sceneid assigned: name=" + identity.name + " scene=" + identity.gameObject.scene.name + " sceneid=" + identity.sceneId); } + if (LogFilter.Debug) Debug.Log("PostProcess sceneid assigned: name=" + identity.name + " scene=" + identity.gameObject.scene.name + " sceneid=" + identity.sceneId); // disable it AFTER assigning the sceneId. // -> this way NetworkIdentity.OnDisable adds itself to the diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 384d8c340..463b5c5bd 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -250,7 +250,7 @@ protected static void RegisterDelegate(Type invokeClass, string cmdName, MirrorI invokeFunction = func }; s_CmdHandlerDelegates[cmdHash] = invoker; - if (LogFilter.Debug) { Debug.Log("RegisterDelegate hash:" + cmdHash + " invokerType: " + invokerType + " method:" + func.GetMethodName()); } + if (LogFilter.Debug) Debug.Log("RegisterDelegate hash:" + cmdHash + " invokerType: " + invokerType + " method:" + func.GetMethodName()); } [EditorBrowsable(EditorBrowsableState.Never)] @@ -283,7 +283,7 @@ static bool GetInvokerForHash(int cmdHash, MirrorInvokeType invokeType, out Invo // debug message if not found, or null, or mismatched type // (no need to throw an error, an attacker might just be trying to // call an cmd with an rpc's hash) - if (LogFilter.Debug) { Debug.Log("GetInvokerForHash hash:" + cmdHash + " not found"); } + if (LogFilter.Debug) Debug.Log("GetInvokerForHash hash:" + cmdHash + " not found"); return false; } @@ -325,7 +325,7 @@ protected void SetSyncVarGameObject(GameObject newGameObject, ref GameObject gam // netId changed? if (newNetId != netIdField) { - if (LogFilter.Debug) { Debug.Log("SetSyncVar GameObject " + GetType().Name + " bit [" + dirtyBit + "] netfieldId:" + netIdField + "->" + newNetId); } + if (LogFilter.Debug) Debug.Log("SetSyncVar GameObject " + GetType().Name + " bit [" + dirtyBit + "] netfieldId:" + netIdField + "->" + newNetId); SetDirtyBit(dirtyBit); gameObjectField = newGameObject; // assign new one on the server, and in case we ever need it on client too netIdField = newNetId; @@ -370,7 +370,7 @@ protected void SetSyncVarNetworkIdentity(NetworkIdentity newIdentity, ref Networ // netId changed? if (newNetId != netIdField) { - if (LogFilter.Debug) { Debug.Log("SetSyncVarNetworkIdentity NetworkIdentity " + GetType().Name + " bit [" + dirtyBit + "] netIdField:" + netIdField + "->" + newNetId); } + if (LogFilter.Debug) Debug.Log("SetSyncVarNetworkIdentity NetworkIdentity " + GetType().Name + " bit [" + dirtyBit + "] netIdField:" + netIdField + "->" + newNetId); SetDirtyBit(dirtyBit); netIdField = newNetId; identityField = newIdentity; // assign new one on the server, and in case we ever need it on client too @@ -401,7 +401,7 @@ protected void SetSyncVar(T value, ref T fieldValue, ulong dirtyBit) if ((value == null && fieldValue != null) || (value != null && !value.Equals(fieldValue))) { - if (LogFilter.Debug) { Debug.Log("SetSyncVar " + GetType().Name + " bit [" + dirtyBit + "] " + fieldValue + "->" + value); } + if (LogFilter.Debug) Debug.Log("SetSyncVar " + GetType().Name + " bit [" + dirtyBit + "] " + fieldValue + "->" + value); SetDirtyBit(dirtyBit); fieldValue = value; } diff --git a/Assets/Mirror/Runtime/NetworkClient.cs b/Assets/Mirror/Runtime/NetworkClient.cs index 95e9d0101..4967a239a 100644 --- a/Assets/Mirror/Runtime/NetworkClient.cs +++ b/Assets/Mirror/Runtime/NetworkClient.cs @@ -35,7 +35,7 @@ protected enum ConnectState public NetworkClient() { - if (LogFilter.Debug) { Debug.Log("Client created version " + Version.Current); } + if (LogFilter.Debug) Debug.Log("Client created version " + Version.Current); if (singleton != null) { @@ -52,7 +52,7 @@ internal void SetHandlers(NetworkConnection conn) public void Connect(string ip) { - if (LogFilter.Debug) { Debug.Log("Client Connect: " + ip); } + if (LogFilter.Debug) Debug.Log("Client Connect: " + ip); active = true; RegisterSystemHandlers(false); @@ -272,7 +272,7 @@ public void RegisterHandler(int msgType, NetworkMessageDelegate handler) { if (handlers.ContainsKey(msgType)) { - if (LogFilter.Debug) { Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } + if (LogFilter.Debug) Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } handlers[msgType] = handler; } @@ -288,7 +288,7 @@ public void RegisterHandler(MsgType msgType, NetworkMessageDelegate handler) int msgType = MessagePacker.GetId(); if (handlers.ContainsKey(msgType)) { - if (LogFilter.Debug) { Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } + if (LogFilter.Debug) Debug.Log("NetworkClient.RegisterHandler replacing " + msgType); } handlers[msgType] = (networkMessage) => { diff --git a/Assets/Mirror/Runtime/NetworkConnection.cs b/Assets/Mirror/Runtime/NetworkConnection.cs index adce23d83..15a4bbeaf 100644 --- a/Assets/Mirror/Runtime/NetworkConnection.cs +++ b/Assets/Mirror/Runtime/NetworkConnection.cs @@ -105,7 +105,7 @@ public void RegisterHandler(short msgType, NetworkMessageDelegate handler) { if (m_MessageHandlers.ContainsKey(msgType)) { - if (LogFilter.Debug) { Debug.Log("NetworkConnection.RegisterHandler replacing " + msgType); } + if (LogFilter.Debug) Debug.Log("NetworkConnection.RegisterHandler replacing " + msgType); } m_MessageHandlers[msgType] = handler; } @@ -144,7 +144,7 @@ public virtual bool Send(T msg, int channelId = Channels.DefaultReliable) whe // the client. they would be detected as a message. send messages instead. internal virtual bool SendBytes( byte[] bytes, int channelId = Channels.DefaultReliable) { - if (logNetworkMessages) { Debug.Log("ConnectionSend con:" + connectionId + " bytes:" + BitConverter.ToString(bytes)); } + if (logNetworkMessages) Debug.Log("ConnectionSend con:" + connectionId + " bytes:" + BitConverter.ToString(bytes)); if (bytes.Length > Transport.activeTransport.GetMaxPacketSize(channelId)) { diff --git a/Assets/Mirror/Runtime/NetworkReader.cs b/Assets/Mirror/Runtime/NetworkReader.cs index 7dd07849c..c68ccd366 100644 --- a/Assets/Mirror/Runtime/NetworkReader.cs +++ b/Assets/Mirror/Runtime/NetworkReader.cs @@ -210,7 +210,7 @@ public Transform ReadTransform() return identity.transform; } - if (LogFilter.Debug) { Debug.Log("ReadTransform netId:" + netId + " not found in spawned"); } + if (LogFilter.Debug) Debug.Log("ReadTransform netId:" + netId + " not found in spawned"); return null; } @@ -227,7 +227,7 @@ public GameObject ReadGameObject() return identity.gameObject; } - if (LogFilter.Debug) { Debug.Log("ReadGameObject netId:" + netId + " not found in spawned"); } + if (LogFilter.Debug) Debug.Log("ReadGameObject netId:" + netId + " not found in spawned"); return null; } @@ -244,7 +244,7 @@ public NetworkIdentity ReadNetworkIdentity() return identity; } - if (LogFilter.Debug) { Debug.Log("ReadNetworkIdentity netId:" + netId + " not found in spawned"); } + if (LogFilter.Debug) Debug.Log("ReadNetworkIdentity netId:" + netId + " not found in spawned"); return null; } diff --git a/Assets/Mirror/Runtime/NetworkTime.cs b/Assets/Mirror/Runtime/NetworkTime.cs index 1b899e5eb..3f04e45fb 100644 --- a/Assets/Mirror/Runtime/NetworkTime.cs +++ b/Assets/Mirror/Runtime/NetworkTime.cs @@ -65,7 +65,7 @@ internal static void UpdateClient(NetworkClient networkClient) // and time from the server internal static void OnServerPing(NetworkConnection conn, NetworkPingMessage msg) { - if (LogFilter.Debug) { Debug.Log("OnPingServerMessage conn=" + conn); } + if (LogFilter.Debug) Debug.Log("OnPingServerMessage conn=" + conn); NetworkPongMessage pongMsg = new NetworkPongMessage { diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs index dfd98aaf6..f3b26fab9 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs @@ -9,7 +9,7 @@ public class SyncListString2 : SyncList { public SyncListString2(int phooey) {} protected override void SerializeItem(NetworkWriter w, string item) {} - protected override string DeserializeItem(NetworkReader r) { return ""; } + protected override string DeserializeItem(NetworkReader r) => ""; } public SyncListString2 Foo; From f324c0df943437ec27ea1bf9d757b34d0a123a31 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Mon, 4 Mar 2019 01:02:00 -0800 Subject: [PATCH 148/276] Removed SetInstanceId by making netId setter internal. (#510) * Removed SetInstanceId by making netId setter internal. * Split isServer into multiple lines as per vis' suggestion. --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 68ba460a6..22b59b0b6 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -356,7 +356,7 @@ static void ApplySpawnPayload(NetworkIdentity identity, Vector3 position, Quater identity.OnUpdateVars(payloadReader, true); } - identity.SetNetworkInstanceId(netId); + identity.netId = netId; NetworkIdentity.spawned[netId] = identity; // objects spawned as part of initial state are started on a second pass diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index ffdebc312..c2ff15fad 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -33,14 +33,19 @@ public sealed class NetworkIdentity : MonoBehaviour // properties public bool isClient { get; internal set; } - public bool isServer => m_IsServer && NetworkServer.active; // dont return true if server stopped. + // dont return true if server stopped. + public bool isServer + { + get => m_IsServer && NetworkServer.active && netId != 0; + internal set => m_IsServer = value; + } public bool isLocalPlayer { get; private set; } public bool hasAuthority { get; private set; } // public Dictionary observers; - public uint netId { get; private set; } + public uint netId { get; internal set; } public uint sceneId => m_SceneId; public bool serverOnly { get { return m_ServerOnly; } set { m_ServerOnly = value; } } public bool localPlayerAuthority { get { return m_LocalPlayerAuthority; } set { m_LocalPlayerAuthority = value; } } @@ -122,16 +127,6 @@ internal void ForceAuthority(bool authority) public delegate void ClientAuthorityCallback(NetworkConnection conn, NetworkIdentity identity, bool authorityState); public static ClientAuthorityCallback clientAuthorityCallback; - // only used during spawning on clients to set the identity. - internal void SetNetworkInstanceId(uint newNetId) - { - netId = newNetId; - if (newNetId == 0) - { - m_IsServer = false; - } - } - // only used when fixing duplicate scene IDs during post-processing public void ForceSceneId(uint newSceneId) => m_SceneId = newSceneId; From f6d89c763f172c38cdf41c84a277e286bc3c790d Mon Sep 17 00:00:00 2001 From: rodolphito Date: Mon, 4 Mar 2019 01:04:54 -0800 Subject: [PATCH 149/276] Removed comment divider thingies and used regions where applicable. Reordered a bit of code to make the regions make sense. (#532) --- Assets/Mirror/Runtime/ClientScene.cs | 2 +- Assets/Mirror/Runtime/NetworkIdentity.cs | 6 --- .../Runtime/Transport/LLAPITransport.cs | 45 ++++++++++--------- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/Assets/Mirror/Runtime/ClientScene.cs b/Assets/Mirror/Runtime/ClientScene.cs index 22b59b0b6..1ab656d0b 100644 --- a/Assets/Mirror/Runtime/ClientScene.cs +++ b/Assets/Mirror/Runtime/ClientScene.cs @@ -186,7 +186,7 @@ internal static NetworkIdentity SpawnSceneObject(uint sceneId) return null; } - // spawn handlers and prefabs ////////////////////////////////////////// + // spawn handlers and prefabs internal static bool GetPrefab(Guid assetId, out GameObject prefab) { prefab = null; diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index c2ff15fad..502b9c321 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -357,8 +357,6 @@ internal bool OnCheckObserver(NetworkConnection conn) return true; } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // vis2k: readstring bug prevention: https://issuetracker.unity3d.com/issues/unet-networkwriter-dot-write-causing-readstring-slash-readbytes-out-of-range-errors-in-clients // -> OnSerialize writes length,componentData,length,componentData,... // -> OnDeserialize carefully extracts each data, then deserializes each component with separate readers @@ -458,8 +456,6 @@ private ulong GetDirtyMask(NetworkBehaviour[] components, bool initialState) return dirtyComponentsMask; } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - internal void OnDeserializeSafely(NetworkBehaviour comp, NetworkReader reader, bool initialState) { // read header as 4 bytes @@ -506,8 +502,6 @@ internal void OnDeserializeAllSafely(NetworkBehaviour[] components, NetworkReade } } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // happens on client internal void HandleClientAuthority(bool authority) { diff --git a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs index 3f177ab51..3f773d18d 100644 --- a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs +++ b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs @@ -83,7 +83,7 @@ void Awake() Debug.Log("LLAPITransport initialized!"); } - // client ////////////////////////////////////////////////////////////// + #region client public override bool ClientConnected() { return clientConnectionId != -1; @@ -155,18 +155,6 @@ public bool ProcessClientMessage() return true; } - // IMPORTANT: set script execution order to >1000 to call Transport's - // LateUpdate after all others. Fixes race condition where - // e.g. in uSurvival Transport would apply Cmds before - // ShoulderRotation.LateUpdate, resulting in projectile - // spawns at the point before shoulder rotation. - public void LateUpdate() - { - // process all messages - while (ProcessClientMessage()) {} - while (ProcessServerMessage()) {} - } - public string ClientGetAddress() { NetworkTransport.GetConnectionInfo(serverHostId, clientId, out string address, out int port, out NetworkID networkId, out NodeID node, out error); @@ -181,14 +169,9 @@ public override void ClientDisconnect() clientId = -1; } } + #endregion - public override bool Available() - { - // websocket is available in all platforms (including webgl) - return useWebsockets || base.Available(); - } - - // server ////////////////////////////////////////////////////////////// + #region server public override bool ServerActive() { return serverHostId != -1; @@ -282,8 +265,27 @@ public override void ServerStop() serverHostId = -1; Debug.Log("LLAPITransport.ServerStop"); } + #endregion + + #region common + // IMPORTANT: set script execution order to >1000 to call Transport's + // LateUpdate after all others. Fixes race condition where + // e.g. in uSurvival Transport would apply Cmds before + // ShoulderRotation.LateUpdate, resulting in projectile + // spawns at the point before shoulder rotation. + public void LateUpdate() + { + // process all messages + while (ProcessClientMessage()) {} + while (ProcessServerMessage()) {} + } + + public override bool Available() + { + // websocket is available in all platforms (including webgl) + return useWebsockets || base.Available(); + } - // common ////////////////////////////////////////////////////////////// public override void Shutdown() { NetworkTransport.Shutdown(); @@ -310,5 +312,6 @@ public override string ToString() } return "LLAPI (inactive/disconnected)"; } + #endregion } } \ No newline at end of file From 8eb27ea0af928f2cf841c714d87472f0e1f8d8b4 Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 4 Mar 2019 17:42:15 +0100 Subject: [PATCH 150/276] Syntax --- Assets/Mirror/Runtime/NetworkIdentity.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 502b9c321..3fd961c5f 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -6,9 +6,7 @@ #if UNITY_EDITOR using UnityEditor; #if UNITY_2018_3_OR_NEWER - using UnityEditor.Experimental.SceneManagement; - #endif #endif From ed6487216383df5828bb82d7a24e9153eecd08ac Mon Sep 17 00:00:00 2001 From: vis2k Date: Mon, 4 Mar 2019 17:43:51 +0100 Subject: [PATCH 151/276] NetworkIdentity.OnValidate: wrap in #if UNITY_EDITOR in case OnValidate is needed at runtime later --- Assets/Mirror/Runtime/NetworkIdentity.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 3fd961c5f..b0412f191 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -147,9 +147,9 @@ internal void RemoveObserverInternal(NetworkConnection conn) observers?.Remove(conn.connectionId); } -#if UNITY_EDITOR void OnValidate() { +#if UNITY_EDITOR if (m_ServerOnly && m_LocalPlayerAuthority) { Debug.LogWarning("Disabling Local Player Authority for " + gameObject + " because it is server-only."); @@ -157,8 +157,10 @@ void OnValidate() } SetupIDs(); +#endif } +#if UNITY_EDITOR void AssignAssetID(GameObject prefab) => AssignAssetID(AssetDatabase.GetAssetPath(prefab)); void AssignAssetID(string path) => m_AssetId = AssetDatabase.AssetPathToGUID(path); bool ThisIsAPrefab() => PrefabUtility.IsPartOfPrefabAsset(gameObject); From 98284e425377257168afc6b5365fa2a3ab3b6704 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Tue, 5 Mar 2019 16:17:42 -0800 Subject: [PATCH 152/276] Removed single line braces from NetworkWriter. (#545) * Removed single line braces from NetworkWriter. * Undid alignment. --- Assets/Mirror/Runtime/NetworkWriter.cs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkWriter.cs b/Assets/Mirror/Runtime/NetworkWriter.cs index accbc309a..4f9dc3a4a 100644 --- a/Assets/Mirror/Runtime/NetworkWriter.cs +++ b/Assets/Mirror/Runtime/NetworkWriter.cs @@ -32,19 +32,19 @@ public void SetLength(long value) ((MemoryStream)writer.BaseStream).SetLength(value); } - public void Write(byte value) { writer.Write(value); } - public void Write(sbyte value) { writer.Write(value); } - public void Write(char value) { writer.Write(value); } - public void Write(bool value) { writer.Write(value); } - public void Write(short value) { writer.Write(value); } - public void Write(ushort value) { writer.Write(value); } - public void Write(int value) { writer.Write(value); } - public void Write(uint value) { writer.Write(value); } - public void Write(long value) { writer.Write(value); } - public void Write(ulong value) { writer.Write(value); } - public void Write(float value) { writer.Write(value); } - public void Write(double value) { writer.Write(value); } - public void Write(decimal value) { writer.Write(value); } + public void Write(byte value) => writer.Write(value); + public void Write(sbyte value) => writer.Write(value); + public void Write(char value) => writer.Write(value); + public void Write(bool value) => writer.Write(value); + public void Write(short value) => writer.Write(value); + public void Write(ushort value) => writer.Write(value); + public void Write(int value) => writer.Write(value); + public void Write(uint value) => writer.Write(value); + public void Write(long value) => writer.Write(value); + public void Write(ulong value) => writer.Write(value); + public void Write(float value) => writer.Write(value); + public void Write(double value) => writer.Write(value); + public void Write(decimal value) => writer.Write(value); public void Write(string value) { From ca57f1180c5dcee1a585c4aa9a5032b28f23fdce Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 6 Mar 2019 00:08:34 -0800 Subject: [PATCH 153/276] Removed trailing whitespace (#556) --- Assets/Mirror/Components/NetworkLobbyManager.cs | 2 +- .../Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs | 2 +- Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs | 2 +- Assets/Mirror/Runtime/Messages.cs | 2 +- Assets/Mirror/Runtime/NetworkReader.cs | 2 +- Assets/Mirror/Runtime/SyncObject.cs | 4 ++-- Assets/Mirror/Tests/WeaverTest.cs | 1 - 7 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Assets/Mirror/Components/NetworkLobbyManager.cs b/Assets/Mirror/Components/NetworkLobbyManager.cs index be4214a9d..008f4041c 100644 --- a/Assets/Mirror/Components/NetworkLobbyManager.cs +++ b/Assets/Mirror/Components/NetworkLobbyManager.cs @@ -39,7 +39,7 @@ public override void OnValidate() // always >= 0 maxConnections = Mathf.Max(maxConnections, 0); - // always <= maxConnections + // always <= maxConnections minPlayers = Mathf.Min(minPlayers, maxConnections); // always >= 0 diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs index cbfb5b66a..c6b33a6dc 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs @@ -26,7 +26,7 @@ public override bool OnLobbyServerSceneLoadedForPlayer(GameObject lobbyPlayer, G showStartButton is a local bool that's needed because OnLobbyServerPlayersReady is only fired when all players are ready, but if a player cancels their ready state there's no callback to set it back to false Therefore, allPlayersReady is used in combination with showStartButton to show/hide the Start button correctly. - Setting showStartButton false when the button is pressed hides it in the game scene since NetworkLobbyManager + Setting showStartButton false when the button is pressed hides it in the game scene since NetworkLobbyManager is set as DontDestroyOnLoad = true. */ diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs index e39b955c4..3168253b4 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs @@ -19,7 +19,7 @@ This demonstrates how to set the parent of the LobbyPlayerPrefab to an arbitrary something more visual for each player in that layout, such as a name, avatar, etc. Note: LobbyPAlayer prefab will be marked DontDestroyOnLoad and carried forward to the game scene. - Because of this, NetworkLobbyManager must automatically set the parent to null + Because of this, NetworkLobbyManager must automatically set the parent to null in ServerChangeScene and OnClientChangeScene. */ diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index 8e17d06ea..ad3a0cd63 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -149,7 +149,7 @@ public class DisconnectMessage : EmptyMessage {} public class ConnectMessage : EmptyMessage {} - public class SceneMessage : StringMessage + public class SceneMessage : StringMessage { public SceneMessage(string value) : base(value) {} diff --git a/Assets/Mirror/Runtime/NetworkReader.cs b/Assets/Mirror/Runtime/NetworkReader.cs index c68ccd366..822914972 100644 --- a/Assets/Mirror/Runtime/NetworkReader.cs +++ b/Assets/Mirror/Runtime/NetworkReader.cs @@ -16,7 +16,7 @@ public NetworkReader(byte[] buffer) // 'int' is the best type for .Position. 'short' is too small if we send >32kb which would result in negative .Position // -> converting long to int is fine until 2GB of data (MAX_INT), so we don't have to worry about overflows here public int Position { get { return (int)reader.BaseStream.Position; } set { reader.BaseStream.Position = value; } } - public int Length => (int)reader.BaseStream.Length; + public int Length => (int)reader.BaseStream.Length; public byte ReadByte() => reader.ReadByte(); public sbyte ReadSByte() => reader.ReadSByte(); diff --git a/Assets/Mirror/Runtime/SyncObject.cs b/Assets/Mirror/Runtime/SyncObject.cs index 0fceddff3..1abb4ac80 100644 --- a/Assets/Mirror/Runtime/SyncObject.cs +++ b/Assets/Mirror/Runtime/SyncObject.cs @@ -1,13 +1,13 @@ namespace Mirror { - // A sync object is an object that can synchronize it's state + // A sync object is an object that can synchronize it's state // between server and client, such as a SyncList public interface SyncObject { // true if there are changes since the last flush bool IsDirty { get; } - // Discard all the queued changes + // Discard all the queued changes // Consider the object fully synchronized with clients void Flush(); diff --git a/Assets/Mirror/Tests/WeaverTest.cs b/Assets/Mirror/Tests/WeaverTest.cs index bf22c1f92..f91d7fe5a 100644 --- a/Assets/Mirror/Tests/WeaverTest.cs +++ b/Assets/Mirror/Tests/WeaverTest.cs @@ -432,7 +432,6 @@ public void NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst() Assert.That(m_weaverErrors.Count, Is.EqualTo(1)); Assert.That(m_weaverErrors[0], Does.Match("Target Rpc .* first parameter must be a NetworkConnection")); } - [Test] public void NetworkBehaviourTargetRpcDuplicateName() From 17ab8ae30acbaa0cb55f731f3a7f09bb84a54523 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 5 Mar 2019 12:02:16 +0100 Subject: [PATCH 154/276] add empty line --- Assets/Mirror/Runtime/NetworkIdentity.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index b0412f191..1527d2215 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -163,6 +163,7 @@ void OnValidate() #if UNITY_EDITOR void AssignAssetID(GameObject prefab) => AssignAssetID(AssetDatabase.GetAssetPath(prefab)); void AssignAssetID(string path) => m_AssetId = AssetDatabase.AssetPathToGUID(path); + bool ThisIsAPrefab() => PrefabUtility.IsPartOfPrefabAsset(gameObject); bool ThisIsASceneObjectWithPrefabParent(out GameObject prefab) From 896551eb00e8ad7564cc36c2de486fcbd9f4c506 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 6 Mar 2019 08:53:35 -0800 Subject: [PATCH 155/276] Finished replacing comment walls with regions. (#558) --- Assets/Mirror/Components/NetworkAnimator.cs | 7 ++++--- Assets/Mirror/Runtime/Messages.cs | 18 ++++++++--------- Assets/Mirror/Runtime/NetworkBehaviour.cs | 20 +++++++++---------- Assets/Mirror/Runtime/NetworkManager.cs | 20 +++++++++---------- .../Processors/NetworkBehaviourProcessor.cs | 4 ++-- 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 4c600b11c..f8c72a3c7 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -304,8 +304,7 @@ public void SetTrigger(int hash) } } - // ------------------ server message handlers ------------------- - + #region server message handlers [Command] void CmdOnAnimationServerMessage(int stateHash, float normalizedTime, byte[] parameters) { @@ -331,8 +330,9 @@ void CmdOnAnimationTriggerServerMessage(int hash) HandleAnimTriggerMsg(hash); RpcOnAnimationTriggerClientMessage(hash); } + #endregion - // ------------------ client message handlers ------------------- + #region client message handlers [ClientRpc] void RpcOnAnimationClientMessage(int stateHash, float normalizedTime, byte[] parameters) { @@ -351,5 +351,6 @@ void RpcOnAnimationTriggerClientMessage(int hash) { HandleAnimTriggerMsg(hash); } + #endregion } } diff --git a/Assets/Mirror/Runtime/Messages.cs b/Assets/Mirror/Runtime/Messages.cs index ad3a0cd63..b52601d2f 100644 --- a/Assets/Mirror/Runtime/Messages.cs +++ b/Assets/Mirror/Runtime/Messages.cs @@ -14,8 +14,7 @@ public virtual void Deserialize(NetworkReader reader) {} public virtual void Serialize(NetworkWriter writer) {} } - // ---------- General Typed Messages ------------------- - + #region General Typed Messages public class StringMessage : MessageBase { public string value; @@ -132,9 +131,9 @@ public override void Deserialize(NetworkReader reader) {} public override void Serialize(NetworkWriter writer) {} } + #endregion - // ---------- Public System Messages ------------------- - + #region Public System Messages public class ErrorMessage : ByteMessage {} public class ReadyMessage : EmptyMessage {} @@ -155,9 +154,9 @@ public SceneMessage(string value) : base(value) {} public SceneMessage() {} } + #endregion - // ---------- System Messages requried for code gen path ------------------- - + #region System Messages requried for code gen path // remote calls like Rpc/Cmd/SyncEvent all use the same message type class RemoteCallMessage : MessageBase { @@ -188,9 +187,9 @@ class CommandMessage : RemoteCallMessage {} class RpcMessage : RemoteCallMessage {} class SyncEventMessage : RemoteCallMessage {} + #endregion - // ---------- Internal System Messages ------------------- - + #region Internal System Messages class SpawnPrefabMessage : MessageBase { public uint netId; @@ -279,7 +278,7 @@ public override void Serialize(NetworkWriter writer) } } - class OwnerMessage : MessageBase + class OwnerMessage : MessageBase { public uint netId; @@ -358,4 +357,5 @@ public override void Serialize(NetworkWriter writer) writer.Write(serverTime); } } + #endregion } diff --git a/Assets/Mirror/Runtime/NetworkBehaviour.cs b/Assets/Mirror/Runtime/NetworkBehaviour.cs index 463b5c5bd..9ec8099c2 100644 --- a/Assets/Mirror/Runtime/NetworkBehaviour.cs +++ b/Assets/Mirror/Runtime/NetworkBehaviour.cs @@ -69,8 +69,7 @@ protected void InitSyncObject(SyncObject syncObject) m_SyncObjects.Add(syncObject); } - // ----------------------------- Commands -------------------------------- - + #region Commands [EditorBrowsable(EditorBrowsableState.Never)] protected void SendCommandInternal(Type invokeClass, string cmdName, NetworkWriter writer, int channelId) { @@ -112,9 +111,9 @@ public virtual bool InvokeCommand(int cmdHash, NetworkReader reader) { return InvokeHandlerDelegate(cmdHash, MirrorInvokeType.Command, reader); } + #endregion - // ----------------------------- Client RPCs -------------------------------- - + #region Client RPCs [EditorBrowsable(EditorBrowsableState.Never)] protected void SendRPCInternal(Type invokeClass, string rpcName, NetworkWriter writer, int channelId) { @@ -182,9 +181,9 @@ public virtual bool InvokeRPC(int rpcHash, NetworkReader reader) { return InvokeHandlerDelegate(rpcHash, MirrorInvokeType.ClientRpc, reader); } + #endregion - // ----------------------------- Sync Events -------------------------------- - + #region Sync Events [EditorBrowsable(EditorBrowsableState.Never)] protected void SendEventInternal(Type invokeClass, string eventName, NetworkWriter writer, int channelId) { @@ -211,9 +210,9 @@ public virtual bool InvokeSyncEvent(int eventHash, NetworkReader reader) { return InvokeHandlerDelegate(eventHash, MirrorInvokeType.SyncEvent, reader); } + #endregion - // ----------------------------- Code Gen Path Helpers -------------------------------- - + #region Code Gen Path Helpers public delegate void CmdDelegate(NetworkBehaviour obj, NetworkReader reader); protected class Invoker @@ -298,9 +297,9 @@ internal bool InvokeHandlerDelegate(int cmdHash, MirrorInvokeType invokeType, Ne } return false; } + #endregion - // ----------------------------- Helpers -------------------------------- - + #region Helpers // helper function for [SyncVar] GameObjects. [EditorBrowsable(EditorBrowsableState.Never)] protected void SetSyncVarGameObject(GameObject newGameObject, ref GameObject gameObjectField, ulong dirtyBit, ref uint netIdField) @@ -406,6 +405,7 @@ protected void SetSyncVar(T value, ref T fieldValue, ulong dirtyBit) fieldValue = value; } } + #endregion // these are masks, not bit numbers, ie. 0x004 not 2 public void SetDirtyBit(ulong dirtyBit) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 2aff0e128..248cb15fd 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -521,8 +521,7 @@ public static void Shutdown() singleton = null; } - // ----------------------------- Server Internal Message Handlers -------------------------------- - + #region Server Internal Message Handlers internal void OnServerConnectInternal(NetworkConnection conn, ConnectMessage connectMsg) { if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerConnectInternal"); @@ -571,9 +570,9 @@ internal void OnServerErrorInternal(NetworkConnection conn, ErrorMessage msg) if (LogFilter.Debug) Debug.Log("NetworkManager.OnServerErrorInternal"); OnServerError(conn, msg.value); } + #endregion - // ----------------------------- Client Internal Message Handlers -------------------------------- - + #region Client Internal Message Handlers internal void OnClientConnectInternal(NetworkConnection conn, ConnectMessage message) { if (LogFilter.Debug) Debug.Log("NetworkManager.OnClientConnectInternal"); @@ -624,9 +623,9 @@ internal void OnClientSceneInternal(NetworkConnection conn, SceneMessage msg) ClientChangeScene(newSceneName, true); } } + #endregion - // ----------------------------- Server System Callbacks -------------------------------- - + #region Server System Callbacks public virtual void OnServerConnect(NetworkConnection conn) {} public virtual void OnServerDisconnect(NetworkConnection conn) @@ -714,9 +713,9 @@ public virtual void OnServerRemovePlayer(NetworkConnection conn, NetworkIdentity public virtual void OnServerError(NetworkConnection conn, int errorCode) {} public virtual void OnServerSceneChanged(string sceneName) {} + #endregion - // ----------------------------- Client System Callbacks -------------------------------- - + #region Client System Callbacks public virtual void OnClientConnect(NetworkConnection conn) { if (!clientLoadedScene) @@ -758,9 +757,9 @@ public virtual void OnClientSceneChanged(NetworkConnection conn) } } } + #endregion - //------------------------------ Start & Stop callbacks ----------------------------------- - + #region Start & Stop callbacks // Since there are multiple versions of StartServer, StartClient and StartHost, to reliably customize // their functionality, users would need override all the versions. Instead these callbacks are invoked // from all versions, so users only need to implement this one case. @@ -771,5 +770,6 @@ public virtual void OnStartClient(NetworkClient client) {} public virtual void OnStopServer() {} public virtual void OnStopClient() {} public virtual void OnStopHost() {} + #endregion } } diff --git a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs index d895a5a56..20463cb1a 100644 --- a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs @@ -142,7 +142,7 @@ public static bool WriteArguments(ILProcessor worker, MethodDefinition md, strin return true; } - // mark / check type as processed ////////////////////////////////////// + #region mark / check type as processed public const string ProcessedFunctionName = "MirrorProcessed"; // by adding an empty MirrorProcessed() function @@ -161,7 +161,7 @@ public static void MarkAsProcessed(TypeDefinition td) td.Methods.Add(versionMethod); } } - //////////////////////////////////////////////////////////////////////// + #endregion void GenerateConstants() { From 9afefbdce78d56336aec968c02376d18922ab299 Mon Sep 17 00:00:00 2001 From: MichalPetryka <35800402+MichalPetryka@users.noreply.github.com> Date: Wed, 6 Mar 2019 18:08:48 +0100 Subject: [PATCH 156/276] Adjusted line endings, encoding and trimmed whitespaces at EOL (#561) --- Assets/Mirror/Components/NetworkTransform.cs | 2 +- Assets/Mirror/Editor/SceneDrawer.cs | 4 +- .../Lobby/Scripts/NetworkLobbyManagerExt.cs | 2 +- .../Lobby/Scripts/PlayerController.cs | 2 +- .../Mirror/Examples/Lobby/Scripts/Reward.cs | 2 +- .../Mirror/Examples/Lobby/Scripts/Spawner.cs | 2 +- Assets/Mirror/Runtime/FloatBytePacker.cs | 2 +- Assets/Mirror/Runtime/NetworkMessage.cs | 2 +- Assets/Mirror/Runtime/StringHash.cs | 2 +- Assets/Mirror/Runtime/SyncObject.cs | 4 +- .../Runtime/Transport/LLAPITransport.cs | 4 +- .../Runtime/Transport/MultiplexTransport.cs | 2 +- Assets/Mirror/Runtime/Transport/Transport.cs | 2 +- .../Runtime/Transport/Websocket/Client.cs | 10 ++--- .../Runtime/Transport/Websocket/ClientJs.cs | 14 +++---- .../Websocket/Ninja.WebSockets/BufferPool.cs | 6 +-- .../Exceptions/EntityTooLargeException.cs | 6 +-- .../InvalidHttpResponseCodeException.cs | 4 +- .../SecWebSocketKeyMissingException.cs | 2 +- .../ServerListenerSocketException.cs | 6 +-- .../WebSocketBufferOverflowException.cs | 4 +- .../WebSocketHandshakeFailedException.cs | 6 +-- .../WebSocketVersionNotSupportedException.cs | 6 +-- .../Websocket/Ninja.WebSockets/HttpHelper.cs | 30 +++++++-------- .../Websocket/Ninja.WebSockets/IBufferPool.cs | 2 +- .../Ninja.WebSockets/IPingPongManager.cs | 2 +- .../IWebSocketClientFactory.cs | 2 +- .../IWebSocketServerFactory.cs | 2 +- .../Internal/BinaryReaderWriter.cs | 34 ++++++++--------- .../Ninja.WebSockets/Internal/Events.cs | 34 ++++++++--------- .../Internal/WebSocketFrame.cs | 2 +- .../Internal/WebSocketFrameCommon.cs | 28 +++++++------- .../Internal/WebSocketFrameReader.cs | 32 ++++++++-------- .../Internal/WebSocketFrameWriter.cs | 32 ++++++++-------- .../Internal/WebSocketImplementation.cs | 38 +++++++++---------- .../Internal/WebSocketOpCode.cs | 2 +- .../Ninja.WebSockets/PingPongManager.cs | 36 +++++++++--------- .../Ninja.WebSockets/PongEventArgs.cs | 2 +- .../WebSocketClientFactory.cs | 32 ++++++++-------- .../WebSocketClientOptions.cs | 4 +- .../Ninja.WebSockets/WebSocketHttpContext.cs | 2 +- .../WebSocketServerFactory.cs | 28 +++++++------- .../WebSocketServerOptions.cs | 4 +- .../Runtime/Transport/Websocket/Server.cs | 6 +-- .../Transport/Websocket/WebsocketTransport.cs | 2 +- Assets/Mirror/Tests/FloatBytePackerTest.cs | 2 +- Assets/Mirror/Tests/MessagePackerTest.cs | 4 +- .../WeaverTests~/ClientGuardWrongClass.cs | 2 +- .../WeaverTests~/ClientRpcCantBeStatic.cs | 2 +- .../WeaverTests~/ClientRpcStartsWithRpc.cs | 2 +- .../Tests/WeaverTests~/ClientRpcValid.cs | 2 +- .../Tests/WeaverTests~/CommandCantBeStatic.cs | 2 +- .../WeaverTests~/CommandStartsWithCmd.cs | 2 +- .../Mirror/Tests/WeaverTests~/CommandValid.cs | 2 +- .../Tests/WeaverTests~/GuardCmdWrongClass.cs | 2 +- .../Mirror/Tests/WeaverTests~/InvalidType.cs | 2 +- .../Mirror/Tests/WeaverTests~/JaggedArray.cs | 2 +- .../MessageInvalidDeserializeFieldType.cs | 2 +- .../MessageInvalidSerializeFieldType.cs | 2 +- .../WeaverTests~/MessageMemberGeneric.cs | 2 +- .../WeaverTests~/MessageMemberInterface.cs | 2 +- .../WeaverTests~/MessageSelfReferencing.cs | 2 +- .../Mirror/Tests/WeaverTests~/MessageValid.cs | 2 +- .../Tests/WeaverTests~/MonoBehaviourClient.cs | 2 +- .../MonoBehaviourClientCallback.cs | 2 +- .../WeaverTests~/MonoBehaviourClientRpc.cs | 2 +- .../WeaverTests~/MonoBehaviourCommand.cs | 2 +- .../Tests/WeaverTests~/MonoBehaviourServer.cs | 2 +- .../MonoBehaviourServerCallback.cs | 2 +- .../WeaverTests~/MonoBehaviourSyncList.cs | 2 +- .../WeaverTests~/MonoBehaviourSyncVar.cs | 2 +- .../WeaverTests~/MonoBehaviourTargetRpc.cs | 2 +- .../Tests/WeaverTests~/MonoBehaviourValid.cs | 2 +- .../NetworkBehaviourAbstractBaseValid.cs | 2 +- .../NetworkBehaviourClientRpcCoroutine.cs | 2 +- .../NetworkBehaviourClientRpcDuplicateName.cs | 2 +- .../NetworkBehaviourClientRpcGenericParam.cs | 2 +- .../NetworkBehaviourClientRpcParamAbstract.cs | 2 +- ...NetworkBehaviourClientRpcParamComponent.cs | 2 +- ...ehaviourClientRpcParamNetworkConnection.cs | 2 +- .../NetworkBehaviourClientRpcParamOptional.cs | 2 +- .../NetworkBehaviourClientRpcParamOut.cs | 2 +- .../NetworkBehaviourClientRpcParamRef.cs | 2 +- .../NetworkBehaviourClientRpcVoidReturn.cs | 2 +- .../NetworkBehaviourCmdCoroutine.cs | 2 +- .../NetworkBehaviourCmdDuplicateName.cs | 2 +- .../NetworkBehaviourCmdGenericParam.cs | 2 +- .../NetworkBehaviourCmdParamAbstract.cs | 2 +- .../NetworkBehaviourCmdParamComponent.cs | 2 +- ...tworkBehaviourCmdParamNetworkConnection.cs | 2 +- .../NetworkBehaviourCmdParamOptional.cs | 2 +- .../NetworkBehaviourCmdParamOut.cs | 2 +- .../NetworkBehaviourCmdParamRef.cs | 2 +- .../NetworkBehaviourCmdVoidReturn.cs | 2 +- .../WeaverTests~/NetworkBehaviourGeneric.cs | 2 +- .../NetworkBehaviourTargetRpcCoroutine.cs | 2 +- .../NetworkBehaviourTargetRpcDuplicateName.cs | 2 +- .../NetworkBehaviourTargetRpcGenericParam.cs | 2 +- .../NetworkBehaviourTargetRpcParamAbstract.cs | 2 +- ...NetworkBehaviourTargetRpcParamComponent.cs | 2 +- ...ehaviourTargetRpcParamNetworkConnection.cs | 2 +- ...TargetRpcParamNetworkConnectionNotFirst.cs | 2 +- .../NetworkBehaviourTargetRpcParamOptional.cs | 2 +- .../NetworkBehaviourTargetRpcParamOut.cs | 2 +- .../NetworkBehaviourTargetRpcParamRef.cs | 2 +- .../NetworkBehaviourTargetRpcVoidReturn.cs | 2 +- .../WeaverTests~/NetworkBehaviourValid.cs | 2 +- .../Tests/WeaverTests~/RecursionCount.cs | 2 +- .../WeaverTests~/ServerGuardWrongClass.cs | 2 +- .../WeaverTests~/SyncEventParamGeneric.cs | 2 +- .../WeaverTests~/SyncEventStartsWithEvent.cs | 2 +- .../Tests/WeaverTests~/SyncEventValid.cs | 2 +- .../SyncListMissingParamlessCtor.cs | 2 +- .../SyncListStructGenericGeneric.cs | 2 +- .../SyncListStructMemberBasicType.cs | 2 +- .../SyncListStructMemberGeneric.cs | 2 +- .../SyncListStructMemberInterface.cs | 2 +- .../Tests/WeaverTests~/SyncListStructValid.cs | 2 +- .../Tests/WeaverTests~/SyncListValid.cs | 2 +- .../Tests/WeaverTests~/SyncVarsCantBeArray.cs | 2 +- .../SyncVarsDerivedNetworkBehaviour.cs | 2 +- .../SyncVarsDerivedScriptableObject.cs | 2 +- .../WeaverTests~/SyncVarsDifferentModule.cs | 2 +- .../WeaverTests~/SyncVarsGenericParam.cs | 2 +- .../Tests/WeaverTests~/SyncVarsInterface.cs | 2 +- .../Tests/WeaverTests~/SyncVarsMoreThan63.cs | 2 +- .../Tests/WeaverTests~/SyncVarsNoHook.cs | 2 +- .../WeaverTests~/SyncVarsNoHookParams.cs | 2 +- .../Tests/WeaverTests~/SyncVarsStatic.cs | 2 +- .../Tests/WeaverTests~/SyncVarsSyncList.cs | 2 +- .../WeaverTests~/SyncVarsTooManyHookParams.cs | 2 +- .../Tests/WeaverTests~/SyncVarsValid.cs | 2 +- .../WeaverTests~/SyncVarsWrongHookType.cs | 2 +- .../WeaverTests~/TargetRpcCantBeStatic.cs | 2 +- .../TargetRpcNetworkConnectionMissing.cs | 2 +- .../TargetRpcNetworkConnectionNotFirst.cs | 2 +- .../WeaverTests~/TargetRpcStartsWithTarget.cs | 2 +- .../Tests/WeaverTests~/TargetRpcValid.cs | 2 +- Weaver/Weaver/Extensions.cs | 2 +- Weaver/Weaver/Processors/CommandProcessor.cs | 2 +- .../Processors/MonoBehaviourProcessor.cs | 2 +- .../Weaver/Processors/SyncEventProcessor.cs | 2 +- Weaver/Weaver/Processors/SyncListProcessor.cs | 2 +- .../Weaver/Processors/SyncObjectProcessor.cs | 2 +- Weaver/Weaver/Processors/SyncVarProcessor.cs | 2 +- .../Weaver/Processors/TargetRpcProcessor.cs | 2 +- Weaver/Weaver/Resolvers.cs | 2 +- 147 files changed, 329 insertions(+), 329 deletions(-) diff --git a/Assets/Mirror/Components/NetworkTransform.cs b/Assets/Mirror/Components/NetworkTransform.cs index 7e353c927..51166e142 100644 --- a/Assets/Mirror/Components/NetworkTransform.cs +++ b/Assets/Mirror/Components/NetworkTransform.cs @@ -9,4 +9,4 @@ public class NetworkTransform : NetworkTransformBase { protected override Transform targetComponent => transform; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Editor/SceneDrawer.cs b/Assets/Mirror/Editor/SceneDrawer.cs index 4d64cdea6..b6c04f4de 100644 --- a/Assets/Mirror/Editor/SceneDrawer.cs +++ b/Assets/Mirror/Editor/SceneDrawer.cs @@ -1,4 +1,4 @@ -using UnityEditor; +using UnityEditor; using UnityEngine; namespace Mirror @@ -53,4 +53,4 @@ protected SceneAsset GetSceneObject(string sceneObjectName) return null; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs index c6b33a6dc..6df770448 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyManagerExt.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; using UnityEngine.Rendering; namespace Mirror.Examples.NetworkLobby diff --git a/Assets/Mirror/Examples/Lobby/Scripts/PlayerController.cs b/Assets/Mirror/Examples/Lobby/Scripts/PlayerController.cs index ef032df40..3912c5122 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/PlayerController.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/PlayerController.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace Mirror.Examples.NetworkLobby { diff --git a/Assets/Mirror/Examples/Lobby/Scripts/Reward.cs b/Assets/Mirror/Examples/Lobby/Scripts/Reward.cs index 83fa33345..a0e7a1520 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/Reward.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/Reward.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace Mirror.Examples.NetworkLobby { diff --git a/Assets/Mirror/Examples/Lobby/Scripts/Spawner.cs b/Assets/Mirror/Examples/Lobby/Scripts/Spawner.cs index 67d87f695..428821cc3 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/Spawner.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/Spawner.cs @@ -1,4 +1,4 @@ -using UnityEngine; +using UnityEngine; namespace Mirror.Examples.NetworkLobby { diff --git a/Assets/Mirror/Runtime/FloatBytePacker.cs b/Assets/Mirror/Runtime/FloatBytePacker.cs index 13311948e..f13f33267 100644 --- a/Assets/Mirror/Runtime/FloatBytePacker.cs +++ b/Assets/Mirror/Runtime/FloatBytePacker.cs @@ -55,4 +55,4 @@ public static float[] UnpackUShortIntoThreeFloats(ushort combined, float minTarg return new float[]{u, v, w}; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/NetworkMessage.cs b/Assets/Mirror/Runtime/NetworkMessage.cs index 32351657f..99e3a3524 100644 --- a/Assets/Mirror/Runtime/NetworkMessage.cs +++ b/Assets/Mirror/Runtime/NetworkMessage.cs @@ -18,4 +18,4 @@ public void ReadMessage(TMsg msg) where TMsg : MessageBase msg.Deserialize(reader); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/StringHash.cs b/Assets/Mirror/Runtime/StringHash.cs index 633684516..95e9b07ab 100644 --- a/Assets/Mirror/Runtime/StringHash.cs +++ b/Assets/Mirror/Runtime/StringHash.cs @@ -15,4 +15,4 @@ public static int GetStableHashCode(this string text) } } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/SyncObject.cs b/Assets/Mirror/Runtime/SyncObject.cs index 1abb4ac80..afaa508bf 100644 --- a/Assets/Mirror/Runtime/SyncObject.cs +++ b/Assets/Mirror/Runtime/SyncObject.cs @@ -1,4 +1,4 @@ -namespace Mirror +namespace Mirror { // A sync object is an object that can synchronize it's state // between server and client, such as a SyncList @@ -23,4 +23,4 @@ public interface SyncObject // deserialize changes since last sync void OnDeserializeDelta(NetworkReader reader); } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs index 3f773d18d..9d8d31af5 100644 --- a/Assets/Mirror/Runtime/Transport/LLAPITransport.cs +++ b/Assets/Mirror/Runtime/Transport/LLAPITransport.cs @@ -1,4 +1,4 @@ -// wraps UNET's LLAPI for use as HLAPI TransportLayer +// wraps UNET's LLAPI for use as HLAPI TransportLayer using System; using UnityEngine; using UnityEngine.Networking; @@ -314,4 +314,4 @@ public override string ToString() } #endregion } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/Transport/MultiplexTransport.cs b/Assets/Mirror/Runtime/Transport/MultiplexTransport.cs index 625706c41..c59a6a124 100644 --- a/Assets/Mirror/Runtime/Transport/MultiplexTransport.cs +++ b/Assets/Mirror/Runtime/Transport/MultiplexTransport.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Text; using UnityEngine; diff --git a/Assets/Mirror/Runtime/Transport/Transport.cs b/Assets/Mirror/Runtime/Transport/Transport.cs index ec582b609..284c470a4 100644 --- a/Assets/Mirror/Runtime/Transport/Transport.cs +++ b/Assets/Mirror/Runtime/Transport/Transport.cs @@ -1,4 +1,4 @@ -// abstract transport layer component +// abstract transport layer component // note: not all transports need a port, so add it to yours if needed. using System; using UnityEngine; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs index 74ddb682e..44ee8e129 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Client.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Client.cs @@ -1,4 +1,4 @@ -#if !UNITY_WEBGL || UNITY_EDITOR +#if !UNITY_WEBGL || UNITY_EDITOR using System; using System.Linq; @@ -13,7 +13,7 @@ namespace Mirror.Websocket { - public class Client + public class Client { public event Action Connected; public event Action ReceivedData; @@ -25,7 +25,7 @@ public class Client CancellationTokenSource cancellation; public bool NoDelay = true; - + public bool Connecting { get; set; } public bool IsConnected { get; set; } @@ -114,7 +114,7 @@ private async Task ReceiveLoop(WebSocket webSocket, CancellationToken token) } // a message might come splitted in multiple frames - // collect all frames + // collect all frames private async Task ReadFrames(WebSocketReceiveResult result, WebSocket webSocket, byte[] buffer) { int count = result.Count; @@ -188,4 +188,4 @@ public override string ToString() } -#endif \ No newline at end of file +#endif diff --git a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs index 1446b6d89..6fbd66866 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/ClientJs.cs @@ -1,4 +1,4 @@ -#if UNITY_WEBGL && !UNITY_EDITOR +#if UNITY_WEBGL && !UNITY_EDITOR using System; using System.Collections.Generic; @@ -16,7 +16,7 @@ namespace Mirror.Websocket { // this is the client implementation used by browsers - public class Client + public class Client { private static int idGenerator = 0; private static readonly Dictionary clients = new Dictionary(); @@ -69,10 +69,10 @@ public void Send(byte[] data) #region Javascript native functions [DllImport("__Internal")] private static extern int SocketCreate( - string url, - int id, - Action onpen, - Action ondata, + string url, + int id, + Action onpen, + Action ondata, Action onclose); [DllImport("__Internal")] @@ -115,4 +115,4 @@ public static void OnData(int id, IntPtr ptr, int length) } } -#endif \ No newline at end of file +#endif diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs index ab63130e9..8e0f83d64 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/BufferPool.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; @@ -30,7 +30,7 @@ public BufferPool(int bufferSize) _bufferSize = bufferSize; _bufferPoolStack = new ConcurrentStack(); } - + ///

    /// This memory stream is not instance thread safe (not to be confused with the BufferPool which is instance thread safe) /// @@ -159,7 +159,7 @@ public override void WriteByte(byte value) public override void Write(byte[] buffer, int offset, int count) { EnlargeBufferIfRequired(count); - _ms.Write(buffer, offset, count); + _ms.Write(buffer, offset, count); } public override Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs index 7b59162ef..5a1724fab 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/EntityTooLargeException.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Ninja.WebSockets.Exceptions { @@ -7,7 +7,7 @@ public class EntityTooLargeException : Exception { public EntityTooLargeException() : base() { - + } /// @@ -15,7 +15,7 @@ public EntityTooLargeException() : base() /// public EntityTooLargeException(string message) : base(message) { - + } public EntityTooLargeException(string message, Exception inner) : base(message, inner) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs index 9b776f687..73354ddb2 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/InvalidHttpResponseCodeException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; @@ -8,7 +8,7 @@ namespace Ninja.WebSockets.Exceptions public class InvalidHttpResponseCodeException : Exception { public string ResponseCode { get; private set; } - + public string ResponseHeader { get; private set; } public string ResponseDetails { get; private set; } diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs index 086b6cd12..82476250a 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/SecWebSocketKeyMissingException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs index f66ee2760..69d536022 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/ServerListenerSocketException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -10,11 +10,11 @@ namespace Ninja.WebSockets.Exceptions public class ServerListenerSocketException : Exception { public ServerListenerSocketException() : base() - { + { } public ServerListenerSocketException(string message) : base(message) - { + { } public ServerListenerSocketException(string message, Exception inner) : base(message, inner) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs index d91b2deae..682143f63 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketBufferOverflowException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; @@ -19,4 +19,4 @@ public WebSocketBufferOverflowException(string message, Exception inner) : base( { } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs index da2e6b590..624dc7726 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketHandshakeFailedException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -9,11 +9,11 @@ namespace Ninja.WebSockets.Exceptions public class WebSocketHandshakeFailedException : Exception { public WebSocketHandshakeFailedException() : base() - { + { } public WebSocketHandshakeFailedException(string message) : base(message) - { + { } public WebSocketHandshakeFailedException(string message, Exception inner) : base(message, inner) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs index 1a54396c7..f23a85a2f 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Exceptions/WebSocketVersionNotSupportedException.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -9,11 +9,11 @@ namespace Ninja.WebSockets.Exceptions public class WebSocketVersionNotSupportedException : Exception { public WebSocketVersionNotSupportedException() : base() - { + { } public WebSocketVersionNotSupportedException(string message) : base(message) - { + { } public WebSocketVersionNotSupportedException(string message, Exception inner) : base(message, inner) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs index bd55e2261..cd0cf70e0 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/HttpHelper.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -49,7 +49,7 @@ public static string CalculateWebSocketKey() byte[] keyAsBytes = new byte[16]; rand.NextBytes(keyAsBytes); return Convert.ToBase64String(keyAsBytes); - } + } /// /// Computes a WebSocket accept string from a given key diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs index 08910cc1a..395a28172 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IBufferPool.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Text; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs index 7763cb31a..e87dbb666 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IPingPongManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading; using System.Threading.Tasks; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs index 171618447..7eb10718c 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketClientFactory.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.IO; using System.Net.WebSockets; using System.Threading; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs index 437a0aaa1..6915463b5 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/IWebSocketServerFactory.cs @@ -1,4 +1,4 @@ -using System.IO; +using System.IO; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs index 9673e0ccb..e31c222d1 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/BinaryReaderWriter.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -47,9 +47,9 @@ public static async Task ReadExactly(int length, Stream stream, ArraySegment ReadUShortExactly(Stream stream, bool isLittleEndian, ArraySegment buffer, CancellationToken cancellationToken) diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs index 518fcd337..310092ebc 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/Events.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -106,7 +106,7 @@ public void ReadingHttpResponse(Guid guid) WriteEvent(8, guid); } } - + [Event(9, Level = EventLevel.Error)] public void ReadHttpResponseError(Guid guid, string exception) { @@ -160,7 +160,7 @@ public void AcceptWebSocketStarted(Guid guid) WriteEvent(14, guid); } } - + [Event(15, Level = EventLevel.Informational)] public void SendingHandshakeResponse(Guid guid, string response) { @@ -390,4 +390,4 @@ public void InvalidStateBeforeCloseOutput(Guid guid, WebSocketState webSocketSta } } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs index 23fe4a111..eb3731773 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrame.cs @@ -1,4 +1,4 @@ -using System.Net.WebSockets; +using System.Net.WebSockets; namespace Ninja.WebSockets.Internal { diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs index 7941bd497..48022bb4f 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameCommon.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs index b771a4197..c9dee08c4 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameReader.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -50,7 +50,7 @@ public static async Task ReadAsync(Stream fromStream, ArraySegme await BinaryReaderWriter.ReadExactly(2, fromStream, smallBuffer, cancellationToken); byte byte1 = smallBuffer.Array[0]; byte byte2 = smallBuffer.Array[1]; - + // process first byte byte finBitFlag = 0x80; byte opCodeFlag = 0x0F; @@ -78,7 +78,7 @@ public static async Task ReadAsync(Stream fromStream, ArraySegme { await BinaryReaderWriter.ReadExactly(count, fromStream, intoBuffer, cancellationToken); } - } + } catch (InternalBufferOverflowException e) { throw new InternalBufferOverflowException($"Supplied buffer too small to read {0} bytes from {Enum.GetName(typeof(WebSocketOpCode), opCode)} frame", e); diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs index 1c00e42e4..53974f2c5 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketFrameWriter.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -29,7 +29,7 @@ namespace Ninja.WebSockets.Internal { // see http://tools.ietf.org/html/rfc6455 for specification // see fragmentation section for sending multi part messages - // EXAMPLE: For a text message sent as three fragments, + // EXAMPLE: For a text message sent as three fragments, // the first fragment would have an opcode of TextFrame and isLastFrame false, // the second fragment would have an opcode of ContinuationFrame and isLastFrame false, // the third fragment would have an opcode of ContinuationFrame and isLastFrame true. @@ -40,7 +40,7 @@ internal static class WebSocketFrameWriter /// Therefore, there are no cryptographic concerns /// private static readonly Random _random; - + static WebSocketFrameWriter() { _random = new Random((int)DateTime.Now.Ticks); diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs index 45975729f..e037c5652 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketImplementation.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -59,7 +59,7 @@ internal class WebSocketImplementation : WebSocket private string _closeStatusDescription; public event EventHandler Pong; - + internal WebSocketImplementation(Guid guid, Func recycledStreamFactory, Stream stream, TimeSpan keepAliveInterval, string secWebSocketExtensions, bool includeExceptionInCloseResponse, bool isClient, string subProtocol) { _guid = guid; @@ -110,7 +110,7 @@ internal WebSocketImplementation(Guid guid, Func recycledStreamFac public override string SubProtocol => _subProtocol; public TimeSpan KeepAliveInterval { get; private set; } - + /// /// Receive web socket result /// @@ -359,7 +359,7 @@ public override void Dispose() catch (Exception ex) { // log dont throw - Events.Log.WebSocketDisposeError(_guid, _state, ex.ToString()); + Events.Log.WebSocketDisposeError(_guid, _state, ex.ToString()); } } @@ -445,7 +445,7 @@ private async Task RespondToCloseFrame(WebSocketFrame fr } else if (_state == WebSocketState.Open) { - // do not echo the close payload back to the client, there is no requirement for it in the spec. + // do not echo the close payload back to the client, there is no requirement for it in the spec. // However, the same CloseStatus as recieved should be sent back. ArraySegment closePayload = new ArraySegment(new byte[0], 0, 0); _state = WebSocketState.CloseReceived; @@ -469,7 +469,7 @@ private async Task RespondToCloseFrame(WebSocketFrame fr /// /// Note that the way in which the stream buffer is accessed can lead to significant performance problems /// You want to avoid a call to stream.ToArray to avoid extra memory allocation - /// MemoryStream can be configured to have its internal buffer accessible. + /// MemoryStream can be configured to have its internal buffer accessible. /// private ArraySegment GetBuffer(MemoryStream stream) { diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs index 1dc004515..6ef2ac0d4 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/Internal/WebSocketOpCode.cs @@ -1,4 +1,4 @@ -namespace Ninja.WebSockets.Internal +namespace Ninja.WebSockets.Internal { internal enum WebSocketOpCode { diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs index 0ba79807b..45e8e3b27 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PingPongManager.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -49,12 +49,12 @@ public class PingPongManager : IPingPongManager /// /// Initialises a new instance of the PingPongManager to facilitate ping pong WebSocket messages. - /// If you are manually creating an instance of this class then it is advisable to set keepAliveInterval to + /// If you are manually creating an instance of this class then it is advisable to set keepAliveInterval to /// TimeSpan.Zero when you create the WebSocket instance (using a factory) otherwise you may be automatically /// be sending duplicate Ping messages (see keepAliveInterval below) /// /// The web socket used to listen to ping messages and send pong messages - /// The time between automatically sending ping messages. + /// The time between automatically sending ping messages. /// Set this to TimeSpan.Zero if you with to manually control sending ping messages. /// /// The token used to cancel a pending ping send AND the automatic sending of ping messages @@ -129,11 +129,11 @@ private async Task PingForever() Events.Log.PingPongManagerEnded(_guid); } - + private void WebSocketImpl_Pong(object sender, PongEventArgs e) { _pingSentTicks = 0; OnPong(e); - } + } } } diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs index 25fcebfa0..027d06b0a 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/PongEventArgs.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs index 7f96e7c3f..1508c5169 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientFactory.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- @@ -158,13 +158,13 @@ private string GetSubProtocolFromHeader(string response) return match.Groups[1].Value.Trim(); } - return null; + return null; } private void ThrowIfInvalidAcceptString(Guid guid, string response, string secWebSocketKey) { // make sure we escape the accept string which could contain special regex characters - string regexPattern = "Sec-WebSocket-Accept: (.*)"; + string regexPattern = "Sec-WebSocket-Accept: (.*)"; Regex regex = new Regex(regexPattern, RegexOptions.IgnoreCase); string actualAcceptString = regex.Match(response).Groups[1].Value.Trim(); diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs index ab67975dc..b6318a8a2 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketClientOptions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Text; @@ -33,7 +33,7 @@ public class WebSocketClientOptions public Dictionary AdditionalHttpHeaders { get; set; } /// - /// Include the full exception (with stack trace) in the close response + /// Include the full exception (with stack trace) in the close response /// when an exception is encountered and the WebSocket connection is closed /// The default is false /// diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs index e91100cd4..f1c85dc0e 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketHttpContext.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.IO; namespace Ninja.WebSockets diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs index c187f46e8..8fb63f232 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerFactory.cs @@ -1,22 +1,22 @@ -// --------------------------------------------------------------------- +// --------------------------------------------------------------------- // Copyright 2018 David Haig // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in +// +// The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // --------------------------------------------------------------------- diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs index 18de58a3f..c347bd57c 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Ninja.WebSockets/WebSocketServerOptions.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Ninja.WebSockets { @@ -18,7 +18,7 @@ public class WebSocketServerOptions public TimeSpan KeepAliveInterval { get; set; } /// - /// Include the full exception (with stack trace) in the close response + /// Include the full exception (with stack trace) in the close response /// when an exception is encountered and the WebSocket connection is closed /// The default is false /// diff --git a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs index f36561c3f..3afd55dde 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/Server.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/Server.cs @@ -13,7 +13,7 @@ namespace Mirror.Websocket { - public class Server + public class Server { public event Action Connected; public event Action ReceivedData; @@ -225,7 +225,7 @@ private async Task ReceiveLoopAsync(WebSocket webSocket, CancellationToken token } // a message might come splitted in multiple frames - // collect all frames + // collect all frames private async Task ReadFrames(int connectionId, WebSocketReceiveResult result, WebSocket webSocket, byte[] buffer, CancellationToken token) { int count = result.Count; @@ -288,7 +288,7 @@ public async void Send(int connectionId, byte[] data) // because all the WriteAsync wake up at once and throw exceptions // by hiding inside this if, I ensure that we only report the first error - // all other errors are swallowed. + // all other errors are swallowed. // this prevents a log storm that freezes the server for several seconds ReceivedError?.Invoke(connectionId, exception); } diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs index a2cbacecb..51a6428a6 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -76,7 +76,7 @@ public override void ClientConnect(string host) public override void ServerStart() { - + if (Secure) { server._secure = Secure; diff --git a/Assets/Mirror/Tests/FloatBytePackerTest.cs b/Assets/Mirror/Tests/FloatBytePackerTest.cs index 2fd53d6ca..d57801fdf 100644 --- a/Assets/Mirror/Tests/FloatBytePackerTest.cs +++ b/Assets/Mirror/Tests/FloatBytePackerTest.cs @@ -22,4 +22,4 @@ public void ScaleByteToFloat() Assert.That(FloatBytePacker.ScaleByteToFloat(255, byte.MinValue, byte.MaxValue, -1, 1), Is.EqualTo(1).Within(0.0001f)); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/MessagePackerTest.cs b/Assets/Mirror/Tests/MessagePackerTest.cs index 71e68fc0d..5023de746 100644 --- a/Assets/Mirror/Tests/MessagePackerTest.cs +++ b/Assets/Mirror/Tests/MessagePackerTest.cs @@ -1,4 +1,4 @@ -using NUnit.Framework; +using NUnit.Framework; namespace Mirror { [TestFixture] @@ -19,4 +19,4 @@ public void TestPacking() Assert.That(unpacked.value, Is.EqualTo("Hello world")); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs index 0f512c030..5eee5ce38 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientGuardWrongClass.cs @@ -20,4 +20,4 @@ class MyStructClass : SyncListSTRUCT {}; [Client] public void CantClientGuardInThisClass() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs index 5a36245bd..31c608808 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcCantBeStatic.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] private static void RpcCantBeStatic() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs index 3c8bf88ad..ae9a624ed 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcStartsWithRpc.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] private void DoesntStartWithRpc() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs index 218a7437e..4d82c665b 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ClientRpcValid.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] private void RpcThatIsTotallyValid() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs index 083d3473a..c008d74fe 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandCantBeStatic.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] private static void CmdCantBeStatic() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs index 9935edd98..cd87a9efa 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandStartsWithCmd.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] private void DoesntStartWithCmd() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs index eb89029f3..b7bc56b75 100644 --- a/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/CommandValid.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] private void CmdThatIsTotallyValid() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs index 0f2582cdc..31d5b014b 100644 --- a/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/GuardCmdWrongClass.cs @@ -29,4 +29,4 @@ public void CantClientGuardInThisClass() {} [ClientCallback] public void CantClientCallbackGuardInThisClass() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs index 112e92a7a..a2506edb9 100644 --- a/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/InvalidType.cs @@ -15,4 +15,4 @@ class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs index 0c33ba4f8..c702f8f77 100644 --- a/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs +++ b/Assets/Mirror/Tests/WeaverTests~/JaggedArray.cs @@ -17,4 +17,4 @@ struct MyStruct class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs index 655ab089d..420d613e4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidDeserializeFieldType.cs @@ -24,4 +24,4 @@ public override void Serialize(NetworkWriter writer) writer.WriteBytesAndSize(payload); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs index 7283242c4..d5f796de5 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageInvalidSerializeFieldType.cs @@ -24,4 +24,4 @@ public override void Deserialize(NetworkReader reader) payload = reader.ReadBytesAndSize(); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs index da068ddbf..78852f2b5 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberGeneric.cs @@ -16,4 +16,4 @@ class PrefabClone : MessageBase public HasGeneric invalidField; public byte[] payload; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs index 74548223a..d1664c65d 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageMemberInterface.cs @@ -16,4 +16,4 @@ class PrefabClone : MessageBase public SuperCoolInterface invalidField; public byte[] payload; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs b/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs index 2ec12b01a..797a78c5d 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageSelfReferencing.cs @@ -14,4 +14,4 @@ class PrefabClone : MessageBase public PrefabClone selfReference = new PrefabClone(); public byte[] payload; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs b/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs index 0f18663f8..935fc9a69 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MessageValid.cs @@ -31,4 +31,4 @@ public override void Serialize(NetworkWriter writer) writer.WriteBytesAndSize(payload); } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs index 0ff05f637..8f6a29ebf 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClient.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [Client] void ThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs index 7e67386ab..7ab9769c3 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientCallback.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [ClientCallback] void ThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs index ec9d66593..a8442fc9e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourClientRpc.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [ClientRpc] void RpcThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs index 5986568e7..3da90b54a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourCommand.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [Command] void CmdThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs index 1fc9eea37..4b0ba98b4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServer.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [Server] void ThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs index a4d69aafb..6f34d0a10 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourServerCallback.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [ServerCallback] void ThisCantBeOutsideNetworkBehaviour() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs index 1763d9c87..cb1ecc070 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncList.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : MonoBehaviour { SyncListInt potato; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs index 8c5353850..639d076f5 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourSyncVar.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [SyncVar] int potato; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs index ba860aa6d..380a47dab 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourTargetRpc.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : MonoBehaviour [TargetRpc] void TargetThisCantBeOutsideNetworkBehaviour(NetworkConnection nc) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs index bc969a00b..bf06ae2ef 100644 --- a/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/MonoBehaviourValid.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : MonoBehaviour { int monkeys = 12; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs index 6497e1a24..28a7ff79d 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourAbstractBaseValid.cs @@ -16,4 +16,4 @@ public class EntityTest : EntityConcrete [SyncVar] public int concreteDerivedSync; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs index a31119682..8825a9673 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcCoroutine.cs @@ -13,4 +13,4 @@ public IEnumerator RpcCantHaveCoroutine() yield return null; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs index 54d298139..c54ba2303 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcDuplicateName.cs @@ -13,4 +13,4 @@ public void RpcCantHaveSameName(int abc) {} [ClientRpc] public void RpcCantHaveSameName(int abc, int def) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs index 3f407089a..4458395d3 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcGenericParam.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] public void RpcCantHaveGeneric() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs index 08d80004e..98fb91196 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamAbstract.cs @@ -14,4 +14,4 @@ public abstract class AbstractClass [ClientRpc] public void RpcCantHaveParamAbstract(AbstractClass monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs index 356403aca..2ea126960 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamComponent.cs @@ -14,4 +14,4 @@ public class ComponentClass : UnityEngine.Component [ClientRpc] public void RpcCantHaveParamComponent(ComponentClass monkeyComp) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs index ae9cff4e7..fad089a97 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamNetworkConnection.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] public void RpcCantHaveParamOptional(NetworkConnection monkeyCon) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs index c0fea08c2..165dff779 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOptional.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] public void RpcCantHaveParamOptional(int monkeys = 12) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs index 2a6e319d4..a4a31f720 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamOut.cs @@ -12,4 +12,4 @@ public void RpcCantHaveParamOut(out int monkeys) monkeys = 12; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs index c64365598..3206d0c31 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcParamRef.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [ClientRpc] public void RpcCantHaveParamRef(ref int monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs index 9c1c9a00a..a44e1c2de 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourClientRpcVoidReturn.cs @@ -13,4 +13,4 @@ public int RpcCantHaveNonVoidReturn() return 1; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs index 4dbc106fa..3b862bd44 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdCoroutine.cs @@ -13,4 +13,4 @@ public IEnumerator CmdCantHaveCoroutine() yield return null; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs index 36d576a12..c6a25cfa2 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdDuplicateName.cs @@ -13,4 +13,4 @@ public void CmdCantHaveSameName(int abc) {} [Command] public void CmdCantHaveSameName(int abc, int def) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs index dbea2fd5f..1a97e26dd 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdGenericParam.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] public void CmdCantHaveGeneric() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs index ebdbdeb22..c70c72334 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamAbstract.cs @@ -14,4 +14,4 @@ public abstract class AbstractClass [Command] public void CmdCantHaveParamAbstract(AbstractClass monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs index daf33b24b..99821f14e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamComponent.cs @@ -14,4 +14,4 @@ public class ComponentClass : UnityEngine.Component [Command] public void CmdCantHaveParamComponent(ComponentClass monkeyComp) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs index 96ff843a4..2c266c256 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamNetworkConnection.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] public void CmdCantHaveParamOptional(NetworkConnection monkeyCon) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs index 78a26c26c..d5698aef4 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOptional.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] public void CmdCantHaveParamOptional(int monkeys = 12) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs index e3b7b8079..e933bc561 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamOut.cs @@ -12,4 +12,4 @@ public void CmdCantHaveParamOut(out int monkeys) monkeys = 12; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs index 2be25b29e..1af606d88 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdParamRef.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [Command] public void CmdCantHaveParamRef(ref int monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs index bacb7791e..833fd7b90 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourCmdVoidReturn.cs @@ -13,4 +13,4 @@ public int CmdCantHaveNonVoidReturn() return 1; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs index 82a98c98c..d6b8e226a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourGeneric.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour { T genericsNotAllowed; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs index a16591301..7d73fb95e 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcCoroutine.cs @@ -13,4 +13,4 @@ public IEnumerator TargetRpcCantHaveCoroutine() yield return null; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs index be40e9a22..a6543ddcf 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcDuplicateName.cs @@ -13,4 +13,4 @@ public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc) {} [TargetRpc] public void TargetRpcCantHaveSameName(NetworkConnection monkeyCon, int abc, int def) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs index 2f1818e84..80b1fbe5f 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcGenericParam.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] public void TargetRpcCantHaveGeneric() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs index bcf675b36..1cdb89b72 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamAbstract.cs @@ -14,4 +14,4 @@ public abstract class AbstractClass [TargetRpc] public void TargetRpcCantHaveParamAbstract(NetworkConnection monkeyCon, AbstractClass monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs index 38e4c1240..aab2b7565 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamComponent.cs @@ -14,4 +14,4 @@ public class ComponentClass : UnityEngine.Component [TargetRpc] public void TargetRpcCantHaveParamComponent(NetworkConnection monkeyCon, ComponentClass monkeyComp) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs index 78285f0f4..4e141b4fc 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnection.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs index 08b0f55c0..e0db213e9 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamNetworkConnectionNotFirst.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] public void TargetRpcCantHaveParamOptional(int abc, NetworkConnection monkeyCon) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs index ea0d6e98a..10e8bbf98 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOptional.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] public void TargetRpcCantHaveParamOptional(NetworkConnection monkeyCon, int monkeys = 12) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs index 000a7a194..3664f43a7 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamOut.cs @@ -12,4 +12,4 @@ public void TargetRpcCantHaveParamOut(NetworkConnection monkeyCon, out int monke monkeys = 12; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs index bf246b072..8b832f79a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcParamRef.cs @@ -9,4 +9,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] public void TargetRpcCantHaveParamRef(NetworkConnection monkeyCon, ref int monkeys) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs index 3f4d242fc..f59db6879 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourTargetRpcVoidReturn.cs @@ -13,4 +13,4 @@ public int TargetRpcCantHaveNonVoidReturn() return 1; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs index 936b96f6b..02880aed0 100644 --- a/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/NetworkBehaviourValid.cs @@ -8,4 +8,4 @@ class MirrorTestPlayer : NetworkBehaviour [SyncVar] public int durpatron9000 = 12; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs b/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs index 278b5ab9a..224c9e84f 100644 --- a/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs +++ b/Assets/Mirror/Tests/WeaverTests~/RecursionCount.cs @@ -21,4 +21,4 @@ public class Potato1 [SyncVar] Potato0 recursionTime; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs index ed53c8025..404df2716 100644 --- a/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs +++ b/Assets/Mirror/Tests/WeaverTests~/ServerGuardWrongClass.cs @@ -20,4 +20,4 @@ class MyStructClass : SyncListSTRUCT {}; [Server] public void CantServerGuardInThisClass() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs index 289de4e07..c81a675ee 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventParamGeneric.cs @@ -12,4 +12,4 @@ class MirrorTestPlayer : NetworkBehaviour [SyncEvent] public event MySyncEventDelegate EventDoCoolThingsWithExcitingPeople; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs index 97449db80..1f8e16ffd 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventStartsWithEvent.cs @@ -12,4 +12,4 @@ class MirrorTestPlayer : NetworkBehaviour [SyncEvent] public event MySyncEventDelegate DoCoolThingsWithExcitingPeople; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs index 07c161c49..2c3d1cd9f 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncEventValid.cs @@ -12,4 +12,4 @@ class MirrorTestPlayer : NetworkBehaviour [SyncEvent] public event MySyncEventDelegate EventDoCoolThingsWithExcitingPeople; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs index f3b26fab9..4847e5860 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListMissingParamlessCtor.cs @@ -14,4 +14,4 @@ protected override void SerializeItem(NetworkWriter w, string item) {} public SyncListString2 Foo; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs index 559306a83..7c5dc988b 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructGenericGeneric.cs @@ -24,4 +24,4 @@ class MyStructClass : SyncListSTRUCT> {}; MyStructClass harpseals; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs index a2de28a85..2fb4815ac 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberBasicType.cs @@ -27,4 +27,4 @@ public MyStructClass(int numberOfPotatoes) MyStructClass harpseals; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs index 00ceb5c9c..37b555944 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberGeneric.cs @@ -24,4 +24,4 @@ class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs index 4e3544c28..34b7ee69a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructMemberInterface.cs @@ -19,4 +19,4 @@ class MyStructClass : SyncListSTRUCT {}; MyStructClass harpseals; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs index be44e81b6..57af48eb6 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListStructValid.cs @@ -14,4 +14,4 @@ struct MyStruct class MyStructClass : SyncListSTRUCT {}; MyStructClass Foo; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs index 9113986b8..7ce3b83f2 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncListValid.cs @@ -7,4 +7,4 @@ class MirrorTestPlayer : NetworkBehaviour { public SyncListInt Foo; } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs index 6fa0c9a79..675401d50 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsCantBeArray.cs @@ -20,4 +20,4 @@ public void TakeDamage(int amount) health -= amount; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs index 030d4b1f3..23da7feaf 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedNetworkBehaviour.cs @@ -28,4 +28,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs index a51b2cec5..2701c63ee 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDerivedScriptableObject.cs @@ -28,4 +28,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs index db6459fc3..757f44fca 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsDifferentModule.cs @@ -24,4 +24,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs index 76bdd2a5b..a15d68458 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsGenericParam.cs @@ -28,4 +28,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs index d754c5702..c48c7e27c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsInterface.cs @@ -28,4 +28,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs index 037c6cc39..4380264f3 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsMoreThan63.cs @@ -85,4 +85,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs index 5ef338902..702838673 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHook.cs @@ -16,4 +16,4 @@ public void TakeDamage(int amount) health -= amount; } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs index 8c09b8d9a..2e26ec63b 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsNoHookParams.cs @@ -21,4 +21,4 @@ void OnChangeHealth() // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs index 4773f7cc6..5948ec26a 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsStatic.cs @@ -24,4 +24,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs index f75cabe65..6bb309ae0 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsSyncList.cs @@ -37,4 +37,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs index 58201c1bc..f55ca48b7 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsTooManyHookParams.cs @@ -21,4 +21,4 @@ void OnChangeHealth(int health, int extraFunParam) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs index afe6eefba..aec7595db 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsValid.cs @@ -84,4 +84,4 @@ void OnChangeHealth(int health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs b/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs index c32833222..d197c20a1 100644 --- a/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs +++ b/Assets/Mirror/Tests/WeaverTests~/SyncVarsWrongHookType.cs @@ -21,4 +21,4 @@ void OnChangeHealth(bool health) // do things with your health bar } } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs index 1257e8c7c..3520cba06 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcCantBeStatic.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] private static void TargetCantBeStatic(NetworkConnection nc) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs index a18289fed..3fd679339 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionMissing.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] private void TargetRpcMethod() {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs index 6d46a3f4c..8c12090fb 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcNetworkConnectionNotFirst.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] private void TargetRpcMethod(int potatoesRcool, NetworkConnection nc) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs index 83f1ce1e9..b9b24118c 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcStartsWithTarget.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] private void DoesntStartWithTarget(NetworkConnection nc) {} } -} \ No newline at end of file +} diff --git a/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs index 0f12f63e4..3f80ece1d 100644 --- a/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs +++ b/Assets/Mirror/Tests/WeaverTests~/TargetRpcValid.cs @@ -10,4 +10,4 @@ class MirrorTestPlayer : NetworkBehaviour [TargetRpc] private void TargetThatIsTotallyValid(NetworkConnection nc) {} } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Extensions.cs b/Weaver/Weaver/Extensions.cs index 2e5267005..e49354140 100644 --- a/Weaver/Weaver/Extensions.cs +++ b/Weaver/Weaver/Extensions.cs @@ -102,4 +102,4 @@ public static bool CanBeResolved(this TypeReference parent) return true; } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/CommandProcessor.cs b/Weaver/Weaver/Processors/CommandProcessor.cs index 72ed4d6b6..807e65cf7 100644 --- a/Weaver/Weaver/Processors/CommandProcessor.cs +++ b/Weaver/Weaver/Processors/CommandProcessor.cs @@ -151,4 +151,4 @@ public static bool ProcessMethodsValidateCommand(TypeDefinition td, MethodDefini NetworkBehaviourProcessor.ProcessMethodsValidateParameters(td, md, ca, "Command"); } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs index 0250202eb..a50ae10d4 100644 --- a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs @@ -83,4 +83,4 @@ static void ProcessMethods(TypeDefinition td) } } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/SyncEventProcessor.cs b/Weaver/Weaver/Processors/SyncEventProcessor.cs index feb6b8d07..eec864e47 100644 --- a/Weaver/Weaver/Processors/SyncEventProcessor.cs +++ b/Weaver/Weaver/Processors/SyncEventProcessor.cs @@ -150,4 +150,4 @@ public static void ProcessEvents(TypeDefinition td, List events } } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/SyncListProcessor.cs b/Weaver/Weaver/Processors/SyncListProcessor.cs index 54e41861e..83cfdfd43 100644 --- a/Weaver/Weaver/Processors/SyncListProcessor.cs +++ b/Weaver/Weaver/Processors/SyncListProcessor.cs @@ -45,4 +45,4 @@ public static void GenerateSyncListInstanceInitializer(ILProcessor ctorWorker, F ctorWorker.Append(ctorWorker.Create(OpCodes.Stfld, fd)); } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/SyncObjectProcessor.cs b/Weaver/Weaver/Processors/SyncObjectProcessor.cs index 1c562075e..5841fb376 100644 --- a/Weaver/Weaver/Processors/SyncObjectProcessor.cs +++ b/Weaver/Weaver/Processors/SyncObjectProcessor.cs @@ -40,4 +40,4 @@ public static void GenerateSyncObjectInitializer(ILProcessor methodWorker, Field methodWorker.Append(methodWorker.Create(OpCodes.Call, Weaver.InitSyncObjectReference)); } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/SyncVarProcessor.cs b/Weaver/Weaver/Processors/SyncVarProcessor.cs index f953efc1c..11938d26d 100644 --- a/Weaver/Weaver/Processors/SyncVarProcessor.cs +++ b/Weaver/Weaver/Processors/SyncVarProcessor.cs @@ -361,4 +361,4 @@ public static void ProcessSyncVars(TypeDefinition td, List sync Weaver.SetNumSyncVars(td.FullName, numSyncVars); } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Weaver/Weaver/Processors/TargetRpcProcessor.cs index 7e1c0af08..1ef9e4dfd 100644 --- a/Weaver/Weaver/Processors/TargetRpcProcessor.cs +++ b/Weaver/Weaver/Processors/TargetRpcProcessor.cs @@ -133,4 +133,4 @@ public static bool ProcessMethodsValidateTargetRpc(TypeDefinition td, MethodDefi return NetworkBehaviourProcessor.ProcessMethodsValidateParameters(td, md, ca, "Target Rpc"); } } -} \ No newline at end of file +} diff --git a/Weaver/Weaver/Resolvers.cs b/Weaver/Weaver/Resolvers.cs index 7e265af37..058a51954 100644 --- a/Weaver/Weaver/Resolvers.cs +++ b/Weaver/Weaver/Resolvers.cs @@ -150,4 +150,4 @@ public static MethodReference ResolveProperty(TypeReference tr, AssemblyDefiniti return null; } } -} \ No newline at end of file +} From aae2e7d871fcd43436fb927d572fff9311fd9911 Mon Sep 17 00:00:00 2001 From: Gleb Date: Wed, 6 Mar 2019 19:09:42 +0200 Subject: [PATCH 157/276] docs_Components_NetworkManager article rewritten (#562) * Docs: NetworkManager article rewritten Screenshots changed to those relevant to Mirror`s NetworkManager (made them myself) Any information derived from UNet docs that is false in view of Mirror is deleted. Added some mentions of Transport component at lines 23, 39 and 265 Some minor changes made in order to make article more consistent. * Fixing typing mistakes in docs-Components-NetworkManager.md --- .../NetworkAddressAndPortSettings.png | Bin 18447 -> 39148 bytes docs/Components/NetworkManager.md | 78 ++++-------------- docs/Components/NetworkManagerInspector.png | Bin 17729 -> 38739 bytes docs/Components/NetworkManagerSpawnInfo.png | Bin 8208 -> 8050 bytes 4 files changed, 16 insertions(+), 62 deletions(-) diff --git a/docs/Components/NetworkAddressAndPortSettings.png b/docs/Components/NetworkAddressAndPortSettings.png index 918fed3c961f630959d5a929fae5beb8e19e6b5a..9900aca15ca501791e2be17c37ac9e79d1123466 100644 GIT binary patch literal 39148 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

    ? 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

    Tf*H@^xojjA^ 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 S8+X&b0UsMndu*u%A@)Bcr>ouo literal 0 HcmV?d00001 diff --git a/docs/Transports/Multiplexer.md b/docs/Transports/Multiplexer.md index 14322bc0e..1d7b29ded 100644 --- a/docs/Transports/Multiplexer.md +++ b/docs/Transports/Multiplexer.md @@ -1,3 +1,23 @@ -# Multiplexer +# MultiplexTransport -General description of Multiplexer +The MultiplexTransport is not a transport itself, but it allows you to combine other transports so that your clients can connect to your servers via either one of them. + +A prime use case for the MultiplexTransport is having a server that listens to both websockets and TCP (or an RUDP transport). Your web based clients can connect to the server using websockets, and your mobile or desktop clients can connect to the same server via TCP or other transports and interact with each other. In HLAPI, you had to chose between websockets and UDP, but you could not use both at the same time. While the most common use case is websocket + TCP, you can configure any number of transports in the multiplex transport. + +To use the MultiplexTransport follow these steps: + +1) Add a gameobject with a NetworkManager to your scene if you have not done so +2) By default, Unity will add TelepathyTransport to your NetworkManager GameObject +3) Add a MultiplexTransport component to the gameobject +4) Assign the MultiplexTransport component in your NetworkManager's transport +5) Add a WebsocketTransport component to the gameobject +6) Add the TelepathyTransport component to the MultiplexTransport as the first transport +7) Add the WebsocketTransport component to the MultiplexTransport as the second transport + +Please note that Telepathy and WebsocketTransport cannot listen to the same port. By default Telepathy listens to 7777 and the websocket transport listents to 7778. If you change this configuration, make sure they use different ports. + +If you build your game as a webgl game, the TelepathyTransport will be skipped and your client will use the websocket transport. If you build your game as a mobile or desktop app, it will choose TelepathyTransport. The server will happily accept connections from both. + +Here is what the configuration should look like: + +![Multiplex Example](MultiplexSample.png) \ No newline at end of file From b9c5aefcc15e32b4d52dc85fba6ea90ebaf14352 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Mon, 11 Mar 2019 18:16:24 -0500 Subject: [PATCH 179/276] Fix bullets in Multiplex doc --- docs/Transports/Multiplexer.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/Transports/Multiplexer.md b/docs/Transports/Multiplexer.md index 1d7b29ded..0149fea22 100644 --- a/docs/Transports/Multiplexer.md +++ b/docs/Transports/Multiplexer.md @@ -6,13 +6,13 @@ A prime use case for the MultiplexTransport is having a server that listens to b To use the MultiplexTransport follow these steps: -1) Add a gameobject with a NetworkManager to your scene if you have not done so -2) By default, Unity will add TelepathyTransport to your NetworkManager GameObject -3) Add a MultiplexTransport component to the gameobject -4) Assign the MultiplexTransport component in your NetworkManager's transport -5) Add a WebsocketTransport component to the gameobject -6) Add the TelepathyTransport component to the MultiplexTransport as the first transport -7) Add the WebsocketTransport component to the MultiplexTransport as the second transport +1. Add a gameobject with a NetworkManager to your scene if you have not done so +2. By default, Unity will add TelepathyTransport to your NetworkManager GameObject +3. Add a MultiplexTransport component to the gameobject +4. Assign the MultiplexTransport component in your NetworkManager's transport +5. Add a WebsocketTransport component to the gameobject +6. Add the TelepathyTransport component to the MultiplexTransport as the first transport +7. Add the WebsocketTransport component to the MultiplexTransport as the second transport Please note that Telepathy and WebsocketTransport cannot listen to the same port. By default Telepathy listens to 7777 and the websocket transport listents to 7778. If you change this configuration, make sure they use different ports. @@ -20,4 +20,4 @@ If you build your game as a webgl game, the TelepathyTransport will be skipped Here is what the configuration should look like: -![Multiplex Example](MultiplexSample.png) \ No newline at end of file +![Multiplex Example](MultiplexSample.png) From 6eb2baaf55794806f57bbd6cfd86c21a49065158 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Mon, 11 Mar 2019 18:23:42 -0500 Subject: [PATCH 180/276] Better grammar and typos --- docs/Transports/Multiplexer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Transports/Multiplexer.md b/docs/Transports/Multiplexer.md index 0149fea22..64cb62555 100644 --- a/docs/Transports/Multiplexer.md +++ b/docs/Transports/Multiplexer.md @@ -2,7 +2,7 @@ The MultiplexTransport is not a transport itself, but it allows you to combine other transports so that your clients can connect to your servers via either one of them. -A prime use case for the MultiplexTransport is having a server that listens to both websockets and TCP (or an RUDP transport). Your web based clients can connect to the server using websockets, and your mobile or desktop clients can connect to the same server via TCP or other transports and interact with each other. In HLAPI, you had to chose between websockets and UDP, but you could not use both at the same time. While the most common use case is websocket + TCP, you can configure any number of transports in the multiplex transport. +A common use case for the MultiplexTransport is a server listening to both websockets and TCP. Your webgl clients can connect to the server using websockets and your mobile or desktop clients can connect to the same server via TCP. In HLAPI, you had to chose between websockets and UDP, but you cannot use both at the same time. You can configure any number of transports in the MultiplexTransport. To use the MultiplexTransport follow these steps: @@ -14,7 +14,7 @@ To use the MultiplexTransport follow these steps: 6. Add the TelepathyTransport component to the MultiplexTransport as the first transport 7. Add the WebsocketTransport component to the MultiplexTransport as the second transport -Please note that Telepathy and WebsocketTransport cannot listen to the same port. By default Telepathy listens to 7777 and the websocket transport listents to 7778. If you change this configuration, make sure they use different ports. +Please note that Telepathy and WebsocketTransport cannot listen to the same port. By default Telepathy listens to 7777 and the websocket transport listens to 7778. If you build your game as a webgl game, the TelepathyTransport will be skipped and your client will use the websocket transport. If you build your game as a mobile or desktop app, it will choose TelepathyTransport. The server will happily accept connections from both. From 303d0f4b3a04bd5065fc2b4585060ee0f617a947 Mon Sep 17 00:00:00 2001 From: MrGadget Date: Mon, 11 Mar 2019 19:51:34 -0400 Subject: [PATCH 181/276] Reverted spelling error from #537 (#584) --- Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs index 3168253b4..8b3023ad6 100644 --- a/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs +++ b/Assets/Mirror/Examples/Lobby/Scripts/NetworkLobbyPlayerExt.cs @@ -18,7 +18,7 @@ This demonstrates how to set the parent of the LobbyPlayerPrefab to an arbitrary A similar technique would be used if a full canvas layout UI existed and we wanted to show something more visual for each player in that layout, such as a name, avatar, etc. - Note: LobbyPAlayer prefab will be marked DontDestroyOnLoad and carried forward to the game scene. + Note: LobbyPlayer prefab will be marked DontDestroyOnLoad and carried forward to the game scene. Because of this, NetworkLobbyManager must automatically set the parent to null in ServerChangeScene and OnClientChangeScene. */ From b0ef89a0d9baee5d33b72fdd51e6fc5ad1465b74 Mon Sep 17 00:00:00 2001 From: vis2k Date: Tue, 12 Mar 2019 18:45:42 +0100 Subject: [PATCH 182/276] resave scenes because of new sceneIDs --- .../Examples/Lobby/Scenes/OnlineScene.unity | 148 ++++++++++++------ .../Mirror/Examples/Pong/Scenes/Scene.unity | 5 + 2 files changed, 102 insertions(+), 51 deletions(-) diff --git a/Assets/Mirror/Examples/Lobby/Scenes/OnlineScene.unity b/Assets/Mirror/Examples/Lobby/Scenes/OnlineScene.unity index c11c87c10..007dbe583 100644 --- a/Assets/Mirror/Examples/Lobby/Scenes/OnlineScene.unity +++ b/Assets/Mirror/Examples/Lobby/Scenes/OnlineScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.1802836, g: 0.22571391, b: 0.3069226, a: 1} + m_IndirectSpecularColor: {r: 0.4616949, g: 0.5124162, b: 0.5899328, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -50,7 +50,6 @@ LightmapSettings: m_BounceScale: 1 m_IndirectOutputScale: 1 m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 m_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 @@ -118,7 +117,8 @@ NavMeshSettings: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 29930035} @@ -135,22 +135,24 @@ GameObject: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 29930032} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 9b91ecbcc199f4492b9a91e820070131, type: 3} m_Name: m_EditorClassIdentifier: - m_SceneId: 0 m_ServerOnly: 1 m_LocalPlayerAuthority: 0 m_AssetId: + m_SceneId: 6047645 --- !u!114 &29930034 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 29930032} m_Enabled: 1 m_EditorHideFlags: 0 @@ -159,12 +161,13 @@ MonoBehaviour: m_EditorClassIdentifier: syncInterval: 0.1 prizePrefab: {fileID: 114251241889735402, guid: 52f1c9ea06cfd154cb68ff9d1b66fc13, - type: 2} + type: 3} --- !u!4 &29930035 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 29930032} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -177,7 +180,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 151116942} @@ -193,7 +197,8 @@ GameObject: Light: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 151116940} m_Enabled: 1 serializedVersion: 8 @@ -230,7 +235,8 @@ Light: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 151116940} m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 0, y: 10, z: 0} @@ -243,7 +249,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 204334130} @@ -259,7 +266,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 204334129} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: -15} @@ -272,7 +280,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 204334129} m_Enabled: 1 m_EditorHideFlags: 0 @@ -283,7 +292,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 263230755} @@ -299,7 +309,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 263230754} m_LocalRotation: {x: 0, y: 0.38268343, z: 0, w: 0.92387956} m_LocalPosition: {x: -15, y: 0, z: -15} @@ -312,7 +323,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 263230754} m_Enabled: 1 m_EditorHideFlags: 0 @@ -323,7 +335,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 290557150} @@ -339,7 +352,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 290557149} m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} m_LocalPosition: {x: -15, y: 0, z: 0} @@ -352,7 +366,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 290557149} m_Enabled: 1 m_EditorHideFlags: 0 @@ -363,7 +378,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 733367780} @@ -379,7 +395,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 733367779} m_LocalRotation: {x: -0, y: 1, z: -0, w: 0} m_LocalPosition: {x: 0, y: 0, z: 15} @@ -392,7 +409,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 733367779} m_Enabled: 1 m_EditorHideFlags: 0 @@ -403,7 +421,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 990635330} @@ -419,7 +438,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 990635329} m_LocalRotation: {x: 0, y: 0.92387956, z: 0, w: 0.38268343} m_LocalPosition: {x: -15, y: 0, z: 15} @@ -432,7 +452,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 990635329} m_Enabled: 1 m_EditorHideFlags: 0 @@ -443,7 +464,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1050066545} @@ -460,14 +482,16 @@ GameObject: AudioListener: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1050066542} m_Enabled: 1 --- !u!20 &1050066544 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1050066542} m_Enabled: 1 serializedVersion: 2 @@ -476,6 +500,7 @@ Camera: m_projectionMatrixMode: 1 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} + m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 @@ -507,7 +532,8 @@ Camera: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1050066542} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 2, z: -10} @@ -520,7 +546,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1305256745} @@ -542,7 +569,8 @@ GameObject: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -554,7 +582,8 @@ BoxCollider: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -566,7 +595,8 @@ BoxCollider: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -578,7 +608,8 @@ BoxCollider: BoxCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -590,7 +621,8 @@ BoxCollider: MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Enabled: 1 m_CastShadows: 1 @@ -600,6 +632,7 @@ MeshRenderer: m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 3201636fa507dad448e9a36d66a80825, type: 2} m_StaticBatchInfo: @@ -625,7 +658,8 @@ MeshRenderer: MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Material: {fileID: 0} m_IsTrigger: 0 @@ -633,20 +667,21 @@ MeshCollider: serializedVersion: 3 m_Convex: 0 m_CookingOptions: 14 - m_SkinWidth: 0.01 m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!33 &1305256744 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!4 &1305256745 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1305256737} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -659,7 +694,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1445635740} @@ -674,7 +710,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1445635739} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1.08, z: 0} @@ -695,7 +732,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1760045337} @@ -711,7 +749,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1760045336} m_LocalRotation: {x: 0, y: 0.3826836, z: -0, w: -0.92387944} m_LocalPosition: {x: 15, y: 0, z: -15} @@ -724,7 +763,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1760045336} m_Enabled: 1 m_EditorHideFlags: 0 @@ -735,7 +775,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 1975674813} @@ -751,7 +792,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1975674812} m_LocalRotation: {x: 0, y: 0.7071068, z: -0, w: -0.7071068} m_LocalPosition: {x: 15, y: 0, z: 0} @@ -764,7 +806,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1975674812} m_Enabled: 1 m_EditorHideFlags: 0 @@ -775,7 +818,8 @@ MonoBehaviour: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 2127619492} @@ -791,7 +835,8 @@ GameObject: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2127619491} m_LocalRotation: {x: 0, y: 0.9238796, z: -0, w: -0.38268325} m_LocalPosition: {x: 15, y: 0, z: 15} @@ -804,7 +849,8 @@ Transform: MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2127619491} m_Enabled: 1 m_EditorHideFlags: 0 diff --git a/Assets/Mirror/Examples/Pong/Scenes/Scene.unity b/Assets/Mirror/Examples/Pong/Scenes/Scene.unity index eb684550c..d58bbee42 100644 --- a/Assets/Mirror/Examples/Pong/Scenes/Scene.unity +++ b/Assets/Mirror/Examples/Pong/Scenes/Scene.unity @@ -384,6 +384,11 @@ PrefabInstance: propertyPath: m_Simulated value: 0 objectReference: {fileID: 0} + - target: {fileID: 114290021321007948, guid: 5f7a7f34494ed40268eff49dbf9168bf, + type: 3} + propertyPath: m_SceneId + value: 14060562 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 5f7a7f34494ed40268eff49dbf9168bf, type: 3} --- !u!1 &1346799726 From dea7b587925812952f56db331cf75275a25c8ce1 Mon Sep 17 00:00:00 2001 From: Liu Date: Wed, 13 Mar 2019 19:15:34 +0800 Subject: [PATCH 183/276] Fix network animator doesn't sync float value as expected (#589) Maybe we should do float sync when the Abs of newValue - lastValue > 0.001f --- Assets/Mirror/Components/NetworkAnimator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index dd3846614..450c12553 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -230,7 +230,7 @@ bool WriteParameters(NetworkWriter writer, bool autoSend) else if (par.type == AnimatorControllerParameterType.Float) { float newFloatValue = m_Animator.GetFloat(par.nameHash); - if (Mathf.Abs(newFloatValue - lastFloatParameters[i]) < 0.001f) + if (Mathf.Abs(newFloatValue - lastFloatParameters[i]) > 0.001f) { writer.Write(newFloatValue); dirtyBits |= 1u << i; From 00a1004b4137dd0fbe78e232d48c9e92b44d1943 Mon Sep 17 00:00:00 2001 From: vis2k Date: Wed, 13 Mar 2019 12:17:04 +0100 Subject: [PATCH 184/276] Weaver sourcebased hlapi2019.2package (#587) * move weaver into assets folder * disable tests for now * asmdef * add logs * Use UNET's WeaverRunner code, slightly modified to find Mirror assembly * Use UNET's 2019.2 package Weave function changes * compiler messages error checked moved into separate function * fix typo * syntax * replace 'var' * rename * replace var * fix log * update comment * syntax * rename to assemblyPath. no need for an extra variable. * remove extra variable * fix typo * remove old code * don't use .Contains to find Mirror dll. that's crazy. would fail for all DLLs in Mirror folder. * look for 'this' assembly separately * separate unityEngine assembly search * add comment * move null check up * move null check upwards * move outputDirectory down * check process result properly * use our previous way to find unity engine dll * rename to unityEngineCoreModuleDLL again * improve output directory construction * move unityengine dll finding upwards * move foundThisAssembly down, where it is used * add comments * split dependency code into separate functions * add TODO * store this assembly in a variable * split dependency search depending on if we found assembly or not * move usesMirror logic into if and out of 'not found' else * syntax * improve order * GetNonDynamicAssemblyDirectories helper function * check File.Exists instead of exception * improve comment * rename HlapiRuntimeAssemblyName to MirrorAssemblyName * reuse MirrorAssemblyName * remove telepathy check * rename to MirrorRuntimeAssemblyName * add MirrorWeaverAssemblyName * reuse name consts * don't use contains to check if assembly depends on Mirror * add actions for testing again * make CompilationFinishedHook public so it can be used by tests * fix typo * Mirror.Tests.asmdef references weaver asmdef * reenable tests * pass error handlers to Weaver Processing for tests to work --- Assets/Mirror/Editor/Weaver.meta | 8 + .../Editor/Weaver/CompilationFinishedHook.cs | 201 ++++++++++++++++++ .../Weaver/CompilationFinishedHook.cs.meta | 11 + .../Mirror/Editor}/Weaver/Extensions.cs | 0 .../Mirror/Editor/Weaver/Extensions.cs.meta | 11 + .../Mirror/Editor}/Weaver/Helpers.cs | 0 Assets/Mirror/Editor/Weaver/Helpers.cs.meta | 11 + .../Mirror/Editor/Weaver/Mirror.Weaver.asmdef | 14 ++ .../Editor/Weaver/Mirror.Weaver.asmdef.meta | 7 + Assets/Mirror/Editor/Weaver/Processors.meta | 8 + .../Weaver/Processors/CommandProcessor.cs | 0 .../Processors/CommandProcessor.cs.meta | 11 + .../Processors/MessageClassProcessor.cs | 0 .../Processors/MessageClassProcessor.cs.meta | 11 + .../Processors/MonoBehaviourProcessor.cs | 0 .../Processors/MonoBehaviourProcessor.cs.meta | 11 + .../Processors/NetworkBehaviourProcessor.cs | 0 .../NetworkBehaviourProcessor.cs.meta | 11 + .../Editor}/Weaver/Processors/RpcProcessor.cs | 0 .../Weaver/Processors/RpcProcessor.cs.meta | 11 + .../Weaver/Processors/SyncEventProcessor.cs | 0 .../Processors/SyncEventProcessor.cs.meta | 11 + .../Weaver/Processors/SyncListProcessor.cs | 0 .../Processors/SyncListProcessor.cs.meta | 11 + .../Processors/SyncListStructProcessor.cs | 0 .../SyncListStructProcessor.cs.meta | 11 + .../Weaver/Processors/SyncObjectProcessor.cs | 0 .../Processors/SyncObjectProcessor.cs.meta | 11 + .../Weaver/Processors/SyncVarProcessor.cs | 0 .../Processors/SyncVarProcessor.cs.meta | 11 + .../Weaver/Processors/TargetRpcProcessor.cs | 0 .../Processors/TargetRpcProcessor.cs.meta | 11 + .../Mirror/Editor}/Weaver/Program.cs | 4 +- Assets/Mirror/Editor/Weaver/Program.cs.meta | 11 + .../Mirror/Editor}/Weaver/Resolvers.cs | 0 Assets/Mirror/Editor/Weaver/Resolvers.cs.meta | 11 + .../Mirror/Editor}/Weaver/Weaver.cs | 139 ++++++------ Assets/Mirror/Editor/Weaver/Weaver.cs.meta | 11 + Assets/Mirror/Plugins/Mirror.Weaver.dll | Bin 77312 -> 0 bytes Assets/Mirror/Plugins/Mirror.Weaver.dll.meta | 30 --- Assets/Mirror/Tests/Mirror.Tests.asmdef | 9 +- .../Unity.Cecil/lib/net35/Unity.Cecil.Mdb.dll | Bin 44032 -> 0 bytes .../Unity.Cecil/lib/net35/Unity.Cecil.Mdb.pdb | Bin 120320 -> 0 bytes .../Unity.Cecil/lib/net35/Unity.Cecil.Pdb.dll | Bin 87552 -> 0 bytes .../Unity.Cecil/lib/net35/Unity.Cecil.Pdb.pdb | Bin 165376 -> 0 bytes .../lib/net35/Unity.Cecil.Rocks.dll | Bin 28672 -> 0 bytes .../lib/net35/Unity.Cecil.Rocks.pdb | Bin 58880 -> 0 bytes .../Unity.Cecil/lib/net35/Unity.Cecil.dll | Bin 346624 -> 0 bytes .../Unity.Cecil/lib/net35/Unity.Cecil.pdb | Bin 1220096 -> 0 bytes Weaver/External/Unity.Cecil/version.txt | 3 - Weaver/Networking.sln | 25 --- Weaver/Weaver/CompilationFinishedHook.cs | 145 ------------- Weaver/Weaver/Mirror.Weaver.csproj | 97 --------- Weaver/lib/UnityEditor.dll | Bin 5421568 -> 0 bytes Weaver/lib/UnityEditor.dll.mdb | Bin 3365097 -> 0 bytes Weaver/lib/UnityEngine.dll | Bin 1959936 -> 0 bytes Weaver/lib/UnityEngine.dll.mdb | Bin 965466 -> 0 bytes 57 files changed, 513 insertions(+), 364 deletions(-) create mode 100644 Assets/Mirror/Editor/Weaver.meta create mode 100644 Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs create mode 100644 Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Extensions.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Extensions.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Helpers.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Helpers.cs.meta create mode 100644 Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef create mode 100644 Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef.meta create mode 100644 Assets/Mirror/Editor/Weaver/Processors.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/CommandProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/MessageClassProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/MonoBehaviourProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/NetworkBehaviourProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/RpcProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/SyncEventProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/SyncListProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/SyncListStructProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/SyncObjectProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/SyncVarProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Processors/TargetRpcProcessor.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Program.cs (91%) create mode 100644 Assets/Mirror/Editor/Weaver/Program.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Resolvers.cs (100%) create mode 100644 Assets/Mirror/Editor/Weaver/Resolvers.cs.meta rename {Weaver => Assets/Mirror/Editor}/Weaver/Weaver.cs (93%) create mode 100644 Assets/Mirror/Editor/Weaver/Weaver.cs.meta delete mode 100644 Assets/Mirror/Plugins/Mirror.Weaver.dll delete mode 100644 Assets/Mirror/Plugins/Mirror.Weaver.dll.meta delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.dll delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.pdb delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Pdb.dll delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Pdb.pdb delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Rocks.dll delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Rocks.pdb delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.dll delete mode 100644 Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.pdb delete mode 100644 Weaver/External/Unity.Cecil/version.txt delete mode 100644 Weaver/Networking.sln delete mode 100644 Weaver/Weaver/CompilationFinishedHook.cs delete mode 100644 Weaver/Weaver/Mirror.Weaver.csproj delete mode 100644 Weaver/lib/UnityEditor.dll delete mode 100644 Weaver/lib/UnityEditor.dll.mdb delete mode 100644 Weaver/lib/UnityEngine.dll delete mode 100644 Weaver/lib/UnityEngine.dll.mdb diff --git a/Assets/Mirror/Editor/Weaver.meta b/Assets/Mirror/Editor/Weaver.meta new file mode 100644 index 000000000..121fbf44b --- /dev/null +++ b/Assets/Mirror/Editor/Weaver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9f8e6274119b4ce29e498cfb8aca8a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs b/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs new file mode 100644 index 000000000..dfac8f6ab --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using Assembly = System.Reflection.Assembly; + +namespace Mirror.Weaver +{ + public class CompilationFinishedHook + { + const string MirrorRuntimeAssemblyName = "Mirror"; + const string MirrorWeaverAssemblyName = "Mirror.Weaver"; + + public static Action OnWeaverMessage; // delegate for subscription to Weaver debug messages + public static Action OnWeaverWarning; // delegate for subscription to Weaver warning messages + public static Action OnWeaverError; // delete for subscription to Weaver error messages + + public static bool WeaverEnabled { get; set; } // controls whether we weave any assemblies when CompilationPipeline delegates are invoked + public static bool UnityLogEnabled = true; // controls weather Weaver errors are reported direct to the Unity console (tests enable this) + public static bool WeaveFailed { get; private set; } // holds the result status of our latest Weave operation + + // debug message handler that also calls OnMessageMethod delegate + static void HandleMessage(string msg) + { + if (UnityLogEnabled) Debug.Log(msg); + if (OnWeaverMessage != null) OnWeaverMessage.Invoke(msg); + } + + // warning message handler that also calls OnWarningMethod delegate + static void HandleWarning(string msg) + { + if (UnityLogEnabled) Debug.LogWarning(msg); + if (OnWeaverWarning != null) OnWeaverWarning.Invoke(msg); + } + + // error message handler that also calls OnErrorMethod delegate + static void HandleError(string msg) + { + if (UnityLogEnabled) Debug.LogError(msg); + if (OnWeaverError != null) OnWeaverError.Invoke(msg); + } + + [InitializeOnLoadMethod] + static void OnInitializeOnLoad() + { + CompilationPipeline.assemblyCompilationFinished += OnCompilationFinished; + } + + static string FindMirrorRuntime() + { + UnityEditor.Compilation.Assembly[] assemblies = CompilationPipeline.GetAssemblies(); + + foreach (UnityEditor.Compilation.Assembly assembly in assemblies) + { + if (assembly.name == MirrorRuntimeAssemblyName) + { + return assembly.outputPath; + } + } + return ""; + } + + // get all dependency directories + static HashSet GetDependencyDirectories(AssemblyName[] dependencies) + { + // Since this assembly is already loaded in the domain this is a + // no-op and returns the already loaded assembly + return new HashSet( + dependencies.Select(dependency => Path.GetDirectoryName(Assembly.Load(dependency).Location)) + ); + } + + // get all non-dynamic assembly directories + static HashSet GetNonDynamicAssemblyDirectories(Assembly[] assemblies) + { + HashSet paths = new HashSet(); + + foreach (Assembly assembly in assemblies) + { + if (!assembly.IsDynamic) + { + // need to check if file exists to avoid potential + // FileNotFoundException in Assembly.Load + string assemblyName = assembly.GetName().Name; + if (File.Exists(assemblyName)) + { + paths.Add(Path.GetDirectoryName(Assembly.Load(assemblyName).Location)); + } + } + } + + return paths; + } + + static bool CompilerMessagesContainError(CompilerMessage[] messages) + { + return messages.Any(msg => msg.type == CompilerMessageType.Error); + } + + static void OnCompilationFinished(string assemblyPath, CompilerMessage[] messages) + { + // Do nothing if there were compile errors on the target + if (CompilerMessagesContainError(messages)) + { + Debug.Log("Weaver: stop because compile errors on target"); + return; + } + + // Should not run on the editor only assemblies + if (assemblyPath.Contains("-Editor") || assemblyPath.Contains(".Editor")) + { + return; + } + + // don't weave mirror files + string assemblyName = Path.GetFileNameWithoutExtension(assemblyPath); + if (assemblyName == MirrorRuntimeAssemblyName || assemblyName == MirrorWeaverAssemblyName) + { + return; + } + + // find Mirror.dll + string mirrorRuntimeDll = FindMirrorRuntime(); + if (string.IsNullOrEmpty(mirrorRuntimeDll)) + { + Debug.LogError("Failed to find Mirror runtime assembly"); + return; + } + if (!File.Exists(mirrorRuntimeDll)) + { + // this is normal, it happens with any assembly that is built before mirror + // such as unity packages or your own assemblies + // those don't need to be weaved + // if any assembly depends on mirror, then it will be built after + return; + } + + // find UnityEngine.CoreModule.dll + string unityEngineCoreModuleDLL = UnityEditorInternal.InternalEditorUtility.GetEngineCoreModuleAssemblyPath(); + if (string.IsNullOrEmpty(unityEngineCoreModuleDLL)) + { + Debug.LogError("Failed to find UnityEngine assembly"); + return; + } + + // find all assemblies and the currently compiling assembly + Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); + Assembly targetAssembly = assemblies.FirstOrDefault(asm => asm.GetName().Name == Path.GetFileNameWithoutExtension(assemblyPath)); + + // prepare variables + HashSet dependencyPaths = new HashSet(); + + // found this assembly in assemblies? + if (targetAssembly != null) + { + // get all dependencies for the target assembly + AssemblyName[] dependencies = targetAssembly.GetReferencedAssemblies(); + + // does the target assembly depend on Mirror at all? + // otherwise there is nothing to weave anyway. + bool usesMirror = dependencies.Any(dependency => dependency.Name == MirrorRuntimeAssemblyName); + if (!usesMirror) + { + return; + } + + // get all the directories + dependencyPaths = GetDependencyDirectories(dependencies); + } + else + { + // Target assembly not found in current domain, trying to load it to check references + // will lead to trouble in the build pipeline, so lets assume it should go to weaver. + // Add all assemblies in current domain to dependency list since there could be a + // dependency lurking there (there might be generated assemblies so ignore file not found exceptions). + // (can happen in runtime test framework on editor platform and when doing full library reimport) + dependencyPaths = GetNonDynamicAssemblyDirectories(assemblies); + } + + // construct full path to Project/Library/ScriptAssemblies + string projectDirectory = Directory.GetParent(Application.dataPath).ToString(); + string outputDirectory = Path.Combine(projectDirectory, Path.GetDirectoryName(assemblyPath)); + + //if (UnityLogEnabled) Debug.Log("Weaving: " + assemblyPath); // uncomment to easily observe weave targets + if (Program.Process(unityEngineCoreModuleDLL, mirrorRuntimeDll, outputDirectory, new[] { assemblyPath }, dependencyPaths.ToArray(), HandleWarning, HandleError)) + { + WeaveFailed = false; + Debug.Log("Weaving succeeded for: " + assemblyPath); + } + else + { + WeaveFailed = true; + if (UnityLogEnabled) Debug.LogError("Weaving failed for: " + assemblyPath); + } + } + } +} diff --git a/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs.meta b/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs.meta new file mode 100644 index 000000000..ed537ab5c --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/CompilationFinishedHook.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de2aeb2e8068f421a9a1febe408f7051 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Extensions.cs b/Assets/Mirror/Editor/Weaver/Extensions.cs similarity index 100% rename from Weaver/Weaver/Extensions.cs rename to Assets/Mirror/Editor/Weaver/Extensions.cs diff --git a/Assets/Mirror/Editor/Weaver/Extensions.cs.meta b/Assets/Mirror/Editor/Weaver/Extensions.cs.meta new file mode 100644 index 000000000..78660f908 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 562a5cf0254cc45738e9aa549a7100b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Helpers.cs b/Assets/Mirror/Editor/Weaver/Helpers.cs similarity index 100% rename from Weaver/Weaver/Helpers.cs rename to Assets/Mirror/Editor/Weaver/Helpers.cs diff --git a/Assets/Mirror/Editor/Weaver/Helpers.cs.meta b/Assets/Mirror/Editor/Weaver/Helpers.cs.meta new file mode 100644 index 000000000..231f5396f --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Helpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c4ed76daf48547c5abb7c58f8d20886 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef b/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef new file mode 100644 index 000000000..512242830 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef @@ -0,0 +1,14 @@ +{ + "name": "Mirror.Weaver", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": true, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef.meta b/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef.meta new file mode 100644 index 000000000..8ab9fe675 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Mirror.Weaver.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5710c1f859f1945b6bc9b33cff6b43fc +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Editor/Weaver/Processors.meta b/Assets/Mirror/Editor/Weaver/Processors.meta new file mode 100644 index 000000000..eb719b4f1 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e538d627280d2471b8c72fdea822ca49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/CommandProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/CommandProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs.meta new file mode 100644 index 000000000..20c3e154f --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/CommandProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73f6c9cdbb9e54f65b3a0a35cc8e55c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/MessageClassProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/MessageClassProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs.meta new file mode 100644 index 000000000..875cf9adc --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/MessageClassProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3544c9f00f6e5443ea3c30873c5a06ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/MonoBehaviourProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs.meta new file mode 100644 index 000000000..ef3f5f445 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/MonoBehaviourProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35c16722912b64af894e4f6668f2e54c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs.meta new file mode 100644 index 000000000..67c27dc00 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/NetworkBehaviourProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8118d606be3214e5d99943ec39530dd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/RpcProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/RpcProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs.meta new file mode 100644 index 000000000..22375bacc --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/RpcProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3cb7051ff41947e59bba58bdd2b73fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/SyncEventProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/SyncEventProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs.meta new file mode 100644 index 000000000..81b957684 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/SyncEventProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5d8b25543a624384944b599e5a832a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/SyncListProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/SyncListProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs.meta new file mode 100644 index 000000000..b73b04756 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/SyncListProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f3445268e45d437fac325837aff3246 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/SyncListStructProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/SyncListStructProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs.meta new file mode 100644 index 000000000..4a96fc5d5 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/SyncListStructProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93397916cae0248bc9294f863fa49f81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/SyncObjectProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/SyncObjectProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs.meta new file mode 100644 index 000000000..0d51eabe4 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/SyncObjectProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 683e95e698283439a84ba54a6ce29995 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/SyncVarProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/SyncVarProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs.meta new file mode 100644 index 000000000..982f7680e --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/SyncVarProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f52c39bddd95d42b88f9cd554dfd9198 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs similarity index 100% rename from Weaver/Weaver/Processors/TargetRpcProcessor.cs rename to Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs diff --git a/Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs.meta b/Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs.meta new file mode 100644 index 000000000..0ff7cc552 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Processors/TargetRpcProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb3ce6c6f3f2942ae88178b86f5a8282 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Program.cs b/Assets/Mirror/Editor/Weaver/Program.cs similarity index 91% rename from Weaver/Weaver/Program.cs rename to Assets/Mirror/Editor/Weaver/Program.cs index f8a326de6..ebfec5e9e 100644 --- a/Weaver/Weaver/Program.cs +++ b/Assets/Mirror/Editor/Weaver/Program.cs @@ -23,7 +23,7 @@ public static void Error(string msg) public class Program { - public static bool Process(string unityEngine, string netDLL, string outputDirectory, string[] assemblies, string[] extraAssemblyPaths, IAssemblyResolver assemblyResolver, Action printWarning, Action printError) + public static bool Process(string unityEngine, string netDLL, string outputDirectory, string[] assemblies, string[] extraAssemblyPaths, Action printWarning, Action printError) { CheckDLLPath(unityEngine); CheckDLLPath(netDLL); @@ -31,7 +31,7 @@ public static bool Process(string unityEngine, string netDLL, string outputDirec CheckAssemblies(assemblies); Log.WarningMethod = printWarning; Log.ErrorMethod = printError; - return Weaver.WeaveAssemblies(assemblies, extraAssemblyPaths, assemblyResolver, outputDirectory, unityEngine, netDLL); + return Weaver.WeaveAssemblies(assemblies, extraAssemblyPaths, null, outputDirectory, unityEngine, netDLL); } private static void CheckDLLPath(string path) diff --git a/Assets/Mirror/Editor/Weaver/Program.cs.meta b/Assets/Mirror/Editor/Weaver/Program.cs.meta new file mode 100644 index 000000000..3f62978c1 --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Program.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a21c60c40a4c4d679c2b71a7c40882e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Resolvers.cs b/Assets/Mirror/Editor/Weaver/Resolvers.cs similarity index 100% rename from Weaver/Weaver/Resolvers.cs rename to Assets/Mirror/Editor/Weaver/Resolvers.cs diff --git a/Assets/Mirror/Editor/Weaver/Resolvers.cs.meta b/Assets/Mirror/Editor/Weaver/Resolvers.cs.meta new file mode 100644 index 000000000..f4f66029f --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Resolvers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3039a59c76aec43c797ad66930430367 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Weaver/Weaver/Weaver.cs b/Assets/Mirror/Editor/Weaver/Weaver.cs similarity index 93% rename from Weaver/Weaver/Weaver.cs rename to Assets/Mirror/Editor/Weaver/Weaver.cs index 2f500ceea..97b924aea 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Assets/Mirror/Editor/Weaver/Weaver.cs @@ -1388,90 +1388,109 @@ static bool CheckSyncListStruct(TypeDefinition td) static bool Weave(string assName, IEnumerable dependencies, IAssemblyResolver assemblyResolver, string unityEngineDLLPath, string mirrorNetDLLPath, string outputDir) { ReaderParameters readParams = Helpers.ReaderParameters(assName, dependencies, assemblyResolver, unityEngineDLLPath, mirrorNetDLLPath); - CurrentAssembly = AssemblyDefinition.ReadAssembly(assName, readParams); - SetupTargetTypes(); - SetupReadFunctions(); - SetupWriteFunctions(); - - ModuleDefinition moduleDefinition = CurrentAssembly.MainModule; - Console.WriteLine("Script Module: {0}", moduleDefinition.Name); - - // Process each NetworkBehaviour - bool didWork = false; - - // We need to do 2 passes, because SyncListStructs might be referenced from other modules, so we must make sure we generate them first. - for (int pass = 0; pass < 2; pass++) + string pdbToDelete = null; + using (CurrentAssembly = AssemblyDefinition.ReadAssembly(assName, readParams)) { - System.Diagnostics.Stopwatch watch = System.Diagnostics.Stopwatch.StartNew(); - foreach (TypeDefinition td in moduleDefinition.Types) + SetupTargetTypes(); + SetupReadFunctions(); + SetupWriteFunctions(); + + ModuleDefinition moduleDefinition = CurrentAssembly.MainModule; + Console.WriteLine("Script Module: {0}", moduleDefinition.Name); + + // Process each NetworkBehaviour + bool didWork = false; + + // We need to do 2 passes, because SyncListStructs might be referenced from other modules, so we must make sure we generate them first. + for (int pass = 0; pass < 2; pass++) { - if (td.IsClass && td.BaseType.CanBeResolved()) + System.Diagnostics.Stopwatch watch = System.Diagnostics.Stopwatch.StartNew(); + foreach (TypeDefinition td in moduleDefinition.Types) { - try + if (td.IsClass && td.BaseType.CanBeResolved()) { - if (pass == 0) + try { - didWork |= CheckSyncListStruct(td); + if (pass == 0) + { + didWork |= CheckSyncListStruct(td); + } + else + { + didWork |= CheckNetworkBehaviour(td); + didWork |= CheckMessageBase(td); + } } - else + catch (Exception ex) { - didWork |= CheckNetworkBehaviour(td); - didWork |= CheckMessageBase(td); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); + Weaver.Error(ex.Message); + throw ex; } } - catch (Exception ex) + + if (WeavingFailed) { if (CurrentAssembly.MainModule.SymbolReader != null) CurrentAssembly.MainModule.SymbolReader.Dispose(); - Weaver.Error(ex.Message); - throw ex; + return false; } } + watch.Stop(); + Console.WriteLine("Pass: " + pass + " took " + watch.ElapsedMilliseconds + " milliseconds"); + } - if (WeavingFailed) + if (didWork) + { + // this must be done for ALL code, not just NetworkBehaviours + try { + ProcessPropertySites(); + } + catch (Exception e) + { + Log.Error("ProcessPropertySites exception: " + e); if (CurrentAssembly.MainModule.SymbolReader != null) CurrentAssembly.MainModule.SymbolReader.Dispose(); return false; } + + if (WeavingFailed) + { + //Log.Error("Failed phase II."); + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); + return false; + } + + string dest = Helpers.DestinationFileFor(outputDir, assName); + //Console.WriteLine ("Output:" + dest); + + WriterParameters writeParams = Helpers.GetWriterParameters(readParams); + CurrentAssembly.Write(dest, writeParams); + + // PdbWriterProvider uses ISymUnmanagedWriter2 COM interface but Mono can't invoke a method on it and crashes (actually it first throws the following exception and then crashes). + // One solution would be to convert UNetWeaver to exe file and run it on .NET on Windows (I have tested that and it works). + // However it's much more simple to just write mdb file. + // System.NullReferenceException: Object reference not set to an instance of an object + // at(wrapper cominterop - invoke) Mono.Cecil.Pdb.ISymUnmanagedWriter2:DefineDocument(string, System.Guid &, System.Guid &, System.Guid &, Mono.Cecil.Pdb.ISymUnmanagedDocumentWriter &) + // at Mono.Cecil.Pdb.SymWriter.DefineDocument(System.String url, Guid language, Guid languageVendor, Guid documentType)[0x00000] in < filename unknown >:0 + if (writeParams.SymbolWriterProvider is PdbWriterProvider) + { + writeParams.SymbolWriterProvider = new MdbWriterProvider(); + // old pdb file is out of date so delete it. symbols will be stored in mdb + pdbToDelete = Path.ChangeExtension(assName, ".pdb"); + } } - watch.Stop(); - Console.WriteLine("Pass: " + pass + " took " + watch.ElapsedMilliseconds + " milliseconds"); + + if (CurrentAssembly.MainModule.SymbolReader != null) + CurrentAssembly.MainModule.SymbolReader.Dispose(); } - if (didWork) - { - // this must be done for ALL code, not just NetworkBehaviours - try - { - ProcessPropertySites(); - } - catch (Exception e) - { - Log.Error("ProcessPropertySites exception: " + e); - if (CurrentAssembly.MainModule.SymbolReader != null) - CurrentAssembly.MainModule.SymbolReader.Dispose(); - return false; - } - - if (WeavingFailed) - { - //Log.Error("Failed phase II."); - if (CurrentAssembly.MainModule.SymbolReader != null) - CurrentAssembly.MainModule.SymbolReader.Dispose(); - return false; - } - - string dest = Helpers.DestinationFileFor(outputDir, assName); - //Console.WriteLine ("Output:" + dest); - - WriterParameters writeParams = Helpers.GetWriterParameters(readParams); - CurrentAssembly.Write(dest, writeParams); - } - - if (CurrentAssembly.MainModule.SymbolReader != null) - CurrentAssembly.MainModule.SymbolReader.Dispose(); + if (pdbToDelete != null) + File.Delete(pdbToDelete); return true; } diff --git a/Assets/Mirror/Editor/Weaver/Weaver.cs.meta b/Assets/Mirror/Editor/Weaver/Weaver.cs.meta new file mode 100644 index 000000000..0ea2dfeac --- /dev/null +++ b/Assets/Mirror/Editor/Weaver/Weaver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de160f52931054064852f2afd7e7a86f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll b/Assets/Mirror/Plugins/Mirror.Weaver.dll deleted file mode 100644 index 11a79f1b46250ed773c9965be7113b93429d5bfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77312 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 PxPD4={qpDk9S8mwy328& diff --git a/Assets/Mirror/Plugins/Mirror.Weaver.dll.meta b/Assets/Mirror/Plugins/Mirror.Weaver.dll.meta deleted file mode 100644 index eca073933..000000000 --- a/Assets/Mirror/Plugins/Mirror.Weaver.dll.meta +++ /dev/null @@ -1,30 +0,0 @@ -fileFormatVersion: 2 -guid: e66877f32061045c699eba82eac729e4 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - isPreloaded: 0 - isOverridable: 0 - platformData: - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Mirror/Tests/Mirror.Tests.asmdef b/Assets/Mirror/Tests/Mirror.Tests.asmdef index ea484b24b..1463222b6 100644 --- a/Assets/Mirror/Tests/Mirror.Tests.asmdef +++ b/Assets/Mirror/Tests/Mirror.Tests.asmdef @@ -1,7 +1,8 @@ { "name": "Mirror.Tests", "references": [ - "Mirror" + "Mirror", + "Mirror.Weaver" ], "optionalUnityReferences": [ "TestAssemblies" @@ -10,5 +11,9 @@ "Editor" ], "excludePlatforms": [], - "allowUnsafeCode": false + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] } \ No newline at end of file diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.dll b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.dll deleted file mode 100644 index 9e77dcfe0cd876be49b8e79e54cbbe00a6c59030..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44032 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 aM#|yB|6ffWlmCX#YB~b^&*%Sl9{68>7tQ1V diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.pdb b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Mdb.pdb deleted file mode 100644 index 8d0fa22d6686de115ad9ece5cbb950b3eb3d00f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120320 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 diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Pdb.dll b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Pdb.dll deleted file mode 100644 index 02d386dbeef2f7dcdd4393887dec9b1d242d53cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87552 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

    Zm;zDWN-fO^}W5@T6^_!wJwXJ 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

    VHG_rI9WB4cWRsNsZJ2BD-JEHs383_3hf0 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 RvRVI=Jo}d~{|_SYe*mTPYBT@< diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Rocks.pdb b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.Rocks.pdb deleted file mode 100644 index 4ed07a9cb7123975e946df156cf91d716ee974f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58880 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 P#rjYV9Lj-x%z^(0ssurC diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.dll b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.dll deleted file mode 100644 index 5052f8deee50c73c5753dc07d54985b8dc839676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346624 zcmce<33wdE(eOW-8O>gj?Um$R9ky5CNFH`2VM`bUA{a=x?;}Kp#5OlJ;2~NA!OI#$ z0))dD2;?9H5(2qT^5#uK5(4DDf!rZ+AY3`geZMjPUsd<)j%1lP`TpPY>CtR=S9e!e zS65e8AJcQx$u~Nl<2XLg^UpiZCvfF&fBk*opUp(iDcv{6`LE13cKJlhk>A+m#B!o^CA)otqwFRu0wZ7cVHr$ zdVe5%$^+DZEj71*B|RReM8-DO@Kr562J)A$d*S7TO`Hir4rcFooaEM3%qcdgciBssBxn) z>+WIQ<<{NPx_eo7T-=SW*E4xjsrxk7>&BgT+8Wm@PTsUg+?&>vozA7L4x~90l`mu~ zySl+mLp|;dYlD?r;A~6I4N`^F4Qs=_L6#~9#mQ_y?C1}=$`HCVaJp$f{_`Eq_W4CJ zfOX;6pq9}+wnz&dE-DSf^IUJyWH=Y`?mzy714c)3Q?TKJ>ONqG%2L~8IET1iEw>H8 zyvcN-R|`&u6C~}GLN+1^aO!lo9tnOZ`#rQYAB7PpyNLbIhlz@`?r znOZ`#rADT;uHrUROK4hZ%bAw|m+E_ywB6D^VUmEFOp=gh+%~r}n0h(Qk`Jmc1-P** z7aoM0O9j!vxZ8#Y3!SOzA$SLh5gjO7JuDd=3>G_6+njuA$lcz%%}JFHI1=IFPxQir z2-#P75CNxKMb2@4L%2`k5h780hyW1B`H@Zc3tak^(*s=O?T`393*ZO=z{YGalnoY)^acw@7FAwE_1Y$3ZJ&C= z4ngU94L2|0sdqH`?IO2E182)qp7D$Z)uR+|?PwhD9iq<4_k!RU37RxxaT?!?h|jtv zt$(*B9yGxl)|S_Mh0%=7vwNJ!3y&j9Ia@$Kdg1Z-RjHQysPkfB2!FOX*YocYl;H`a z+SWF>%^Te2R8J(ZG3I5;nOktYh006(J&v~sKf3m1T8LXd+zn5{>uy@gZ(ZtCzQ};Q zLX#%d+9p({H<+ha zL*;!0T*@O;rED;N%q<|ffyo)nma|yC&y7xPkQ&$fG=UV9Z!^d~$#AIP`Ibeelhll% zyHb9t(MH<5mIH+#Ml7j=^6`o4F0*1SI06Tu(?7qkd#mTKoYxWy|3cd`*6}Az@!rZ% zP};`!O;eM()1)(r{4+zTP#Mk8xzu$q8WOVP$#AX`!?@5=j=kL{_l9Q(vHA=DO{crp z(lgdljwy?~rKK!Hi&soXpqxI+8;HyEOkX@x2vz|quAI>+Rd*R3=Qzb;+%NI>Hu~jR zQk4-p5&93gb?Nu6j19K!O&KE7*==dl;pa=u>C~z_8GGh7@y_iqcwb0&oDHu3M0W^1 z13_TF@LbU8kCtFK;48H0*aYv1NJ*uv+eA1?Kfej3|4OY(+&t?gh zvqdov&lm4H<9fqEbvNz}DFL>axSjbW19;Q9&0gxIQP@{N@FMkn=FFA&5d z?huBcsEuNIKX-^WeHCC6F2m!{LlWHbL+)@#aSMXoH&F2I7I&WGmR*LS;$+D9R3RvV zl_t_f-xz(T{ObxCy0SyTrYwV5*^M?3nm^X%Mi=67ql=`(LiJ)CB44eMJ;_LuBTk{Z z>_8BUp77l0h@2A?qD#mY{V?kU#}%`cJ_8M!Q193g^oX&0HAl3O45QyK(vE%D&IqK; z8}j~e+S}9)na7p==)VFdp!3v7=^eXi4$u*I+kt*~Ir?s>jP}^{*TC@yhKqxn{(@(F za2cdjFD3cFW{HWQuyWkCc^2cgR1h*`XMZfRGf(X8Zs*`tqHY}Li=M%{#B(?OZ93A; zf^?H2m6!-sTPYX7AvXU6dEqK%vJf?#^QxCg%ItAL*$36%r=z-DP;FLJ5))B$#pn~z zIXTgL(dj;wF61g*K`H`gHu@)kA-7mg6(_}fyaL$hlcs#nVHnnY-qa5n8>80{IoQOp zBvn|}=1u*i5#_~5{{T{xI*ImSZ|aFg+H#U7|CnBpE2JW?)rv?=gjw3;$-dCk*5pZ> z=T;A=xCT@HIUUz)1lN^{OJX9#pfauO|CyftwUYiSO)oJK?3c2?YMa3AQqKQtdZsHS z)76?uVj_55p|^Xh3){W&s6XVp-WrCvvsNq6mtnk>-Uxu65?B^jchzgF|St*FkvO%(hHNus(=(OOu{P{zU_aXJd9~<7+@O`eAPhurmhW({7lr5P zujW*rW;Zd>7D_Vx=oOS9f3}S1$57?zZ+HWVhNR5saRth6h@4gwQ?yNi@|#HcoC4)H zWQYhPWf7jaj>tGF1Y2^f)$y}I^k6I1pX&{$+-NOYuc zn}zN3XC_98223B2iyhMzXCQu|wB0X|R_qz2VR(MejAVyH)W-6Z8@*nrOS{o6xJ)qq zO3yGeI*Gh>dgM!58j(tO0)OwU_*c2ZopW1u(x0aBa>1PN! zbQ>wlLG%{MeY^O@_E|tt4@SLU6;{=nlLCxx&(CP2b&< zJlK4B=3{pflMPDCRvv_LqwA4$5(lF7spQ=rO;TDqf+i`HyURV8NR70NM$+&?s8i{f z+Df}I+1B5W>+d(@mmY936_Wu#`0Q&RDN6a#+bDi*_3ixT`epjB6=)%@Px#_jSOGZ3xyL5;nx$k}$R*o}Z5CYQc1m zVv?AMidq|DIn_lbq5r0o(a(MK?01s1Egk*XquZy_(eH8NzWpwuMt^Lk^5l*6TCd`` z9vs7HD>vF=u`K}GyA_*g$iNHVLtw~F$LQWG=pO4*y|x~F^5=H1Jczn!6T1I_E6x7z zJTcCS%E1TSXgKv9!H8AxgjqOIiL+yp{gF-4Ke%2q<^-V3>O=43gm33Eb(mvru z?F+8x_|n{!2cbj7-qVM%L)XmXu(&ZS>BjJ6I`Idk14ded(m^t&70L&@(caKLzz9;! zpwu_QN6%SCI{F-K8jrc%V#CRxdz^P{h}ufphSvig{i&xTu90b`JNoBF*sVH#8DI2q za%y%n`bifbVnVSAb2w>HzfPp>{h%G#EHM$|e?=)d^sKk$UZ58U38+m?2N=wko`oyFJb%n!}BlIS|-d@>GTiyeMb|7HTK zhug)U^}NH2lP6YAkw9tx)x+4xq`2()=bvA_=rmS2B>JW`lB}C#duZ$miDhpjj+X5a z^|MvN4vBi%J<(jflPAhTg76!Y$$62`a1c67EJNoYo-28N+QMv*u6-EKyLcYq`6tf+ zv*9y&Zsd84rxg`3{%Uf1-DhOIp4DyXgMcb3c&H2F;}}lDbp&GkVC!wkjZau_Uv8XP z+zaLJu_^uBcwoKh+&Ggm#ahgbqfH#IkMc_;A%GEV8UcfZr5EqZa|n<0$dx>2@I*Y! zgSE~#;xdLh=xYbza6ZlRC7wrln7}zd=NZ4=78~ToFR@*OzlF@njSpBawd%FruH5)s>&@rJee3PbjsG1^_d^pLe9n6NbK_51 z@8aC}53F}EH~tOlU6LDr$a=%v_{XicoEv|?^$z96-)_B?-1r;tdPO)}gt0@Jba7>PODa}mB zO3Iz{W^bF4W*W3!8n4fKX|Z{dKjuyMNG9DwGk7*0qJGz6H~~>l<82m&tSB30EX1yI zcI6rWDoGH!PuWcH?8DYesrOhfOuY^7OrG6fqiM#P^-}%?lCs(V7_nzlO}+J@4yRtZnqHnYR)aJ3G2uSq#p93^BR28ywTf)1E9(Ea(8_Iou zlGS)f>8$3tjYoRXZgi?io~wC8J7A$Y`y)FM&-k6-wAdJ5@ZAI6T&f>DEh9bZx+CrC z_KmcUUqJGpu!e<3p6)f}on-Y#=4+PpNM79{S(neAwQokLT?f96vNcz*{H5x)EH9+? z-Ww@2p^09+U>-uh8to_aybr zaq2k}-;AU36OY8+u89XF)p>EM#mf)V+`Y^D)GbbkSQ*g7+a&1$animC=DH@Te`0Iw zT|B|;-x=?VQ-#YHYVN_2OVnL5a*?{>NOk-#w3Y_SBj>7H8986wp^-J?KO{2QEI|*= z)63Jxvw&wI&mx{uMt-vLlarq|`DvG*Ir1}Ce&)$fUVb{{r&E5q!J#ew@ zfrGY`CGhDvdUTvE(F14lDM{F;B#W)OC2VF%Ez9SnhIUovwTujoUqcSdNz;KBQ}Tux zB?~8aQqNdrNIhSi$Yztz?DM?`elG43>E*|0!S3>1QhUEG?$|98m&aarVk6#hra^{6 zf8w;*8%&%Kd(#t>l1ff;D7rbe`)4Lz8iTSEFOI!)CiaokuaCoBwnOJ9SdlRZx+eN1 ziHwDcusD&6y}c82CF*5yxV-#4O|saQ**Ed0xOV*$&&A%w6KZgl;#^B?nS&GGjgu^y z_!i#r|B1ul#OGsgdE$PFdLj-lwPjT%m=75Whg1bAB}*snl+;XPOw^byYjlDMtp!b7 zB}v3c)+~FBY*KgmNUgFdDQ|KA`M<7Of|86YB^g*sBCI9RVI`DUV*SK-zKS#rPMg#8 zL-GXAr+7qFi{76HSLIy53La?}IiYq9kJvwA8I2zYn(l1RmfvAD3>3O=A1D@YALuUi z-JToYcUn|0QHvz1NYpMw^<_&1n{5Gc#CMam2Nb=e>nmk$A6QVz-afFXH0Sn#Qigm3 zrEIB--&`rrZ(E5hrFM!MD9tJL^E5miFtf{n*l=60< z@IS7PV3J(_kN7`ODwLMe7RAyizul!VetSxL@Y`Ejemka{5!6Ckp}o@Or7|}~|IG?P zTF)l5Wr~yS85T!IpGg->^MaMkWltM*ds$f(+s<>wsM->d>kfy-;dh|0S$7FLam&dQ zSOcj#tjP{^*FS-yXWC?K*Vlc@ko*rX#c&I;eY4g31Mq^W zSFv{T@Hwzk(?*{Gx>@EDDbD-*PFAf8dgstYBLM0*2m(4 z&#qo=zPOwVsH+D6Gj#({&wBS#i3mSS?%_7~QUPj!6{`JgF3zE9+WTEu;tGa#F<7r( z3uRLufh>bm!{GxUDx1}DV;?Vvhr0<6YejIgu&!>|tv*P~y1)!Xj?^({VhQIVB5bOY zZLT)sMvO>VC=9LQGFd6oa3MlJ%YwfWFI$lu%Q_Kz+6_NSZOl>? zpi^dmr2S=;0#V4jvW&)R)zl}cZMpgdK^RPZR$AmW_y^e(TrL}xL1NRHqcKvslosE{ zYFwM zCXrv{h>h!4zX)Z@U)J+DH7vx4zzG#8<*}Yi@JF9&U`0AuwKmeBo^=KgZ+Dnb^aqM6 zkM>h`f3f-=h@(APoppqVw4HmwA?++KjnIRmn<+!1Cg5HwG43WeUUY52vpu*@7G1vt z(F2<$CYndx${ddVvVbg_uZTZem;8Z9x8P>c(UftyY}o8+0$y~5gl=|geI#M)P~GUO zBR#A{JpE3urf zIf-0mzh`gw#4Zy3L25ytGsIslUyl zG_xDtFNHvh@YV}I+XxZ$U?U(=4>dvun&tKZ4icRxm?dZRB#Hi};MvF2+4G|>0Bf}0 z7bVbWzb~1P&BuCRGT&Du61IL)z{mkg)`+covfXk~mY|8r!Su=;hPg z@E_!M6LMT%CTP}4hJVf)MMgH5)6hr!<@JI!KJ(5y+Zpk^ioluUY{ zTSI6O@L+_xfq+|_Fi&qqxrR>*<1~r9!_cU#=&M#eqX-n)mpIKcG@d{(TyaB; zzaYCv_a1Wr8ykyOrV5L~(-9+ak)N!aGN=_vlOh?erWdJu2>a0AcGoib^;tymHnX;q z4zc31*-8*TEN;+-x|VuG7^~U#ZQ1ltkTzQr85-2=O_ZFuBW7Cg9ENr3A|fFA zPDQ~E4n|Onq7SB8ym+JtrczD6TN8QcjS%kaY)N~PNky*A7GK(}Nubg?RcR)eR>njF z?uO67&s<7*Jv@}UVJIxLRoK%^Z-u2TQ>TzJ{C1=KbaApREe6rH3WM3H2{bfRnYQ;S@CdHxIr1$eHu}hozC(d1r8@<51pbXx>55smxMc%G4HQa4 zZ;ieSJXdHNmsvw9eOvTB!tLqdwjdL+LKKYui83;c3@9F| zmXJ64DXA)}Bv)sUH~cfH4kxI!?mk5&JNhjtc^9HG5Jb{I`Ba{#`{eHEhm_VY>&)Sg z@ZFwA_jji9oPd*LG|ac+CR*|A_UE5hlPif<^Wo`QA6hUuPeP-kk%Y55W0!*c`I zjn2Urtt7tEPFrb2bTYwQ3ayliK0~xyd!3ZTVbfr!1C=cyw|WaZyBclynR8R~!jEwof?bRt?|)c0b$H zOrK5!$wpef82-x$j5dpDLw9>nBvJLpq=`Cdm_Y~>oBwstx2LqHU#D4N!iA7El=JkM zKu9dSy~Khx;#$zf7WC>Ss4gJRE=HRKmZ3B+y38iq94A9AS;ZzsP7%-=nAL$oaN4C7 z(q<)SVyRf(e?!g!Ju4DsiBd{u}MuAIK*0~_@hB%16BzQ|4?9kxNaj=shd4zf#shw$iPu6do zy|nGGBeB?^d0yWWU7OW()(G8ZtE27lQu2&zo-+`8_~S)qVnPl$1A(%ghWJRihp<7_lVjPk-#_BFxtvj!f< zeej$b)3rwEnu+IUf@gou1|{))wTWjV^q^0`6Q3YZN{$!0x3@lDP$CB zf)W%7B9RXB8eAtq3OyHBE0~UMw4ifh5Q$Y5OpBzWhlyy;KuY6+ z)G5=C({9QS3*=7f5C|20gT3T{4?3+ZRQ8MoAswAAjkIg}Qp_n|HzSAUr)!4_ZS844 z9ZfPS)Fo)Uj5ONlgB-&0L#7L8gkqS+^1pbquk#lQ%I{qD)SIA)&1 zGSRM7IXW4#RJSlb&XPBcs_yX6rtq~OFTzAWD+K|u8F^iH@Z{Ot(rZuk)N|ejr`(IJN8=N;%b5{SicR zC`+Xw`ZEDWanAe)fY?O}qTd)0TiRG-_wq)p$?26jsP`yU_uTMBlJ09LDEx!sUnhPk z(|6uVnFlHDBFHuRlRtz)C@oez3_Su4wqVY<18sGQPUl#YK1-)QGH>Yz!D3dV^^Ad< z;Vy?`g+fCh(-%LY$D+~le!f-dt?*(tUYSiuVxc|n+xq+!V2b#=bd`I3ux|90xQ!si zL5H%gIV|XvG^M!u3p4_>O1})RlCo$=2}G};ra|;(_@MG?&ek8I^_6(j*Y~Bdh1VU9 z$<>60?<6P7=&F>$H&Cjf#dB_imP5f~7W!x)Q{Gn~#4Qaf^K!+u$~mUtOdGVDPB}Py zbafoMSRGUvWNHyDP5{JGj+Qk6(G>n@2|t~F!1%RH`K4=Gkrb$NtM#dM%We+J@3n-8 zbG)1kxBW~&LJDxwP&M&~dua}F0eEb~xoa&i^J$xVfOlCj22GFz16w>k|ATIix1YAPDClu}ix;nkY?@TdmmbGfrs=5b zURWk$yk41^z)Ary)XPdonV4o`%^D>_H`E;e6KJ}cHnKQS??nSLrUqW><3t|O&> z;l9+$_HP$S$+CoCgKQ4^q6V`ob4ILF)n8(V$Ua#q$lN9xDcU4<6C3hO1=9roLTXhe zvJml@sd8WR7l<03V?sR|;^oe8f?VlXCdIZoO8E`v{hCsOLC7-HZ3Ajrt9hyhO~MkF zWhlezSCSul5?$2DFS<3{UuqY!%ET`R5CSx{DD8%_{iNw^Ql56U`Kiop!)>XIOD#fP zYzdmW@#&aWagUL*7Ou_)oZ}A&yE}Qz`FrVio}TkNR(Y;eDWzVA6YY*kCOt5S{tEkK z^TDJSeR15*(x<%Y-$-4?Sd?7Vzw^UlSY?5WnU8Uo4Ud5O_RLT!mC(ilAl5vX6M*}d>!30zOW^pc_WG!u-MO7icJ z+>~X8(I6dO4iWSSk(EKnTHI(0sq`oX>w71*>Glvp0&Qhp+3~u2!$Ux;-UY@hI_M4H zc^PR&V*|HaTR5!- z)_Rk^RZYNkE7uxh%a)aMGpZIl94;`Ca#z-AGxq0<+?@}NCrMqy!>EDRoSL9^v^TR> z;-_E%CK1a@^XFF?(nRt_O=QoBu7;BYSU$@}*CDzfQdWoCuqs-{`ssPnQ89PeQk70F%l*u=v`V>(^h_}| zu$@!d{qro={)viWHur-JoPQ@|dTR>cb&w$U=14nEQHNJh2Tsa~9mC5?T7n$3ld#b< zy(0@$-z**rcd)ComEIk!Ha4G(RT&@GTbWB0_DZMLGrF#mH)a_ft=^+L4r3sF$h50i z97YDRMhe72o|j4&S5ix9;k%3_OQZc#1_04HE5M;`R_bduglnvu@I>-NKT`HJJLqs; zEw;V{|AX?byx0CH329sQz`(gm>3TUJ(>S8dmcvjZE3M9JNV9q;X@(i+o}^F9IL8o^ ztv*E{$GU(hV1~QBQZn9Uh>^aV)dubdUnYjKY?@W=UVVa`5zAoK+Ea9+4_K0-y&yx0s9_C zeF)5(XGZz9dmn= zL0-#(S)I&@Mg68HQ{l;wWlRD^z1LHfg4@G;>#VFxRFwt7Y*>V>l=jinp$Gc_`4S`4 zj-^I4asf)?6_V$-81qKb{e(oAnx>;N)k}w$kPr>aQWNXW)8>&x-U{x9Rzq{o)M~v( zt0AOrU7~pznQe104n*H3>w*#6UsO<)ZsbbdD1z=aBuk7f)&i^{5I)DOB9^_gVuX46 zCTO^t)Vy2crSvsGBM6!_>LTHwNBf4WNE2}~AG!IF(YhG*t<#PAtzy)(%7;-eF;Vw4 zqu%JsZ$l&F5Nm(tjmlgKqp}20jLM{ODSmmf_L+k#kA%go@UTmzuK53*XJ-0d^2t-# zjr&UW>&{m8>CIO5T$HVh%5o$7;bnIN6LL3dXF95EV(&*@(1cra(~<5)@H(yRMTk)* zIski2-WiSildw_8*oD*klbDf=u@bFgY{`zTzT2yPtFtvFQ@eoqK$dQ-?XQKO?x(M;2E?^5~X$Cth7q>e@5%B(0Y#2dKR==U4TB^m(HPc z0PT(OyVoh_9@4MfS$fm~TV+jk&_lr5OkVV2Fj}=i@3$J$Ep;Zrb_-Hr;E6cuheCXX80{K z+ia(Er?u1GFVIfsX`N?DPdjn^mN%@G0594HBp9r!!dW8Cvdt_0;bc1%lI=n}6_eo| z+iBfw?NlI_w39?uSx3%>^z3FkT|`~6y=T?wsC3b**ny&02Ntc47r09Oa(6~MyD`8A z8D+&Ls2)Xk7i%mNjo~wERK-NIVlBmrpB~&V%rJbG{+4K0w6JN{`LndEM9yf}^C-O8 zuH!ql>-s*JMUNq7*jy`bGrFkRc=~Dm50`mqyP+KgVUr%vf{Vg=}_^(LLL?{8iUBKVj z0sK}0eL2b4c-GGuL*dC~~x#91^lXo1@K`t?`nmbi3LNCP%D}%fw6= zTfWMg$%a;YB#=u;kR>ndLuRL?;J|=69KcN^nqq;ZFk`9M!4d7tKH6dq3S*PWtsUD7 z%z^u&n$B821Y3saLH5!uCh*zO?-+!F!`J%_E)W?px<&}sF<{!#QK7mU85yr6TE~Fh z8*{=1cD!;I*i}y*xVZAPOcpt`(wr22O>Rky4x<|3h0?ehJO|ZigGUo9B4~noxs8r_ z2T;!y(AeDL8*1$FZSSnHz~m1XWJYs7SnDjl`03*I&bq*pJ9}S~^@0V9;`M@*QwJ|+ zOt3p;(IR1Y4neg{xm9Tm6Ue!JNtHC_E=UG<)KE1DnLd&f+&AklVhRYLdra(TTQP0{S^QbfEs z8B84$pWxzZiFp3Z>|R?~+uK-j3yh_CjaZrzjdNPbH(<`Q4M{w$f%iCH$-2v z$s!v&(mOg+9j%Q8kYKD^g7W?`3sjsXtnMXLvU_N)>17{M9cpYJYy)_5B}lB%!l1Yx zOja8;d>`<5o!ZQoFWy;tY#+Jgu3`JE0Ex$qGhnD5L4>SXGcQfQLslofRQOsVjGAC^ z|JjC3DQkqUmNH6ZFCn-psYe?|3>qirmfDmbgr(#8)q^R_gK;UHie5x~ zYdT_U)aVY+2>E-szSWEXOneghp;Sg?eN*V)haBNm`0A2E_42jQd5O^JnZ^sM6C}#P zx0HD)ysg747Q#hvq1fqHj`Jhd{p8#!?_}ijt;Aj`8g}3axol)O-B0h9enAAGc&g++z~2;T%r6mrA*& z1(`FNJ~cGGPaQ=5xt5%&)cVn< zb>GI-+h{JQJloG?Yn=_K8r{zyVxl50$H$->Al36(iI$bjc548~E870@g=P}fGIEUZ zxFh=-k3Vu;_XhP9@ZF|9tdQ_c>XWLZbteZiL&%o3LD%Vr$BbdfFuE+3`Di!Vw6TYA zD-oJj+Ew>Ev|oDBF`7!46g0ParS-fMU`*t2vYu}t0>*X)dIPTPWyt(0h(<_c`;G5h51y;F zE*wE&+F|6dPdjgOCsgXu#*rJDDaNAb#zNIHVr9@B>8g}tL7Q)-Ypk0tmkw_SLwlt| z{dcI}F2U-2Gn?Q_M#o3t$;pN%hm)LsSEg*XORS~a%GF=Md2>zdWn;54cawA7F&~+f zjL>re?LT}l+^`i|KiaC8ZHWi%%W2)bS=C-s#^v9%2MQ2H*?15=LgDp~2yI2%`c5|9zUF`L+ z?joJ|uB2_SOS!@`dB1y9O zi6O&0_Xx5?N5=Y543e*vAGIp3A5Q1vJ}{eFw`%znU^MN|nF(29fp2dImY~+t89inU zdtMv}(EG8ip;;4hO?-4Tv4d=V9D^Iw*mlf@cMI}sz0#bKHrD<|TD{VOu`Jrn5ATr} zncck8mT$gaLx0k<2OTX8Zmg~Z>G+k`ba8cYjM??dHrYMQ(kY_jahY%MHVg^9Xq#Y) zZArFllD1?Uw&b^nPuP-@Li>u?TE-547b&bRptk!X6Ep4bK1Ba!(r-~d&5}OQ3%JYH z@<#9LX%RZEvAk2^dnuz~c>mm%7I6~}C5vpDeb2E}M5VIrm3)U6z6@Wdk3|~Zfg}Pr z3Bd3(+vaq5+Y4`$6_*#Wrk}WL?+jQw1W3-OIh_b z6)@95Rb1Ha)kEmn(aR}Tr>EAs#5%itFKVHaH1#8^Y%G!ZkS)K)QY)xe+3s%^(r z%cIX)z3IujHFDmtG0sRI)$mb_tJO5U*2(`B}QVZ%B%2`-K= z3j;+OP1PPkWcbJk~9# zo*z9yvbfH#q+Dbn?$_*78vCw&dcS64Qu?(->-tsb_L%O>p$6^FtsVA+c$VF6&XBGo zgE`za`W^X9$%iP@_C`Tsd)vvRGX3^o=+L!>*;69Pr;t_+q(GUoBQlggb};&lR4(p7 zY)mFQ&>T9@!^9^#kfext(d{}ZPuVj`)eRUg(JG3aF6>`c+@8+0 zZUwhj+fUZ+Fxy1paw#1yQ)ajkRYKH3JJE-?}= zr!-F|RXM1hfg^`g?<0-bPu%fvsyU>}s);?Mn(FFIcXehuQpPUI<#YYyUOdueJcA<^ zvSefq*P!N8;eF8AnW^McWRdk17J1I3T#lj!`Bqb}e5U#_>M)RrE)j=KkjvFgM|IrJ zY(6VxEJ^Ea3H5i;rBnHAbQV~QJnbiUi6TT|BXU;8d6U#vn>1_3RkOmecqE$^OoJl} zE4(T_3}vQQS-U2B5yF^buiu;y_QFq*LheBMr6?hLd{xWwbRGQ7%GbfzDr#7gdhE%r zu*5Act6XwmeE}y9mqR(5M_-kNuf{ncRUWD6Y~n^AGY6X67%tC|TB-~O&U>K!Hm#c& zwY6^B*-J~O>8>sRq&3l960J7LlvP=%u0d%GmcshQW${(RDY1m4H$=Y|Fo!dWEA#29 z&%|zk&$4|*UUU2x)6M~2!u1rG3cn`6=LIMXU79gx1n=OQ+s2vDWv_$m##r_ip*#FE z1-PYUUi4=S&~^qzkqBdgrwY}z)RiOuOLd(go=K#J8!Fn?33WDo)_Di%-`YrD>#@8v=U_{tNsd<6L04T;FxfwseTyYZ zMQOQucmt_4S{l<`0<1m>>|p}%SPs#K#FW-J#(T9 z@G%_!8XQ9%2A8Lphx}sOwzIwH8DgY;|BRcO78)J#qMuKTO@@}vv)Gg}aP?8zt0-;w z8Z0M1Gx4^D zMH3C%sw^1kFutLzg>;PhU2VKzZh|`NLAzJy#XQ|3!P9mQ*f)8~gj8&=A43^BE4EvE zt-eADCFi4Cuua{%M53x*=~@*vSna1AGX^eCnNd_4FWDHZQ>3GXB%|!Fi1citS{Y-H zKVvnP;AM9yeV1MLy;BO1;`uJ6Uzv!DlL1C-7mFsHjYUg_{G#2x6nff1; z0aGhak!OPE5FS}=zK{oN&AFH7ah~zt^24&b2*fB}1*_4Jou1~Cr17H1 zNZ&sGff*R&t@#8xrYX}3XscY7OkfwVOcqmAW!3ZqNpuyi>uF-2C37;G&qXDJZI)ur zI`oNHrt5r4%OA+p?-eIi|A;t2{i8VOUC|*YKzm{zp)Z!nJ*UZ}c?CiuMGabckf0q& zt)oZRj9`ua$jE#@_{|*YtFY2Cozd=SJK8a@zdNwH6va_wLvpt_1?#yTNZ8}I4ss{=o z?Uhhl`@@k@^duYIk!-(UN2mjm!FrP8@>jTwzcKw4W;t)%#uxh zPBBJU2I1}lF-xV@rt^0f+P}J+7M{wtYb7h|lF2uHBd+1lZn{Y`3xa41c&mrREnL|x zmBg@<0<|pW4>ypvAKvX1=h-UA^o<@F0^$kziYxx5Qz&asJ-<{KHJL~**pKP zXbNvA;7XNTrGs~mnSr!b<_6KZ>aml&AX-b1Z{DQB?~wrpo=rGBI z^Uc0y-KvL>UgqTb@ zJ$wbJxKb(d^;>^p=Fj8Re6gRRm(rrzj_ZQ;qrbGg_&s>ut9T?$^!=I4%j(jWI=^S>;NV*_;KiH!i zA*0Y4R4(jDZJ)muE!L4XZayH{?zs-$#0_o*jpFWS z{VRxL8D6c9&*5h+RL({?Ug>~|x2t>5$Wi0tq>viKH1pl>Zfe5?j7?bCh(UFCIW<$A zi@2aeLfOC}ok~dc6p6BaUY~9FMJj;*K)8`aX_FRNpqLH5i^2`+x}u9a<98HO(MV2c zLdySAetS!@1f~_cLMe0kbSOJ~L!D_;wN$hh6*T@dv^_#(bhg&n_+{rOhQB)DzcAsy zNc~>;b0Np{t0&u~|6u^o>h z?FX9e;fB8;4XWvPIBh}cgppKGI#D#W7d{E7y)xIgo_G(HTV9mR=K3e7RfkF+{Gi}I zcF1#&<<2auMDuAhQ}&6(e@M%gbs70wb=vFFwbU|8Bi^PrlH3NjFi&>5A?pMZ%Ddet zF($lH<+~-u9C1MH{@hEM9KwhF!7qQaa?JD0baw%3&0hEnn7Ap*RA2F4FL;}{L{IcV ztI5UIHq4nLugD3b%AT3tKHr#>GA8^|B0&8sb%Rhv0lv7-Q%V(d@d}L$?lJ=!=IP?u zg@*xC-%mIW_mw;-ah(xej=P0toW*$>UOG^5d&~7T1_pYf1kb)68H)qgpKkoJh;aP| zk0TK;};WFuX++SBz_r{@XO5l`pb;}N8;aX{M*D2J(A|9;=e-t^1VbVXTLxC zCYo=f)c1FgD}Peoc3i1%o@XJ?Zai2Y+CPrMUCDDM&#QQ#)1kLGxAN#Jf>lFnDUfni zC9O;N&rSHxOZd-E_}3@=eEGJ4=YoX)RSEx8!e34JHzfSB6EJ(-J?B(t7rANZyJMFl zISWThLFw3$;mQF)={V_PFB|EtET67rr6a1nKvj(_X^oqbrrQ-|#u!zvs}jbKk;>2$ zx+q`TU{_o@)8d7UaI(YqO$Lm{MG--WW(~9#SiLYp`VTAJQnqf2WR2!zw^I$5M}kYa z&fX6$mEDo>2~x#6{<~C75|?TxPU1ge*%^%SDzuhyjrcu+GESD{ug3--?sV~(WV(XTV?hB zW{3G>YSWwP6BWjy>TP)Hza{a2NmZwlh+nu}|9t}f2mI_2eFc1SRj~AO)24yiHKOOa zhgM86#VX?Xqsv$M}d|a;R?JW7*6P z{|wX2+WvcqHdE~Qdxm_`u+6ON%esmz4`8w~pE@1Or?`4JHo*UvkJ2QS?%XVwDus`f|Re*|Dzk10w zz@3y5GTa25t3Q(RJAIA-ybU0idDajuzmfv*b^vXDbSw$lGsC=faXdaQAU&7qd%GW< zD4|`0p%Pbfh(EfE^ycoY0j<@dHPIQs-BiX8{|d=0rgB`Fj?0H3Wy_8$fBqsh;pWwF z0sC*ADMMLdUGxr6ac9r|Ky5*tCN9spE-5VhC~eGIMk{L>t(MVd|KvI6xD{r;zs>NG zx2dCu5-}t;rQ)}C13cS20#H|xz+t(&HHPZyx< z^w-4`cy}L*=vXYq1{{*^q&mXj={|Xjq_G%SOf+Eqz$ZJq65_75ZcU^iOWW}#C9jf5 zN$iPG+wwl1Ka%$R<$MuazQRg9-Xr;c<`tr!!D7$7^u2^@@8c&rjpm2}?-#%s0W|M3{siDcOm-sq zCxQ1yXPW9H;P(Mvpm0n0rvR)t9ql5tf0{r{`^y`&R}O>l&kz-CohO8&jI*{ml3=z^ z8-yoPKOo@KA;cE=AmPyuN@)+_GwadsXq2U|5>njfhzqu|i_lm5ydbcAN`Sv0U?UXC z)L)z({3QWft|pLtS-?Wv^di3kcu|r|Uj?w@Ov|OO5ioSm;L+EK2)6bJ(d^tcs7rvq zIXn1U0v75lj~*s$c!Wu8%Q~>Zqskso`zR5?R*dgH?G4>=TPNVsDU57bwBHuApA*)9 zN6~7Zz=n+b#Nptb(I@(1*-F4)s7oXoTD!yt^i1K5GFUN$_KeWZT3~}u2{0=c*YWSoIBlC%``g+#8dSfIlh86SZY&BIdVb@oVxcvumyGGvZ2JXS6pHWy()W z`OIt@sXo0V6{<~$*y8} zE#1hk$*mRH`|kKuG(|N2e&49#atvi`n1r+ih`l*CCxm`ca(vh_2E)iQWdEb zJY@9G3_kx}XxKVO`1}XFv35*=|0rOq1{2^v0iLEQ{tN&gpbSEZ|)txiO{eKY=Z0(k^wo7h1iX_0#12)4X z&6I$1ISO#m3RX^905I;00+KlHSLHW!`4Q%M;#zt6-*k{2t7qt-g>k1$z(oZaxFte0 z?fa~rnO!augNv2R|3ro*t*qZz+v#+e;#0L?Yp3wA6>rSL1ULY^C?-DvPf2pyjtMZ^ ztJ%`DK9~W*-LS%2!R703n8ho+&53JyE9*>Z+j?dr3tj7D;Y0;~1o!0uZT=i|rDC;hIS?KL!Xh3IuHX zKMS>{oyNb7m!>Kb8Eg%tsk$YT754|nk|JsXk*0=9Nq0{21zo0=pkStMX9 z1&P$9*}+^sF|Ctx>qK_NF4i97CJ5WlXXup0L*7V>!5>N#AMEw~UxzYeDE6#T(O?0FTWM-b28azC`NffTt6(Cy>!wMH=_Qr{nPd znaw(F#J4u98FOdUX`FI`t!zs4)%b3DLnag8eP#zw0Or*SYuzQ%v;Ju+Yc(q?p|(yO zZZ~y$VLPs&uV)w+$q~xhakP)<)fcu2O67msu(vkB`ewVYq1{(Ncd(UBiN4zYQaRfb z6W{{`taImSsSlhz^-JQ^mP0QkJo-jy^@H$P9rVKOURt`7I_fm1cWJwy^X zO#_QUHU=y8(>1_5FR->!Kf{EwVMRh`noureiLp{Y%Y@p(VF{gWLUY0q37um?`EYj$ ztu>*JaH)jWnNU}_OhV_H(EM;zLg$%KF&vZ7`6kpC?ja%cCRHm{!sQZ*2vy%om3iU1 z`Z79K{ZNUoo+RGG#B0Ha8~@7%euO5O6z`GZtx1D$E&#Mk!#xGd8V# zO~R?F(zg-6_UolBj@*Cye@ULJlOh^coJD@EDE^;ISoJ!=_%cED|Cn{!=2^FTN`rSn zf_ML|RUKf>S~_xcDogVHN5abyuTW`O6deWCe9HRJMbXjtI3iV({^CXZ(JLtL@I#pSk~2x}FzZY2fCol=6uYuPR@x3D1{Zgm1dx1-Pap zgEzX24D~B?15wJ4&LeCRMCS-D8Iydc2f9BYGEfLP3Q-x*m31}%v}W=KRd}vwDH$}T zMXi;n^CU`Cy-jaEL?-v^ze=f5B>E9FKpUDM{o)xQj^sj;rqb`C0lKIO(hr^ix zjo)BsQ4l@A77?G33c_~@Bzh@%1`+)>`-t_^Ya4!g zcf(JQ75~r3#cgrF#tGL;9k~BP{K9wq+hTw96(Wo>wUqC12hlgkUR(xerbtMCZq+kx zpOm(2(x^%GOC<+DqU_hM<>jTXla$ae+e8p~^r@T51SwX``$ zsPb}ppt)qDIh9j75U364AUAw9Qc{c3 zor!61f>)C{6K&=fMqY$t`g$hX z(Da8JVFw1%>x3(3QJ?5+eh}V%3R=QDBq~+!f*31R=MX)5n~v+ZkmR$_;zgH&aEJqvUqVX*a~rO$+wLV<(#Ea?CJ&A$xhICTk;k-z=rbnhEOZ5@DS% zYizFM9h4K!N*kB9m@C0DHC;D((7fe)l~qpig-fxC!b{1^1zq~Pgxw&|AEA@ zKKY#D*YES0+6MCBu4(w6wD_4p)Pxg?UpzbFm#pA_$m0l78|DTgCP#CJI5;5;E_>mP zbXv~Zc;OXrNRCdvR$MbD-VM4w4?Xh5wod_8dj@+#jBB|XojDSpc}S5f2w!8eQ4e3f z+bnOD<+Xu1njm&NrWmPB&(OA20xU8vDOyKtT<$XRe?jtxH;SB4`jud3lsObcsSZwQ zkl4K0a19Y{6wlTbUr4!^q*npqrW)y+=!@UQT>$@l(r9<6VjG!t5Z4)^tS>6h7ZWWf zeD#>KVS}e%fY1Y6%01il_H^xyu~JBx&l;%K6MZ(L?k#RjW?+7VAvjyzr9RZ15v)=7 z3iLc6JU4d2j(v+Rv18v#IsZexFDcKoZ@INK;KqKH5n(560KQp9ip#-RP=*NL0^Oo%k}nANw_3Eik?V+YkY-vs|L+2@5J7y!A9r2S%Zxa&Avf{jStPfB&MVny&(?1TZ4^`eUk)j$CkA^;U7APetkAgFa4USz>)BRj`>r1L-WNG z^GeF-6Vh&hejn(|%6Caz!$y`1E7Xq-$3=~WRP`3l@r0O16}b-(0k5>VrJ;~Utf&&c zgqOu`>ulvaW6=O*KZ3g$7iS3$mrq^|tuDcaP*ySGvJu8NCJArgLV7v2Nu-aER6l^5 zAyX#2f!sjK;G)A~?g?XJMV=bH!i=YkY0g)){_@S-Z1Un#49pktt!oCm%V9*K*{j(4 z*$C^tF-Tt_dgI$hFZpuss`FLFso(dVf%A9}{)F`0Vs{2ai96Psz*HifIxzRDyB&`!gk3H>iEip%=wzq zDxXGWnBOftoa|y141*Q_M%MlgC$9fJ8QwmTMW17^pVl|&Hy;Ous@du#QZEb*>2wd0QVpVE z>3O%1hRdIUY5%xYgI|e*rn`JWf+#cl)rz|{jea*+FuYZQyg&*y<%itT!te-K zvZSzR1Lo80JSo4yEzJw*7&M7|tavA>q%R7uzNx&5zc;JAlJP5iBP3W}=^$lzm6o%S z&bO3Tw-{cXrbL}Cue~yb=f#tw6!5SR7`+^@7rl(%nT-4d_?3}v?PM}knWAPR>=_Qh zdLd#*wy%>dp~`NIgKyT@HF3}|bX6QQ`e$7nyiF1Z;p>H!qW{l<{)e^B50j*}2HT#c zzd{hcg@h~t7MN6@4ng7VT8eykSzb%gJDo&G2YBu7bt0r0lOylaAs*rDMvY9`K~nlk z%jlyzx1{ytT`P3nIiS<`T-?%v5JoZaMh55G%0Ka>?wIIzYO|wHC3*N=<)MCC+pVpe$-`I7&ckPg zhj)S2^6=*|4_jrQ!1C~1<>4f1Y?}V?qV<51BP0fBHo~;DjFj&^OS#HO@l0c+eDYhl zwy43iR~Qg|sJ{VQ)qu@wz}5gW+&vYaO1wNnHjSi} zyz&I414b?xzZsvaFWqoakGym<)Sl9}Z9J`Y8Olp@P`X$F+3=lIRUqyLY;~8rsZKx_ znm2yV=7hbuI;Arm^})A-nobsryWt^O`;g>2g(S_%AaS@X^S8AP9)jr&8Di!~w_XrSYOJ!V|NcyNBCWu8sjNSS+4<`Yt;TRVrs z(osZ&*K3Ld|NRa8EJI`?OyTUHMU1hR<^B}Ww~Pz&9b&l;_Pu1l&^jDsGE-%A&mA^=Tm)BXfkN25+B&SKB_++C@J6(idGv;@ca3&@ATH#sdwo?3z`JD*+j}46< zG&C}LD~-&c8nfvS5M`(6_j~Ma&r%pOcx?1U0KXCzF?1fNDRO- zfB$f!HZo3e7@+z+AkrRY&UB@=$G6ECf6&Lk#iQ9LR*>R8;Zly+Lvr=a2z|yG0oHDM%BHoo96=f5oO8sjd#hR0=clH&? z94|T^mv#MXM9PtNVJ7ntsVJ3}VN&T!5A$tLxtO3QV3O2)DOn@q$)3FG{J6YPVw%QQ zT4-|ho%+X{G z)AAp{v{3V3EPRpt72cCMP-Og-SY+M1XUP8tLkcq-Ma0J*R8YO>eEN0tXMp8{r|M{M zH)Q!C`~OjPCUBBf)%~x2uez$bx_f4Nx~HmVVY)?ncyx6)(8Dq;!T^FgE@2aA0099J z(D<-wAWBWO1MUjA;WkkO6t^gUV-k&7jB$(m9!=DY#F!XyUxFw){=dI--h1_`tH*!- z{rPmgd(S=h-2L8j&pr3t79+*RDs!sHH=G^KyM7%&w@7Vu6@~WDROxIUhfU7 zO7^~|XMl^N(T54fE^EJ(wtDO_m1&3v$F8;Sz`}*@UpTwbG*@xqEc=!gPO)!w;oQbf zbJdeL6AOpAe_>O@aW*bY7-V+A%~&-S#u|r}k-FJ)u{MLr^K#OS-mRR|d*7*VzOQa4 zTl%9-7)r)X{4+RV{5W}ySCcFHm;s-V;(Qb@6Ut*0^hwdwe4z#RQEKn@vuzGgs980v zVz5p-i7*y{9#D?Ug+`@tKQz8$GOOI4OHY} z{A1`)W5wv>=KX2v{RCd_#d9uEOiT*C20~Vab~)amG14x~TH06{G&>h?yyAba3ge$Z zsuZ&q<^hK`=aSeVC{lCfc!1w81?4#4>oQCBtksyUDGQ%6y45S9Yt06ZR5gRB*(#`P zc{i5YlZn}>Ru^v}8;sdOyT{7LTlu(@A!PYri>iFwpb9R>)imjVx$mDS>hf)l<>MG{ zik^I^ZODf{Nd`neX2)Aye6`g>QTw98f0BL}kC0BX$_#T+RTFr^eswL^T^Yu!K)dHT z%t4Y~RA*|pkId9>ADx-JeY`lc{`RRgSA2PVaQ*Gqs&4i^^U~V22SPVHZejzsZg<(2 zZQ5mr{ard3hduUTnziq2l4{q=-KHef2C0shWyJLkl8(Qp$g>F2%$R}W7{eU@&_b+! z|DJp>&rrUHk#XDNAF6`ZhPSM(s&CI?F=mXJXI#^XO-QDgAsjN-mUUR@_tI*!{j|e-p|OpPTpC0 zKPzvk#b&d5W5QA0iTl)x?1WBzrD(Q=zNfP6ehG6-d=*SW)?mf>SQQ{KcWE_QjE_%1 z=|D{V8m7FfYy%M!fW2{dS!BjiIr!fOV3_%k?R=57*^~+!Z6X@B+V%pZ?*F!BJuvzb88s@ikdz@o zJ1=JfqtrUX zvF-~Xko%cn;69+h&!&N`cR(xqr-wGQvFjK3%DMs4mR@RSX2e8i`_i#hmL(ot+ zl=U+ObqS>#1DPcIw7X4C566sR;m$a6A;7_eQH%T56#vML$n8{*C zhwr(GZ@YZgKaJ&3o5ON^C2;Yo$eVQT7~e`|o?76~p*t@h31>*!DVKN6t+kH!6O{HvdBgOdPr z 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 z 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 z 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 R#(Yt`*#`dqc>jqA`~gfW(Bl9A diff --git a/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.pdb b/Weaver/External/Unity.Cecil/lib/net35/Unity.Cecil.pdb deleted file mode 100644 index ed67846ef5db0e225b045cb8e254eb2a77c11e43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1220096 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�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 Y00k*TVg95DMJYycO7Q>df8!4P2d`8f0{{R3 diff --git a/Weaver/External/Unity.Cecil/version.txt b/Weaver/External/Unity.Cecil/version.txt deleted file mode 100644 index 718f5d612..000000000 --- a/Weaver/External/Unity.Cecil/version.txt +++ /dev/null @@ -1,3 +0,0 @@ -Repository: https://github.com/Unity-Technologies/cecil.git -Branch: * unity-master -Commit: b28d33c7da63de8162b41338f4d408b77a59f4c9 \ No newline at end of file diff --git a/Weaver/Networking.sln b/Weaver/Networking.sln deleted file mode 100644 index 355f3ab96..000000000 --- a/Weaver/Networking.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mirror.Weaver", "Weaver\Mirror.Weaver.csproj", "{709222FD-15C2-497D-8B31-366ADCC074CD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - Testing|Any CPU = Testing|Any CPU - Debug-Editor|Any CPU = Debug-Editor|Any CPU - Release-Editor|Any CPU = Release-Editor|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {709222FD-15C2-497D-8B31-366ADCC074CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {709222FD-15C2-497D-8B31-366ADCC074CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {709222FD-15C2-497D-8B31-366ADCC074CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {709222FD-15C2-497D-8B31-366ADCC074CD}.Release|Any CPU.Build.0 = Release|Any CPU - {709222FD-15C2-497D-8B31-366ADCC074CD}.Testing|Any CPU.ActiveCfg = Release|Any CPU - {709222FD-15C2-497D-8B31-366ADCC074CD}.Testing|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Weaver/Weaver/CompilationFinishedHook.cs b/Weaver/Weaver/CompilationFinishedHook.cs deleted file mode 100644 index 7cdd7574c..000000000 --- a/Weaver/Weaver/CompilationFinishedHook.cs +++ /dev/null @@ -1,145 +0,0 @@ -// https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html -using System.IO; -using Mono.Cecil; -using UnityEngine; -using UnityEditor; -using UnityEditor.Compilation; -using System; -using System.Linq; - -namespace Mirror.Weaver -{ - // InitializeOnLoad is needed for Unity to call the static constructor on load - [InitializeOnLoad] - public class CompilationFinishedHook - { - public static Action OnWeaverMessage; // delegate for subscription to Weaver debug messages - public static Action OnWeaverWarning; // delegate for subscription to Weaver warning messages - public static Action OnWeaverError; // delete for subscription to Weaver error messages - - public static bool WeaverEnabled { get; set; } // controls whether we weave any assemblies when CompilationPipeline delegates are invoked - public static bool UnityLogEnabled = true; // controls weather Weaver errors are reported direct to the Unity console (tests enable this) - public static bool WeaveFailed { get; private set; } // holds the result status of our latest Weave operation - - // debug message handler that also calls OnMessageMethod delegate - static void HandleMessage(string msg) - { - if (UnityLogEnabled) Debug.Log(msg); - if (OnWeaverMessage != null) OnWeaverMessage.Invoke(msg); - } - - // warning message handler that also calls OnWarningMethod delegate - static void HandleWarning(string msg) - { - if (UnityLogEnabled) Debug.LogWarning(msg); - if (OnWeaverWarning != null) OnWeaverWarning.Invoke(msg); - } - - // error message handler that also calls OnErrorMethod delegate - static void HandleError(string msg) - { - if (UnityLogEnabled) Debug.LogError(msg); - if (OnWeaverError != null) OnWeaverError.Invoke(msg); - } - - static CompilationFinishedHook() - { - // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp.dll/ - // assemblyPath: Library/ScriptAssemblies/Assembly-CSharp-Editor.dll - CompilationPipeline.assemblyCompilationFinished += (assemblyPath, messages) => - { - // if user scripts can't be compiled because of errors, - // assemblyCompilationFinished is still called but assemblyPath - // file won't exist. in that case, do nothing. - if (!File.Exists(assemblyPath)) - { - Console.WriteLine("Weaving skipped because assembly doesnt exist: " + assemblyPath); - return; - } - - string assemblyName = Path.GetFileName(assemblyPath); - - if (assemblyName == "Telepathy.dll" || assemblyName == "Mirror.dll" || assemblyName == "Mirror.Weaver.dll") - { - // don't weave mirror files - return; - } - - // UnityEngineCoreModule.DLL path: - string unityEngineCoreModuleDLL = UnityEditorInternal.InternalEditorUtility.GetEngineCoreModuleAssemblyPath(); - - // outputDirectory is the directory of assemblyPath - string outputDirectory = Path.GetDirectoryName(assemblyPath); - - string mirrorRuntimeDll = FindMirrorRuntime(); - if (!File.Exists(mirrorRuntimeDll)) - { - // this is normal, it happens with any assembly that is built before mirror - // such as unity packages or your own assemblies - // those don't need to be weaved - // if any assembly depends on mirror, then it will be built after - return; - } - - // unity calls it for Library/ScriptAssemblies/Assembly-CSharp-Editor.dll too, but we don't want to (and can't) weave this one - bool buildingForEditor = assemblyPath.EndsWith("Editor.dll"); - if (!buildingForEditor) - { - //if (UnityLogEnabled) Debug.Log("Weaving: " + assemblyPath); // uncomment to easily observe weave targets - Console.WriteLine("Weaving: " + assemblyPath); - // assemblyResolver: unity uses this by default: - // ICompilationExtension compilationExtension = GetCompilationExtension(); - // IAssemblyResolver assemblyResolver = compilationExtension.GetAssemblyResolver(editor, file, null); - // but Weaver creates it's own if null, which is this one: - IAssemblyResolver assemblyResolver = new DefaultAssemblyResolver(); - if (Program.Process(unityEngineCoreModuleDLL, mirrorRuntimeDll, outputDirectory, new string[] { assemblyPath }, GetExtraAssemblyPaths(assemblyPath), assemblyResolver, HandleWarning, HandleError)) - { - WeaveFailed = false; - Console.WriteLine("Weaving succeeded for: " + assemblyPath); - } - else - { - WeaveFailed = true; - if (UnityLogEnabled) Debug.LogError("Weaving failed for: " + assemblyPath); - } - } - }; - } - - // Weaver needs the path for all the extra DLLs like UnityEngine.UI. - // otherwise if a script that is being weaved (like a NetworkBehaviour) - // uses UnityEngine.UI, then the Weaver won't be able to resolve it and - // throw an error. - // (the paths can be found by logging the extraAssemblyPaths in the - // original Weaver.Program.Process function.) - static string[] GetExtraAssemblyPaths(string assemblyPath) - { - Assembly[] assemblies = CompilationPipeline.GetAssemblies(); - - foreach (Assembly assembly in assemblies) - { - if (assembly.outputPath == assemblyPath) - { - return assembly.compiledAssemblyReferences.Select(Path.GetDirectoryName).ToArray(); - } - } - - if (UnityLogEnabled) Debug.LogWarning("Unable to find configuration for assembly " + assemblyPath); - return new string[] { }; - } - - static string FindMirrorRuntime() - { - Assembly[] assemblies = CompilationPipeline.GetAssemblies(); - - foreach (Assembly assembly in assemblies) - { - if (assembly.name == "Mirror") - { - return assembly.outputPath; - } - } - return ""; - } - } -} diff --git a/Weaver/Weaver/Mirror.Weaver.csproj b/Weaver/Weaver/Mirror.Weaver.csproj deleted file mode 100644 index bd1bee843..000000000 --- a/Weaver/Weaver/Mirror.Weaver.csproj +++ /dev/null @@ -1,97 +0,0 @@ - - - - Debug - AnyCPU - {709222FD-15C2-497D-8B31-366ADCC074CD} - Library - Mirror.Weaver - Mirror.Weaver - v3.5 - - - True - full - False - bin\Debug - DEBUG; - prompt - 4 - false - 4 - - - none - True - bin\Release - prompt - 4 - false - - - - - - ..\External\Unity.Cecil\lib\net35\Unity.Cecil.dll - - - ..\External\Unity.Cecil\lib\net35\Unity.Cecil.Mdb.dll - - - ..\External\Unity.Cecil\lib\net35\Unity.Cecil.Pdb.dll - - - ..\lib\UnityEditor.dll - - - ..\lib\UnityEngine.dll - - - - - - - - - - - - - - - - - - - - - - - - $(ProjectDir)..\..\Assets\Mirror\Plugins\ - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Weaver/lib/UnityEditor.dll b/Weaver/lib/UnityEditor.dll deleted file mode 100644 index 50e1c113f34ffc71815ca106851ac3e6df7955d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5421568 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

    kw+AF1caIWykJ_dy}tyxER&+7^lv$9hZ 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 ZZ;qw1v`NO}L%-p_ooZUDY1>WC{~sxJnPUI| literal 18447 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 diff --git a/docs/Components/NetworkManager.md b/docs/Components/NetworkManager.md index 0bbac6b82..961fc849a 100644 --- a/docs/Components/NetworkManager.md +++ b/docs/Components/NetworkManager.md @@ -1,6 +1,6 @@ # NetworkManager -The Network Manager is a component for managing the networking aspects of a multiplayer game. +The Network Manager is a component for managing the networking aspects of a multiplayer game. The Network Manager features include: @@ -18,7 +18,9 @@ The Network Manager is the core controlling component of a multiplayer game. To The Inspector for the Network Manager in the Editor allows you to configure and control many things related to networking. -Note: You should only ever have one active Network Manager in each Scene. Do not place the Network Manager component on a networked GameObject (one which has a Network Identity component), because Mirror disables these when the Scene loads. +**Note**: You should only ever have one active Network Manager in each Scene. Do not place the Network Manager component on a networked GameObject (one which has a Network Identity component), because Mirror disables these when the Scene loads. + +**Another note**: Mirror`s Network Manager uses separate component (derived from the Transport class) to connect across the network. By default, it is TelepathyTransport. If you are already familiar with multiplayer game development, you might find it useful to know that the Network Manager component is implemented entirely using the API, so everything it does is also available to you through scripting. For advanced users, if you find that you need to expand on the Network Manager component’s features, you can use scripting to derive your own class from NetworkManager and customize its behaviour by overriding any of the virtual function hooks that it provides. However, the Network Manager component wraps up a lot of useful functionality into a single place, and makes creating, running and debugging multiplayer games as simple as possible. @@ -34,7 +36,7 @@ If you’re using the Network Manager HUD, it automatically tells the Network Ma ![The network address and port settings in the Network Manager component](NetworkAddressAndPortSettings.png) -Whichever mode the game starts in (client, server, or host), the Network Address and Network Port properties are used. In client mode, the game attempts to connect to the address and port specified. In server or host mode, the game listens for incoming connections on the port specified. +Whichever mode the game starts in (client, server, or host), the Network Address and TelepathyTransport`s Port properties are used. In client mode, the game attempts to connect to the address and port specified. In server or host mode, the game listens for incoming connections on the port specified. ## Spawn Management @@ -99,7 +101,7 @@ You should normally make sure the Network Manager persists between Scenes, other There are virtual functions on the NetworkManager class that you can customize by creating your own derived class that inherits from NetworkManager. When implementing these functions, be sure to take care of the functionality that the default implementations provide. For example, in OnServerAddPlayer(), the function NetworkServer.AddPlayer must be called to activate the player GameObject for the connection. -These are all the callbacks that can happen for host/server and clients, in some cases it’s important to invoke the base class function to maintain default behaviour. To see the implementation itself you can view it in the source code. +These are all the callbacks that can happen for host/server and clients, in some cases it’s important to invoke the base class function to maintain default behavior. To see the implementation itself you can view it in the source code. ```cs using UnityEngine; @@ -243,42 +245,29 @@ public class CustomManager : NetworkManager { } ``` -The Network Manager component allows you to control the state of a networked game. It provides an interface in the Editor for you to configure the network, the Prefabs you use for spawning GameObjects, and the Scenesyou use for different game states. +## Public properties -For more details on implementing the Network Manager in your game, see documentation on Using the Network Manager. - -![The Network Manager component in the Inspector window](NetworkManagerUNetComponent.png) +![The Network Manager component in the Inspector window](NetworkManagerInspector.png) - **Dont Destroy On Load** Use this property to control whether or not Mirror should destroy the GameObject with the Network Manager when the Scene changes. Tick this checkbox to ensure Mirror does not destroy your Network Manager GameObject when the Scene changes in your game. Untick the checkbox if you want Mirror to destroy the GameObject when the Scene it exists in is no longer the active Scene. This is useful if you want to manage multiple, separate Network Manager GameObjects in each of your Scenes. This checkbox is ticked by default. - **Run In Background** Use this property to control whether the networked game runs when the window it is running in is not focused. Tick the checkbox if you want it to run; untick it if you want the game to stop running when the window is not focused. This checkbox is ticked by default. You need to enable this property if you want to run multiple instances of a program on the same machine, such as when testing using localhost. You should disable it when deploying to mobile platforms. When enabled, it sets Application.runInBackground to true when the Network Manager starts up. You can also set this property from the Unity menu: Edit \> Project Settings, then select the Player category, and navigate to the Resolution and Presentation panel. -- **Log Level** - Use this property to control the amount of information Mirror outputs to the console window. A low level results in more information; a high level results in less information. Each level includes message from all the levels higher than itself (for example, if you select “Warn”, the console also prints outputs all “Error” and “Fatal” log messages). The drop-down lists the levels from low to high. This property is set to Info by default. You can set Log Level to Set in Scripting to prevent the Network Manager from setting the log level at all. This means you can control the level from your own scripts instead. +- **Start On Headless** + If this box is checked (property is true) _and_ device that runs the program has no graphic device, program will start in server mode on `Awake`. +- **Show Debug Messages** + Use this property to control the amount of information Mirror outputs to the console window. - **Offline Scene** If you assign a Scene to this field, the Network Manager automatically switches to the specified Scene when a network session stops - for example, when the client disconnects, or when the server shuts down. - **Online Scene** If you assign a Scene to this field, the Network Manager automatically switches to the specified Scene when a network session starts - for example, when the client connects to a server, or when the server starts listening for connections. - **Network Info** - You can expand this section of the inspector to access network-related settings, listed below - - **Use Web Sockets** - When running as a host, enable this setting to make the host listen for Web Socket connections instead of normal transport layer connections, so that WebGL clients can connect to it (if you build your game for the WebGL platform). These WebGL instances of your game cannot act as a host (in either peer-hosted or server-only mode). Therefore, for WebGL instances of your multiplayer game to be able to find each other and play together, you must host a server-only instance of your game running in LAN mode, with a publicly reachable IP address, and it must have this option enabled. This checkbox is unticked by default. + - **Transport** + A link to Component derived from `Transport` class. TelepathyTransport is created and linked there by default. - **Network Address** The network address currently in use. For clients, this is the address of the server that is connected to. For servers, this is the local address. This is set to ‘localhost’ by default. - - **Network Port** - The network port currently in use. For clients, this is the port of the server connected to. For servers, this is the listen port. This is set to 7777 by default. - - **Server Bind To IP** - Allows you to tell the server whether to bind to a specific IP address. If this checkbox is not ticked, then there is no specific IP address bound to (IP_ANY). This checkbox is unticked by default. Use this if your server has multiple network addresses (eg, internal LAN, external internet, VPN) and you want to specific the IP address to serve your game on. - - **Server Bind Address** - This field is only visible when the Server Bind To IP checkbox is ticked. Use this to enter the specific IP address that the server should bind to. - - **Script CRC Check** - When this is enabled, Mirror checks that the clients and the server are using matching scripts. This is useful to make sure outdated versions of your client are not connecting to the latest (updated) version of your server. This checkbox is ticked by default. It does this by performing a ([CRC check](https://en.wikipedia.org/wiki/Cyclic_redundancy_check)) between the server and client that ensures the NetworkBehaviour scripts match. This may not be appropriate in some cases, such as when you are intentionally using different Unity projects for the client and server. In most other cases however, you should leave it enabled. - - **Max Delay** - The maximum time in seconds to delay buffered messages. The default of 0.01 seconds means packets are delayed at most by 10 milliseconds. Setting this to zero disables connection buffering. This is set to 0.01 by default. - - **Max Buffered Packets** - The maximum number of packets that a NetworkConnection can buffer for each channel. This corresponds to the ChannelOption.MaxPendingBuffers channel option. This is set to 16 by default. - - **Packet Fragmentation** - This allows the `NetworkConnection` instances to fragment packets that are larger than `maxPacketSize` to up a maximum of 64K. This can cause delays in sending large packets. This checkbox is ticked by default. + - **Max Connections** + Maximum quantity of clients connected to a server. Note that host is a server and one client. - **SpawnInfo** You can expand this section of the inspector to access spawn-related settings, listed below - **Player Prefab** @@ -293,38 +282,3 @@ For more details on implementing the Network Manager in your game, see documenta Choose Round Robin to cycle through startPositions in a set list. - **Registered Spawnable Prefabs** Use this list to add prefabs that you want the Network Manager to be aware of, so that it can spawn them. You can also add and remove them via scripting. -- **Advanced Configuration** - Tick this checkbox to reveal advanced configuration options in the Network Manager Inspector window. - - **Max Connections** - Define the maximum number of concurrent network connections to support. This is set to 4 by default. - - **Qos Channels** - A list containing the different communication channels the current Network Manager has, and the Quality Of Service (QoS) setting for each channel. Use this list to add or remove channels, and adjust their QoS setting. You can also configure the channels via scripting. For the descriptions of each QoS option, see QosType. -- **Timeouts** - - **Min Update Timeout** - Set the minimum time (in milliseconds) the network thread waits between sending network messages. The network thread doesn’t send multiplayer network messages immediately. Instead, it check each connection periodically at a fixed rate to see if it has something to send. This is set to 10ms by default. See API reference documentation on MinUpdateTimeout for more information. - - **Connect Timeout** - Define the amount of time (in milliseconds) Mirror should wait while trying to connect before attempting the connection again. This is set to 2000ms by default. See API reference documentation on ConnectTimeout for more information. - - **Disconnect Timeout** - The amount of time (in milliseconds) before Mirror considers a connection to be disconnected. This is set to 2000ms by default. See API reference documentation on DisconnectTimeout for more information. - - **Ping Timeout** - The amount of time (in milliseconds) between sending pings (also known as “keep-alive” packets). The ping timeout duration should be approximately one-third to one-quarter of the Disconnect Timeout duration, so that Mirror doesn’t assume that clients are disconnected until the server has failed to receive at least three pings from the client. This is set to 500ms by default. See API reference documentation on ConnectionConfig.PingTimeout for more information. -- **Global Config** - These settings relate to the Reactor. The Reactor is the part of the multiplayer system which receives network packets from the underlying operating system, and passes them into the multiplayer system for processing. - - **Thread Awake Timeout** - The timeout duration in milliseconds, used by the Reactor. How the Reactor uses this value depends on which Reactor Model you select (see below). This is set to 1ms by default. - - **Reactor Model** - Choose which type of reactor to use. The reactor model defines how Mirror reads incoming packets. For most games and applications, the default Select reactor is appropriate. If you want to trade a small delay in the processing of network messages for lower CPU usage and improved battery life, use the Fix Rate reactor. - - **Select Reactor** - This model uses the `select()` API which means that the network thread “awakens” (becomes active) as soon as a packet is available. Using this method means your game gets the data as fast as possible. This is the default Reactor Model setting. - - **Fix Rate Reactor** - This model lets the network thread sleep manually for a given amount of time (defined by the value in Thread Awake Timeout) before checking whether there are incoming packets waiting to be processed. - - **Reactor Max Recv Messages** - Set the maximum number of messages stored in the receive queue. This is set to 1024 messages by default. - - **Reactor Max Sent Messages** - Set the maximum number of messages stored in the send queue. This is set to 1024 messages by default. - - **Use Network Simulator** - Tick this checkbox to enable the usage of the network simulator. The network simulator introduces simulated latency and packet loss based on the following settings: - - **Simulated Average Latency** - The amount of delay in milliseconds to simulate. - - **Simulated Packet Loss** - The amount of packet loss to simulate in percent. diff --git a/docs/Components/NetworkManagerInspector.png b/docs/Components/NetworkManagerInspector.png index 7f670f0b7b2b35eef940bf9a471af6b0bca08a07..dec8828fb209c276083227f3001cf5166fd6ec97 100644 GIT binary patch literal 38739 zcmb5WbyQqU8|{hHcn6Z;?s*|VaEHbdAOv>_5G=U66G(6f5Zv8@yC!&WcX#)ow|Kwr z-kE#Xnwd3!u%LT2-PPxudTKwvz3YT1$V*|N6QRSw!C}criz~vx!S8~fJ_rhUW}qE{ z34X!bD@wuON(V`Hzyl-`Q8`gKxStUicLvDdF`A9EhCLh{_OGWO`0xK<6T`v9ZOe#@ zD!b?&q@X3g-?-`?Dz4eTC3_Xk6sY+3g@⪼LE<3A>xd08Q+D(GMjyv%@$WSRZ+YP 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 b3I43V_2}A9$2}@%8Gyjk)z4*}Q$iB}$8Zd< literal 17729 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 YI5NN2aahU&C;ccYikb@b^5$Xx4_v^?rT_o{ From ca7824bbc15629510200e50ad976fecfcd28799d Mon Sep 17 00:00:00 2001 From: rodolphito Date: Wed, 6 Mar 2019 13:52:26 -0800 Subject: [PATCH 158/276] Fixed animator bandwidth problem. (#536) * Fixed animator bandwidth problem. * Renamed xShadowCopy to lastXParamters, renamed val to be consistent with the reading value names, renamed newValue to newIntValue to be consistent with newFloatValue and newBoolValue. * Removed Debug.log which slipped by. --- Assets/Mirror/Components/NetworkAnimator.cs | 46 +++++++++++++++++---- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index f8c72a3c7..5650fe09b 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -11,6 +11,10 @@ public class NetworkAnimator : NetworkBehaviour // configuration [SerializeField] Animator m_Animator; [SerializeField] uint m_ParameterSendBits; + // Note: not an object[] array because otherwise initialization is real annoying + int[] lastIntParameters; + float[] lastFloatParameters; + bool[] lastBoolParameters; // properties public Animator animator @@ -133,9 +137,10 @@ void CheckSendRate() m_SendTimer = Time.time + syncInterval; NetworkWriter writer = new NetworkWriter(); - WriteParameters(writer, true); - - SendAnimationParametersMessage(writer.ToArray()); + if (WriteParameters(writer, true)) + { + SendAnimationParametersMessage(writer.ToArray()); + } } } @@ -192,12 +197,16 @@ internal void HandleAnimTriggerMsg(int hash) m_Animator.SetTrigger(hash); } - void WriteParameters(NetworkWriter writer, bool autoSend) + bool WriteParameters(NetworkWriter writer, bool autoSend) { // store the animator parameters in a variable - the "Animator.parameters" getter allocates // a new parameter array every time it is accessed so we should avoid doing it in a loop AnimatorControllerParameter[] parameters = m_Animator.parameters; + if (lastIntParameters == null) lastIntParameters = new int[parameters.Length]; + if (lastFloatParameters == null) lastFloatParameters = new float[parameters.Length]; + if (lastBoolParameters == null) lastBoolParameters = new bool[parameters.Length]; + bool didWork = false; for (int i = 0; i < parameters.Length; i++) { if (autoSend && !GetParameterAutoSend(i)) @@ -206,17 +215,36 @@ void WriteParameters(NetworkWriter writer, bool autoSend) AnimatorControllerParameter par = parameters[i]; if (par.type == AnimatorControllerParameterType.Int) { - writer.WritePackedUInt32((uint)m_Animator.GetInteger(par.nameHash)); + int newIntValue = m_Animator.GetInteger(par.nameHash); + if (newIntValue != lastIntParameters[i]) + { + writer.WritePackedUInt32((uint) newIntValue); + didWork = true; + lastIntParameters[i] = newIntValue; + } } else if (par.type == AnimatorControllerParameterType.Float) { - writer.Write(m_Animator.GetFloat(par.nameHash)); + float newFloatValue = m_Animator.GetFloat(par.nameHash); + if (Mathf.Abs(newFloatValue - lastFloatParameters[i]) < 0.001f) + { + writer.Write(newFloatValue); + didWork = true; + lastFloatParameters[i] = newFloatValue; + } } else if (par.type == AnimatorControllerParameterType.Bool) { - writer.Write(m_Animator.GetBool(par.nameHash)); + bool newBoolValue = m_Animator.GetBool(par.nameHash); + if (newBoolValue != lastBoolParameters[i]) + { + writer.Write(newBoolValue); + didWork = true; + lastBoolParameters[i] = newBoolValue; + } } } + return didWork; } void ReadParameters(NetworkReader reader, bool autoSend) @@ -233,8 +261,8 @@ void ReadParameters(NetworkReader reader, bool autoSend) AnimatorControllerParameter par = parameters[i]; if (par.type == AnimatorControllerParameterType.Int) { - int newValue = (int)reader.ReadPackedUInt32(); - m_Animator.SetInteger(par.nameHash, newValue); + int newIntValue = (int)reader.ReadPackedUInt32(); + m_Animator.SetInteger(par.nameHash, newIntValue); } else if (par.type == AnimatorControllerParameterType.Float) { From f3738d87d76ecc201173cf7cc7e65edd35b91205 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 7 Mar 2019 13:39:15 +0100 Subject: [PATCH 159/276] NetworkAnimatorEditor: create GUIContent directly --- Assets/Mirror/Editor/NetworkAnimatorEditor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/Mirror/Editor/NetworkAnimatorEditor.cs b/Assets/Mirror/Editor/NetworkAnimatorEditor.cs index 5ef50e9b9..46558f326 100644 --- a/Assets/Mirror/Editor/NetworkAnimatorEditor.cs +++ b/Assets/Mirror/Editor/NetworkAnimatorEditor.cs @@ -13,7 +13,7 @@ public class NetworkAnimatorEditor : Editor [NonSerialized] bool m_Initialized; SerializedProperty m_AnimatorProperty; - GUIContent m_AnimatorLabel; + GUIContent m_AnimatorLabel = new GUIContent("Animator", "The Animator component to synchronize."); void Init() { @@ -24,7 +24,6 @@ void Init() m_AnimSync = target as NetworkAnimator; m_AnimatorProperty = serializedObject.FindProperty("m_Animator"); - m_AnimatorLabel = new GUIContent("Animator", "The Animator component to synchronize."); } public override void OnInspectorGUI() From 8b85e1c846ac6b2cbe49ad402e5131a7770d0924 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 7 Mar 2019 13:39:26 +0100 Subject: [PATCH 160/276] NetworkIdentityEditor: create GUIContent directly --- Assets/Mirror/Editor/NetworkIdentityEditor.cs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Assets/Mirror/Editor/NetworkIdentityEditor.cs b/Assets/Mirror/Editor/NetworkIdentityEditor.cs index 7ef1b365e..6583dd2fc 100644 --- a/Assets/Mirror/Editor/NetworkIdentityEditor.cs +++ b/Assets/Mirror/Editor/NetworkIdentityEditor.cs @@ -11,9 +11,9 @@ public class NetworkIdentityEditor : Editor SerializedProperty m_ServerOnlyProperty; SerializedProperty m_LocalPlayerAuthorityProperty; - GUIContent m_ServerOnlyLabel; - GUIContent m_LocalPlayerAuthorityLabel; - GUIContent m_SpawnLabel; + GUIContent m_ServerOnlyLabel = new GUIContent("Server Only", "True if the object should only exist on the server."); + GUIContent m_LocalPlayerAuthorityLabel = new GUIContent("Local Player Authority", "True if this object will be controlled by a player on a client."); + GUIContent m_SpawnLabel = new GUIContent("Spawn Object", "This causes an unspawned server object to be spawned on clients"); NetworkIdentity m_NetworkIdentity; bool m_Initialized; @@ -30,10 +30,6 @@ void Init() m_ServerOnlyProperty = serializedObject.FindProperty("m_ServerOnly"); m_LocalPlayerAuthorityProperty = serializedObject.FindProperty("m_LocalPlayerAuthority"); - - m_ServerOnlyLabel = new GUIContent("Server Only", "True if the object should only exist on the server."); - m_LocalPlayerAuthorityLabel = new GUIContent("Local Player Authority", "True if this object will be controlled by a player on a client."); - m_SpawnLabel = new GUIContent("Spawn Object", "This causes an unspawned server object to be spawned on clients"); } public override void OnInspectorGUI() From 3a86bd501aaf1ac05b33eecf0ecdd221f8a37c6b Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 7 Mar 2019 15:27:15 +0100 Subject: [PATCH 161/276] headless start doesn't unnecessarily set tick rate anymore. StartServer already takes care of that. --- Assets/Mirror/Runtime/NetworkManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index 248cb15fd..b3669e7e8 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -84,9 +84,9 @@ public virtual void Awake() InitializeSingleton(); // headless mode? then start the server + // (tick rate is applied in StartServer!) if (IsHeadless() && startOnHeadless) { - Application.targetFrameRate = 60; StartServer(); } } From 508ba558fc69af651b91bc1144a01f8d9a506b61 Mon Sep 17 00:00:00 2001 From: vis2k Date: Thu, 7 Mar 2019 15:30:23 +0100 Subject: [PATCH 162/276] NetworkManager: headless start moved to Start() because Awake() is for initialization. --- Assets/Mirror/Runtime/NetworkManager.cs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Assets/Mirror/Runtime/NetworkManager.cs b/Assets/Mirror/Runtime/NetworkManager.cs index b3669e7e8..297769927 100644 --- a/Assets/Mirror/Runtime/NetworkManager.cs +++ b/Assets/Mirror/Runtime/NetworkManager.cs @@ -82,13 +82,6 @@ public virtual void Awake() networkSceneName = offlineScene; InitializeSingleton(); - - // headless mode? then start the server - // (tick rate is applied in StartServer!) - if (IsHeadless() && startOnHeadless) - { - StartServer(); - } } // headless mode detection @@ -140,6 +133,19 @@ void InitializeSingleton() } } + public virtual void Start() + { + // headless mode? then start the server + // can't do this in Awake because Awake is for initialization. + // some transports might not be ready until Start. + // + // (tick rate is applied in StartServer!) + if (IsHeadless() && startOnHeadless) + { + StartServer(); + } + } + // NetworkIdentity.UNetStaticUpdate is called from UnityEngine while LLAPI network is active. // if we want TCP then we need to call it manually. probably best from NetworkManager, although this means // that we can't use NetworkServer/NetworkClient without a NetworkManager invoking Update anymore. From 10bedf6f539aa9823b4c6b7b382be1cfa6ad72f5 Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 8 Mar 2019 13:15:38 +0100 Subject: [PATCH 163/276] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45691df8b..7934399b2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![Mirror Logo](https://i.imgur.com/5dUNWxl.png) +![Mirror Logo](https://i.imgur.com/aZRKBeh.png) [![Download](https://img.shields.io/badge/asset_store-brightgreen.svg)](https://www.assetstore.unity3d.com/#!/content/129321) [![Documentation](https://img.shields.io/badge/documentation-brightgreen.svg)](https://vis2k.github.io/Mirror/) From 557dee823466c6d5e44de901861589fbafb67b40 Mon Sep 17 00:00:00 2001 From: Gleb Date: Fri, 8 Mar 2019 14:36:04 +0200 Subject: [PATCH 164/276] Update NetworkManager.md (#568) Mention about Awake is removed from startOnHeadless description. --- docs/Components/NetworkManager.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Components/NetworkManager.md b/docs/Components/NetworkManager.md index 961fc849a..6fd01acee 100644 --- a/docs/Components/NetworkManager.md +++ b/docs/Components/NetworkManager.md @@ -254,7 +254,7 @@ public class CustomManager : NetworkManager { - **Run In Background** Use this property to control whether the networked game runs when the window it is running in is not focused. Tick the checkbox if you want it to run; untick it if you want the game to stop running when the window is not focused. This checkbox is ticked by default. You need to enable this property if you want to run multiple instances of a program on the same machine, such as when testing using localhost. You should disable it when deploying to mobile platforms. When enabled, it sets Application.runInBackground to true when the Network Manager starts up. You can also set this property from the Unity menu: Edit \> Project Settings, then select the Player category, and navigate to the Resolution and Presentation panel. - **Start On Headless** - If this box is checked (property is true) _and_ device that runs the program has no graphic device, program will start in server mode on `Awake`. + If this box is checked (property is true) _and_ computer that runs the program has no graphic device, program will start in server mode. - **Show Debug Messages** Use this property to control the amount of information Mirror outputs to the console window. - **Offline Scene** @@ -263,7 +263,7 @@ public class CustomManager : NetworkManager { If you assign a Scene to this field, the Network Manager automatically switches to the specified Scene when a network session starts - for example, when the client connects to a server, or when the server starts listening for connections. - **Network Info** - **Transport** - A link to Component derived from `Transport` class. TelepathyTransport is created and linked there by default. + A link to a Component derived from `Transport` class. TelepathyTransport is created and linked there by default. - **Network Address** The network address currently in use. For clients, this is the address of the server that is connected to. For servers, this is the local address. This is set to ‘localhost’ by default. - **Max Connections** From 98a0e234136d7bc1671e3eb802145d63ba21e60c Mon Sep 17 00:00:00 2001 From: vis2k Date: Fri, 8 Mar 2019 20:24:18 +0100 Subject: [PATCH 165/276] Persistent sceneid (#563) * add empty line * persistent scene ids * never assign scene ids at runtime * fix warning * fix 'sceneid is never assigned to' warning in play mode * simplify bitwise operation * set dirty even if only scene index byte changed * improve log message * assign build index byte in OnPostProcessScene to also work with unopened scenes and build index changes * add comment * improve log * Add sceneid not set check * Only PostProcess the objects from this scene. * Interrupt build if there is an unopened scene that still needs sceneId assignments. This makes it 100% fail safe. * improve comment and error message * clear build index byte before or-ing into it --- .../Editor/NetworkInformationPreview.cs | 2 +- .../Mirror/Editor/NetworkScenePostProcess.cs | 190 +++--------------- Assets/Mirror/Runtime/NetworkIdentity.cs | 121 ++++++++++- 3 files changed, 139 insertions(+), 174 deletions(-) diff --git a/Assets/Mirror/Editor/NetworkInformationPreview.cs b/Assets/Mirror/Editor/NetworkInformationPreview.cs index 579e01e3b..997d6347f 100644 --- a/Assets/Mirror/Editor/NetworkInformationPreview.cs +++ b/Assets/Mirror/Editor/NetworkInformationPreview.cs @@ -215,7 +215,7 @@ void GetNetworkInformation(GameObject gameObject) m_Info = new List { GetAssetId(), - GetString("Scene ID", m_Identity.sceneId.ToString()) + GetString("Scene ID", m_Identity.sceneId.ToString("X")) }; if (!Application.isPlaying) diff --git a/Assets/Mirror/Editor/NetworkScenePostProcess.cs b/Assets/Mirror/Editor/NetworkScenePostProcess.cs index 6e0edfdff..6e77bb6b2 100644 --- a/Assets/Mirror/Editor/NetworkScenePostProcess.cs +++ b/Assets/Mirror/Editor/NetworkScenePostProcess.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEditor.Callbacks; @@ -9,168 +8,20 @@ namespace Mirror { public class NetworkScenePostProcess : MonoBehaviour { - // persistent sceneId assignment to fix readstring bug that occurs when restarting the editor and - // connecting to a build again. sceneids were then different because FindObjectsOfType's order - // is not guranteed to be the same. - // -> we need something unique and persistent, aka always the same when pressing play/building the first time - // -> Unity has no built in unique id for GameObjects in the scene - - // helper function to figure out a unique, persistent scene id for a GameObject in the hierarchy - // -> Unity's instanceId is unique but not persistent - // -> hashing the whole GameObject is not enough either since a duplicate would have the same hash - // -> we definitely need the transform sibling index in the hierarchy - // -> so we might as well use just that - // -> transforms have children too so we need a list of sibling indices like 0->3->5 - public static List SiblingPathFor(Transform t) - { - List result = new List(); - while (t != null) - { - result.Add(t.GetSiblingIndex()); - t = t.parent; - } - - result.Reverse(); // parent to child instead of child to parent order - return result; - } - - // we need to compare by using the whole sibling list - // comparing the string won't work work because: - // "1->2" - // "20->2" - // would compare '1' vs '2', then '-' vs '0' - // - // tests: - // CompareSiblingPaths(new List(){0}, new List(){0}) => 0 - // CompareSiblingPaths(new List(){0}, new List(){1}) => -1 - // CompareSiblingPaths(new List(){1}, new List(){0}) => 1 - // CompareSiblingPaths(new List(){0,1}, new List(){0,2}) => -1 - // CompareSiblingPaths(new List(){0,2}, new List(){0,1}) => 1 - // CompareSiblingPaths(new List(){1}, new List(){0,1}) => 1 - // CompareSiblingPaths(new List(){1}, new List(){2,1}) => -1 - public static int CompareSiblingPaths(List left, List right) - { - // compare [0], remove it, compare next, etc. - while (left.Count > 0 && right.Count > 0) - { - if (left[0] < right[0]) - { - return -1; - } - else if (left[0] > right[0]) - { - return 1; - } - else - { - // equal, so they are both children of the same transform - // -> which also means that they both must have one more - // entry, so we can remove both without checking size - left.RemoveAt(0); - right.RemoveAt(0); - } - } - - // equal if both were empty or both had the same entry without any - // more children (should never happen in practice) - return 0; - } - - public static int CompareNetworkIdentitySiblingPaths(NetworkIdentity left, NetworkIdentity right) - { - return CompareSiblingPaths(SiblingPathFor(left.transform), SiblingPathFor(right.transform)); - } - - // we might have inactive scenes in the Editor's build settings, which - // aren't actually included in builds. - // so we have to only count the active ones when in Editor, otherwise - // editor and build sceneIds might get out of sync. - public static int GetSceneCount() - { -#if UNITY_EDITOR - return EditorBuildSettings.scenes.Count(scene => scene.enabled); -#else - return SceneManager.sceneCountInBuildSettings; -#endif - } + // helper function to check if a NetworkIdentity is in the active scene + static bool InActiveScene(NetworkIdentity identity) => + identity.gameObject.scene == SceneManager.GetActiveScene(); [PostProcessScene] public static void OnPostProcessScene() { - // vis2k: MISMATCHING SCENEID BUG FIX - // problem: - // * FindObjectsOfType order is not guaranteed. restarting the - // editor results in a different order - // * connecting to a build again would cause Mirror to deserialize - // the wrong objects, causing all kinds of weird errors like - // 'ReadString out of range' - // - // solution: - // sort by sibling-index path, e.g. [0,1,2] vs [1] - // this is the only deterministic way to sort a list of objects in - // the scene. - // -> it's the same result every single time, even after restarts - // - // note: there is a reason why we 'sort by' sibling path instead of - // using it as sceneId directly. networkmanager etc. use Dont- - // DestroyOnLoad, which changes the hierarchy: - // - // World: - // NetworkManager - // Player - // - // ..becomes.. - // - // World: - // Player - // DontDestroyOnLoad: - // NetworkManager - // - // so the player's siblingindex would be decreased by one. - // -> this is a problem because when building, OnPostProcessScene - // is called before any dontdestroyonload happens, but when - // entering play mode, it's called after - // -> hence sceneids would differ by one - // - // => but if we only SORT it, then it doesn't matter if one - // inbetween disappeared. as long as no NetworkIdentity used - // DontDestroyOnLoad. - // - // note: assigning a GUID in NetworkIdentity.OnValidate would be way - // cooler, but OnValidate isn't called for other unopened scenes - // when building or pressing play, so the bug would still happen - // there. - // - // note: this can still fail if DontDestroyOnLoad is called for a - // NetworkIdentity - but no one should ever do that anyway. - List identities = FindObjectsOfType().ToList(); - identities.Sort(CompareNetworkIdentitySiblingPaths); - - // sceneId assignments need to work with additive scene loading, so - // it can't always start at 1,2,3,4,..., otherwise there will be - // sceneId duplicates. - // -> we need an offset to start at 1000+1,+2,+3, etc. - // -> the most robust way is to split uint value range by sceneCount - // -> only if more than one scene. otherwise use offset 0 to avoid - // DivisionByZero if no scene in build settings, and to avoid - // different offsets in editor/build if scene wasn't added to - // build settings. - uint offsetPerScene = 0; - if (SceneManager.sceneCountInBuildSettings > 1) - { - offsetPerScene = uint.MaxValue / (uint)GetSceneCount(); - - // make sure that there aren't more sceneIds than offsetPerScene - // -> only if we have multiple scenes. otherwise offset is 0, in - // which case it doesn't matter. - if (identities.Count >= offsetPerScene) - { - Debug.LogWarning(">=" + offsetPerScene + " NetworkIdentities in scene. Additive scene loading will cause duplicate ids."); - } - } - - uint nextSceneId = 1; - foreach (NetworkIdentity identity in identities) + // find all NetworkIdentities in this scene + // => but really only from this scene. this avoids weird situations + // like in NetworkZones when we destroy the local player and + // load another scene afterwards, yet the local player is still + // in the FindObjectsOfType result with scene=DontDestroyOnLoad + // for some reason + foreach (NetworkIdentity identity in FindObjectsOfType().Where(InActiveScene)) { // if we had a [ConflictComponent] attribute that would be better than this check. // also there is no context about which scene this is in. @@ -181,13 +32,22 @@ public static void OnPostProcessScene() if (identity.isClient || identity.isServer) continue; - uint offset = (uint)identity.gameObject.scene.buildIndex * offsetPerScene; - identity.ForceSceneId(offset + nextSceneId++); - if (LogFilter.Debug) Debug.Log("PostProcess sceneid assigned: name=" + identity.name + " scene=" + identity.gameObject.scene.name + " sceneid=" + identity.sceneId); + // valid scene id? then set build index byte + // otherwise it might be an unopened scene that still has null + // sceneIds. builds are interrupted if they contain 0 sceneIds, + // but it's still possible that we call LoadScene in Editor + // for a previously unopened scene. + // => throwing an exception would only show it for one object + // because this function would return afterwards. + if (identity.sceneId != 0) + { + identity.SetSceneIdSceneIndexByteInternal(); + } + else Debug.LogError("Scene " + identity.gameObject.scene.path + " needs to be opened and resaved, because the scene object " + identity.name + " has no valid sceneId yet."); - // disable it AFTER assigning the sceneId. - // -> this way NetworkIdentity.OnDisable adds itself to the - // spawnableObjects dictionary (only if sceneId != 0) + // disable it + // note: NetworkIdentity.OnDisable adds itself to the + // spawnableObjects dictionary (only if sceneId != 0) identity.gameObject.SetActive(false); // safety check for prefabs with more than one NetworkIdentity diff --git a/Assets/Mirror/Runtime/NetworkIdentity.cs b/Assets/Mirror/Runtime/NetworkIdentity.cs index 1527d2215..6a287df9f 100644 --- a/Assets/Mirror/Runtime/NetworkIdentity.cs +++ b/Assets/Mirror/Runtime/NetworkIdentity.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; - #if UNITY_EDITOR using UnityEditor; #if UNITY_2018_3_OR_NEWER @@ -19,7 +18,6 @@ namespace Mirror public sealed class NetworkIdentity : MonoBehaviour { // configuration - [SerializeField] uint m_SceneId; [SerializeField] bool m_ServerOnly; [SerializeField] bool m_LocalPlayerAuthority; bool m_IsServer; @@ -90,6 +88,12 @@ internal set } } + // persistent scene id + [SerializeField] uint m_SceneId = 0; + + // keep track of all sceneIds to detect scene duplicates + static Dictionary sceneIds = new Dictionary(); + // used when adding players internal void SetClientOwner(NetworkConnection conn) { @@ -125,9 +129,6 @@ internal void ForceAuthority(bool authority) public delegate void ClientAuthorityCallback(NetworkConnection conn, NetworkIdentity identity, bool authorityState); public static ClientAuthorityCallback clientAuthorityCallback; - // only used when fixing duplicate scene IDs during post-processing - public void ForceSceneId(uint newSceneId) => m_SceneId = newSceneId; - // used when the player object for a connection changes internal void SetNotLocalPlayer() { @@ -184,30 +185,134 @@ bool ThisIsASceneObjectWithPrefabParent(out GameObject prefab) return true; } + // persistent sceneId assignment + // (because scene objects have no persistent unique ID in Unity) + // + // original UNET used OnPostProcessScene to assign an index based on + // FindObjectOfType order. + // -> this didn't work because FindObjectOfType order isn't deterministic. + // -> one workaround is to sort them by sibling paths, but it can still + // get out of sync when we open scene2 in editor and we have + // DontDestroyOnLoad objects that messed with the sibling index. + // + // we absolutely need a persistent id. challenges: + // * it needs to be 0 for prefabs + // => we set it to 0 in SetupIDs() if prefab! + // * it needs to be only assigned in edit time, not at runtime because + // only the objects that were in the scene since beginning should have + // a scene id. + // => Application.isPlaying check solves that + // * it needs to detect duplicated sceneIds after duplicating scene + // objects + // => sceneIds dict takes care of that + // * duplicating the whole scene file shouldn't result in duplicate + // scene objects + // => buildIndex is shifted into sceneId for that. + // => if we have no scenes in build index then it doesn't matter + // because by definition a build can't switch to other scenes + // => if we do have scenes in build index then it will be != -1 + // note: the duplicated scene still needs to be opened once for it to + // be set properly + // * scene objects need the correct scene index byte even if the scene's + // build index was changed or a duplicated scene wasn't opened yet. + // => OnPostProcessScene is the only function that gets called for + // each scene before runtime, so this is where we set the scene + // byte. + // * disabled scenes in build settings should result in same scene index + // in editor and in build + // => .gameObject.scene.buildIndex filters out disabled scenes by + // default + // * generated sceneIds absolutely need to set scene dirty and force the + // user to resave. + // => Undo.RecordObject does that perfectly. + // * sceneIds should never be generated temporarily for unopened scenes + // when building, otherwise editor and build get out of sync + // => BuildPipeline.isBuildingPlayer check solves that + void AssignSceneID() + { + // we only ever assign sceneIds at edit time, never at runtime. + // by definition, only the original scene objects should get one. + // -> if we assign at runtime then server and client would generate + // different random numbers! + if (Application.isPlaying) + return; + + // no valid sceneId yet, or duplicate? + NetworkIdentity existing; + bool duplicate = sceneIds.TryGetValue(m_SceneId, out existing) && existing != null && existing != this; + if (m_SceneId == 0 || duplicate) + { + // if a scene was never opened and we are building it, then a + // sceneId would be assigned to build but not saved in editor, + // resulting in them getting out of sync. + // => don't ever assign temporary ids. they always need to be + // permanent + // => throw an exception to cancel the build and let the user + // know how to fix it! + if (BuildPipeline.isBuildingPlayer) + throw new Exception("Scene " + gameObject.scene.path + " needs to be opened and resaved before building, because the scene object " + name + " has no valid sceneId yet."); + + // if we generate the sceneId then we MUST be sure to set dirty + // in order to save the scene object properly. otherwise it + // would be regenerated every time we reopen the scene, and + // upgrading would be very difficult. + // -> Undo.RecordObject is the new EditorUtility.SetDirty! + // -> we need to call it before changing. + Undo.RecordObject(this, "Generated SceneId"); + + // generate random sceneId + // range: 3 bytes to fill 0x00FFFFFF + m_SceneId = (uint)UnityEngine.Random.Range(0, 0xFFFFFF); + Debug.Log(name + " in scene=" + gameObject.scene.name + " sceneId assigned to: " + m_SceneId.ToString("X") + (duplicate ? " because duplicated" : "")); + } + + + // add to sceneIds dict no matter what + // -> even if we didn't generate anything new, because we still need + // existing sceneIds in there to check duplicates + sceneIds[m_SceneId] = this; + } + + // copy scene build index into sceneId for scene objects. + // this is the only way for scene file duplication to not contain + // duplicate sceneIds as it seems. + // -> sceneId before: 0x00AABBCCDD + // -> then we clear the left most byte, so that our 'OR' uses 0x00 + // -> then we OR buildIndex into the 0x00 part + // => ONLY USE THIS FROM POSTPROCESSSCENE! + public void SetSceneIdSceneIndexByteInternal() + { + byte buildIndex = (byte)gameObject.scene.buildIndex; + m_SceneId = (m_SceneId & 0x00FFFFFF) | (uint)(buildIndex << 24); + Debug.Log(name + " in scene=" + gameObject.scene.name + " scene index byte(" + buildIndex.ToString("X") + ") copied into sceneId: " + m_SceneId.ToString("X")); + } + void SetupIDs() { if (ThisIsAPrefab()) { - ForceSceneId(0); + m_SceneId = 0; // force 0 for prefabs AssignAssetID(gameObject); } else if (ThisIsASceneObjectWithPrefabParent(out GameObject prefab)) { + AssignSceneID(); AssignAssetID(prefab); } else if (PrefabStageUtility.GetCurrentPrefabStage() != null) { - ForceSceneId(0); + m_SceneId = 0; // force 0 for prefabs string path = PrefabStageUtility.GetCurrentPrefabStage().prefabAssetPath; AssignAssetID(path); } else { + AssignSceneID(); m_AssetId = ""; } } - #endif + void OnDestroy() { if (m_IsServer && NetworkServer.active) From 71fa8c328166ea1927a232e8919c25705b31a9e8 Mon Sep 17 00:00:00 2001 From: Rodol Phito Date: Fri, 8 Mar 2019 22:12:59 -0800 Subject: [PATCH 166/276] Fixed Migration guide. --- docs/General/Migration.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/General/Migration.md b/docs/General/Migration.md index 636defaee..68e88d80c 100644 --- a/docs/General/Migration.md +++ b/docs/General/Migration.md @@ -187,17 +187,17 @@ public override void OnServerAddPlayer(NetworkConnection conn, short playerContr } ``` -In your newly Mirror-capable NetworkManager, if you are using the OnServerAddPlayer override, remove the "playerControllerId" parameter from your override and the base call: +In your newly Mirror-capable NetworkManager, if you are using the `OnServerAddPlayer` override, remove the "playerControllerId" parameter from your override and the base call, and change the `NetworkReader` into `AddPlayerMessage`: ```cs -public override void OnServerAddPlayer(NetworkConnection conn, NetworkReader extraMessageReader) +public override void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { - base.OnServerAddPlayer(conn, extraMessageReader); + base.OnServerAddPlayer(conn, extraMessage); // your code } ``` -Note that in both UNet and Mirror the parameter "extraMessageReader" is optional. +Note that in UNet the parameter "extraMessageReader" is optional, but in Mirror it is required. ### 10. Pick your transport From 0b7d3260078e5e1e0928e22cc0ab4b2a95e4b499 Mon Sep 17 00:00:00 2001 From: Rodol Phito Date: Fri, 8 Mar 2019 22:19:50 -0800 Subject: [PATCH 167/276] Updated NetworkManager.md --- docs/Components/NetworkManager.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Components/NetworkManager.md b/docs/Components/NetworkManager.md index 6fd01acee..f617ab8c7 100644 --- a/docs/Components/NetworkManager.md +++ b/docs/Components/NetworkManager.md @@ -59,10 +59,10 @@ If you have only one Network Manager, you need to register to it all prefabs whi The Network Manager spawns player GameObjects using its implementation of NetworkManager.OnServerAddPlayer. If you want to customize the way player GameObjects are created, you can override that virtual function. This code shows an example of the default implementation: ```cs -public virtual void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) +public virtual void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { var player = (GameObject)GameObject.Instantiate(playerPrefab, playerSpawnPos, Quaternion.identity); - NetworkServer.AddPlayerForConnection(conn, player, playerControllerId); + NetworkServer.AddPlayerForConnection(conn, player); } ``` @@ -134,11 +134,11 @@ public class CustomManager : NetworkManager { Debug.Log("Client is set to the ready state (ready to receive state updates): " + conn); } - public override void OnServerAddPlayer(NetworkConnection conn, short playerControllerId) + public override void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { - var player = (GameObject)GameObject.Instantiate(playerPrefab, Vector3.zero, Quaternion.identity); + GameObject player = (GameObject)GameObject.Instantiate(playerPrefab, Vector3.zero, Quaternion.identity); - NetworkServer.AddPlayerForConnection(conn, player, playerControllerId); + NetworkServer.AddPlayerForConnection(conn, player); Debug.Log("Client has requested to get his player added to the game"); } From a00a46cc836e2446b41b4ec90918bd195b7029db Mon Sep 17 00:00:00 2001 From: Rodol Phito Date: Fri, 8 Mar 2019 22:22:04 -0800 Subject: [PATCH 168/276] Updated SpawnPlayerCustom.md --- docs/Concepts/GameObjects/SpawnPlayerCustom.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Concepts/GameObjects/SpawnPlayerCustom.md b/docs/Concepts/GameObjects/SpawnPlayerCustom.md index e4d4944c3..709748ccf 100644 --- a/docs/Concepts/GameObjects/SpawnPlayerCustom.md +++ b/docs/Concepts/GameObjects/SpawnPlayerCustom.md @@ -26,11 +26,11 @@ using Mirror; public class MyNetworkManager : NetworkManager { - public override void OnServerAddPlayer(NetworkConnection conn) + public override void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) { GameObject player = (GameObject)Instantiate(playerPrefab, Vector3.zero, Quaternion.identity); player.GetComponent().color = Color.red; - NetworkServer.AddPlayerForConnection(conn, player, conn.playerControllerId); + NetworkServer.AddPlayerForConnection(conn, player); } } ``` From 07e8b24bd8078dd1f5574538637c848433dd53b1 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sat, 9 Mar 2019 16:01:35 -0600 Subject: [PATCH 169/276] Document authentication (#575) --- docs/Concepts/Authentication.md | 74 +++++++++++++++++++++++++++++++++ docs/_data/navigation.yml | 2 + 2 files changed, 76 insertions(+) create mode 100644 docs/Concepts/Authentication.md diff --git a/docs/Concepts/Authentication.md b/docs/Concepts/Authentication.md new file mode 100644 index 000000000..5c9e8eeee --- /dev/null +++ b/docs/Concepts/Authentication.md @@ -0,0 +1,74 @@ +# Authentication + +When you have a multiplayer game, often you need to store information about your player for later games, keep game stats or communicate with your friends. For all these use cases, you often need a way to uniquely identify a user. Being able to tell users appart is called authentication. There are several methods available, some examples include: + +* Ask the user for username and password +* Use a third party oath or openid identity provider, such as facebook, twitter, google +* Use a third party service such as playfab, gamelift or steam +* Use the device id, very popular method in mobile +* Use Google Play in android +* Use Game Center in ios +* Use a web service in your website + +Trying to write a comprehensive authentication framework that cover all these is very complex. There is no one size fit all, and we would quickly end up with bloated code. + +Instead, **Mirror does not perform authentication**, but we provide hooks you can use to implement any of these. + +Here is an example of how to implement simple username/password authentication: + +1) Select your NetworkManager gameobject in the unity editor. +2) In the inspector, under `Spawn Info`, disable `Auto Create Player` +3) Call `AddPlayer` in your client to pass the credentials. +4) Override the `OnServerAddPlayer` method and validate the user's credential. + + +For example this would be part of your NetworkManager class: + +```cs +class MyGameNetworkManager : NetworkManager { + + class CredentialsMessage : MessageBase + { + // use whatever credentials make sense for your game + // for example, you might want to pass the accessToken if using oauth + public string username; + public string password; + } + + // this gets called in your client after + // it has connected to the server, + public override void OnClientConnect(NetworkConnection conn) + { + base.OnClientConnect(conn); + + var msg = new CredentialsMessage() + { + // perhaps get the username and password + // from textboxes instead + username = "Joe", + password = "Gaba Gaba" + }; + + ClientScene.AddPlayer(connection, MessagePacker.Pack(msg)); + } + + // this gets called in your server when the + // client requests to add a player. + public override void OnServerAddPlayer(NetworkConnection conn, AddPlayerMessage extraMessage) + { + var msg = MessagePacker.Unpack(extraMessage.value); + + // check the credentials by calling your web server, database table, playfab api, or any method appropriate. + if (msg.username == "Joe" && msg.password == "Gaba Gaba") + { + // proceed to regular add player + base.OnServerAddPlayer(conn, extraMessage); + } + else + { + conn.Disconnect(); + } + } +} + +``` \ No newline at end of file diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index c774cf658..a1e18f211 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -26,6 +26,8 @@ url: "/Concepts/IDs" - title: "Clients and Servers" url: "/Concepts/ClientsServers" + - title: "Authentication" + url: "/Concepts/Authentication" - title: "Conversion" url: "/Concepts/Conversion" - title: "Debugging" From 73edf5e7322150cf45e4e99fcf554aab589914e6 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 10 Mar 2019 04:16:36 -0500 Subject: [PATCH 170/276] Simplify weaver error handler. (#574) Rather than sprinkling WeaverFailed=true all over the place, we just call a Weaver.Error(message) where an error occurrs. This way we can enforce consistency in weaver error reporting --- Weaver/Weaver/Processors/CommandProcessor.cs | 6 +- .../Processors/MessageClassProcessor.cs | 15 ++--- .../Processors/MonoBehaviourProcessor.cs | 27 +++----- .../Processors/NetworkBehaviourProcessor.cs | 65 +++++++------------ Weaver/Weaver/Processors/RpcProcessor.cs | 6 +- .../Weaver/Processors/SyncEventProcessor.cs | 9 +-- Weaver/Weaver/Processors/SyncListProcessor.cs | 3 +- .../Processors/SyncListStructProcessor.cs | 18 ++--- Weaver/Weaver/Processors/SyncVarProcessor.cs | 39 ++++------- .../Weaver/Processors/TargetRpcProcessor.cs | 12 ++-- Weaver/Weaver/Resolvers.cs | 17 ++--- Weaver/Weaver/Weaver.cs | 39 +++++------ 12 files changed, 93 insertions(+), 163 deletions(-) diff --git a/Weaver/Weaver/Processors/CommandProcessor.cs b/Weaver/Weaver/Processors/CommandProcessor.cs index 807e65cf7..d1924eb3a 100644 --- a/Weaver/Weaver/Processors/CommandProcessor.cs +++ b/Weaver/Weaver/Processors/CommandProcessor.cs @@ -134,15 +134,13 @@ public static bool ProcessMethodsValidateCommand(TypeDefinition td, MethodDefini { if (md.Name.Length > 2 && md.Name.Substring(0, 3) != "Cmd") { - Log.Error("Command function [" + td.FullName + ":" + md.Name + "] doesnt have 'Cmd' prefix"); - Weaver.WeavingFailed = true; + Weaver.Error("Command function [" + td.FullName + ":" + md.Name + "] doesnt have 'Cmd' prefix"); return false; } if (md.IsStatic) { - Log.Error("Command function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.WeavingFailed = true; + Weaver.Error("Command function [" + td.FullName + ":" + md.Name + "] cant be a static method"); return false; } diff --git a/Weaver/Weaver/Processors/MessageClassProcessor.cs b/Weaver/Weaver/Processors/MessageClassProcessor.cs index 9beda7e2c..2ab044bbb 100644 --- a/Weaver/Weaver/Processors/MessageClassProcessor.cs +++ b/Weaver/Weaver/Processors/MessageClassProcessor.cs @@ -41,8 +41,7 @@ static void GenerateSerialization(TypeDefinition td) { if (field.FieldType.FullName == td.FullName) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " [" + field.FullName + "]. [MessageBase] member cannot be self referencing."); + Weaver.Error("GenerateSerialization for " + td.Name + " [" + field.FullName + "]. [MessageBase] member cannot be self referencing."); return; } } @@ -61,15 +60,13 @@ static void GenerateSerialization(TypeDefinition td) if (field.FieldType.Resolve().HasGenericParameters) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot have generic parameters."); + Weaver.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot have generic parameters."); return; } if (field.FieldType.Resolve().IsInterface) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot be an interface."); + Weaver.Error("GenerateSerialization for " + td.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member cannot be an interface."); return; } @@ -83,8 +80,7 @@ static void GenerateSerialization(TypeDefinition td) } else { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " unknown type [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member variables must be basic types."); + Weaver.Error("GenerateSerialization for " + td.Name + " unknown type [" + field.FieldType + "/" + field.FieldType.FullName + "]. [MessageBase] member variables must be basic types."); return; } } @@ -129,8 +125,7 @@ static void GenerateDeSerialization(TypeDefinition td) } else { - Weaver.WeavingFailed = true; - Log.Error("GenerateDeSerialization for " + td.Name + " unknown type [" + field.FieldType + "]. [SyncVar] member variables must be basic types."); + Weaver.Error("GenerateDeSerialization for " + td.Name + " unknown type [" + field.FieldType + "]. [SyncVar] member variables must be basic types."); return; } } diff --git a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs index a50ae10d4..42bffaa49 100644 --- a/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/MonoBehaviourProcessor.cs @@ -20,15 +20,13 @@ static void ProcessSyncVars(TypeDefinition td) { if (ca.AttributeType.FullName == Weaver.SyncVarType.FullName) { - Log.Error("Script " + td.FullName + " uses [SyncVar] " + fd.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses [SyncVar] " + fd.Name + " but is not a NetworkBehaviour."); } } if (SyncObjectProcessor.ImplementsSyncObject(fd.FieldType)) { - Log.Error(string.Format("Script {0} defines field {1} with type {2}, but it's not a NetworkBehaviour", td.FullName, fd.Name, Helpers.PrettyPrintType(fd.FieldType))); - Weaver.WeavingFailed = true; + Weaver.Error(string.Format("Script {0} defines field {1} with type {2}, but it's not a NetworkBehaviour", td.FullName, fd.Name, Helpers.PrettyPrintType(fd.FieldType))); } } } @@ -42,20 +40,17 @@ static void ProcessMethods(TypeDefinition td) { if (ca.AttributeType.FullName == Weaver.CommandType.FullName) { - Log.Error("Script " + td.FullName + " uses [Command] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses [Command] " + md.Name + " but is not a NetworkBehaviour."); } if (ca.AttributeType.FullName == Weaver.ClientRpcType.FullName) { - Log.Error("Script " + td.FullName + " uses [ClientRpc] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses [ClientRpc] " + md.Name + " but is not a NetworkBehaviour."); } if (ca.AttributeType.FullName == Weaver.TargetRpcType.FullName) { - Log.Error("Script " + td.FullName + " uses [TargetRpc] " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses [TargetRpc] " + md.Name + " but is not a NetworkBehaviour."); } string attributeName = ca.Constructor.DeclaringType.ToString(); @@ -63,20 +58,16 @@ static void ProcessMethods(TypeDefinition td) switch (attributeName) { case "Mirror.ServerAttribute": - Log.Error("Script " + td.FullName + " uses the attribute [Server] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses the attribute [Server] on the method " + md.Name + " but is not a NetworkBehaviour."); break; case "Mirror.ServerCallbackAttribute": - Log.Error("Script " + td.FullName + " uses the attribute [ServerCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses the attribute [ServerCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); break; case "Mirror.ClientAttribute": - Log.Error("Script " + td.FullName + " uses the attribute [Client] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses the attribute [Client] on the method " + md.Name + " but is not a NetworkBehaviour."); break; case "Mirror.ClientCallbackAttribute": - Log.Error("Script " + td.FullName + " uses the attribute [ClientCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("Script " + td.FullName + " uses the attribute [ClientCallback] on the method " + md.Name + " but is not a NetworkBehaviour."); break; } } diff --git a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs index 20463cb1a..7b5cfcb4e 100644 --- a/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs +++ b/Weaver/Weaver/Processors/NetworkBehaviourProcessor.cs @@ -37,8 +37,7 @@ public void Process() { if (m_td.HasGenericParameters) { - Weaver.WeavingFailed = true; - Log.Error("NetworkBehaviour " + m_td.Name + " cannot have generic parameters"); + Weaver.Error("NetworkBehaviour " + m_td.Name + " cannot have generic parameters"); return; } Weaver.DLog(m_td, "Process Start"); @@ -129,8 +128,7 @@ public static bool WriteArguments(ILProcessor worker, MethodDefinition md, strin MethodReference writeFunc = Weaver.GetWriteFunc(pd.ParameterType); if (writeFunc == null) { - Log.Error("WriteArguments for " + md.Name + " type " + pd.ParameterType + " not supported"); - Weaver.WeavingFailed = true; + Weaver.Error("WriteArguments for " + md.Name + " type " + pd.ParameterType + " not supported"); return false; } // use built-in writer func on writer object @@ -193,8 +191,7 @@ void GenerateConstants() } else { - Log.Error("No cctor for " + m_td.Name); - Weaver.WeavingFailed = true; + Weaver.Error("No cctor for " + m_td.Name); return; } } @@ -226,8 +223,7 @@ void GenerateConstants() } else { - Weaver.WeavingFailed = true; - Log.Error("No ctor for " + m_td.Name); + Weaver.Error("No ctor for " + m_td.Name); return; } @@ -237,8 +233,7 @@ void GenerateConstants() if (ctor == null) { - Weaver.WeavingFailed = true; - Log.Error("No ctor for " + m_td.Name); + Weaver.Error("No ctor for " + m_td.Name); return; } @@ -358,8 +353,7 @@ void GenerateSerialization() } else { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); + Weaver.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); return; } } @@ -407,8 +401,7 @@ void GenerateSerialization() } else { - Log.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); - Weaver.WeavingFailed = true; + Weaver.Error("GenerateSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); return; } @@ -493,8 +486,7 @@ void DeserializeField(FieldDefinition syncVar, ILProcessor serWorker) MethodReference readFunc = Weaver.GetReadFunc(syncVar.FieldType); if (readFunc == null) { - Log.Error("GenerateDeSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); - Weaver.WeavingFailed = true; + Weaver.Error("GenerateDeSerialization for " + m_td.Name + " unknown type [" + syncVar.FieldType + "]. Mirror [SyncVar] member variables must be basic types."); return; } @@ -635,8 +627,7 @@ public static bool ProcessNetworkReaderParameters(TypeDefinition td, MethodDefin } else { - Log.Error("ProcessNetworkReaderParameters for " + td.Name + ":" + md.Name + " type " + arg.ParameterType + " not supported"); - Weaver.WeavingFailed = true; + Weaver.Error("ProcessNetworkReaderParameters for " + td.Name + ":" + md.Name + " type " + arg.ParameterType + " not supported"); return false; } } @@ -653,20 +644,17 @@ public static bool ProcessMethodsValidateFunction(TypeDefinition td, MethodRefer { if (md.ReturnType.FullName == Weaver.IEnumeratorType.FullName) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot be a coroutine"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot be a coroutine"); return false; } if (md.ReturnType.FullName != Weaver.voidType.FullName) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] must have a void return type."); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] must have a void return type."); return false; } if (md.HasGenericParameters) { - Log.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot have generic parameters"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot have generic parameters"); return false; } return true; @@ -679,46 +667,40 @@ public static bool ProcessMethodsValidateParameters(TypeDefinition td, MethodRef var p = md.Parameters[i]; if (p.IsOut) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have out parameters"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have out parameters"); return false; } if (p.IsOptional) { - Log.Error(actionType + "function [" + td.FullName + ":" + md.Name + "] cannot have optional parameters"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + "function [" + td.FullName + ":" + md.Name + "] cannot have optional parameters"); return false; } if (p.ParameterType.Resolve().IsAbstract) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have abstract parameters"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have abstract parameters"); return false; } if (p.ParameterType.IsByReference) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have ref parameters"); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] cannot have ref parameters"); return false; } // TargetRPC is an exception to this rule and can have a NetworkConnection as first parameter if (p.ParameterType.FullName == Weaver.NetworkConnectionType.FullName && !(ca.AttributeType.FullName == Weaver.TargetRpcType.FullName && i == 0)) { - Log.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot use a NetworkConnection as a parameter. To access a player object's connection on the server use connectionToClient"); - Log.Error("Name: " + ca.AttributeType.FullName + " parameter: " + md.Parameters[0].ParameterType.FullName); - Weaver.WeavingFailed = true; + Weaver.Error(actionType + " [" + td.FullName + ":" + md.Name + "] cannot use a NetworkConnection as a parameter. To access a player object's connection on the server use connectionToClient"); + Weaver.Error("Name: " + ca.AttributeType.FullName + " parameter: " + md.Parameters[0].ParameterType.FullName); return false; } if (p.ParameterType.Resolve().IsDerivedFrom(Weaver.ComponentType)) { if (p.ParameterType.FullName != Weaver.NetworkIdentityType.FullName) { - Log.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] parameter [" + p.Name + + Weaver.Error(actionType + " function [" + td.FullName + ":" + md.Name + "] parameter [" + p.Name + "] is of the type [" + p.ParameterType.Name + "] which is a Component. You cannot pass a Component to a remote call. Try passing data from within the component."); - Weaver.WeavingFailed = true; return false; } } @@ -743,8 +725,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { - Log.Error("Duplicate Command name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.WeavingFailed = true; + Weaver.Error("Duplicate Command name [" + m_td.FullName + ":" + md.Name + "]"); return; } names.Add(md.Name); @@ -772,8 +753,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { - Log.Error("Duplicate Target Rpc name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.WeavingFailed = true; + Weaver.Error("Duplicate Target Rpc name [" + m_td.FullName + ":" + md.Name + "]"); return; } names.Add(md.Name); @@ -801,8 +781,7 @@ void ProcessMethods() if (names.Contains(md.Name)) { - Log.Error("Duplicate ClientRpc name [" + m_td.FullName + ":" + md.Name + "]"); - Weaver.WeavingFailed = true; + Weaver.Error("Duplicate ClientRpc name [" + m_td.FullName + ":" + md.Name + "]"); return; } names.Add(md.Name); diff --git a/Weaver/Weaver/Processors/RpcProcessor.cs b/Weaver/Weaver/Processors/RpcProcessor.cs index 4e0a66b03..529fe197e 100644 --- a/Weaver/Weaver/Processors/RpcProcessor.cs +++ b/Weaver/Weaver/Processors/RpcProcessor.cs @@ -91,15 +91,13 @@ public static bool ProcessMethodsValidateRpc(TypeDefinition td, MethodDefinition { if (md.Name.Length > 2 && md.Name.Substring(0, 3) != "Rpc") { - Log.Error("Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Rpc' prefix"); - Weaver.WeavingFailed = true; + Weaver.Error("Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Rpc' prefix"); return false; } if (md.IsStatic) { - Log.Error("ClientRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.WeavingFailed = true; + Weaver.Error("ClientRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); return false; } diff --git a/Weaver/Weaver/Processors/SyncEventProcessor.cs b/Weaver/Weaver/Processors/SyncEventProcessor.cs index eec864e47..9e377d0b2 100644 --- a/Weaver/Weaver/Processors/SyncEventProcessor.cs +++ b/Weaver/Weaver/Processors/SyncEventProcessor.cs @@ -21,8 +21,7 @@ public static MethodDefinition ProcessEventInvoke(TypeDefinition td, EventDefini } if (eventField == null) { - Weaver.DLog(td, "ERROR: no event field?!"); - Weaver.WeavingFailed = true; + Weaver.Error("[" + td.Name + "] ERROR: no event field?!"); return null; } @@ -114,15 +113,13 @@ public static void ProcessEvents(TypeDefinition td, List events { if (ed.Name.Length > 4 && ed.Name.Substring(0, 5) != "Event") { - Log.Error("Event [" + td.FullName + ":" + ed.FullName + "] doesnt have 'Event' prefix"); - Weaver.WeavingFailed = true; + Weaver.Error("Event [" + td.FullName + ":" + ed.FullName + "] doesnt have 'Event' prefix"); return; } if (ed.EventType.Resolve().HasGenericParameters) { - Log.Error("Event [" + td.FullName + ":" + ed.FullName + "] cannot have generic parameters"); - Weaver.WeavingFailed = true; + Weaver.Error("Event [" + td.FullName + ":" + ed.FullName + "] cannot have generic parameters"); return; } diff --git a/Weaver/Weaver/Processors/SyncListProcessor.cs b/Weaver/Weaver/Processors/SyncListProcessor.cs index 83cfdfd43..db2b02433 100644 --- a/Weaver/Weaver/Processors/SyncListProcessor.cs +++ b/Weaver/Weaver/Processors/SyncListProcessor.cs @@ -35,8 +35,7 @@ public static void GenerateSyncListInstanceInitializer(ILProcessor ctorWorker, F } catch (Exception) { - Weaver.WeavingFailed = true; - Log.Error("Missing parameter-less constructor for:" + fd.FieldType.Name); + Weaver.Error("Missing parameter-less constructor for:" + fd.FieldType.Name); return; } diff --git a/Weaver/Weaver/Processors/SyncListStructProcessor.cs b/Weaver/Weaver/Processors/SyncListStructProcessor.cs index 9fe062ff0..931dc67a3 100644 --- a/Weaver/Weaver/Processors/SyncListStructProcessor.cs +++ b/Weaver/Weaver/Processors/SyncListStructProcessor.cs @@ -12,8 +12,7 @@ public static void Process(TypeDefinition td) GenericInstanceType gt = (GenericInstanceType)td.BaseType; if (gt.GenericArguments.Count == 0) { - Weaver.WeavingFailed = true; - Log.Error("SyncListStructProcessor no generic args"); + Weaver.Error("SyncListStructProcessor no generic args"); return; } TypeReference itemType = Weaver.CurrentAssembly.MainModule.ImportReference(gt.GenericArguments[0]); @@ -57,8 +56,7 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it if (itemType.IsGenericInstance) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + Helpers.PrettyPrintType(itemType) + " failed. Struct passed into SyncListStruct can't have generic parameters"); + Weaver.Error("GenerateSerialization for " + Helpers.PrettyPrintType(itemType) + " failed. Struct passed into SyncListStruct can't have generic parameters"); return null; } @@ -72,15 +70,13 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it if (ft.HasGenericParameters) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot have generic parameters."); + Weaver.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot have generic parameters."); return null; } if (ft.IsInterface) { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot be an interface."); + Weaver.Error("GenerateSerialization for " + td.Name + " [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member cannot be an interface."); return null; } @@ -94,8 +90,7 @@ static MethodReference GenerateSerialization(TypeDefinition td, TypeReference it } else { - Weaver.WeavingFailed = true; - Log.Error("GenerateSerialization for " + td.Name + " unknown type [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member variables must be basic types."); + Weaver.Error("GenerateSerialization for " + td.Name + " unknown type [" + ft + "/" + ft.FullName + "]. [SyncListStruct] member variables must be basic types."); return null; } } @@ -149,8 +144,7 @@ static MethodReference GenerateDeserialization(TypeDefinition td, TypeReference } else { - Weaver.WeavingFailed = true; - Log.Error("GenerateDeserialization for " + td.Name + " unknown type [" + ft + "]. [SyncListStruct] member variables must be basic types."); + Weaver.Error("GenerateDeserialization for " + td.Name + " unknown type [" + ft + "]. [SyncListStruct] member variables must be basic types."); return null; } } diff --git a/Weaver/Weaver/Processors/SyncVarProcessor.cs b/Weaver/Weaver/Processors/SyncVarProcessor.cs index 11938d26d..d9d44d117 100644 --- a/Weaver/Weaver/Processors/SyncVarProcessor.cs +++ b/Weaver/Weaver/Processors/SyncVarProcessor.cs @@ -31,20 +31,17 @@ public static bool CheckForHookFunction(TypeDefinition td, FieldDefinition syncV { if (m.Parameters[0].ParameterType != syncVar.FieldType) { - Log.Error("SyncVar Hook function " + hookFunctionName + " has wrong type signature for " + td.Name); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar Hook function " + hookFunctionName + " has wrong type signature for " + td.Name); return false; } foundMethod = m; return true; } - Log.Error("SyncVar Hook function " + hookFunctionName + " must have one argument " + td.Name); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar Hook function " + hookFunctionName + " must have one argument " + td.Name); return false; } } - Log.Error("SyncVar Hook function " + hookFunctionName + " not found for " + td.Name); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar Hook function " + hookFunctionName + " not found for " + td.Name); return false; } } @@ -256,36 +253,31 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (resolvedField.IsDerivedFrom(Weaver.NetworkBehaviourType)) { - Log.Error("SyncVar [" + fd.FullName + "] cannot be derived from NetworkBehaviour."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot be derived from NetworkBehaviour."); return; } if (resolvedField.IsDerivedFrom(Weaver.ScriptableObjectType)) { - Log.Error("SyncVar [" + fd.FullName + "] cannot be derived from ScriptableObject."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot be derived from ScriptableObject."); return; } if ((fd.Attributes & FieldAttributes.Static) != 0) { - Log.Error("SyncVar [" + fd.FullName + "] cannot be static."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot be static."); return; } if (resolvedField.HasGenericParameters) { - Log.Error("SyncVar [" + fd.FullName + "] cannot have generic parameters."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot have generic parameters."); return; } if (resolvedField.IsInterface) { - Log.Error("SyncVar [" + fd.FullName + "] cannot be an interface."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot be an interface."); return; } @@ -298,15 +290,13 @@ public static void ProcessSyncVars(TypeDefinition td, List sync fieldModuleName != "netstandard.dll" // handle built-in types when weaving new C#7 compiler assemblies ) { - Log.Error("SyncVar [" + fd.FullName + "] from " + resolvedField.Module.ToString() + " cannot be a different module."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] from " + resolvedField.Module.ToString() + " cannot be a different module."); return; } if (fd.FieldType.IsArray) { - Log.Error("SyncVar [" + fd.FullName + "] cannot be an array. Use a SyncList instead."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncVar [" + fd.FullName + "] cannot be an array. Use a SyncList instead."); return; } @@ -324,8 +314,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (dirtyBitCounter == k_SyncVarLimit) { - Log.Error("Script class [" + td.FullName + "] has too many SyncVars (" + k_SyncVarLimit + "). (This could include base classes)"); - Weaver.WeavingFailed = true; + Weaver.Error("Script class [" + td.FullName + "] has too many SyncVars (" + k_SyncVarLimit + "). (This could include base classes)"); return; } break; @@ -334,8 +323,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync if (fd.FieldType.FullName.Contains("Mirror.SyncListStruct")) { - Log.Error("SyncListStruct member variable [" + fd.FullName + "] must use a dervied class, like \"class MySyncList : SyncListStruct {}\"."); - Weaver.WeavingFailed = true; + Weaver.Error("SyncListStruct member variable [" + fd.FullName + "] must use a dervied class, like \"class MySyncList : SyncListStruct {}\"."); return; } @@ -343,8 +331,7 @@ public static void ProcessSyncVars(TypeDefinition td, List sync { if (fd.IsStatic) { - Log.Error("SyncList [" + td.FullName + ":" + fd.FullName + "] cannot be a static"); - Weaver.WeavingFailed = true; + Weaver.Error("SyncList [" + td.FullName + ":" + fd.FullName + "] cannot be a static"); return; } diff --git a/Weaver/Weaver/Processors/TargetRpcProcessor.cs b/Weaver/Weaver/Processors/TargetRpcProcessor.cs index 1ef9e4dfd..9257482d3 100644 --- a/Weaver/Weaver/Processors/TargetRpcProcessor.cs +++ b/Weaver/Weaver/Processors/TargetRpcProcessor.cs @@ -98,15 +98,13 @@ public static bool ProcessMethodsValidateTargetRpc(TypeDefinition td, MethodDefi if (md.Name.Length > prefixLen && md.Name.Substring(0, prefixLen) != targetPrefix) { - Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Target' prefix"); - Weaver.WeavingFailed = true; + Weaver.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] doesnt have 'Target' prefix"); return false; } if (md.IsStatic) { - Log.Error("TargetRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); - Weaver.WeavingFailed = true; + Weaver.Error("TargetRpc function [" + td.FullName + ":" + md.Name + "] cant be a static method"); return false; } @@ -117,15 +115,13 @@ public static bool ProcessMethodsValidateTargetRpc(TypeDefinition td, MethodDefi if (md.Parameters.Count < 1) { - Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] must have a NetworkConnection as the first parameter"); - Weaver.WeavingFailed = true; + Weaver.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] must have a NetworkConnection as the first parameter"); return false; } if (md.Parameters[0].ParameterType.FullName != Weaver.NetworkConnectionType.FullName) { - Log.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] first parameter must be a NetworkConnection"); - Weaver.WeavingFailed = true; + Weaver.Error("Target Rpc function [" + td.FullName + ":" + md.Name + "] first parameter must be a NetworkConnection"); return false; } diff --git a/Weaver/Weaver/Resolvers.cs b/Weaver/Weaver/Resolvers.cs index 058a51954..73958fb9f 100644 --- a/Weaver/Weaver/Resolvers.cs +++ b/Weaver/Weaver/Resolvers.cs @@ -15,8 +15,7 @@ public static MethodReference ResolveMethod(TypeReference tr, AssemblyDefinition //Console.WriteLine("ResolveMethod " + t.ToString () + " " + name); if (tr == null) { - Log.Error("Type missing for " + name); - Weaver.WeavingFailed = true; + Weaver.Error("Type missing for " + name); return null; } foreach (MethodDefinition methodRef in tr.Resolve().Methods) @@ -26,15 +25,14 @@ public static MethodReference ResolveMethod(TypeReference tr, AssemblyDefinition return scriptDef.MainModule.ImportReference(methodRef); } } - Log.Error("ResolveMethod failed " + tr.Name + "::" + name + " " + tr.Resolve()); + Weaver.Error("ResolveMethod failed " + tr.Name + "::" + name + " " + tr.Resolve()); // why did it fail!? foreach (MethodDefinition methodRef in tr.Resolve().Methods) { - Log.Error("Method " + methodRef.Name); + Weaver.Error("Method " + methodRef.Name); } - Weaver.WeavingFailed = true; return null; } @@ -43,8 +41,7 @@ public static MethodReference ResolveMethodInParents(TypeReference tr, AssemblyD { if (tr == null) { - Log.Error("Type missing for " + name); - Weaver.WeavingFailed = true; + Weaver.Error("Type missing for " + name); return null; } foreach (MethodDefinition methodRef in tr.Resolve().Methods) @@ -74,8 +71,7 @@ public static MethodReference ResolveMethodWithArg(TypeReference tr, AssemblyDef } } } - Log.Error("ResolveMethodWithArg failed " + tr.Name + "::" + name + " " + argTypeFullName); - Weaver.WeavingFailed = true; + Weaver.Error("ResolveMethodWithArg failed " + tr.Name + "::" + name + " " + argTypeFullName); return null; } @@ -121,8 +117,7 @@ public static GenericInstanceMethod ResolveMethodGeneric(TypeReference t, Assemb } } - Log.Error("ResolveMethodGeneric failed " + t.Name + "::" + name + " " + genericType); - Weaver.WeavingFailed = true; + Weaver.Error("ResolveMethodGeneric failed " + t.Name + "::" + name + " " + genericType); return null; } diff --git a/Weaver/Weaver/Weaver.cs b/Weaver/Weaver/Weaver.cs index b22036d1a..2f500ceea 100644 --- a/Weaver/Weaver/Weaver.cs +++ b/Weaver/Weaver/Weaver.cs @@ -43,7 +43,7 @@ class Weaver public static ModuleDefinition CorLibModule { get; private set; } public static AssemblyDefinition UnityAssembly { get; private set; } public static AssemblyDefinition NetAssembly { get; private set; } - public static bool WeavingFailed { get; set; } + public static bool WeavingFailed { get; private set; } public static bool GenerateLogErrors { get; set; } // private properties @@ -184,6 +184,14 @@ public static void DLog(TypeDefinition td, string fmt, params object[] args) Console.WriteLine("[" + td.Name + "] " + String.Format(fmt, args)); } + // display weaver error + // and mark process as failed + public static void Error(string message) + { + Log.Error(message); + WeavingFailed = true; + } + public static int GetSyncVarStart(string className) { return WeaveLists.numSyncVars.ContainsKey(className) @@ -200,8 +208,7 @@ public static MethodReference GetWriteFunc(TypeReference variable) { if (RecursionCount++ > MaxRecursionCount) { - Log.Error("GetWriteFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); - WeavingFailed = true; + Error("GetWriteFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); return null; } @@ -217,7 +224,7 @@ public static MethodReference GetWriteFunc(TypeReference variable) if (variable.IsByReference) { // error?? - Log.Error("GetWriteFunc variable.IsByReference error."); + Error("GetWriteFunc variable.IsByReference error."); return null; } @@ -275,14 +282,14 @@ public static MethodReference GetReadFunc(TypeReference variable) TypeDefinition td = variable.Resolve(); if (td == null) { - Log.Error("GetReadFunc unsupported type " + variable.FullName); + Error("GetReadFunc unsupported type " + variable.FullName); return null; } if (variable.IsByReference) { // error?? - Log.Error("GetReadFunc variable.IsByReference error."); + Error("GetReadFunc variable.IsByReference error."); return null; } @@ -534,15 +541,13 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) if (field.FieldType.Resolve().HasGenericParameters) { - Weaver.WeavingFailed = true; - Log.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot have generic parameters."); + Weaver.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot have generic parameters."); return null; } if (field.FieldType.Resolve().IsInterface) { - Weaver.WeavingFailed = true; - Log.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot be an interface."); + Weaver.Error("WriteReadFunc for " + field.Name + " [" + field.FieldType + "/" + field.FieldType.FullName + "]. Cannot be an interface."); return null; } @@ -557,8 +562,7 @@ static MethodDefinition GenerateWriterFunction(TypeReference variable) } else { - Log.Error("WriteReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); - WeavingFailed = true; + Weaver.Error("WriteReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); return null; } } @@ -574,8 +578,7 @@ static MethodDefinition GenerateReadFunction(TypeReference variable) { if (RecursionCount++ > MaxRecursionCount) { - Log.Error("GetReadFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); - WeavingFailed = true; + Weaver.Error("GetReadFunc recursion depth exceeded for " + variable.Name + ". Check for self-referencing member variables."); return null; } @@ -648,8 +651,7 @@ static MethodDefinition GenerateReadFunction(TypeReference variable) } else { - Log.Error("GetReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); - WeavingFailed = true; + Weaver.Error("GetReadFunc for " + field.Name + " type " + field.FieldType + " no supported"); return null; } @@ -1247,11 +1249,10 @@ public static bool IsValidTypeToGenerate(TypeDefinition variable) string assembly = CurrentAssembly.MainModule.Name; if (variable.Module.Name != assembly) { - Log.Error("parameter [" + variable.Name + + Weaver.Error("parameter [" + variable.Name + "] is of the type [" + variable.FullName + "] is not a valid type, please make sure to use a valid type."); - WeavingFailed = true; return false; } return true; @@ -1423,7 +1424,7 @@ static bool Weave(string assName, IEnumerable dependencies, IAssemblyRes { if (CurrentAssembly.MainModule.SymbolReader != null) CurrentAssembly.MainModule.SymbolReader.Dispose(); - WeavingFailed = true; + Weaver.Error(ex.Message); throw ex; } } From 4aa1a4b1692eada6a8196f790c1b55a7dd8e5e69 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Sun, 10 Mar 2019 01:18:11 -0800 Subject: [PATCH 171/276] Removed one liner braces from transport files. (#544) --- .../Runtime/Transport/TelepathyTransport.cs | 20 +++++++++---------- .../Transport/Websocket/WebsocketTransport.cs | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs index f873765cc..a945430bd 100644 --- a/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs +++ b/Assets/Mirror/Runtime/Transport/TelepathyTransport.cs @@ -33,9 +33,9 @@ void Awake() } // client - public override bool ClientConnected() { return client.Connected; } - public override void ClientConnect(string address) { client.Connect(address, port); } - public override bool ClientSend(int channelId, byte[] data) { return client.Send(data); } + public override bool ClientConnected() => client.Connected; + public override void ClientConnect(string address) => client.Connect(address, port); + public override bool ClientSend(int channelId, byte[] data) => client.Send(data); bool ProcessClientMessage() { @@ -62,7 +62,7 @@ bool ProcessClientMessage() } return false; } - public override void ClientDisconnect() { client.Disconnect(); } + public override void ClientDisconnect() => client.Disconnect(); // IMPORTANT: set script execution order to >1000 to call Transport's // LateUpdate after all others. Fixes race condition where @@ -79,9 +79,9 @@ public void LateUpdate() } // server - public override bool ServerActive() { return server.Active; } - public override void ServerStart() { server.Start(port); } - public override bool ServerSend(int connectionId, int channelId, byte[] data) { return server.Send(connectionId, data); } + public override bool ServerActive() => server.Active; + public override void ServerStart() => server.Start(port); + public override bool ServerSend(int connectionId, int channelId, byte[] data) => server.Send(connectionId, data); public bool ProcessServerMessage() { if (server.GetNextMessage(out Telepathy.Message message)) @@ -106,9 +106,9 @@ public bool ProcessServerMessage() } return false; } - public override bool ServerDisconnect(int connectionId) { return server.Disconnect(connectionId); } - public override string ServerGetClientAddress(int connectionId) { return server.GetClientAddress(connectionId); } - public override void ServerStop() { server.Stop(); } + public override bool ServerDisconnect(int connectionId) => server.Disconnect(connectionId); + public override string ServerGetClientAddress(int connectionId) => server.GetClientAddress(connectionId); + public override void ServerStop() => server.Stop(); // common public override void Shutdown() diff --git a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs index 51a6428a6..de007f82a 100644 --- a/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs +++ b/Assets/Mirror/Runtime/Transport/Websocket/WebsocketTransport.cs @@ -53,7 +53,7 @@ public override bool Available() } // client - public override bool ClientConnected() { return client.IsConnected; } + public override bool ClientConnected() => client.IsConnected; public override void ClientConnect(string host) { @@ -69,10 +69,10 @@ public override void ClientConnect(string host) public override bool ClientSend(int channelId, byte[] data) { client.Send(data); return true; } - public override void ClientDisconnect() { client.Disconnect(); } + public override void ClientDisconnect() => client.Disconnect(); // server - public override bool ServerActive() { return server.Active; } + public override bool ServerActive() => server.Active; public override void ServerStart() { @@ -106,7 +106,7 @@ public override string ServerGetClientAddress(int connectionId) { return server.GetClientAddress(connectionId); } - public override void ServerStop() { server.Stop(); } + public override void ServerStop() => server.Stop(); // common public override void Shutdown() From 092c5663b6f1124c6155b3ec86ac581756f51d46 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 10 Mar 2019 12:04:45 -0500 Subject: [PATCH 172/276] NetworkReader should enforce read only (#580) --- Assets/Mirror/Runtime/NetworkReader.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Mirror/Runtime/NetworkReader.cs b/Assets/Mirror/Runtime/NetworkReader.cs index 822914972..203ff7f7f 100644 --- a/Assets/Mirror/Runtime/NetworkReader.cs +++ b/Assets/Mirror/Runtime/NetworkReader.cs @@ -10,7 +10,7 @@ public class NetworkReader public NetworkReader(byte[] buffer) { - reader = new BinaryReader(new MemoryStream(buffer)); + reader = new BinaryReader(new MemoryStream(buffer, false)); } // 'int' is the best type for .Position. 'short' is too small if we send >32kb which would result in negative .Position From eb32d48af8e1c4fd67daf9d36efa0a991c3c759f Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 10 Mar 2019 12:49:41 -0500 Subject: [PATCH 173/276] cannot run code covarage with source based Mirror --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7934399b2..721759e7c 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ [![Build status](https://img.shields.io/appveyor/ci/vis2k73562/hlapi-community-edition/Mirror.svg)](https://ci.appveyor.com/project/vis2k73562/hlapi-community-edition/branch/mirror) [![AppVeyor tests branch](https://img.shields.io/appveyor/tests/vis2k73562/hlapi-community-edition/Mirror.svg)](https://ci.appveyor.com/project/vis2k73562/hlapi-community-edition/branch/mirror/tests) [![Discord](https://img.shields.io/discord/343440455738064897.svg)](https://discordapp.com/invite/N9QVxbM) -[![Codecov](https://codecov.io/gh/vis2k/mirror/branch/mirror/graph/badge.svg)](https://codecov.io/gh/vis2k/mirror/branch/mirror) [![release](https://img.shields.io/github/release/vis2k/Mirror.svg)](https://github.com/vis2k/Mirror/releases/latest) Mirror is a **high level** Networking API for Unity, built on top of the **low level** [Telepathy](https://github.com/vis2k/Telepathy) library. From 10a33b5f679f9085ca4582fc99d98ba0587cb7d3 Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Sun, 10 Mar 2019 12:50:32 -0500 Subject: [PATCH 174/276] Appveyor cannot run tests in source based mirror --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 721759e7c..0bc19e530 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ [![Forum](https://img.shields.io/badge/forum-brightgreen.svg)](https://forum.unity.com/threads/mirror-networking-for-unity-aka-hlapi-community-edition.425437/) [![donate](https://img.shields.io/badge/donations-brightgreen.svg)](https://www.patreon.com/MirrorTelepathy) [![Build status](https://img.shields.io/appveyor/ci/vis2k73562/hlapi-community-edition/Mirror.svg)](https://ci.appveyor.com/project/vis2k73562/hlapi-community-edition/branch/mirror) -[![AppVeyor tests branch](https://img.shields.io/appveyor/tests/vis2k73562/hlapi-community-edition/Mirror.svg)](https://ci.appveyor.com/project/vis2k73562/hlapi-community-edition/branch/mirror/tests) [![Discord](https://img.shields.io/discord/343440455738064897.svg)](https://discordapp.com/invite/N9QVxbM) [![release](https://img.shields.io/github/release/vis2k/Mirror.svg)](https://github.com/vis2k/Mirror/releases/latest) From dd362b18a08ab4a0de2916aa92ad4a8160ab5025 Mon Sep 17 00:00:00 2001 From: rodolphito Date: Mon, 11 Mar 2019 00:54:46 -0700 Subject: [PATCH 175/276] Fixed the NetworkAnimator issue I introduced in the bandwidth fix. This should also further improve bandwidth, too. (#576) --- Assets/Mirror/Components/NetworkAnimator.cs | 24 ++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Assets/Mirror/Components/NetworkAnimator.cs b/Assets/Mirror/Components/NetworkAnimator.cs index 5650fe09b..dd3846614 100644 --- a/Assets/Mirror/Components/NetworkAnimator.cs +++ b/Assets/Mirror/Components/NetworkAnimator.cs @@ -206,7 +206,11 @@ bool WriteParameters(NetworkWriter writer, bool autoSend) if (lastFloatParameters == null) lastFloatParameters = new float[parameters.Length]; if (lastBoolParameters == null) lastBoolParameters = new bool[parameters.Length]; - bool didWork = false; + uint dirtyBits = 0; + // Save the position in the writer where to insert the dirty bits + int dirtyBitsPosition = writer.Position; + // Reserve the space for the bits + writer.Write(dirtyBits); for (int i = 0; i < parameters.Length; i++) { if (autoSend && !GetParameterAutoSend(i)) @@ -219,7 +223,7 @@ bool WriteParameters(NetworkWriter writer, bool autoSend) if (newIntValue != lastIntParameters[i]) { writer.WritePackedUInt32((uint) newIntValue); - didWork = true; + dirtyBits |= 1u << i; lastIntParameters[i] = newIntValue; } } @@ -229,7 +233,7 @@ bool WriteParameters(NetworkWriter writer, bool autoSend) if (Mathf.Abs(newFloatValue - lastFloatParameters[i]) < 0.001f) { writer.Write(newFloatValue); - didWork = true; + dirtyBits |= 1u << i; lastFloatParameters[i] = newFloatValue; } } @@ -239,12 +243,19 @@ bool WriteParameters(NetworkWriter writer, bool autoSend) if (newBoolValue != lastBoolParameters[i]) { writer.Write(newBoolValue); - didWork = true; + dirtyBits |= 1u << i; lastBoolParameters[i] = newBoolValue; } } } - return didWork; + // Save the position we were at to return to after writing dirtyBits + int messageEndPosition = writer.Position; + // Write the dirty bits into the reserved position + writer.Position = dirtyBitsPosition; + writer.Write(dirtyBits); + // Return to the end position, so that serialization includes parameter data. + writer.Position = messageEndPosition; + return dirtyBits != 0; } void ReadParameters(NetworkReader reader, bool autoSend) @@ -253,10 +264,13 @@ void ReadParameters(NetworkReader reader, bool autoSend) // a new parameter array every time it is accessed so we should avoid doing it in a loop AnimatorControllerParameter[] parameters = m_Animator.parameters; + uint dirtyBits = reader.ReadUInt32(); for (int i = 0; i < parameters.Length; i++) { if (autoSend && !GetParameterAutoSend(i)) continue; + if ((dirtyBits & (1 << i)) == 0) + continue; AnimatorControllerParameter par = parameters[i]; if (par.type == AnimatorControllerParameterType.Int) From 1c9a21589da7c9556a569037d9309ddbc90d3fae Mon Sep 17 00:00:00 2001 From: Chris Langsenkamp Date: Mon, 11 Mar 2019 13:39:48 -0400 Subject: [PATCH 176/276] Update Transport Docs --- docs/Transports/LiteNetLib4Mirror.md | 3 +++ docs/Transports/Multiplexer.md | 3 +++ docs/Transports/WebSockets.md | 3 +++ docs/Transports/index.md | 8 ++++++-- docs/_data/navigation.yml | 8 ++++++-- 5 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 docs/Transports/LiteNetLib4Mirror.md create mode 100644 docs/Transports/Multiplexer.md create mode 100644 docs/Transports/WebSockets.md diff --git a/docs/Transports/LiteNetLib4Mirror.md b/docs/Transports/LiteNetLib4Mirror.md new file mode 100644 index 000000000..878e2c1fd --- /dev/null +++ b/docs/Transports/LiteNetLib4Mirror.md @@ -0,0 +1,3 @@ +# LiteNetLib4Mirror + +General description of LiteNetLib4Mirror diff --git a/docs/Transports/Multiplexer.md b/docs/Transports/Multiplexer.md new file mode 100644 index 000000000..14322bc0e --- /dev/null +++ b/docs/Transports/Multiplexer.md @@ -0,0 +1,3 @@ +# Multiplexer + +General description of Multiplexer diff --git a/docs/Transports/WebSockets.md b/docs/Transports/WebSockets.md new file mode 100644 index 000000000..12996ed3a --- /dev/null +++ b/docs/Transports/WebSockets.md @@ -0,0 +1,3 @@ +# WebSockets + +General description of WebSockets diff --git a/docs/Transports/index.md b/docs/Transports/index.md index 7c2805563..f2904f8fc 100644 --- a/docs/Transports/index.md +++ b/docs/Transports/index.md @@ -3,10 +3,14 @@ - [TCP - Telepathy](Telepathy) Simple, message based, MMO Scale TCP networking in C#. And no magic. - [UDP - Ignorance](Ignorance) - Ignorance implements a reliable and unreliable sequenced UDP transport. -- [WebGL - Groove](Groove) + Ignorance implements a reliable and unreliable sequenced UDP transport based on ENet. +- [UDP - LiteNetLib4Mirror](LiteNetLib4Mirror) + LiteNetLib4Mirror implements a UDP transport based on LiteNetLib with Network Discovery and uPnP included. +- [WebGL - WebSockets](WebSockets) WebSockets transport layer for Mirror that target WebGL clients, without relying on Unity's stodgy old LLAPI. - [Steam - Fizzy](Fizzy) A complete rebuild utilising Async (Previously SteamNetNetworkTransport) of a Steam P2P network transport layer. +- [Multiplexer - Multiplexer](Multiplexer) + Multiplexer is a bridging transport to allow a server to handle clients on different transports concurrnently, for example desktop clients using Telepathy together with WebGL clients using Websockets. - [Socket Server - Insight](Insight) Insight is a simple Socket Server for Unity and Mirror. diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index a1e18f211..01fa0083d 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -142,10 +142,14 @@ url: "/Transports/Telepathy" - title: "UDP - Ignorance" url: "/Transports/Ignorance" - - title: "WebGL - Groove" - url: "/Transports/Groove" + - title: "UDP - LiteNetLib4Mirror" + url: "/Transports/LiteNetLib4Mirror" + - title: "WebGL - WebSockets" + url: "/Transports/WebSockets" - title: "Steam - Fizzy" url: "/Transports/Fizzy" + - title: "Multiplexer - Multiplexer" + url: "/Transports/Multiplexer" - title: "Socket - Insight" url: "/Transports/Insight" - title: "Sample Projects" From 09c3a7b81a7e8ff040c47f55ff3eed4c91aa88f7 Mon Sep 17 00:00:00 2001 From: Raystorms Date: Tue, 12 Mar 2019 00:53:02 +0700 Subject: [PATCH 177/276] Update Fizzy.md (#583) --- docs/Transports/Fizzy.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/Transports/Fizzy.md b/docs/Transports/Fizzy.md index 683090fda..c8c96c910 100644 --- a/docs/Transports/Fizzy.md +++ b/docs/Transports/Fizzy.md @@ -1,3 +1,18 @@ -# Fizzy +# FizzySteam -General description of Fizzy +Fizzy Steam is a Steam P2P transport for Mirror, it utilizes Steam's P2P service to directly connect or relay your connection to another player. Fizzy Steam is based of [Steamworks.Net](https://github.com/rlabrecque/Steamworks.NET) wrapper. + +You can get the relase [Here](https://github.com/Raystorms/FizzySteamyMirror/releases) with the latest version of Steamworks.Net included or you can clone the repo [Here](https://github.com/Raystorms/FizzySteamyMirror). + +## Features + +* Multiple Customizable Channels : You can customize the channels in the transport, whether you want just 1 or 5 channels that are unrealiable or realiable (best to leave channel 0 as reliable). +* Steam Nat Punching & Relay : The transport will use Steam to do Nat Punching to your destination, and if that doesn't work, steam's relay Server will be used to ensure you can alway connect (latency may vary). +* No Code Changes Needed : If you Already use Mirror, you just need to slap this transport in (maybe add your steam App ID in your build), and everything should work the same like any other Mirror Transport. "It Just Works" -Todd Howard + +## Credits +* [Fizz Cube](https://github.com/FizzCube) : Original author for this Transport. +* [Raystorms](https://github.com/Raystorms) : The current maintainer for this Tranport. +* [rlabrecque](https://github.com/rlabrecque) : Creator of Steamworks.Net. +* [vis2k](https://github.com/vis2k) : Creator of Mirror. +* Valve : Steam From f7589266e1a9725bdd8e26c0f56ca4181ee7710c Mon Sep 17 00:00:00 2001 From: Paul Pacheco Date: Mon, 11 Mar 2019 18:12:13 -0500 Subject: [PATCH 178/276] Document the MultiplexTransport (#585) * Document the MultiplexTransport * Add example of multiplex configuration --- docs/Transports/MultiplexSample.png | Bin 0 -> 283637 bytes docs/Transports/Multiplexer.md | 24 ++++++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 docs/Transports/MultiplexSample.png diff --git a/docs/Transports/MultiplexSample.png b/docs/Transports/MultiplexSample.png new file mode 100644 index 0000000000000000000000000000000000000000..900e12fa15e7a9049949419b3d8be570a26de421 GIT binary patch literal 283637 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�-*zmMHSCwX%Thn(gRnK%BSPv2a)f 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 Z3mB$pQvi3;1(`H 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