Browse Source

Merge branch 'release/5.0' into main

John Luo 5 years ago
parent
commit
f36ac67b44
16 changed files with 189 additions and 10 deletions
  1. 1 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/App.razor
  2. 24 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/BlazorMultipleApps.FirstClient.csproj
  3. 15 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/Program.cs
  4. 1 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/wwwroot/css/app.css
  5. 14 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/wwwroot/index.html
  6. 1 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/App.razor
  7. 24 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/BlazorMultipleApps.SecondClient.csproj
  8. 12 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/Program.cs
  9. 1 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/wwwroot/css/app.css
  10. 14 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/wwwroot/index.html
  11. 14 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Server/BlazorMultipleApps.Server.csproj
  12. 10 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Server/Program.cs
  13. 7 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Shared/BlazorMultipleApps.Shared.csproj
  14. 17 0
      src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Shared/WeatherForecast.cs
  15. 31 10
      src/SignalR/clients/java/signalr/core/src/main/java/com/microsoft/signalr/HubConnection.java
  16. 3 0
      src/SignalR/clients/java/signalr/core/src/main/java/com/microsoft/signalr/OkHttpWebSocketWrapper.java

+ 1 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/App.razor

@@ -0,0 +1 @@
+<h1>@typeof(BlazorMultipleApps.FirstClient.Program)</h1>

+ 24 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/BlazorMultipleApps.FirstClient.csproj

@@ -0,0 +1,24 @@
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
+
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+    <StaticWebAssetBasePath>FirstApp</StaticWebAssetBasePath>
+    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
+    <BlazorWebAssemblySdkDirectoryRoot>$(BlazorWebAssemblySdkArtifactsDirectory)$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\BlazorMultipleApps.Shared\BlazorMultipleApps.Shared.csproj" />
+  </ItemGroup>
+
+  <PropertyGroup Condition="'$(BinariesRoot)'==''">
+    <!-- In test scenarios $(BinariesRoot) is defined in a generated Directory.Build.props file -->
+    <BinariesRoot>$(RepoRoot)artifacts\bin\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\$(Configuration)\netstandard2.0\</BinariesRoot>
+  </PropertyGroup>
+
+  <!-- DO NOT add addition references here. This is meant to simulate a non-MVC library -->
+  <ItemGroup Condition="'$(BinariesRoot)'!=''">
+    <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
+  </ItemGroup>
+
+</Project>

+ 15 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/Program.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Text;
+
+namespace BlazorMultipleApps.FirstClient
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+            GC.KeepAlive(typeof(System.Text.Json.JsonSerializer));
+        }
+    }
+}

+ 1 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/wwwroot/css/app.css

@@ -0,0 +1 @@
+/* First app.css */

+ 14 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.FirstClient/wwwroot/index.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>BlazorMultipleApps</title>
+    <base href="/FirstApp/" />
+    <link href="css/app.css" rel="stylesheet" />
+</head>
+
+<body>
+    <script src="_framework/blazor.webassembly.js"></script>
+</body>
+
+</html>

+ 1 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/App.razor

@@ -0,0 +1 @@
+<h1>@typeof(BlazorMultipleApps.SecondClient.Program)</h1>

+ 24 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/BlazorMultipleApps.SecondClient.csproj

@@ -0,0 +1,24 @@
+<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">
+
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+    <StaticWebAssetBasePath>SecondApp</StaticWebAssetBasePath>
+    <RazorSdkDirectoryRoot>$(RazorSdkArtifactsDirectory)$(Configuration)\sdk-output\</RazorSdkDirectoryRoot>
+    <BlazorWebAssemblySdkDirectoryRoot>$(BlazorWebAssemblySdkArtifactsDirectory)$(Configuration)\sdk-output\</BlazorWebAssemblySdkDirectoryRoot>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\BlazorMultipleApps.Shared\BlazorMultipleApps.Shared.csproj" />
+  </ItemGroup>
+
+  <PropertyGroup Condition="'$(BinariesRoot)'==''">
+    <!-- In test scenarios $(BinariesRoot) is defined in a generated Directory.Build.props file -->
+    <BinariesRoot>$(RepoRoot)artifacts\bin\Microsoft.AspNetCore.Razor.Test.MvcShim.ClassLib\$(Configuration)\netstandard2.0\</BinariesRoot>
+  </PropertyGroup>
+
+  <!-- DO NOT add addition references here. This is meant to simulate a non-MVC library -->
+  <ItemGroup Condition="'$(BinariesRoot)'!=''">
+    <Reference Include="$(BinariesRoot)\Microsoft.AspNetCore.Razor.Test.ComponentShim.dll"/>
+  </ItemGroup>
+
+</Project>

+ 12 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/Program.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace BlazorMultipleApps.SecondClient
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+        }
+    }
+}

+ 1 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/wwwroot/css/app.css

@@ -0,0 +1 @@
+/* Second app.css */

+ 14 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.SecondClient/wwwroot/index.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+    <title>SecondBlazorApp</title>
+    <base href="/SecondApp/" />
+    <link href="css/app.css" rel="stylesheet" />
+</head>
+
+<body>
+    <script src="_framework/blazor.webassembly.js"></script>
+</body>
+
+</html>

+ 14 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Server/BlazorMultipleApps.Server.csproj

@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\BlazorMultipleApps.SecondClient\BlazorMultipleApps.SecondClient.csproj" />
+    <ProjectReference Include="..\BlazorMultipleApps.FirstClient\BlazorMultipleApps.FirstClient.csproj" />
+    <ProjectReference Include="..\BlazorMultipleApps.Shared\BlazorMultipleApps.Shared.csproj" />
+  </ItemGroup>
+
+
+</Project>

+ 10 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Server/Program.cs

@@ -0,0 +1,10 @@
+namespace BlazorMultipleApps.Server
+{
+    public class Program
+    {
+        public static void Main(string[] args)
+        {
+            
+        }
+    }
+}

+ 7 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Shared/BlazorMultipleApps.Shared.csproj

@@ -0,0 +1,7 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netstandard2.1</TargetFramework>
+  </PropertyGroup>
+
+</Project>

+ 17 - 0
src/Components/WebAssembly/Sdk/testassets/BlazorMultipleApps.Shared/WeatherForecast.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BlazorMultipleApps.Shared
+{
+    public class WeatherForecast
+    {
+        public DateTime Date { get; set; }
+
+        public int TemperatureC { get; set; }
+
+        public string Summary { get; set; }
+
+        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
+    }
+}

+ 31 - 10
src/SignalR/clients/java/signalr/core/src/main/java/com/microsoft/signalr/HubConnection.java

@@ -517,25 +517,32 @@ public class HubConnection implements AutoCloseable {
         RuntimeException exception = null;
         this.state.lock();
         try {
+            ConnectionState connectionState = this.state.getConnectionStateUnsynchronized(true);
+
+            if (connectionState == null)
+            {
+                this.logger.error("'stopConnection' called with a null ConnectionState. This is not expected, please file a bug. https://github.com/dotnet/aspnetcore/issues/new?assignees=&labels=&template=bug_report.md");
+                return;
+            }
+
             // errorMessage gets passed in from the transport. An already existing stopError value
             // should take precedence.
-            if (this.state.getConnectionStateUnsynchronized(false).stopError != null) {
-                errorMessage = this.state.getConnectionStateUnsynchronized(false).stopError;
+            if (connectionState.stopError != null) {
+                errorMessage = connectionState.stopError;
             }
             if (errorMessage != null) {
                 exception = new RuntimeException(errorMessage);
                 logger.error("HubConnection disconnected with an error {}.", errorMessage);
             }
 
-            ConnectionState connectionState = this.state.getConnectionStateUnsynchronized(true);
-            if (connectionState != null) {
-                connectionState.cancelOutstandingInvocations(exception);
-                connectionState.close();
-                this.state.setConnectionState(null);
-            }
+            this.state.setConnectionState(null);
+            connectionState.cancelOutstandingInvocations(exception);
+            connectionState.close();
 
             logger.info("HubConnection stopped.");
-            this.state.changeState(HubConnectionState.CONNECTED, HubConnectionState.DISCONNECTED);
+            // We can be in the CONNECTING or CONNECTED state here, depending on if the handshake response was received or not.
+            // connectionState.close() above will exit the Start call with an error if it's still running
+            this.state.changeState(HubConnectionState.DISCONNECTED);
         } finally {
             this.state.unlock();
         }
@@ -543,7 +550,11 @@ public class HubConnection implements AutoCloseable {
         // Do not run these callbacks inside the hubConnectionStateLock
         if (onClosedCallbackList != null) {
             for (OnClosedCallback callback : onClosedCallbackList) {
-                callback.invoke(exception);
+                try {
+                    callback.invoke(exception);
+                } catch (Exception ex) {
+                    logger.warn("Invoking 'onClosed' method failed:", ex);
+                }
             }
         }
     }
@@ -1519,6 +1530,16 @@ public class HubConnection implements AutoCloseable {
             }
         }
 
+        public void changeState(HubConnectionState to) {
+            this.lock.lock();
+            try {
+                logger.debug("The HubConnection is transitioning from the {} state to the {} state.", this.hubConnectionState, to);
+                this.hubConnectionState = to;
+            } finally {
+                this.lock.unlock();
+            }
+        }
+
         public void lock() {
             this.lock.lock();
         }

+ 3 - 0
src/SignalR/clients/java/signalr/core/src/main/java/com/microsoft/signalr/OkHttpWebSocketWrapper.java

@@ -125,6 +125,9 @@ class OkHttpWebSocketWrapper extends WebSocketWrapper {
                 stateLock.unlock();
             }
             checkStartFailure(null);
+
+            // Send the close frame response if this was a server initiated close, otherwise noops
+            webSocket.close(1000, "");
         }
 
         @Override