main c728ca3f03f5 cached
455 files
1.2 MB
342.7k tokens
1721 symbols
1 requests
Download .txt
Showing preview only (1,495K chars total). Download the full file or copy to clipboard to get everything.
Repository: dotnet-campus/dotnetCampus.Ipc
Branch: main
Commit: c728ca3f03f5
Files: 455
Total size: 1.2 MB

Directory structure:
gitextract_cjt1cj37/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── dotnet-core.yml
│       ├── dotnet-format.yml
│       └── nuget-tag-publish.yml
├── .gitignore
├── CHANGELOG.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── README.md
├── analyzers/
│   └── dotnetCampus.Ipc.SourceGenerators/
│       ├── GeneratedIpcJointGenerator.cs
│       ├── Properties/
│       │   └── GlobalUsings.cs
│       └── dotnetCampus.Ipc.SourceGenerators.csproj
├── build/
│   └── Version.props
├── demo/
│   ├── IpcDirectRoutedAotDemo/
│   │   ├── DemoRequest.cs
│   │   ├── DemoResponse.cs
│   │   ├── IpcDirectRoutedAotDemo.csproj
│   │   ├── NotifyInfo.cs
│   │   ├── Program.cs
│   │   └── SourceGenerationContext.cs
│   ├── IpcRemotingObjectDemo/
│   │   ├── IpcRemotingObjectClientDemo/
│   │   │   ├── IFoo.cs
│   │   │   ├── IpcRemotingObjectClientDemo.csproj
│   │   │   └── Program.cs
│   │   └── IpcRemotingObjectServerDemo/
│   │       ├── Foo.cs
│   │       ├── IFoo.cs
│   │       ├── IpcRemotingObjectServerDemo.csproj
│   │       └── Program.cs
│   ├── PipeMvc/
│   │   ├── PipeMvcClientDemo/
│   │   │   ├── App.xaml
│   │   │   ├── App.xaml.cs
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── MainWindow.xaml
│   │   │   ├── MainWindow.xaml.cs
│   │   │   └── PipeMvcClientDemo.csproj
│   │   └── PipeMvcServerDemo/
│   │       ├── FooContent.cs
│   │       ├── FooController.cs
│   │       ├── MainWindow.xaml
│   │       ├── MainWindow.xaml.cs
│   │       ├── PipeMvcServerDemo.csproj
│   │       ├── Program.cs
│   │       ├── Properties/
│   │       │   └── launchSettings.json
│   │       ├── appsettings.Development.json
│   │       └── appsettings.json
│   ├── UnoDemo/
│   │   ├── IpcUno/
│   │   │   ├── .editorconfig
│   │   │   ├── .gitignore
│   │   │   ├── .vsconfig
│   │   │   ├── Directory.Build.props
│   │   │   ├── Directory.Build.targets
│   │   │   ├── Directory.Packages.props
│   │   │   ├── IpcUno/
│   │   │   │   ├── App.cs
│   │   │   │   ├── AppResources.xaml
│   │   │   │   ├── Assets/
│   │   │   │   │   └── SharedAssets.md
│   │   │   │   ├── Business/
│   │   │   │   │   └── Models/
│   │   │   │   │       ├── AppConfig.cs
│   │   │   │   │       ├── ConnectedPeerModel.cs
│   │   │   │   │       ├── Entity.cs
│   │   │   │   │       └── IpcServerEntity.cs
│   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   ├── IpcUno.csproj
│   │   │   │   ├── Presentation/
│   │   │   │   │   ├── AddConnectPage.xaml
│   │   │   │   │   ├── AddConnectPage.xaml.cs
│   │   │   │   │   ├── ChatPage.xaml
│   │   │   │   │   ├── ChatPage.xaml.cs
│   │   │   │   │   ├── MainPage.xaml
│   │   │   │   │   ├── MainPage.xaml.cs
│   │   │   │   │   ├── MainViewModel.cs
│   │   │   │   │   ├── SecondPage.xaml
│   │   │   │   │   ├── SecondPage.xaml.cs
│   │   │   │   │   ├── SecondViewModel.cs
│   │   │   │   │   ├── ServerPage.xaml
│   │   │   │   │   ├── ServerPage.xaml.cs
│   │   │   │   │   ├── ServerViewModel.cs
│   │   │   │   │   ├── Shell.xaml
│   │   │   │   │   ├── Shell.xaml.cs
│   │   │   │   │   └── ShellViewModel.cs
│   │   │   │   ├── Strings/
│   │   │   │   │   └── en/
│   │   │   │   │       └── Resources.resw
│   │   │   │   ├── Styles/
│   │   │   │   │   ├── ColorPaletteOverride.xaml
│   │   │   │   │   └── MaterialFontsOverride.xaml
│   │   │   │   ├── Utils/
│   │   │   │   │   ├── ScrollViewerExtensions.cs
│   │   │   │   │   ├── TreeExtensions.cs
│   │   │   │   │   └── UISpyHelper.cs
│   │   │   │   ├── appsettings.development.json
│   │   │   │   └── appsettings.json
│   │   │   ├── IpcUno.Base/
│   │   │   │   ├── AppHead.xaml
│   │   │   │   ├── AppHead.xaml.cs
│   │   │   │   ├── IpcUno.Base.csproj
│   │   │   │   └── base.props
│   │   │   ├── IpcUno.MauiControls/
│   │   │   │   ├── App.xaml
│   │   │   │   ├── App.xaml.cs
│   │   │   │   ├── AppBuilderExtensions.cs
│   │   │   │   ├── EmbeddedControl.xaml
│   │   │   │   ├── EmbeddedControl.xaml.cs
│   │   │   │   ├── IpcUno.MauiControls.csproj
│   │   │   │   ├── Styles/
│   │   │   │   │   ├── Colors.xaml
│   │   │   │   │   └── Styles.xaml
│   │   │   │   └── UnoImageConverter.cs
│   │   │   ├── IpcUno.Skia.Gtk/
│   │   │   │   ├── IpcUno.Skia.Gtk.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Program.cs
│   │   │   │   └── app.manifest
│   │   │   ├── IpcUno.Skia.WPF/
│   │   │   │   ├── IpcUno.Skia.WPF.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Wpf/
│   │   │   │   │   ├── App.xaml
│   │   │   │   │   └── App.xaml.cs
│   │   │   │   └── app.manifest
│   │   │   ├── IpcUno.Tests/
│   │   │   │   ├── AppInfoTests.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   └── IpcUno.Tests.csproj
│   │   │   ├── IpcUno.UITests/
│   │   │   │   ├── Constants.cs
│   │   │   │   ├── Given_MainPage.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   ├── IpcUno.UITests.csproj
│   │   │   │   └── TestBase.cs
│   │   │   ├── IpcUno.Windows/
│   │   │   │   ├── IpcUno.Windows.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Properties/
│   │   │   │   │   ├── PublishProfiles/
│   │   │   │   │   │   ├── win-arm64.pubxml
│   │   │   │   │   │   ├── win-x64.pubxml
│   │   │   │   │   │   └── win-x86.pubxml
│   │   │   │   │   └── launchsettings.json
│   │   │   │   ├── Resources.lang-en-us.resw
│   │   │   │   └── app.manifest
│   │   │   └── solution-config.props.sample
│   │   ├── IpcUno.sln
│   │   └── README.md
│   ├── dotnetCampus.Ipc.Demo/
│   │   ├── Program.cs
│   │   └── dotnetCampus.Ipc.Demo.csproj
│   └── dotnetCampus.Ipc.WpfDemo/
│       ├── App.xaml
│       ├── App.xaml.cs
│       ├── AssemblyInfo.cs
│       ├── ConnectedPeerModel.cs
│       ├── DispatcherSwitcher.cs
│       ├── MainWindow.xaml
│       ├── MainWindow.xaml.cs
│       ├── Options.cs
│       ├── View/
│       │   ├── AddConnectPage.xaml
│       │   ├── AddConnectPage.xaml.cs
│       │   ├── CharPage.xaml
│       │   ├── CharPage.xaml.cs
│       │   ├── ListViewExtensions.cs
│       │   ├── ServerPage.xaml
│       │   └── ServerPage.xaml.cs
│       └── dotnetCampus.Ipc.WpfDemo.csproj
├── docs/
│   ├── IpcObject.01.md
│   ├── IpcObject.02.md
│   └── JsonIpcDirectRouted.md
├── dotnetCampus.Ipc.sln
├── dotnetCampus.Ipc.sln.DotSettings
├── src/
│   ├── PipeMvc/
│   │   ├── dotnetCampus.Ipc.PipeMvcClient/
│   │   │   ├── IpcNamedPipeClientHandler.cs
│   │   │   ├── IpcPipeMvcClientProvider.cs
│   │   │   └── dotnetCampus.Ipc.PipeMvcClient.csproj
│   │   ├── dotnetCampus.Ipc.PipeMvcServer/
│   │   │   ├── HostFramework/
│   │   │   │   ├── ApplicationWrapper.cs
│   │   │   │   ├── AsyncStreamWrapper.cs
│   │   │   │   ├── ClientHandler.cs
│   │   │   │   ├── HttpContextBuilder.cs
│   │   │   │   ├── HttpResetTestException.cs
│   │   │   │   ├── IpcServer.cs
│   │   │   │   ├── IpcServerOptions.cs
│   │   │   │   ├── NoopHostLifetime.cs
│   │   │   │   ├── RequestBodyDetectionFeature.cs
│   │   │   │   ├── RequestBuilder.cs
│   │   │   │   ├── RequestFeature.cs
│   │   │   │   ├── RequestLifetimeFeature.cs
│   │   │   │   ├── ResponseBodyPipeWriter.cs
│   │   │   │   ├── ResponseBodyReaderStream.cs
│   │   │   │   ├── ResponseBodyWriterStream.cs
│   │   │   │   ├── ResponseFeature.cs
│   │   │   │   ├── ResponseTrailersFeature.cs
│   │   │   │   ├── TestWebSocket.cs
│   │   │   │   ├── UpgradeFeature.cs
│   │   │   │   ├── WebHostBuilderFactory.cs
│   │   │   │   └── WebSocketClient.cs
│   │   │   ├── IpcFramework/
│   │   │   │   └── IpcPipeMvcServerCore.cs
│   │   │   ├── Properties/
│   │   │   │   └── launchSettings.json
│   │   │   ├── WebHostBuilderExtensions.cs
│   │   │   ├── dotnetCampus.Ipc.PipeMvcServer.csproj
│   │   │   └── dotnetCampus.Ipc.PipeMvcServer.csproj.DotSettings
│   │   └── dotnetCampus.Ipc.PipeMvcShare/
│   │       ├── HeaderContent.cs
│   │       ├── HttpMessageSerializer.cs
│   │       ├── HttpRequestMessageContentBase.cs
│   │       ├── HttpRequestMessageDeserializeContent.cs
│   │       ├── HttpRequestMessageSerializeContent.cs
│   │       ├── HttpResponseMessageContentBase.cs
│   │       ├── HttpResponseMessageDeserializeContent.cs
│   │       ├── HttpResponseMessageSerializeContent.cs
│   │       ├── IpcPipeMvcContext.cs
│   │       ├── IpcResponseMessageResult.cs
│   │       ├── dotnetCampus.Ipc.PipeMvcShare.projitems
│   │       └── dotnetCampus.Ipc.PipeMvcShare.shproj
│   ├── dotnetCampus.Ipc/
│   │   ├── CompilerServices/
│   │   │   ├── Attributes/
│   │   │   │   ├── AssemblyIpcProxyAttribute.cs
│   │   │   │   ├── AssemblyIpcProxyJointAttribute.cs
│   │   │   │   ├── IpcEventAttribute.cs
│   │   │   │   ├── IpcMemberAttribute.cs
│   │   │   │   ├── IpcMethodAttribute.cs
│   │   │   │   ├── IpcPropertyAttribute.cs
│   │   │   │   ├── IpcPublicAttribute.cs
│   │   │   │   └── IpcShapeAttribute.cs
│   │   │   └── GeneratedProxies/
│   │   │       ├── Contexts/
│   │   │       │   └── GeneratedIpcJointResponse.cs
│   │   │       ├── Garms/
│   │   │       │   ├── Garm.cs
│   │   │       │   ├── Garm.generic.cs
│   │   │       │   └── IGarmObject.cs
│   │   │       ├── GeneratedIpcFactory.cs
│   │   │       ├── GeneratedIpcJoint.cs
│   │   │       ├── GeneratedIpcJoint.generic.cs
│   │   │       ├── GeneratedIpcProxy.cs
│   │   │       ├── GeneratedProxyJointIpcContext.cs
│   │   │       ├── GeneratedProxyJointIpcRequestHandler.cs
│   │   │       ├── IpcProxyConfigs.cs
│   │   │       ├── Models/
│   │   │       │   ├── GeneratedIpcProxyJointInstanceCache.cs
│   │   │       │   ├── GeneratedProxyExceptionModel.cs
│   │   │       │   ├── GeneratedProxyMemberInvokeModel.cs
│   │   │       │   ├── GeneratedProxyMemberReturnModel.cs
│   │   │       │   ├── GeneratedProxyObjectModel.cs
│   │   │       │   ├── IpcJsonElement.cs
│   │   │       │   ├── IpcMemberInfo.cs
│   │   │       │   └── MemberInvokingType.cs
│   │   │       ├── PublicIpcJointManager.cs
│   │   │       └── Utils/
│   │   │           └── IpcProxyInvokingHelper.cs
│   │   ├── Context/
│   │   │   ├── AckArgs.cs
│   │   │   ├── AckTask.cs
│   │   │   ├── ConnectToExistingPeerResult.cs
│   │   │   ├── DelegateIpcRequestHandler.cs
│   │   │   ├── IIpcRequestContext.cs
│   │   │   ├── IPeerConnectionBrokenArgs.cs
│   │   │   ├── IPeerMessageArgs.cs
│   │   │   ├── IPeerReconnectedArgs.cs
│   │   │   ├── IpcBufferMessageContext.cs
│   │   │   ├── IpcClientRequestArgs.cs
│   │   │   ├── IpcConfiguration.cs
│   │   │   ├── IpcConfigurationExtensions.cs
│   │   │   ├── IpcContext.cs
│   │   │   ├── IpcInternalPeerConnectedArgs.cs
│   │   │   ├── IpcPipeServerMessageProviderPeerConnectionBrokenArgs.cs
│   │   │   ├── IpcRequest.cs
│   │   │   ├── IpcRequestParameter.cs
│   │   │   ├── IpcRequestParameterType.cs
│   │   │   ├── IpcResponse.cs
│   │   │   ├── IpcSerializableType.cs
│   │   │   ├── IpcStatus.cs
│   │   │   ├── KnownMessageHeaders.cs
│   │   │   ├── LoggingContext/
│   │   │   │   ├── IpcContextLoggerExtension.cs
│   │   │   │   ├── IpcMessageBodyFormatter.cs
│   │   │   │   ├── LoggerEventIds.cs
│   │   │   │   ├── ReceiveMessageBodyLogState.cs
│   │   │   │   ├── SendMessageBodiesLogState.cs
│   │   │   │   └── SendMessageBodyLogState.cs
│   │   │   ├── PeerConnectedArgs.cs
│   │   │   ├── PeerConnectionBrokenArgs.cs
│   │   │   ├── PeerMessageArgs.cs
│   │   │   └── PeerStreamMessageArgs.cs
│   │   ├── Diagnostics/
│   │   │   ├── IIpcMessageInspector.cs
│   │   │   ├── IpcMessageInspectionContext.cs
│   │   │   ├── IpcMessageInspectorManager.cs
│   │   │   └── IpcMessageTracker.cs
│   │   ├── Exceptions/
│   │   │   ├── IpcClientPipeConnectionException.cs
│   │   │   ├── IpcException.cs
│   │   │   ├── IpcInvokingException.cs
│   │   │   ├── IpcInvokingTimeoutException.cs
│   │   │   ├── IpcLocalException.cs
│   │   │   ├── IpcMemberNotFoundException.cs
│   │   │   ├── IpcPeerConnectionBrokenException.cs
│   │   │   ├── IpcPipeConnectionException.cs
│   │   │   ├── IpcRemoteException.cs
│   │   │   ├── JsonIpcDirectRouteSerializeLocalException.cs
│   │   │   ├── JsonIpcDirectRoutedCanNotFindRequestHandlerException.cs
│   │   │   ├── JsonIpcDirectRoutedHandleRequestRemoteException.cs
│   │   │   ├── JsonIpcDirectRoutedLocalException.cs
│   │   │   └── JsonIpcDirectRoutedRemoteException.cs
│   │   ├── IIpcProvider.cs
│   │   ├── IIpcRequestHandler.cs
│   │   ├── IMessageWriter.cs
│   │   ├── IPeerProxy.cs
│   │   ├── Internals/
│   │   │   ├── AckManager.cs
│   │   │   ├── DebugContext.cs
│   │   │   ├── EmptyIpcRequestHandler.cs
│   │   │   ├── IClientMessageWriter.cs
│   │   │   ├── IpcHandleRequestMessageResult.cs
│   │   │   ├── IpcMessageConverter.cs
│   │   │   ├── IpcPipeServerMessageProvider.cs
│   │   │   ├── PeerManager.cs
│   │   │   ├── PeerReConnector.cs
│   │   │   ├── PeerRegisterProvider.cs
│   │   │   └── ServerStreamMessageReader.cs
│   │   ├── IpcMessageCommandType.cs
│   │   ├── IpcMessageWriter.cs
│   │   ├── IpcRouteds/
│   │   │   └── DirectRouteds/
│   │   │       ├── Base_/
│   │   │       │   ├── IpcDirectRoutedClientProxyBase.cs
│   │   │       │   └── IpcDirectRoutedProviderBase.cs
│   │   │       ├── IpcDirectRoutedMessageWriter.cs
│   │   │       ├── Json_/
│   │   │       │   ├── JsonIpcDirectRoutedCanNotFindRequestHandlerExceptionInfo.cs
│   │   │       │   ├── JsonIpcDirectRoutedClientProxy.cs
│   │   │       │   ├── JsonIpcDirectRoutedContext.cs
│   │   │       │   ├── JsonIpcDirectRoutedHandleRequestExceptionInfo.cs
│   │   │       │   ├── JsonIpcDirectRoutedLogStateMessageType.cs
│   │   │       │   ├── JsonIpcDirectRoutedLoggerExtension.cs
│   │   │       │   ├── JsonIpcDirectRoutedMessageLogState.cs
│   │   │       │   ├── JsonIpcDirectRoutedParameterlessType.cs
│   │   │       │   └── JsonIpcDirectRoutedProvider.cs
│   │   │       └── RawByte_/
│   │   │           ├── RawByteIpcDirectRoutedClientProxy.cs
│   │   │           └── RawByteIpcDirectRoutedProvider.cs
│   │   ├── Messages/
│   │   │   ├── Ack.cs
│   │   │   ├── CoreMessageType.cs
│   │   │   ├── IIpcResponseMessage.cs
│   │   │   ├── IpcClientRequestMessage.cs
│   │   │   ├── IpcClientRequestMessageId.cs
│   │   │   ├── IpcMessage.cs
│   │   │   ├── IpcMessageBody.cs
│   │   │   ├── IpcMessageContext.cs
│   │   │   ├── IpcMessageResult.cs
│   │   │   └── KnownResponseMessages.cs
│   │   ├── Package/
│   │   │   └── build/
│   │   │       └── Package.props
│   │   ├── Pipes/
│   │   │   ├── IpcClientService.cs
│   │   │   ├── IpcMessageManagerBase.cs
│   │   │   ├── IpcMessageRequestManager.cs
│   │   │   ├── IpcMessageResponseManager.cs
│   │   │   ├── IpcProvider.cs
│   │   │   ├── IpcRequestHandlerProvider.cs
│   │   │   ├── IpcRequestMessageContext.cs
│   │   │   ├── IpcServerService.cs
│   │   │   ├── PeerProxy.cs
│   │   │   └── PipeConnectors/
│   │   │       ├── IIpcClientPipeConnector.cs
│   │   │       ├── IpcClientPipeConnectionContext.cs
│   │   │       └── IpcClientPipeConnector.cs
│   │   ├── Properties/
│   │   │   └── .gitignore
│   │   ├── Serialization/
│   │   │   ├── IIpcObjectSerializer.cs
│   │   │   ├── IpcObjectJsonSerializer.cs
│   │   │   ├── JsonIpcMessageSerializer.cs
│   │   │   └── SystemTextJsonIpcObjectSerializer.cs
│   │   ├── Threading/
│   │   │   ├── IIpcThreadPool.cs
│   │   │   ├── IpcSingleThreadPool.cs
│   │   │   ├── IpcTaskScheduling.cs
│   │   │   ├── IpcThreadPool.cs
│   │   │   └── Tasks/
│   │   │       ├── IpcStartEndTaskItem.cs
│   │   │       ├── IpcTask.cs
│   │   │       └── TaskItem.cs
│   │   ├── Utils/
│   │   │   ├── Buffers/
│   │   │   │   ├── ISharedArrayPool.cs
│   │   │   │   └── SharedArrayPool.cs
│   │   │   ├── Caching/
│   │   │   │   ├── CachePool.cs
│   │   │   │   └── CachePoolValueMap.cs
│   │   │   ├── Extensions/
│   │   │   │   ├── BinaryArrayExtensions.cs
│   │   │   │   ├── ByteListExtensions.cs
│   │   │   │   ├── DoubleBufferTaskExtensions.cs
│   │   │   │   ├── IpcMessageCommandExtensions.cs
│   │   │   │   ├── IpcMessageContextExtensions.cs
│   │   │   │   ├── IpcMessageExtension.cs
│   │   │   │   ├── LoggerExtensions.cs
│   │   │   │   ├── PeerMessageArgsExtension.cs
│   │   │   │   └── StreamExtensions.cs
│   │   │   ├── IO/
│   │   │   │   ├── AsyncBinaryReader.cs
│   │   │   │   ├── AsyncBinaryWriter.cs
│   │   │   │   ├── ByteListMessageStream.cs
│   │   │   │   └── PipeHelper.cs
│   │   │   ├── Logging/
│   │   │   │   ├── EventId.cs
│   │   │   │   ├── ILogger.cs
│   │   │   │   ├── IpcLogger.cs
│   │   │   │   └── LogLevel.cs
│   │   │   ├── NullableBooleans.cs
│   │   │   └── TaskUtils.cs
│   │   ├── dotnetCampus.Ipc.csproj
│   │   └── dotnetCampus.Ipc.csproj.DotSettings
│   ├── dotnetCampus.Ipc.Analyzers/
│   │   ├── Analyzers/
│   │   │   ├── AddIpcProxyConfigsAnalyzer.cs
│   │   │   ├── AddIpcShapeAnalyzer.cs
│   │   │   ├── Compiling/
│   │   │   │   ├── IpcAttributeHelper.cs
│   │   │   │   └── IpcProxyInvokingInfo.cs
│   │   │   ├── ContractTypeDismatchWithInterfaceAnalyzer.cs
│   │   │   ├── ContractTypeMustBeAnInterfaceAnalyzer.cs
│   │   │   ├── DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer.cs
│   │   │   ├── EmptyIpcMemberAttributeIsUnnecessaryAnalyzer.cs
│   │   │   └── IgnoresIpcExceptionIsRecommendedAnalyzer.cs
│   │   ├── CodeAnalysis/
│   │   │   ├── Core/
│   │   │   │   ├── DiagnosticException.cs
│   │   │   │   └── Diagnostics.cs
│   │   │   ├── Models/
│   │   │   │   ├── IpcPublicAttributeNamedValues.cs
│   │   │   │   └── IpcShapeAttributeNamedValues.cs
│   │   │   └── Utils/
│   │   │       ├── IpcSemanticAttributeHelper.cs
│   │   │       ├── IpcSemanticSyntaxHelper.cs
│   │   │       ├── SemanticAttributeHelper.cs
│   │   │       ├── SemanticModelsHelper.cs
│   │   │       ├── SemanticSyntaxHelper.cs
│   │   │       └── SyntaxNameGuesser.cs
│   │   ├── CodeFixes/
│   │   │   ├── AddIpcShapeCodeFixProvider.cs
│   │   │   ├── ChangeClassContractTypeCodeFixProvider.cs
│   │   │   ├── DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider.cs
│   │   │   ├── EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider.cs
│   │   │   ├── IgnoresIpcExceptionIsRecommendedCodeFixProvider.cs
│   │   │   └── LetClassImplementInterfaceCodeFixProvider.cs
│   │   ├── Core/
│   │   │   └── ComponentModels/
│   │   │       └── Assignable.cs
│   │   ├── Generators/
│   │   │   ├── Compiling/
│   │   │   │   ├── IpcPublicCompilation.cs
│   │   │   │   ├── IpcPublicMemberProxyJointGenerator.cs
│   │   │   │   ├── IpcShapeCompilation.cs
│   │   │   │   └── Members/
│   │   │   │       ├── IPublicIpcObjectMemberGenerator.cs
│   │   │   │       ├── IpcPublicMethodInfo.cs
│   │   │   │       ├── IpcPublicPropertyInfo.cs
│   │   │   │       └── MemberIdGenerator.cs
│   │   │   ├── IpcPublicGenerator.cs
│   │   │   └── Utils/
│   │   │       └── GeneratorHelper.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── GlobalUsings.cs
│   │   │   ├── Localizations.Designer.cs
│   │   │   ├── Localizations.resx
│   │   │   ├── Localizations.zh-hans.resx
│   │   │   └── launchSettings.json
│   │   ├── dotnetCampus.Ipc.Analyzers.csproj
│   │   └── 分析器诊断.xlsx
│   └── dotnetCampus.Ipc.PipeMvc/
│       └── dotnetCampus.Ipc.PipeMvc.csproj
└── tests/
    ├── dotnetCampus.Ipc.Analyzers.Tests/
    │   ├── IgnoresIpcExceptionAnalyzerTests.cs
    │   ├── Verifiers/
    │   │   ├── CSharpAnalyzerVerifier`1+Test.cs
    │   │   ├── CSharpAnalyzerVerifier`1.cs
    │   │   ├── CSharpCodeFixVerifier`2+Test.cs
    │   │   ├── CSharpCodeFixVerifier`2.cs
    │   │   ├── CSharpCodeRefactoringVerifier`1+Test.cs
    │   │   ├── CSharpCodeRefactoringVerifier`1.cs
    │   │   ├── CSharpVerifierHelper.cs
    │   │   ├── VisualBasicAnalyzerVerifier`1+Test.cs
    │   │   ├── VisualBasicAnalyzerVerifier`1.cs
    │   │   ├── VisualBasicCodeFixVerifier`2+Test.cs
    │   │   ├── VisualBasicCodeFixVerifier`2.cs
    │   │   ├── VisualBasicCodeRefactoringVerifier`1+Test.cs
    │   │   └── VisualBasicCodeRefactoringVerifier`1.cs
    │   └── dotnetCampus.Ipc.Analyzers.Tests.csproj
    ├── dotnetCampus.Ipc.FakeTests/
    │   ├── FakeApis/
    │   │   ├── IRemoteFakeIpcArgumentOrReturn.cs
    │   │   ├── IRemoteFakeIpcObject.cs
    │   │   ├── RemoteFakeIpcObject.cs
    │   │   └── RemoteIpcReturn.cs
    │   ├── Program.cs
    │   └── dotnetCampus.Ipc.FakeTests.csproj
    └── dotnetCampus.Ipc.Tests/
        ├── AckManagerTest.cs
        ├── Attributes.cs
        ├── CompilerServices/
        │   ├── Fake/
        │   │   ├── FakeIpcObject.cs
        │   │   ├── FakeIpcObjectSubModelA.cs
        │   │   ├── FakeIpcObjectWithTypeAttributes.cs
        │   │   ├── IFakeIpcObject.cs
        │   │   ├── IFakeIpcObjectBase.cs
        │   │   └── INestedFakeIpcArgumentOrReturn.cs
        │   ├── FakeRemote/
        │   │   └── RemoteIpcArgument.cs
        │   └── GeneratedProxies/
        │       ├── IpcObjectTests.cs
        │       └── NotGeneratedTestOnlyFakeIpcObjectIpcShape.cs
        ├── IpcClientServiceTests.cs
        ├── IpcMessageConverterTest.cs
        ├── IpcObjectJsonSerializerTests.cs
        ├── IpcProviderTests.cs
        ├── IpcRouteds/
        │   └── DirectRouteds/
        │       ├── JsonIpcDirectRoutedProviderSystemJsonSerializerTest.cs
        │       └── JsonIpcDirectRoutedProviderTest.cs
        ├── NotifyTest.cs
        ├── PeerManagerTest.cs
        ├── PeerProxyTest.cs
        ├── PeerReConnectorTest.cs
        ├── PeerRegisterProviderTests.cs
        ├── Pipes/
        │   └── PipeConnectors/
        │       └── IpcClientPipeConnectorTest.cs
        ├── Properties/
        │   └── Compatibility.cs
        ├── ResponseManagerTests.cs
        ├── TaskExtension.cs
        ├── TestJsonContext.cs
        ├── TestLogger.cs
        ├── Threading/
        │   └── IpcThreadPoolTests.cs
        ├── Utils/
        │   ├── Extensions/
        │   │   └── PeerMessageArgsExtensionTest.cs
        │   └── IO/
        │       └── AsyncBinaryReaderTests.cs
        └── dotnetCampus.Ipc.Tests.csproj

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
[*]
end_of_line = crlf
charset = utf-8-bom
indent_size = 4
insert_final_newline = true
tab_width = 4
trim_trailing_whitespace = true

[*.{xml,csproj,vbproj,props,targets}]
indent_size =2
indent_style = space
tab_width =2

[*.{cs,vb}]
dotnet_sort_system_directives_first = true
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_object_initializer = true:suggestion
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent
dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent
dotnet_style_predefined_type_for_locals_parameters_members = true:silent
dotnet_style_predefined_type_for_member_access = true:silent
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_prefer_conditional_expression_over_assignment = true
dotnet_style_prefer_conditional_expression_over_return = true
dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent
dotnet_style_qualification_for_event = false:silent
dotnet_style_qualification_for_field = false:silent
dotnet_style_qualification_for_method = false:silent
dotnet_style_qualification_for_property = false:silent
dotnet_style_readonly_field = true:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent

[*.cs]
csharp_indent_case_contents = true
csharp_indent_labels = flush_left
csharp_indent_switch_labels = true
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion
csharp_prefer_braces = true:silent
csharp_prefer_simple_default_expression = true:suggestion
csharp_preserve_single_line_blocks = true
csharp_space_after_cast = true
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_around_binary_operators = before_and_after
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_style_conditional_delegate_call = true:suggestion
csharp_style_deconstructed_variable_declaration = true:suggestion
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_inlined_variable_declaration = true:suggestion
csharp_style_pattern_local_over_anonymous_function = true:suggestion
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
csharp_style_throw_expression = true:suggestion
csharp_style_var_elsewhere = true:silent
csharp_style_var_for_built_in_types = true:silent
csharp_style_var_when_type_is_apparent = true:silent


================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto

###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs     diff=csharp

###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following 
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln       merge=binary
#*.csproj    merge=binary
#*.vbproj    merge=binary
#*.vcxproj   merge=binary
#*.vcproj    merge=binary
#*.dbproj    merge=binary
#*.fsproj    merge=binary
#*.lsproj    merge=binary
#*.wixproj   merge=binary
#*.modelproj merge=binary
#*.sqlproj   merge=binary
#*.wwaproj   merge=binary

###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg   binary
#*.png   binary
#*.gif   binary

###############################################################################
# diff behavior for common document formats
# 
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the 
# entries below.
###############################################################################
#*.doc   diff=astextplain
#*.DOC   diff=astextplain
#*.docx  diff=astextplain
#*.DOCX  diff=astextplain
#*.dot   diff=astextplain
#*.DOT   diff=astextplain
#*.pdf   diff=astextplain
#*.PDF   diff=astextplain
#*.rtf   diff=astextplain
#*.RTF   diff=astextplain


================================================
FILE: .github/workflows/dotnet-core.yml
================================================
name: .NET Core

on: [push]

jobs:
  build:

    runs-on: windows-latest
    timeout-minutes: 15

    steps:
    - uses: actions/checkout@v1
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: |
          3.1.x
          6.0.x
          8.0.x
          9.0.x

    - name: Build
      run: dotnet build -c release

    - name: Test-net8.0
      run: dotnet test -c release -f net8.0 -v:n --tl:off --no-build --logger:"console;verbosity=detailed"

    - name: Test-net6.0
      run: dotnet test -c release -f net6.0 -v:n --tl:off --no-build --logger:"console;verbosity=detailed"

    - name: Pack
      run: dotnet pack -c release --no-build


================================================
FILE: .github/workflows/dotnet-format.yml
================================================
name: Code format check
# 代码格式化机器人,详细请看 [dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人](https://blog.lindexi.com/post/dotnet-%E5%9F%BA%E4%BA%8E-dotnet-format-%E7%9A%84-GitHub-Action-%E8%87%AA%E5%8A%A8%E4%BB%A3%E7%A0%81%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%9C%BA%E5%99%A8%E4%BA%BA.html )

on: 
  push:
    branches: 
      - main
jobs:
  dotnet-format:
    runs-on: windows-latest
    steps:

      - name: Checkout repo
        uses: actions/checkout@v2
        with:
          ref: ${{ github.head_ref }}
      
      - name: Setup .NET
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: |
            3.1.x
            6.0.x
            8.0.x
            9.0.x

      - name: Install dotnetCampus.EncodingNormalior
        run: dotnet tool update -g dotnetCampus.EncodingNormalior

      - name: Fix encoding
        run: EncodingNormalior -f . --TryFix true

      - name: Install dotnet-format
        run: dotnet tool install -g dotnet-format

      - name: Run dotnet format
        run: dotnet format

      - name: Commit files
        # 下面将使用机器人的账号,你可以替换为你自己的账号
        run: |
          git config --local user.name "github-actions-dotnet-formatter[bot]"
          git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git commit -a -m 'Automated dotnet-format update'
        continue-on-error: true
        
      - name: Create Pull Request
        # if: steps.format.outputs.has-changes == 'true' # 如果有格式化,才继续
        uses: peter-evans/create-pull-request@v3
        with:
          title: '[Bot] Automated PR to fix formatting errors'
          body: |
            Automated PR to fix formatting errors
          committer: GitHub <noreply@github.com>
          author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
          # 以下是给定代码审查者,需要设置仓库有权限的开发者
          assignees: lindexi,walterlv
          reviewers: lindexi,walterlv
          # 对应的上传分支
          branch: t/bot/fix-codeformatting


================================================
FILE: .github/workflows/nuget-tag-publish.yml
================================================
name: publish nuget

on: 
  push:
    tags:
    - '*'

jobs:
  build:

    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v1

    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: |
          3.1.x
          6.0.x
          8.0.x
          9.0.x

    - name: Install dotnet tool
      run: dotnet tool install -g dotnetCampus.TagToVersion

    - name: Set tag to version  
      run: dotnet TagToVersion -t ${{ github.ref }}

    - name: Build with dotnet
      run: |
        dotnet build --configuration Release
        dotnet pack --configuration Release --no-build

    - name: Install Nuget
      uses: nuget/setup-nuget@v1
      with:
        nuget-version: '6.x'

    - name: Add private GitHub registry to NuGet
      run: |
        nuget sources add -name github -Source https://nuget.pkg.github.com/dotnet-campus/index.json -Username dotnet-campus -Password ${{ secrets.GITHUB_TOKEN }}

    - name: Push generated package to GitHub registry
      run: |
        nuget push .\artifacts\package\release\*.nupkg -Source github -SkipDuplicate
        nuget push .\artifacts\package\release\*.nupkg -Source https://api.nuget.org/v3/index.json -SkipDuplicate -ApiKey ${{ secrets.NugetKey }} 


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb
/GetAssemblyVersionTask/Properties/launchSettings.json
/WriteAppVersionTask/Properties/launchSettings.json
/src/dotnetCampus.Ipc.PipeMvc/Properties/launchSettings.json


================================================
FILE: CHANGELOG.md
================================================
# dotnetCampus.Ipc

================================================
FILE: Directory.Build.props
================================================
<Project>

  <Import Project="build\Version.props" />

  <!-- Framework and language -->
  <PropertyGroup>
    <!-- Language -->
    <LangVersion>latest</LangVersion>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <!-- Build -->
    <ArtifactsPath>$(MSBuildThisFileDirectory)artifacts</ArtifactsPath>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
    <Deterministic>true</Deterministic>
    <!--
      Add NoWarn to remove build warnings
      NU1803: Using an insecure http NuGet source
    -->
    <NoWarn>$(NoWarn);NU1507;NU1803;NETSDK1201;NETSDK1138;PRI257</NoWarn>
    <!--
      CA1416: Platform compatibility warning
    -->
    <WarningsAsErrors>$(WarningsAsErrors);CA1416</WarningsAsErrors>
  </PropertyGroup>

  <!-- Custom properties -->
  <PropertyGroup>
    <RepositoryRoot>$(MSBuildThisFileDirectory)</RepositoryRoot>
    <ThisYear>$([System.DateTime]::Now.ToString(`yyyy`))</ThisYear>
  </PropertyGroup>

  <!-- Package and project properties -->
  <PropertyGroup>
    <Description>本机内多进程通讯库,稳定 IPC 通讯库</Description>
    <Company>dotnet campus(.NET 职业技术学院)</Company>
    <Authors>dotnet-campus</Authors>
    <Copyright>Copyright © 2020-$(ThisYear) dotnet campus, All Rights Reserved.</Copyright>
    <RepositoryType>git</RepositoryType>
    <RepositoryUrl>https://github.com/dotnet-campus/dotnetCampus.Ipc</RepositoryUrl>
    <PackageProjectUrl>https://github.com/dotnet-campus/dotnetCampus.Ipc</PackageProjectUrl>
  </PropertyGroup>

</Project>


================================================
FILE: Directory.Packages.props
================================================
<Project>
  <ItemGroup>
    <PackageVersion Include="coverlet.collector" Version="6.0.2" />
    <PackageVersion Include="dotnetCampus.AsyncWorkerCollection.Source" Version="1.7.2" />
    <PackageVersion Include="DotNetCampus.CodeAnalysisUtils" Version="0.0.1-alpha.5" />
    <PackageVersion Include="DotNetCampus.CommandLine" Version="4.0.1-alpha.1" />
    <PackageVersion Include="DotNetCampus.LatestCSharpFeatures" Version="13.0.0" />
    <PackageVersion Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />
    <PackageVersion Include="Microsoft.CodeAnalysis" Version="4.4.0" />
    <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.4.0" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.CodeFix.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.CodeRefactoring.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.4.0" />
    <PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.Analyzer.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.CodeFix.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CodeAnalysis.VisualBasic.CodeRefactoring.Testing.MSTest" Version="1.1.1" />
    <PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
    <PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
    <PackageVersion Include="Moq" Version="4.20.70" />
    <PackageVersion Include="MSTest.TestAdapter" Version="3.4.3" />
    <PackageVersion Include="MSTest.TestFramework" Version="3.4.3" />
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageVersion Include="System.Collections.Immutable" Version="9.0.10" />
    <PackageVersion Include="System.IO.Pipelines" Version="8.0.0" />
    <PackageVersion Include="System.IO.Pipes.AccessControl" Version="5.0.0" />
    <PackageVersion Include="System.Text.Json" Version="8.0.6" />
    <PackageVersion Include="System.ValueTuple" Version="4.5.0" />
    <PackageVersion Include="Walterlv.NullableAttributes.Source" Version="7.4.0" />
  </ItemGroup>
</Project>

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020-2023 dotnet campus

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.


================================================
FILE: README.md
================================================
# dotnetCampus.Ipc

本机内多进程通讯库

| Build | NuGet |
|--|--|
|![](https://github.com/dotnet-campus/dotnetCampus.Ipc/workflows/.NET%20Core/badge.svg)|[![](https://img.shields.io/nuget/v/dotnetCampus.Ipc.svg)](https://www.nuget.org/packages/dotnetCampus.Ipc)|


## 使用方法

库中提供了较为底层的通信方案,也提供了高级的封装方案(基于Json数据格式的通信方案),完整文档可参阅:

- 🌀 远程对象调用
    - [基础入门教程](./docs/IpcObject.01.md)
    - [通讯方式详解](./docs/IpcObject.02.md)
- 🌐 直接路由
    - [通讯方式详解](./docs/JsonIpcDirectRouted.md)

### 案例:直接路由Json通信(需要2.0.0-alpha版本以上)

#### 步骤一

导入nuget包 **dotnetCampus.Ipc**(需要2.0.0-alpha版本以上),并引入所需要的命名空间;

``` C#
using dotnetCampus.Ipc.Context;
using dotnetCampus.Ipc.IpcRouteds.DirectRouteds;
using dotnetCampus.Ipc.Pipes;
```

#### 步骤二

创建实际负责IPC通信的代理对象

``` C#

/// <summary>
/// 根据<paramref name="pipeName"/>创建一个 JsonIpcDirectRoutedProvider 对象
/// </summary>
/// <param name="pipeName">不同的IPC对象所使用的管道名称,一个管道名称只能被用于一个IPC对象</param>
/// <returns></returns>
private JsonIpcDirectRoutedProvider CreateJsonIpcDirectRoutedProvider(string pipeName)
{
    // 创建一个 IpcProvider,实际创建管道,进行IPC通信的底层对象
    // 可在 IpcConfiguration 进行详细的配置,包括配置断线重连、日志等级、线程池等等
    var ipcProvider = new IpcProvider(pipeName, new IpcConfiguration());

    // 创建一个 JsonIpcDirectRoutedProvider,封装了通信中的Json数据解析、简化方法调用
    var ipcDirectRoutedProvider = new JsonIpcDirectRoutedProvider(ipcProvider);

    return ipcDirectRoutedProvider;
}

```

#### 步骤三

向IPC对象注册接受到指定消息后的处理函数(如果该IPC对象只负责发送消息,则它不需要注册消息处理回调)

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是接收消息的IPC对象");

//对无参的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler("通知消息A", () => 
{
    Console.WriteLine("我是进程A,我收到了通知消息B,该消息无参数");
});

//对参数类型为ParamType的通知消息注册回调函数
ipcDirectRoutedProvider.AddNotifyHandler<ParamType>("通知消息B", param => 
{
    Console.WriteLine($"我是进程A,我收到了通知消息B,该消息参数:{param.Message}");
});

//对参数类型为ParamType的请求注册回调函数并返回响应数据(可以异步处理响应、也可以无参)
ipcDirectRoutedProvider.AddRequestHandler("请求消息C", (ParamType argument) =>
{
    //处理请求消息C
    var response = new IpcResponse
    {
        Message = $"我是进程A,我收到了请求消息C,该消息参数:{argument.Message}"
    };

    //返回响应数据
    return response;
});

```

#### 步骤四

启动服务

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是接收消息的IPC对象");

/**
一些消息注册(如果该IPC对象只负责发送消息,则它不需要注册消息处理回调;接受消息的一方需要注册接收到消息后的处理函数)
……
**/

//启动该服务
ipcDirectRoutedProvider.StartServer();

```

#### 步骤五

发送消息(如果该IPC对象只负责接收和处理消息,则它不需要发送消息)

``` C#

var ipcDirectRoutedProvider = CreateJsonIpcDirectRoutedProvider("我是发送消息的IPC对象");
//启动该服务
ipcDirectRoutedProvider.StartServer();
//根据接收方的管道名,获取需要接受到消息的IPC对象,并发送通知
var ipcReceivingObjectA = await ipcDirectRoutedProvider.GetAndConnectClientAsync("我是接收消息的IPC对象");
await ipcReceivingObjectA.NotifyAsync("通知消息A");
await ipcReceivingObjectA.NotifyAsync("通知消息B", new ParamType { Message = "我发送的通知消息是XXX" });
var response = await ipcReceivingObjectA.GetResponseAsync<IpcResponse>("请求消息C", new ParamType { Message = "我发送的请求消息XXX" });

```

#### 调用关系图

![](./docs/image/README/zh-CN/sample0.png)

*更多案例详见:* [Demo](https://github.com/dotnet-campus/dotnetCampus.Ipc/tree/master/demo)

### FAQ

#### AOT 支持

Q: 此 Ipc 库支持 AOT 吗?

A: 此 Ipc 库支持 AOT,但需要注意以下几点:

- 如果是完全使用 byte[] 作为数据传输格式,则不需要任何额外的配置,直接就支持 AOT 了
- 如果是采用 Json 通讯系列,则需要在使用 Json 序列化时,使用 `JsonSerializerOptions` 的 `TypeInfoResolver` 属性来指定类型解析器。具体的配置可以参考 [JsonSerializerOptions](https://learn.microsoft.com/dotnet/api/system.text.json.jsonserializeroptions?view=dotnet-plat-ext-7.0) 的文档。一般而言,可采用封装好的 UseSystemTextJsonIpcObjectSerializer 扩展方法辅助传入 `System.Text.Json.Serialization.JsonSerializerContext` 对象,如以下示例代码所示

``` C#
    IpcConfiguration ipcConfiguration = new IpcConfiguration()
    {
        // 进行设置其他配置
    }.UseSystemTextJsonIpcObjectSerializer(SourceGenerationContext.Default);

    var ipcProvider = new IpcProvider(pipeName, ipcConfiguration);
```

或者注入 IpcConfiguration 的 IpcObjectSerializer 属性,进行更加灵活的序列化配置。此时将不仅限于使用 System.Text.Json 进行序列化,也可以使用其他的序列化方式,如二进制序列化等等

Q: 采用 直接路由 Json 通信(JsonIpcDirectRoutedProvider)时,如何改造让其支持 AOT 编译?

A:如上问所述,可在 IpcConfiguration 里面设置 IpcObjectSerializer 属性,或调用 UseSystemTextJsonIpcObjectSerializer 扩展辅助方法。如以下示代码所示

``` C#
    // 创建一个 IpcProvider,实际创建管道,进行IPC通信的底层对象
    // 可在 IpcConfiguration 进行详细的配置,包括配置断线重连、日志等级、线程池等等
    IpcConfiguration ipcConfiguration = new IpcConfiguration()
    {
        // 进行设置其他配置
    }.UseSystemTextJsonIpcObjectSerializer(SourceGenerationContext.Default);
    var ipcProvider = new IpcProvider(pipeName, ipcConfiguration);

    // 创建一个 JsonIpcDirectRoutedProvider,封装了通信中的Json数据解析、简化方法调用
    var ipcDirectRoutedProvider = new JsonIpcDirectRoutedProvider(ipcProvider);
```


## 项目结构图

![](./docs/image/README/zh-CN/Architecture0.png)

## 特点

- 采用两个半工命名管道
- 采用 P2P 方式,每个端都是服务端也是客户端
- 提供 PeerProxy 机制,利用这个机制可以进行发送和接收某个对方的信息
- 追求稳定,而不追求高性能

## 功能

- [x] 通讯建立
- [x] 消息收到回复机制
- [x] 断线重连功能
- [x] 大量异常处理

- [x] 支持裸数据双向传输方式
- [x] 支持裸数据请求响应模式
- [x] 支持字符串消息协议
- [x] 支持远程对象调用和对象存根传输方式
- [x] 支持 NamedPipeStreamForMvc (NamedPipeMvc) 客户端服务器端 MVC 模式
- [x] 支持直接路由的 Json 数据通讯方式


## 感谢

- [jacqueskang/IpcServiceFramework](https://github.com/jacqueskang/IpcServiceFramework)
- [https://github.com/dotnet/aspnetcore](https://github.com/dotnet/aspnetcore) for PipeMVC

## 踩过的坑

- [2019-12-1-构造PipeAccessRule时请不要使用字符串指定Identity - huangtengxiao](https://huangtengxiao.gitee.io/post/%E6%9E%84%E9%80%A0PipeAccessRule%E6%97%B6%E8%AF%B7%E4%B8%8D%E8%A6%81%E4%BD%BF%E7%94%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8C%87%E5%AE%9AIdentity.html)


================================================
FILE: analyzers/dotnetCampus.Ipc.SourceGenerators/GeneratedIpcJointGenerator.cs
================================================
using System.Text.RegularExpressions;

using Microsoft.CodeAnalysis.Text;

namespace dotnetCampus.Ipc;

/// <summary>
/// 为 GeneratedIpcJoint 类生成更多的泛型参数。
/// </summary>
[Generator(LanguageNames.CSharp)]
public class GeneratedIpcJointGenerator : IIncrementalGenerator
{
    public void Initialize(IncrementalGeneratorInitializationContext context)
    {
        var compilations = context.SyntaxProvider.CreateSyntaxProvider(
            // 找到 GeneratedIpcJoint 类型。
            (syntaxNode, ct) => syntaxNode is ClassDeclarationSyntax cds && cds.Identifier.ToString() == "GeneratedIpcJoint",
            // 语义解析:确定是否真的是感兴趣的 IPC 接口。
            (generatorSyntaxContext, ct) => generatorSyntaxContext)
            .Where(x =>
            {
                var node = x.Node as ClassDeclarationSyntax;
                var symbol = x.SemanticModel.GetDeclaredSymbol(x.Node) as INamedTypeSymbol;
                return node is not null && symbol is not null && symbol.IsGenericType;
            });

        context.RegisterSourceOutput(compilations, Execute);
    }

    private void Execute(SourceProductionContext context, GeneratorSyntaxContext generatorContext)
    {
        var source = GenerateGeneratedIpcJoint(generatorContext);
        context.AddSource($"GeneratedIpcJoint.generic", SourceText.From(source, Encoding.UTF8));
    }

    private string GenerateGeneratedIpcJoint(GeneratorSyntaxContext context) => $$"""
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Threading.Tasks;

        using dotnetCampus.Ipc.CompilerServices.GeneratedProxies.Models;

        namespace dotnetCampus.Ipc.CompilerServices.GeneratedProxies;
        partial class GeneratedIpcJoint<TContract>
        {
        {{string.Join("\r\n\r\n",
            Enumerable.Range(2, 15)
                .Select(x => GenerateMethodGroup(context, x))
                .SelectMany(x => x))}}
        }
        """;

    private IEnumerable<string> GenerateMethodGroup(GeneratorSyntaxContext context, int genericCount)
    {
        yield return GenerateVoidMethod(context, genericCount);
        yield return GenerateReturnMethod(context, genericCount);
        yield return GenerateAsyncVoidMethod(context, genericCount);
        yield return GenerateAsyncReturnMethod(context, genericCount);
    }

    private string GenerateVoidMethod(GeneratorSyntaxContext context, int genericCount) => $$"""
        /// <summary>
        /// 匹配一个 IPC 目标对象上的某个方法,使其他 IPC 节点访问此 IPC 对象时能执行 <paramref name="methodInvoker"/> 所指向的具体实现。
        /// </summary>
        /// <param name="memberId">方法签名的 Id。</param>
        /// <param name="methodInvoker">对接实现。</param>
        protected void MatchMethod<{{GenerateTs(genericCount)}}>(ulong memberId, Action<{{GenerateTs(genericCount)}}> methodInvoker)
        {
            _methods.Add(memberId, (new[] { {{GenerateTs(genericCount, "typeof(T)")}} }, args =>
            {
                methodInvoker({{GenerateTs(genericCount, i => $"CastArg<T>(args![{i - 1}])!")}});
                return DefaultGarm;
            }
            ));
        }
    """;

    private string GenerateReturnMethod(GeneratorSyntaxContext context, int genericCount) => $$"""
        /// <summary>
        /// 匹配一个 IPC 目标对象上的某个方法,使其他 IPC 节点访问此 IPC 对象时能执行 <paramref name="methodInvoker"/> 所指向的具体实现。
        /// </summary>
        /// <param name="memberId">方法签名的 Id。</param>
        /// <param name="methodInvoker">对接实现。</param>
        protected void MatchMethod<{{GenerateTs(genericCount)}}>(ulong memberId, Func<{{GenerateTs(genericCount)}}, Task> methodInvoker)
        {
            _asyncMethods.Add(memberId, (new[] { {{GenerateTs(genericCount, "typeof(T)")}} }, async args =>
            {
                await methodInvoker({{GenerateTs(genericCount, i => $"CastArg<T>(args![{i - 1}])!")}}).ConfigureAwait(false);
                return DefaultGarm;
            }
            ));
        }
    """;

    private string GenerateAsyncVoidMethod(GeneratorSyntaxContext context, int genericCount) => $$"""
        /// <summary>
        /// 匹配一个 IPC 目标对象上的某个方法,使其他 IPC 节点访问此 IPC 对象时能执行 <paramref name="methodInvoker"/> 所指向的具体实现。
        /// </summary>
        /// <param name="memberId">方法签名的 Id。</param>
        /// <param name="methodInvoker">对接实现。</param>
        protected void MatchMethod<{{GenerateTs(genericCount)}}, TReturn>(ulong memberId, Func<{{GenerateTs(genericCount)}}, Garm<TReturn>> methodInvoker)
        {
            _methods.Add(memberId, (new[] { {{GenerateTs(genericCount, "typeof(T)")}} }, args => methodInvoker({{GenerateTs(genericCount, i => $"CastArg<T>(args![{i - 1}])!")}})));
        }
    """;

    private string GenerateAsyncReturnMethod(GeneratorSyntaxContext context, int genericCount) => $$"""
        /// <summary>
        /// 匹配一个 IPC 目标对象上的某个方法,使其他 IPC 节点访问此 IPC 对象时能执行 <paramref name="methodInvoker"/> 所指向的具体实现。
        /// </summary>
        /// <param name="memberId">方法签名的 Id。</param>
        /// <param name="methodInvoker">对接实现。</param>
        protected void MatchMethod<{{GenerateTs(genericCount)}}, TReturn>(ulong memberId, Func<{{GenerateTs(genericCount)}}, Task<Garm<TReturn>>> methodInvoker)
        {
            _asyncMethods.Add(memberId, (new[] { {{GenerateTs(genericCount, "typeof(T)")}} }, async args => await methodInvoker({{GenerateTs(genericCount, i => $"CastArg<T>(args![{i - 1}])!")}}).ConfigureAwait(false)));
        }
    """;

    private string GenerateTs(int genericCount, string? template = null)
    {
        var templateWithDefault = template ?? "T";
        return string.Join(", ",
            Enumerable.Range(1, genericCount)
                .Select(x => GenrateT(x, templateWithDefault)));
    }

    private string GenerateTs(int genericCount, Func<int, string> templateGetter)
    {
        return string.Join(", ",
            Enumerable.Range(1, genericCount)
                .Select(x => GenrateT(x, templateGetter(x))));
    }

    /// <summary>
    /// 使用正则表达式找到 template 中独立的 T,然后替换为 T1、T2、T3……
    /// </summary>
    /// <param name="genericIndex">泛型序号,从 1 开始。</param>
    /// <param name="template">泛型格式化模板,默认为 T;也可以用别的,如 typeof(T)。</param>
    private string GenrateT(int genericIndex, string template)
    {
        var regex = new Regex(@"\bT\b");
        var match = regex.Match(template);
        if (match.Success)
        {
            var index = match.Index;
            var length = match.Length;
            var prefix = template.Substring(0, index);
            var suffix = template.Substring(index + length);
            return prefix + $"T{genericIndex}" + suffix;
        }
        else
        {
            return template;
        }
    }
}


================================================
FILE: analyzers/dotnetCampus.Ipc.SourceGenerators/Properties/GlobalUsings.cs
================================================
global using System;
global using System.Collections.Generic;
global using System.Collections.Immutable;
global using System.Composition;
global using System.Diagnostics;
global using System.Diagnostics.CodeAnalysis;
global using System.Globalization;
global using System.Linq;
global using System.Text;
global using System.Threading;
global using System.Threading.Tasks;

global using Microsoft.CodeAnalysis;
global using Microsoft.CodeAnalysis.CSharp;
global using Microsoft.CodeAnalysis.CSharp.Syntax;
global using Microsoft.CodeAnalysis.Diagnostics;


================================================
FILE: analyzers/dotnetCampus.Ipc.SourceGenerators/dotnetCampus.Ipc.SourceGenerators.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <Nullable>enable</Nullable>
    <RootNamespace>dotnetCampus.Ipc</RootNamespace>
    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="dotnetCampus.LatestCSharpFeatures" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" />
  </ItemGroup>

  <ItemGroup>
    <None Remove="SourceProject\**" />
  </ItemGroup>

</Project>


================================================
FILE: build/Version.props
================================================
<Project>
  <PropertyGroup>
    <Version>1.0.0</Version>
  </PropertyGroup>
</Project>

================================================
FILE: demo/IpcDirectRoutedAotDemo/DemoRequest.cs
================================================
namespace IpcDirectRoutedAotDemo;

public record DemoRequest
{
    public required string Value { get; init; }
}


================================================
FILE: demo/IpcDirectRoutedAotDemo/DemoResponse.cs
================================================
namespace IpcDirectRoutedAotDemo;

public record DemoResponse
{
    public required string Result { get; init; }
}


================================================
FILE: demo/IpcDirectRoutedAotDemo/IpcDirectRoutedAotDemo.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
    <PublishAot>true</PublishAot>
    <IlcGenerateMstatFile>true</IlcGenerateMstatFile>
    <IlcGenerateDgmlFile>true</IlcGenerateDgmlFile>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\src\dotnetCampus.Ipc\dotnetCampus.Ipc.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: demo/IpcDirectRoutedAotDemo/NotifyInfo.cs
================================================
namespace IpcDirectRoutedAotDemo;

public record NotifyInfo
{
    public required string Value { get; init; }
}


================================================
FILE: demo/IpcDirectRoutedAotDemo/Program.cs
================================================
// See https://aka.ms/new-console-template for more information

using System.Diagnostics;

using dotnetCampus.Ipc.Context;
using dotnetCampus.Ipc.IpcRouteds.DirectRouteds;
using dotnetCampus.Ipc.Pipes;
using IpcDirectRoutedAotDemo;

var notifyPath = "NotifyFoo";
var notifyPath2 = "NotifyFoo2";
var requestPath = "RequestFoo";
var requestPath2 = "RequestFoo2";

if (args.Length == 0)
{
    // 首个启动的,当成服务端
    string pipeName = Guid.NewGuid().ToString();
    var ipcProvider = new IpcProvider(pipeName, new IpcConfiguration()
    {

    }.UseSystemTextJsonIpcObjectSerializer(SourceGenerationContext.Default));
    var ipcDirectRoutedProvider = new JsonIpcDirectRoutedProvider(ipcProvider);
    ipcDirectRoutedProvider.AddNotifyHandler(notifyPath, () =>
    {
        Console.WriteLine($"[{Environment.ProcessId}] Receive Notify. 服务端收到通知");
    });

    ipcDirectRoutedProvider.AddNotifyHandler(notifyPath2, (NotifyInfo notifyInfo) =>
    {
        Console.WriteLine($"[{Environment.ProcessId}] Receive Notify. 服务端收到通知 NotifyInfo={notifyInfo}");
    });

    ipcDirectRoutedProvider.AddRequestHandler(requestPath, () => "ResponseFoo");

    ipcDirectRoutedProvider.AddRequestHandler(requestPath2, (DemoRequest request) =>
    {
        Console.WriteLine($"[{Environment.ProcessId}] Receive Request. 服务端收到请求 DemoRequest={request}");
        return new DemoResponse() { Result = "返回内容" };
    });

    ipcDirectRoutedProvider.StartServer();
    Console.WriteLine($"[{Environment.ProcessId}] 服务启动");

    // 启动另一个进程
    Process.Start(Environment.ProcessPath!, pipeName);
}
else
{
    var peerName = args[0];
    Console.WriteLine($"[{Environment.ProcessId}] 客户端进程启动");
    var jsonIpcDirectRoutedProvider = new JsonIpcDirectRoutedProvider(ipcConfiguration: new IpcConfiguration()
        .UseSystemTextJsonIpcObjectSerializer(SourceGenerationContext.Default));
    JsonIpcDirectRoutedClientProxy jsonIpcDirectRoutedClientProxy = await jsonIpcDirectRoutedProvider.GetAndConnectClientAsync(peerName);

    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送通知");
    await jsonIpcDirectRoutedClientProxy.NotifyAsync(notifyPath);
    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送通知完成");

    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送通知2");
    await jsonIpcDirectRoutedClientProxy.NotifyAsync(notifyPath2, new NotifyInfo()
    {
        Value = "通知2"
    });
    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送通知2完成");


    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送请求");
    var responseValue = await jsonIpcDirectRoutedClientProxy.GetResponseAsync<string>(requestPath);
    Console.WriteLine($"[{Environment.ProcessId}] 客户端完成请求,收到响应内容 {responseValue}");

    Console.WriteLine($"[{Environment.ProcessId}] 客户端发送请求2");
    var responseValue2 = await jsonIpcDirectRoutedClientProxy.GetResponseAsync<DemoResponse>(requestPath2, new DemoRequest()
    {
        Value = "客户端请求内容"
    });
    Console.WriteLine($"[{Environment.ProcessId}] 客户端完成请求2,收到响应内容 {responseValue2}");
}

Console.WriteLine($"[{Environment.ProcessId}] 等待退出");
Console.Read();
Console.WriteLine($"[{Environment.ProcessId}] 进程准备退出");


================================================
FILE: demo/IpcDirectRoutedAotDemo/SourceGenerationContext.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace IpcDirectRoutedAotDemo;

[JsonSerializable(typeof(NotifyInfo))]
[JsonSerializable(typeof(DemoRequest))]
[JsonSerializable(typeof(DemoResponse))]
internal partial class SourceGenerationContext : JsonSerializerContext
{
}


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/IFoo.cs
================================================
using dotnetCampus.Ipc.CompilerServices.Attributes;

namespace IpcRemotingObjectServerDemo; // Must the same namespace

/// <summary>
/// 可跨进程调用的接口演示。
/// </summary>
[IpcPublic]
public interface IFoo
{
    /// <summary>
    /// 属性演示。支持 get/set 属性、get 只读属性,支持跨进程报告异常。
    /// </summary>
    string Name { get; set; }

    /// <summary>
    /// 方法演示。支持参数、返回值,支持跨进程报告异常。
    /// </summary>
    int Add(int a, int b);

    /// <summary>
    /// 异步方法(更推荐)演示。支持参数、返回值,支持跨进程报告异常。
    /// </summary>
    Task<string> AddAsync(string a, int b);
}


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/IpcRemotingObjectClientDemo.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\..\src\dotnetCampus.Ipc.Analyzers\dotnetCampus.Ipc.Analyzers.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
    <ProjectReference Include="..\..\..\src\dotnetCampus.Ipc\dotnetCampus.Ipc.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/Program.cs
================================================
using dotnetCampus.Ipc.CompilerServices.GeneratedProxies;
using dotnetCampus.Ipc.Pipes;

using IpcRemotingObjectServerDemo;

var ipcProvider = new IpcProvider("IpcRemotingObjectClientDemo");

ipcProvider.StartServer();

var peer = await ipcProvider.GetAndConnectToPeerAsync("IpcRemotingObjectServerDemo");

var foo = ipcProvider.CreateIpcProxy<IFoo>(peer);

Console.WriteLine(await foo.AddAsync("a", 1));
Console.WriteLine(foo.Add(1, 2));

Console.Read();


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/Foo.cs
================================================
namespace IpcRemotingObjectServerDemo;

class Foo : IFoo
{
    public string Name { get; set; } = "Foo";

    public int Add(int a, int b)
    {
        Console.WriteLine($"a({a})+b({b})={a + b}");
        return a + b;
    }

    public async Task<string> AddAsync(string a, int b)
    {
        return await Task.Run(() =>
        {
            Console.WriteLine($"a({a})+b({b})={a + b}");
            return a + b;
        });
    }
}


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/IFoo.cs
================================================
using dotnetCampus.Ipc.CompilerServices.Attributes;

namespace IpcRemotingObjectServerDemo;

/// <summary>
/// 可跨进程调用的接口演示。
/// </summary>
[IpcPublic(IgnoresIpcException = true, Timeout = 1000)]
public interface IFoo
{
    /// <summary>
    /// 属性演示。支持 get/set 属性、get 只读属性,支持跨进程报告异常。
    /// </summary>
    string Name { get; set; }

    /// <summary>
    /// 方法演示。支持参数、返回值,支持跨进程报告异常。
    /// </summary>
    int Add(int a, int b);

    /// <summary>
    /// 异步方法(更推荐)演示。支持参数、返回值,支持跨进程报告异常。
    /// </summary>
    Task<string> AddAsync(string a, int b);
}


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/IpcRemotingObjectServerDemo.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\..\src\dotnetCampus.Ipc.Analyzers\dotnetCampus.Ipc.Analyzers.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
    <ProjectReference Include="..\..\..\src\dotnetCampus.Ipc\dotnetCampus.Ipc.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/Program.cs
================================================
using System;
using dotnetCampus.Ipc.CompilerServices.GeneratedProxies;
using dotnetCampus.Ipc.Pipes;
using IpcRemotingObjectServerDemo;

var ipcProvider = new IpcProvider("IpcRemotingObjectServerDemo");

ipcProvider.CreateIpcJoint<IFoo>(new Foo());
ipcProvider.PeerConnected += (sender, connectedArgs) =>
{
    Console.WriteLine($"PeerConnected. {connectedArgs.Peer.PeerName}");
};
ipcProvider.StartServer();

Console.Read();


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/App.xaml
================================================
<Application x:Class="PipeMvcClientDemo.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:PipeMvcClientDemo"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         
    </Application.Resources>
</Application>


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/App.xaml.cs
================================================
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace PipeMvcClientDemo;
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/AssemblyInfo.cs
================================================
using System.Windows;

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
                                     //(used if a resource is not found in the page,
                                     // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
                                              //(used if a resource is not found in the page,
                                              // app, or any theme specific resource dictionaries)
)]


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/MainWindow.xaml
================================================
<Window x:Class="PipeMvcClientDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PipeMvcClientDemo"
        mc:Ignorable="d"
        Title="PipeMvcClientDemo" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <StackPanel Margin="10,10,10,10" Orientation="Horizontal">
            <Button x:Name="GetFooButton" Margin="10,10,10,10" Click="GetFooButton_Click">Get</Button>
            <Button x:Name="GetFooWithArgumentButton" Margin="10,10,10,10" Click="GetFooWithArgumentButton_Click">Get With Argument</Button>
            <Button x:Name="PostFooButton" Margin="10,10,10,10" Click="PostFooButton_Click">Post</Button>
            <Button x:Name="PostFooWithArgumentButton" Margin="10,10,10,10" Click="PostFooWithArgumentButton_Click">Post With Argument</Button>
            <Button x:Name="MultiThreadButton" Margin="10,10,10,10" Click="MultiThreadButton_OnClick">多线程压测</Button>
        </StackPanel>
        <Grid Grid.Row="1" ClipToBounds="True">
            <TextBlock x:Name="TraceTextBlock" Margin="10,10,10,10" VerticalAlignment="Bottom"/>
        </Grid>
    </Grid>
</Window>


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/MainWindow.xaml.cs
================================================
using System;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows;
using dotnetCampus.Ipc.PipeMvcClient;
using PipeMvcServerDemo;

namespace PipeMvcClientDemo;

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Loaded += MainWindow_Loaded;
    }

    private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        Log($"Start create PipeMvcClient.");

        var ipcPipeMvcClient = await IpcPipeMvcClientProvider.CreateIpcMvcClientAsync("PipeMvcServerDemo");
        _ipcPipeMvcClient = ipcPipeMvcClient;

        Log($"Finish create PipeMvcClient.");
    }

    private HttpClient? _ipcPipeMvcClient;

    private async void GetFooButton_Click(object sender, RoutedEventArgs e)
    {
        if (_ipcPipeMvcClient is null)
        {
            return;
        }

        Log($"[Request][Get] IpcPipeMvcServer://api/Foo");
        var response = await _ipcPipeMvcClient.GetStringAsync("api/Foo");
        Log($"[Response][Get] IpcPipeMvcServer://api/Foo {response}");
    }

    private void Log(string message)
    {
        Dispatcher.InvokeAsync(() =>
        {
            TraceTextBlock.Text += message + "\r\n";

            if (TraceTextBlock.Text.Length > 10000)
            {
                TraceTextBlock.Text = TraceTextBlock.Text[5000..];
            }
        });
    }

    private async void GetFooWithArgumentButton_Click(object sender, RoutedEventArgs e)
    {
        if (_ipcPipeMvcClient is null)
        {
            return;
        }

        Log($"[Request][Get] IpcPipeMvcServer://api/Foo/Add");
        var response = await _ipcPipeMvcClient.GetStringAsync("api/Foo/Add?a=1&b=1");
        Log($"[Response][Get] IpcPipeMvcServer://api/Foo/Add {response}");
    }

    private async void PostFooButton_Click(object sender, RoutedEventArgs e)
    {
        if (_ipcPipeMvcClient is null)
        {
            return;
        }

        Log($"[Request][Post] IpcPipeMvcServer://api/Foo");
        var response = await _ipcPipeMvcClient.PostAsync("api/Foo", new StringContent(""));
        var m = await response.Content.ReadAsStringAsync();
        Log($"[Response][Post] IpcPipeMvcServer://api/Foo {response.StatusCode} {m}");
    }

    private async void PostFooWithArgumentButton_Click(object sender, RoutedEventArgs e)
    {
        if (_ipcPipeMvcClient is null)
        {
            return;
        }

        Log($"[Request][Post] IpcPipeMvcServer://api/Foo");

        var json = JsonSerializer.Serialize(new FooContent { Foo1 = "Foo PostFooWithArgumentButton", Foo2 = null, });
        StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await _ipcPipeMvcClient.PostAsync("api/Foo/PostFoo", content);
        var m = await response.Content.ReadAsStringAsync();
        Log($"[Response][Post] IpcPipeMvcServer://api/Foo/PostFoo {response.StatusCode} {m}");
    }

    private void MultiThreadButton_OnClick(object sender, RoutedEventArgs e)
    {
        if (_ipcPipeMvcClient is null)
        {
            return;
        }

        var count = 10;
        for (int i = 0; i < count; i++)
        {
            var id = i;
            Task.Run(async () =>
            {
                Log($"[{id}][Request][Post] IpcPipeMvcServer://api/Foo");
                var response = await _ipcPipeMvcClient.PostAsync("api/Foo", new StringContent(""));
                var m = await response.Content.ReadAsStringAsync();
                Log($"[{id}][Response][Post] IpcPipeMvcServer://api/Foo {response.StatusCode} {m}");

                var a = Random.Shared.Next();
                var b = Random.Shared.Next();

                Log($"[{id}][Request][Get] IpcPipeMvcServer://api/Foo/Add?a={a}&b={b}");
                m = await _ipcPipeMvcClient.GetStringAsync($"api/Foo/Add?a={a}&b={b}");
                Log($"[{id}][Response][Get] IpcPipeMvcServer://api/Foo/Add {m} {a}+{b}={a + b}");

                Log($"[{id}][Request][Post] IpcPipeMvcServer://api/Foo");
                response = await _ipcPipeMvcClient.PostAsync("api/Foo", new StringContent(BuildRandomText()));
                m = await response.Content.ReadAsStringAsync();
                Log($"[Response][Post] IpcPipeMvcServer://api/Foo {response.StatusCode} {m}");

                Log($"[{id}][Request][Post] IpcPipeMvcServer://api/Foo");

                var json = JsonSerializer.Serialize(new FooContent
                {
                    Foo1 = Random.Shared.Next(2) == 1 ? BuildRandomText() : null,
                    Foo2 = Random.Shared.Next(2) == 1 ? BuildRandomText() : null,
                });
                StringContent content = new StringContent(json, Encoding.UTF8, "application/json");

                response = await _ipcPipeMvcClient.PostAsync("api/Foo/PostFoo", content);
                m = await response.Content.ReadAsStringAsync();
                Log($"[{id}][Response][Post] IpcPipeMvcServer://api/Foo/PostFoo {response.StatusCode} {m}");
            });
        }
    }

    private static string BuildRandomText()
    {
        var count = 10;
        var text = new StringBuilder();
        for (int i = 0; i < count; i++)
        {
            text.Append((char) Random.Shared.Next('a', 'z' + 1));
        }

        return text.ToString();
    }
}


================================================
FILE: demo/PipeMvc/PipeMvcClientDemo/PipeMvcClientDemo.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <Compile Include="..\PipeMvcServerDemo\FooContent.cs" Link="FooContent.cs" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\..\src\PipeMvc\dotnetCampus.Ipc.PipeMvcClient\dotnetCampus.Ipc.PipeMvcClient.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/FooContent.cs
================================================
namespace PipeMvcServerDemo;

public class FooContent
{
    public string? Foo1 { set; get; }
    public string? Foo2 { set; get; }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/FooController.cs
================================================
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

namespace PipeMvcServerDemo;

[Route("api/[controller]")]
[ApiController]
public class FooController : ControllerBase
{
    public FooController(ILogger<FooController> logger)
    {
        Logger = logger;
    }

    public ILogger<FooController> Logger { get; }

    [HttpGet]
    public IActionResult Get()
    {
        Logger.LogInformation("FooController_Get");
        return Ok(DateTime.Now.ToString());
    }

    [HttpGet("Add")]
    public IActionResult Add(int a, int b)
    {
        Logger.LogInformation($"FooController_Add a={a};b={b}");
        return Ok(a + b);
    }

    [HttpPost]
    public IActionResult Post()
    {
        Logger.LogInformation("FooController_Post");
        return Ok($"POST {DateTime.Now}");
    }

    [HttpPost("PostFoo")]
    public IActionResult PostFooContent(FooContent foo)
    {
        Logger.LogInformation($"FooController_PostFooContent Foo1={foo.Foo1};Foo2={foo.Foo2 ?? "<NULL>"}");
        return Ok($"PostFooContent Foo1={foo.Foo1};Foo2={foo.Foo2 ?? "<NULL>"}");
    }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/MainWindow.xaml
================================================
<Window x:Class="PipeMvcServerDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:PipeMvcServerDemo"
        mc:Ignorable="d"
        Title="PipeMvcServerDemo" Height="450" Width="800">
    <Grid>
        <TextBlock x:Name="TraceTextBlock" Margin="10,10,10,10" VerticalAlignment="Bottom" TextWrapping="Wrap"></TextBlock>
    </Grid>
</Window>


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/MainWindow.xaml.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace PipeMvcServerDemo;
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public void Log(string message)
    {
        Dispatcher.InvokeAsync(() =>
        {
            TraceTextBlock.Text += message + "\r\n";

            if (TraceTextBlock.Text.Length > 10000)
            {
                TraceTextBlock.Text = TraceTextBlock.Text[5000..];
            }
        });
    }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/PipeMvcServerDemo.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0-windows</TargetFramework>
    <OutputType>WinExe</OutputType>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <UseWPF>true</UseWPF>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\..\..\src\PipeMvc\dotnetCampus.Ipc.PipeMvcServer\dotnetCampus.Ipc.PipeMvcServer.csproj" />
  </ItemGroup>

</Project>


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/Program.cs
================================================
using System.Windows;
using System.Windows.Threading;

using dotnetCampus.Ipc.PipeMvcServer;

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace PipeMvcServerDemo;

public class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        Task.Run(() => RunMvc(args));
        RunWpf();
    }

    private static void RunWpf()
    {
        Application application = new Application();
        application.Startup += (s, e) =>
        {
            MainWindow mainWindow = new MainWindow();
            mainWindow.Show();
        };
        application.Run();
    }

    private static void RunMvc(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);
        builder.WebHost.UsePipeIpcServer("PipeMvcServerDemo");
        builder.Services.AddControllers();
        builder.Services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.AddProvider(new DemoLogProvider());
        });
        var app = builder.Build();
        app.MapControllers();
        app.Run();
    }

    class DemoLogProvider : ILoggerProvider
    {
        public ILogger CreateLogger(string categoryName)
        {
            return new DemoLogger();
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }

        class DemoLogger : ILogger
        {
            public IDisposable BeginScope<TState>(TState state)
            {
                return new Empty();
            }

            class Empty : IDisposable
            {
                /// <inheritdoc />
                public void Dispose()
                {
                }
            }

            public bool IsEnabled(LogLevel logLevel)
            {
                return true;
            }

            public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
            {
                var message =
                        $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}][{logLevel}][EventId={eventId.Id}:{eventId.Name}] {formatter(state, exception)}";
                Application.Current?.Dispatcher.InvokeAsync(() =>
                {
                    var mainWindow = (MainWindow) Application.Current.MainWindow;
                    mainWindow.Log(message);
                });
            }
        }
    }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/Properties/launchSettings.json
================================================
{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:8638",
      "sslPort": 0
    }
  },
  "profiles": {
    "PipeMvcServerDemo": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:5035",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/appsettings.Development.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}


================================================
FILE: demo/PipeMvc/PipeMvcServerDemo/appsettings.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}


================================================
FILE: demo/UnoDemo/IpcUno/.editorconfig
================================================
; This file is for unifying the coding style for different editors and IDEs.
; More information at http://editorconfig.org

# This file is the top-most EditorConfig file
root = true

##########################################
# Common Settings
##########################################

[*]
indent_style = space
end_of_line = crlf
trim_trailing_whitespace = true
insert_final_newline = true
charset = utf-8

##########################################
# File Extension Settings
##########################################

[*.{yml,yaml}]
indent_size = 2

[.vsconfig]
indent_size = 2
end_of_line = lf

[*.sln]
indent_style = tab
indent_size = 2

[*.{csproj,proj,projitems,shproj}]
indent_size = 2

[*.{json,slnf}]
indent_size = 2
end_of_line = lf

[*.{props,targets}]
indent_size = 2

[*.xaml]
indent_size = 2
charset = utf-8-bom

[*.xml]
indent_size = 2
end_of_line = lf

[*.plist]
indent_size = 2
indent_style = tab
end_of_line = lf

[*.manifest]
indent_size = 2

[*.appxmanifest]
indent_size = 2

[*.{json,css,webmanifest}]
indent_size = 2
end_of_line = lf

[web.config]
indent_size = 2
end_of_line = lf

[*.sh]
indent_size = 2
end_of_line = lf

[*.cs]
# EOL should be normalized by Git. See https://github.com/dotnet/format/issues/1099
end_of_line = unset

# See https://github.com/dotnet/roslyn/issues/20356#issuecomment-310143926
trim_trailing_whitespace = false

tab_width = 4
indent_size = 4

# Sort using and Import directives with System.* appearing first
dotnet_sort_system_directives_first = true

# Avoid "this." and "Me." if not necessary
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion

#### Naming styles ####

# Naming rules

dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case

# Symbol specifications

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =

dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.non_field_members.required_modifiers =

# Naming styles

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_coalesce_expression = true:suggestion
dotnet_style_null_propagation = true:suggestion
dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
dotnet_style_prefer_auto_properties = true:silent
dotnet_style_object_initializer = true:suggestion
dotnet_style_collection_initializer = true:suggestion
dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
dotnet_style_prefer_conditional_expression_over_assignment = true:silent
dotnet_style_prefer_conditional_expression_over_return = true:silent
dotnet_style_explicit_tuple_names = true:suggestion
dotnet_style_prefer_inferred_tuple_names = true:suggestion

csharp_indent_labels = one_less_than_current
csharp_using_directive_placement = outside_namespace:silent
csharp_prefer_simple_using_statement = true:suggestion
csharp_prefer_braces = true:silent
csharp_style_namespace_declarations = block_scoped:silent
csharp_style_prefer_method_group_conversion = true:silent
csharp_style_prefer_top_level_statements = true:silent
csharp_style_prefer_primary_constructors = true:suggestion
csharp_style_expression_bodied_methods = false:silent
csharp_style_expression_bodied_constructors = false:silent
csharp_style_expression_bodied_operators = false:silent
csharp_style_expression_bodied_properties = true:silent
csharp_style_expression_bodied_indexers = true:silent
csharp_style_expression_bodied_accessors = true:silent
csharp_style_expression_bodied_lambdas = true:silent
csharp_style_expression_bodied_local_functions = false:silent


================================================
FILE: demo/UnoDemo/IpcUno/.gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Mono auto generated files
mono_crash.*

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# ASP.NET Scaffolding
ScaffoldingReadMe.txt

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.tlog
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp

# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp

# Visual Studio 6 technical files
*.ncb
*.aps

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# Visual Studio History (VSHistory) files
.vshistory/

# BeatPulse healthcheck temp database
healthchecksdb

# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd

# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# Local History for Visual Studio Code
.history/

# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp

# JetBrains Rider
*.sln.iml

# Single Target Config
solution-config.props
# Windows Publish Profiles
!**/*.Windows/Properties/PublishProfiles/*.pubxml

================================================
FILE: demo/UnoDemo/IpcUno/.vsconfig
================================================
{
  "version": "1.0",
  "components": [
    "Microsoft.VisualStudio.Component.CoreEditor",
    "Microsoft.VisualStudio.Workload.CoreEditor",
    "Microsoft.NetCore.Component.SDK",
    "Microsoft.NetCore.Component.DevelopmentTools",
    "Microsoft.Net.ComponentGroup.DevelopmentPrerequisites",
    "Microsoft.VisualStudio.Component.TextTemplating",
    "Microsoft.VisualStudio.Component.Windows10SDK.19041",
    "Microsoft.VisualStudio.ComponentGroup.MSIX.Packaging",
    "Microsoft.VisualStudio.Component.ManagedDesktop.Prerequisites",
    "Microsoft.VisualStudio.Component.Debugger.JustInTime",
    "Microsoft.VisualStudio.Workload.ManagedDesktop",
    "Microsoft.Component.NetFX.Native",
    "Microsoft.VisualStudio.Component.Graphics",
    "Microsoft.VisualStudio.Component.Merq",
    "Microsoft.VisualStudio.Workload.NetCrossPlat",
    "Microsoft.VisualStudio.Workload.NetCoreTools"
  ]
}


================================================
FILE: demo/UnoDemo/IpcUno/Directory.Build.props
================================================
<Project>

  <!--
    If working on a single target framework, copy solution-config.props.sample to solution-config.props
    and uncomment the appropriate lines in solution-config.props to build for the desired platforms only.

    https://platform.uno/docs/articles/guides/solution-building-single-targetframework.html
  -->
  <Import Project="solution-config.props" Condition="exists('solution-config.props')" />


  <PropertyGroup>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <DebugType>portable</DebugType>
    <DebugSymbols>True</DebugSymbols>

    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>

    <!--
      Adding NoWarn to remove build warnings
      NU1507: Warning when there are multiple package sources when using CPM with no source mapping
      NETSDK1201: Warning that specifying RID won't create self containing app
      NETSDK1023:	Microsoft.Maui.Graphics reference required to avoid build error causes warning because it's already implicitly referenced by Maui SDK
      PRI257: Ignore default language (en) not being one of the included resources (eg en-us, en-uk)
      CA1416: 平台调用,本文就是平台调用,可以忽略此问题
    -->
    <NoWarn>$(NoWarn);NU1507;NETSDK1201;NETSDK1023;PRI257;CA1416;IDE0090</NoWarn>

    <DefaultLanguage>en</DefaultLanguage>

    <IsAndroid>false</IsAndroid>
    <IsIOS>false</IsIOS>
    <IsMac>false</IsMac>
    <IsMacCatalyst>false</IsMacCatalyst>
    <IsWinAppSdk>false</IsWinAppSdk>

    <MauiVersion Condition=" '$(MauiVersion)' == '' ">8.0.0-rc.2.9373</MauiVersion>
    <AndroidMaterialVersion  Condition=" '$(AndroidMaterialVersion)' == '' ">1.10.0.1</AndroidMaterialVersion>
    <AndroidXNavigationVersion  Condition=" '$(AndroidXNavigationVersion)' == '' ">2.6.0.1</AndroidXNavigationVersion>
    <AndroidXCollectionVersion  Condition=" '$(AndroidXCollectionVersion)' == '' ">1.3.0.1</AndroidXCollectionVersion>

    <!-- Required for Hot Reload (See https://github.com/unoplatform/uno.templates/issues/376) -->
    <GenerateAssemblyInfo Condition="'$(Configuration)'=='Debug'">false</GenerateAssemblyInfo>
  </PropertyGroup>

  <Choose>
    <When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">
      <PropertyGroup>
        <IsAndroid>true</IsAndroid>
        <SupportedOSPlatformVersion>21.0</SupportedOSPlatformVersion>
      </PropertyGroup>
    </When>
    <When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
      <PropertyGroup>
        <IsIOS>true</IsIOS>
        <SupportedOSPlatformVersion>14.2</SupportedOSPlatformVersion>
      </PropertyGroup>
    </When>
    <When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'macos'">
      <PropertyGroup>
        <IsMac>true</IsMac>
        <SupportedOSPlatformVersion>10.14</SupportedOSPlatformVersion>
      </PropertyGroup>
    </When>
    <When Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">
      <PropertyGroup>
        <IsMacCatalyst>true</IsMacCatalyst>
        <SupportedOSPlatformVersion>14.0</SupportedOSPlatformVersion>
      </PropertyGroup>
    </When>
    <When Condition="$(TargetFramework.Contains('windows10'))">
      <PropertyGroup>
        <IsWinAppSdk>true</IsWinAppSdk>
        <SupportedOSPlatformVersion>10.0.18362.0</SupportedOSPlatformVersion>
        <TargetPlatformMinVersion>10.0.18362.0</TargetPlatformMinVersion>
        <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
        <EnableCoreMrtTooling Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">false</EnableCoreMrtTooling>
      </PropertyGroup>
    </When>
  </Choose>

</Project>


================================================
FILE: demo/UnoDemo/IpcUno/Directory.Build.targets
================================================
<Project>
  <ItemGroup>
    <!-- Removes native usings to avoid Ambiguous reference -->
    <Using Remove="@(Using->HasMetadata('Platform'))" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/Directory.Packages.props
================================================
<Project ToolsVersion="15.0">
  <ItemGroup>
    <PackageVersion Include="CommunityToolkit.Mvvm" Version="8.2.1" />
    <PackageVersion Include="dotnetCampus.Ipc" Version="2.0.0-alpha409" />
    <PackageVersion Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
    <PackageVersion Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
    <PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="8.0.0-rc.2.23479.6" />
    <PackageVersion Include="coverlet.collector" Version="6.0.0" />
    <PackageVersion Include="FluentAssertions" Version="6.12.0" />
    <PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.7.2" />
    <PackageVersion Include="NUnit" Version="3.13.3" />
    <PackageVersion Include="NUnit3TestAdapter" Version="4.5.0" />
    <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageVersion Include="SkiaSharp.Skottie" Version="2.88.6" />
    <PackageVersion Include="SkiaSharp.Views.Uno.WinUI" Version="2.88.6" />
    <PackageVersion Include="Uno.Core.Extensions.Logging.Singleton" Version="4.0.1" />
    <PackageVersion Include="Uno.Extensions.Core.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Configuration" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Hosting" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Hosting.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Logging.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Maui.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Navigation" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Navigation.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Extensions.Navigation.Toolkit.WinUI" Version="3.0.11" />
    <PackageVersion Include="Uno.Material.WinUI" Version="4.0.6" />
    <PackageVersion Include="Uno.Toolkit.WinUI" Version="5.0.17" />
    <PackageVersion Include="Uno.Toolkit.WinUI.Material" Version="5.0.17" />
    <PackageVersion Include="Uno.Resizetizer" Version="1.2.0" />
    <PackageVersion Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" Version="5.0.41" />
    <PackageVersion Include="Uno.UniversalImageLoader" Version="1.9.36" />
    <PackageVersion Include="Uno.WinUI" Version="5.0.41" />
    <PackageVersion Include="Uno.WinUI.Lottie" Version="5.0.41" />
    <PackageVersion Include="Uno.WinUI.DevServer" Version="5.0.41" />
    <PackageVersion Include="Uno.WinUI.Skia.Gtk" Version="5.0.41" />
    <PackageVersion Include="Uno.WinUI.Skia.Wpf" Version="5.0.41" />
    <PackageVersion Include="Uno.UITest.Helpers" Version="1.1.0-dev.70" />
    <PackageVersion Include="Xamarin.UITest" Version="4.3.0" />
  </ItemGroup>
</Project>

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/App.cs
================================================
namespace IpcUno
{
    public class App : EmbeddingApplication
    {
        public Microsoft.UI.Dispatching.DispatcherQueue Dispatcher { private set; get; } = null!;
        protected Window? MainWindow { get; private set; }
        protected IHost? Host { get; private set; }

        protected async override void OnLaunched(LaunchActivatedEventArgs args)
        {
            var builder = this.CreateBuilder(args)
                // Add navigation support for toolkit controls such as TabBar and NavigationView
                .UseToolkitNavigation()
#if MAUI_EMBEDDING
            .UseMauiEmbedding<MauiControls.App>(maui => maui
                .UseMauiControls())
#endif
                .Configure(host => host
#if DEBUG
                // Switch to Development environment when running in DEBUG
                .UseEnvironment(Environments.Development)
#endif
                    .UseLogging(configure: (context, logBuilder) =>
                    {
                        // Configure log levels for different categories of logging
                        logBuilder
                            .SetMinimumLevel(
                                context.HostingEnvironment.IsDevelopment() ?
                                    LogLevel.Information :
                                    LogLevel.Warning)

                            // Default filters for core Uno Platform namespaces
                            .CoreLogLevel(LogLevel.Warning);

                        // Uno Platform namespace filter groups
                        // Uncomment individual methods to see more detailed logging
                        //// Generic Xaml events
                        //logBuilder.XamlLogLevel(LogLevel.Debug);
                        //// Layout specific messages
                        //logBuilder.XamlLayoutLogLevel(LogLevel.Debug);
                        //// Storage messages
                        //logBuilder.StorageLogLevel(LogLevel.Debug);
                        //// Binding related messages
                        //logBuilder.XamlBindingLogLevel(LogLevel.Debug);
                        //// Binder memory references tracking
                        //logBuilder.BinderMemoryReferenceLogLevel(LogLevel.Debug);
                        //// DevServer and HotReload related
                        //logBuilder.HotReloadCoreLogLevel(LogLevel.Information);
                        //// Debug JS interop
                        //logBuilder.WebAssemblyLogLevel(LogLevel.Debug);

                    }, enableUnoLogging: true)
                    .UseConfiguration(configure: configBuilder =>
                        configBuilder
                            .EmbeddedSource<App>()
                            .Section<AppConfig>()
                    )
                    .ConfigureServices((context, services) =>
                    {
                        // TODO: Register your services
                        //services.AddSingleton<IMyService, MyService>();
                    })
                    .UseNavigation(RegisterRoutes)
                );
            MainWindow = builder.Window;

#if DEBUG
            MainWindow.EnableHotReload();
#endif

            Dispatcher = MainWindow.DispatcherQueue;
            Host = await builder.NavigateAsync<Shell>();
        }

        private static void RegisterRoutes(IViewRegistry views, IRouteRegistry routes)
        {
            views.Register(
                new ViewMap(ViewModel: typeof(ShellViewModel)),
                new ViewMap<ServerPage, ServerViewModel>(),
                new DataViewMap<MainPage, MainViewModel, IpcServerEntity>(),
                new DataViewMap<SecondPage, SecondViewModel, Entity>()
            );

            routes.Register(
                new RouteMap("", View: views.FindByViewModel<ShellViewModel>(),
                    Nested: new RouteMap[]
                    {
                    new RouteMap("Main", View: views.FindByViewModel<MainViewModel>()),
                    new RouteMap("Second", View: views.FindByViewModel<SecondViewModel>()),
                    }
                )
            );
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/AppResources.xaml
================================================
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <ResourceDictionary.MergedDictionaries>
    <!-- Load WinUI resources -->
    <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
    <MaterialToolkitTheme xmlns="using:Uno.Toolkit.UI.Material"
      ColorOverrideSource="ms-appx:///IpcUno/Styles/ColorPaletteOverride.xaml"
      FontOverrideSource="ms-appx:///IpcUno/Styles/MaterialFontsOverride.xaml" />

  </ResourceDictionary.MergedDictionaries>
  <!-- Add resources here -->
  <Style TargetType="TextBlock">
    <Setter Property="FontFamily" Value="Microsoft YaHei UI"/>
  </Style>
  <Style TargetType="Button">
    <Setter Property="FontFamily" Value="Microsoft YaHei UI"/>
  </Style>

</ResourceDictionary>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Assets/SharedAssets.md
================================================
# Shared Assets

See documentation about assets here: https://github.com/unoplatform/uno/blob/master/doc/articles/features/working-with-assets.md

## Here is a cheat sheet

1. Add the image file to the `Assets` directory of a shared project.
2. Set the build action to `Content`.
3. (Recommended) Provide an asset for various scales/dpi

### Examples

```text
\Assets\Images\logo.scale-100.png
\Assets\Images\logo.scale-200.png
\Assets\Images\logo.scale-400.png

\Assets\Images\scale-100\logo.png
\Assets\Images\scale-200\logo.png
\Assets\Images\scale-400\logo.png
```

### Table of scales

| Scale | WinUI       | iOS/MacCatalyst | Android |
|-------|:-----------:|:---------------:|:-------:|
| `100` | scale-100   | @1x             | mdpi    |
| `125` | scale-125   | N/A             | N/A     |
| `150` | scale-150   | N/A             | hdpi    |
| `200` | scale-200   | @2x             | xhdpi   |
| `300` | scale-300   | @3x             | xxhdpi  |
| `400` | scale-400   | N/A             | xxxhdpi |


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/AppConfig.cs
================================================
namespace IpcUno.Business.Models
{
    public record AppConfig
    {
        public string? Environment { get; init; }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/ConnectedPeerModel.cs
================================================
using System.Collections.ObjectModel;

using dotnetCampus.Ipc.Context;
using dotnetCampus.Ipc.Messages;
using dotnetCampus.Ipc.Pipes;

using Windows.ApplicationModel.Core;
using Windows.UI.Core;

namespace IpcUno.Business.Models
{
    public class ConnectedPeerModel
    {
        public ConnectedPeerModel()
        {
            Peer = null!;
        }

        public ConnectedPeerModel(PeerProxy peer)
        {
            Peer = peer;
            peer.MessageReceived += Peer_MessageReceived;
        }

        private void Peer_MessageReceived(object? sender, IPeerMessageArgs e)
        {
            var streamReader = new StreamReader(e.Message.Body.ToMemoryStream());
            var message = streamReader.ReadToEnd();

            _ = CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
            {
                AddMessage(PeerName, message);
            });
        }

        public void AddMessage(string name, string message)
        {
            MessageList.Add($"{name} {DateTime.Now:yyyy/MM/dd hh:mm:ss.fff}:\r\n{message}");
        }

        public ObservableCollection<string> MessageList { get; } = new ObservableCollection<string>();

        public PeerProxy Peer { get; }

        public string PeerName => Peer.PeerName;
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/Entity.cs
================================================
namespace IpcUno.Business.Models
{
    public record Entity(string Name);
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/IpcServerEntity.cs
================================================
namespace IpcUno.Business.Models
{
    public record IpcServerEntity(string Name);
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/GlobalSuppressions.cs
================================================
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("Interoperability", "CA1416:验证平台兼容性", Justification = "<挂起>")]



================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/GlobalUsings.cs
================================================
global using System.Collections.Immutable;
global using System.Windows.Input;

global using Microsoft.Extensions.DependencyInjection;

global using Windows.Networking.Connectivity;
global using Windows.Storage;

global using Microsoft.Extensions.Hosting;
global using Microsoft.Extensions.Logging;
global using Microsoft.UI.Xaml;
global using Microsoft.UI.Xaml.Controls;
global using Microsoft.UI.Xaml.Media;
global using Microsoft.UI.Xaml.Navigation;
global using Microsoft.Extensions.Options;

global using IpcUno.Business.Models;
global using IpcUno.Presentation;

#if MAUI_EMBEDDING
global using IpcUno.MauiControls;
#endif
global using Uno.UI;

global using Windows.ApplicationModel;

global using ApplicationExecutionState = Windows.ApplicationModel.Activation.ApplicationExecutionState;

global using CommunityToolkit.Mvvm.ComponentModel;
global using CommunityToolkit.Mvvm.Input;


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/IpcUno.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) or '$(EnableWindowsTargeting)' == 'true'">$(TargetFrameworks);net8.0-windows10.0.19041</TargetFrameworks>
    <TargetFrameworks>$(TargetFrameworks);net8.0;</TargetFrameworks>
    <TargetFrameworks Condition="'$(OverrideTargetFrameworks)'!=''">$(OverrideTargetFrameworks)</TargetFrameworks>

    <!-- Ensures the .xr.xml files are generated in a proper layout folder -->
    <GenerateLibraryLayout>true</GenerateLibraryLayout>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="dotnetCampus.Ipc" />
    <PackageReference Include="Uno.WinUI" />
    <PackageReference Include="Uno.Resizetizer" />
    <PackageReference Include="CommunityToolkit.Mvvm" />
    <PackageReference Include="Uno.Extensions.Configuration" />
    <PackageReference Include="Uno.Extensions.Logging.WinUI" />
    <PackageReference Include="Uno.Extensions.Maui.WinUI" />
    <PackageReference Include="Uno.Material.WinUI" />
    <PackageReference Include="Uno.Toolkit.WinUI.Material" />
    <PackageReference Include="Uno.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Core.WinUI" />
    <PackageReference Include="Uno.Extensions.Hosting.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.WinUI" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" />
    <PackageReference Include="Microsoft.Maui.Controls" />
    <PackageReference Include="Microsoft.Maui.Controls.Compatibility" />
  </ItemGroup>

  <ItemGroup Condition="$(IsAndroid)">
    <PackageReference Include="Xamarin.Google.Android.Material" VersionOverride="$(AndroidMaterialVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Navigation.UI" VersionOverride="$(AndroidXNavigationVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Navigation.Fragment" VersionOverride="$(AndroidXNavigationVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Navigation.Runtime" VersionOverride="$(AndroidXNavigationVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Navigation.Common" VersionOverride="$(AndroidXNavigationVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Collection" VersionOverride="$(AndroidXCollectionVersion)" />
    <PackageReference Include="Xamarin.AndroidX.Collection.Ktx" VersionOverride="$(AndroidXCollectionVersion)" />    
  </ItemGroup>

  <Choose>
    <When Condition="$(IsWinAppSdk)">
      <PropertyGroup>
        <!--
        If you encounter this error message:

          error NETSDK1148: A referenced assembly was compiled using a newer version of Microsoft.Windows.SDK.NET.dll.
          Please update to a newer .NET SDK in order to reference this assembly.

        This means that the two packages below must be aligned with the "build" version number of
        the "Microsoft.Windows.SDK.BuildTools" package above, and the "revision" version number
        must be the highest found in https://www.nuget.org/packages/Microsoft.Windows.SDK.NET.Ref.
        -->
        <!-- <WindowsSdkPackageVersion>10.0.22621.28</WindowsSdkPackageVersion> -->
      </PropertyGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <PackageReference Include="Uno.WinUI.Lottie" />
        <PackageReference Include="Uno.WinUI.DevServer" Condition="'$(Configuration)'=='Debug'" />

        <!-- Include all images by default - matches the __WindowsAppSdkDefaultImageIncludes property in the WindowsAppSDK -->
        <Content Include="Assets\**;**/*.png;**/*.bmp;**/*.jpg;**/*.dds;**/*.tif;**/*.tga;**/*.gif" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);**\*.svg" />
        <Page Include="**\*.xaml" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
        <Compile Update="**\*.xaml.cs">
          <DependentUpon>%(Filename)</DependentUpon>
        </Compile>
        <PRIResource Include="**\*.resw" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
      </ItemGroup>
    </Otherwise>
  </Choose>

  <ItemGroup>
    <ProjectReference Include="..\IpcUno.MauiControls\IpcUno.MauiControls.csproj" />
  </ItemGroup>

  <ItemGroup>
    <UnoImage Include="Assets\**\*.svg" />
    <EmbeddedResource Include="appsettings.json" />
    <EmbeddedResource Include="appsettings.*.json" DependentUpon="appsettings.json" />
    <UpToDateCheckInput Include="**\*.xaml" Exclude="bin\**\*.xaml;obj\**\*.xaml" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/AddConnectPage.xaml
================================================
<Page x:Class="IpcUno.Presentation.AddConnectPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:uen="using:Uno.Extensions.Navigation.UI"
      xmlns:utu="using:Uno.Toolkit.UI"
      xmlns:um="using:Uno.Material"
      Background="{ThemeResource BackgroundBrush}">

  <Grid>
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
      <StackPanel>
        <TextBlock HorizontalAlignment="Center" FontSize="100">添加设备</TextBlock>

        <Grid Margin="10,10,10,10">
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
          </Grid.ColumnDefinitions>
          <TextBlock FontSize="30" Text="服务器名:" VerticalAlignment="Center"></TextBlock>
          <TextBox x:Name="ServerNameTextBox" Grid.Column="1" FontSize="30"></TextBox>
        </Grid>
        <Grid >
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
          </Grid.ColumnDefinitions>
          <Button Margin="10,10,10,10" Content="连接现有服务" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Click="ConnectServerButton_OnClick"></Button>
          <Button Grid.Column="1" Margin="10,10,10,10" IsEnabled="false" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="启动新服务" Click="StartServerButton_OnClick"></Button>
        </Grid>
      </StackPanel>
    </Grid>
  </Grid>
</Page>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/AddConnectPage.xaml.cs
================================================
namespace IpcUno.Presentation
{
    public sealed partial class AddConnectPage : Page
    {
        public AddConnectPage()
        {
            this.InitializeComponent();
        }

        private void ConnectServerButton_OnClick(object sender, RoutedEventArgs e)
        {
            ServerConnecting?.Invoke(this, ServerNameTextBox.Text);
        }

        private void StartServerButton_OnClick(object sender, RoutedEventArgs e)
        {
            ServerStarting?.Invoke(this, ServerNameTextBox.Text);
            BuildServerName();
        }

        private void BuildServerName()
        {
            ServerNameTextBox.Text = System.IO.Path.GetRandomFileName();
        }

        public event EventHandler<string>? ServerConnecting;

        public event EventHandler<string>? ServerStarting;
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ChatPage.xaml
================================================
<Page x:Class="IpcUno.Presentation.ChatPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:model="using:IpcUno.Business.Models"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:uen="using:Uno.Extensions.Navigation.UI"
      xmlns:utu="using:Uno.Toolkit.UI"
      xmlns:um="using:Uno.Material"
      Background="Transparent" >

  <Grid utu:SafeArea.Insets="VisibleBounds">
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition />
        <RowDefinition Height="Auto" />
        <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
      <TextBlock Margin="10,10,10,10" Text="{Binding Path=PeerName}" />
      <ListView x:Name="MessageListView" Grid.Row="1" ItemsSource="{Binding Path=MessageList}" Background="White">
        <ListView.ItemTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding}" TextWrapping="Wrap" Margin="5 0 0 0"/>
          </DataTemplate>
        </ListView.ItemTemplate>
      </ListView>
      <TextBox x:Name="MessageTextBox" Grid.Row="2" Margin="10,10,10,10"
          Height="100" FontFamily="Microsoft YaHei UI" TextWrapping="Wrap" AcceptsReturn="True" VerticalContentAlignment="Top"/>
      <Button Grid.Row="3" Margin="10,0,10,10" HorizontalAlignment="Right" Content="Send" Click="SendButton_OnClick" />
    </Grid>
  </Grid>
</Page>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ChatPage.xaml.cs
================================================
using System.Reflection;
using System.Text;

using IpcUno.Utils;

namespace IpcUno.Presentation
{
    public sealed partial class ChatPage : Page
    {
        public ChatPage(ConnectedPeerModel model, string serverName)
        {
            DataContext = model;
            this.InitializeComponent();
            Model = model;
            ServerName = serverName;

            Loaded += ChatPage_Loaded;
        }

        private void ChatPage_Loaded(object sender, RoutedEventArgs e)
        {
            MessageListView.ScrollToBottom();

            // 有消息过来,自动滚动到最下
            Model.MessageList.CollectionChanged += (o, args) =>
            {
                _ = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, () =>
                 {
                     MessageListView.ScrollToBottom();
                 });
            };
        }

        public string ServerName { get; }

        public ConnectedPeerModel Model { get; }

        private async void SendButton_OnClick(object sender, RoutedEventArgs e)
        {
            Model.AddMessage(ServerName, MessageTextBox.Text);
            await Model.Peer.NotifyAsync(new dotnetCampus.Ipc.Messages.IpcMessage("CharPage", Encoding.UTF8.GetBytes(MessageTextBox.Text)));
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/MainPage.xaml
================================================
<Page x:Class="IpcUno.Presentation.MainPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:model="using:IpcUno.Business.Models"
      xmlns:uen="using:Uno.Extensions.Navigation.UI"
      xmlns:utu="using:Uno.Toolkit.UI"
      xmlns:um="using:Uno.Material"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:maui="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:not_maui="http://notmaui"
      mc:Ignorable="d not_maui"
      xmlns:controls="using:IpcUno.MauiControls"
      NavigationCacheMode="Required"
      Background="{ThemeResource BackgroundBrush}"
      d:DataContext="{d:DesignInstance local:MainViewModel}">

  <Grid utu:SafeArea.Insets="VisibleBounds">
    <Grid x:Name="MainGrid">
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
      </Grid.RowDefinitions>
      <Grid x:Name="HeaderGrid">
        <!--上方标题,写明当前的服务器名-->
        <Grid Margin="10,10,10,10">
          <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
          </Grid.ColumnDefinitions>
          <TextBlock VerticalAlignment="Center" Text="本服务器名:"></TextBlock>
          <TextBox x:Name="ServerNameTextBox" Grid.Column="1" Style="{x:Null}" IsReadOnly="True" MaxWidth="300" HorizontalAlignment="Left" Height="10" MaxHeight="30"
                   BorderThickness="0" Background="Transparent"
                   VerticalContentAlignment="Center" Text="{Binding CurrentServerName}"></TextBox>
        </Grid>
      </Grid>
      <Grid Grid.Row="1">
        <!--下方,左侧写明列表,右侧进行通讯-->
        <Grid.ColumnDefinitions>
          <ColumnDefinition Width="200"></ColumnDefinition>
          <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid>
          <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
          </Grid.RowDefinitions>
          <ListView x:Name="ConnectedPeerListView" BorderThickness="1" BorderBrush="Gray" ItemsSource="{Binding ConnectedPeerModelList}" SelectionChanged="ConnectedPeerListView_SelectionChanged">
            <ListView.ItemTemplate>
              <DataTemplate x:DataType="model:ConnectedPeerModel">
                <TextBlock Margin="5 0 0 0" Text="{Binding Path=PeerName}"></TextBlock>
              </DataTemplate>
            </ListView.ItemTemplate>
          </ListView>
          <Button x:Name="AddConnectButton" Grid.Row="1" Margin="10,10,10,10" Content="+"
                  HorizontalAlignment="Stretch" Click="AddConnectButton_Click"></Button>
        </Grid>
        <Grid Grid.Column="1">
          <Grid.RowDefinitions>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="200"></RowDefinition>
          </Grid.RowDefinitions>
          <Grid>
            <Border Background="#A6A6A6"></Border>
            <ContentControl x:Name="MainPanelContentControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                            HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"></ContentControl>
          </Grid>
          <Grid Grid.Row="1" Margin="10,10,10,10">
            <TextBox x:Name="LogTextBox" FontFamily="Microsoft YaHei UI" TextWrapping="Wrap" IsReadOnly="true" AcceptsReturn="True" VerticalContentAlignment="Top"></TextBox>
          </Grid>
        </Grid>
      </Grid>
    </Grid>
  </Grid>
</Page>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/MainPage.xaml.cs
================================================
using System.Diagnostics;

using IpcUno.Utils;

namespace IpcUno.Presentation
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            DataContextChanged += MainPage_DataContextChanged;
            Loaded += MainPage_Loaded;
        }

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            ShowAddConnectPage();
        }

        private void MainPage_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)
        {
            // 在这个时机可以拿到 ViewModel 对象
            ViewModel.AddedLogMessage += ViewModel_AddedLogMessage;
        }

        private void ViewModel_AddedLogMessage(object? sender, string message)
        {
            // 收到日志
            LogTextBox.Text += $"{DateTime.Now:hh:mm:ss,fff} {message}\r\n";
            // 延迟一下,防止界面还没刷新就执行滚动
            _ = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low, () =>
            {
                LogTextBox.ScrollToBottom();
            });
        }

        public MainViewModel ViewModel => (MainViewModel) DataContext;

        private void ConnectedPeerListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count == 1)
            {
                var connectedPeerModel = (ConnectedPeerModel) e.AddedItems[0]!;
                MainPanelContentControl.Content = new ChatPage(connectedPeerModel, ViewModel.CurrentServerName);
            }
        }

        private void AddConnectButton_Click(object sender, RoutedEventArgs e)
        {
            ShowAddConnectPage();
        }

        private void ShowAddConnectPage()
        {
            ConnectedPeerListView.SelectedItem = null;

            AddConnectPage addConnectPage = new AddConnectPage();
            addConnectPage.ServerConnecting += async (s, e) =>
            {
                var serverName = e;
                await ViewModel.ConnectAsync(serverName);

                ConnectedPeerListView.SelectedItem = ViewModel.ConnectedPeerModelList.FirstOrDefault(t => t.PeerName == serverName);
            };

            MainPanelContentControl.Content = addConnectPage;
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/MainViewModel.cs
================================================
using System.Collections.ObjectModel;

using dotnetCampus.Ipc.Context;
using dotnetCampus.Ipc.Pipes;

using Microsoft.UI.Dispatching;

using Windows.ApplicationModel.Core;
using Windows.UI.Core;

namespace IpcUno.Presentation
{
    public partial class MainViewModel : ObservableObject, IInjectable<IServiceProvider>
    {
        [ObservableProperty]
        private string _currentServerName = "dotnet_campus";
        private readonly IpcProvider _ipcProvider;

        public ObservableCollection<ConnectedPeerModel> ConnectedPeerModelList { get; } = new ObservableCollection<ConnectedPeerModel>();

        public MainViewModel(IpcServerEntity entity)
        {
            _currentServerName = entity.Name;
            _ipcProvider = new IpcProvider(_currentServerName);
            _ipcProvider.PeerConnected += IpcProvider_PeerConnected;
            _ipcProvider.StartServer();
        }

        private void IpcProvider_PeerConnected(object? sender, dotnetCampus.Ipc.Context.PeerConnectedArgs e)
        {
            Log($"[被动连接] {e.Peer.PeerName}");
            _ = AddPeer(e.Peer);
        }

        private async Task AddPeer(PeerProxy peer)
        {
            //var dispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread(); // WinUI: null
            //var currentView = CoreApplication.GetCurrentView();// WinUI: System.Runtime.InteropServices.COMException:“Element not found.
            //var dispatcher = ((IpcUno.App) IpcUno.App.Current).Dispatcher;
            //await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            //{
            //    var currentPeer = ConnectedPeerModelList.FirstOrDefault(temp => temp.PeerName == peer.PeerName);
            //    if (currentPeer != null)
            //    {
            //        currentPeer.Peer.PeerConnectionBroken -= Peer_PeerConnectBroke;
            //        ConnectedPeerModelList.Remove(currentPeer);
            //    }

            //    ConnectedPeerModelList.Add(new ConnectedPeerModel(peer));

            //    peer.PeerConnectionBroken += Peer_PeerConnectBroke;
            //});

            var dispatcher = ((IpcUno.App) IpcUno.App.Current).Dispatcher;
            TaskCompletionSource source = new();
            dispatcher.TryEnqueue(() =>
            {
                var currentPeer = ConnectedPeerModelList.FirstOrDefault(temp => temp.PeerName == peer.PeerName);
                if (currentPeer != null)
                {
                    currentPeer.Peer.PeerConnectionBroken -= Peer_PeerConnectBroke;
                    ConnectedPeerModelList.Remove(currentPeer);
                }

                ConnectedPeerModelList.Add(new ConnectedPeerModel(peer));

                peer.PeerConnectionBroken += Peer_PeerConnectBroke;
                source.SetResult();
            });
            await source.Task;
        }

        private void Peer_PeerConnectBroke(object? sender, IPeerConnectionBrokenArgs e)
        {
            var peer = (PeerProxy) sender!;
            Log($"[连接断开] {peer.PeerName}");
        }

        private void Log(string message)
        {
            AddedLogMessage?.Invoke(this, message);
        }

        public event EventHandler<string>? AddedLogMessage;

        public void Inject(IServiceProvider entity)
        {
        }

        public async Task ConnectAsync(string serverName)
        {
            Log($"[开始连接] {serverName}");
            var peer = await _ipcProvider.GetAndConnectToPeerAsync(serverName).ConfigureAwait(false);
            await AddPeer(peer);
            Log($"[完成连接] {serverName}");
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondPage.xaml
================================================
<Page x:Class="IpcUno.Presentation.SecondPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:uen="using:Uno.Extensions.Navigation.UI"
      xmlns:utu="using:Uno.Toolkit.UI"
      xmlns:um="using:Uno.Material"
      Background="{ThemeResource BackgroundBrush}">

  <Grid utu:SafeArea.Insets="VisibleBounds">
  </Grid>
</Page>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondPage.xaml.cs
================================================
namespace IpcUno.Presentation
{
    public sealed partial class SecondPage : Page
    {
        public SecondPage()
        {
            this.InitializeComponent();
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondViewModel.cs
================================================
namespace IpcUno.Presentation
{
    public partial record SecondViewModel(Entity Entity)
    {
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerPage.xaml
================================================
<Page x:Class="IpcUno.Presentation.ServerPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:uen="using:Uno.Extensions.Navigation.UI"
      xmlns:utu="using:Uno.Toolkit.UI"
      xmlns:um="using:Uno.Material"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:maui="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:not_maui="http://notmaui"
      mc:Ignorable="d not_maui"
      xmlns:controls="using:IpcUno.MauiControls"
      NavigationCacheMode="Required"
      Background="{ThemeResource BackgroundBrush}"
      d:DataContext="{d:DesignInstance local:ServerPage}">

  <Grid utu:SafeArea.Insets="VisibleBounds">
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
      </Grid.RowDefinitions>
      <TextBlock Margin="10,10,2,10" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="60" 
                 Text="本地服务器名:"></TextBlock>
      <TextBox x:Name="ServerNameTextBox" Grid.Row="1" Margin="2,10,10,10" 
               HorizontalAlignment="Center" FontSize="50"
               FontFamily="Microsoft YaHei UI"
               Text="{Binding CurrentServerName,Mode=TwoWay}"></TextBox>
      <Button x:Name="StartServerButton"  Grid.Row="2" Margin="10,50,10,10" HorizontalAlignment="Center" Width="300" FontSize="50" 
              Content="启动服务器" Command="{Binding NavigateMainPageCommand}"></Button>
    </Grid>
  </Grid>
</Page>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerPage.xaml.cs
================================================
namespace IpcUno.Presentation
{
    public sealed partial class ServerPage : Page
    {
        public ServerPage()
        {
            this.InitializeComponent();            
        }

        public ServerViewModel ViewModel => (ServerViewModel) DataContext;
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerViewModel.cs
================================================
namespace IpcUno.Presentation
{
    public partial class ServerViewModel : ObservableObject
    {
        public ServerViewModel(INavigator navigator)
        {
            _navigator = navigator;
        }

        private readonly INavigator _navigator;

        [ObservableProperty]
        private string _currentServerName = "dotnet_campus";

        [RelayCommand]
        private void NavigateMainPage()
        {
            _ = _navigator.NavigateViewModelAsync<MainViewModel>(this, data: new IpcServerEntity(CurrentServerName));
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/Shell.xaml
================================================
<UserControl x:Class="IpcUno.Presentation.Shell"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:IpcUno.Presentation"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      xmlns:utu="using:Uno.Toolkit.UI"
      mc:Ignorable="d"
      d:DesignHeight="300"
      d:DesignWidth="400">
  <Border Background="{ThemeResource BackgroundBrush}">
    <utu:ExtendedSplashScreen x:Name="Splash"
                HorizontalAlignment="Stretch"
                VerticalAlignment="Stretch"
                HorizontalContentAlignment="Stretch"
                VerticalContentAlignment="Stretch">
      <utu:ExtendedSplashScreen.LoadingContentTemplate>
        <DataTemplate>
          <Grid>
            <Grid.RowDefinitions>
              <RowDefinition Height="2*" />
              <RowDefinition />
            </Grid.RowDefinitions>

            <ProgressRing IsActive="True"
                  Grid.Row="1"
                  VerticalAlignment="Center"
                  HorizontalAlignment="Center"
                  Height="100"
                  Width="100" />
          </Grid>
        </DataTemplate>
      </utu:ExtendedSplashScreen.LoadingContentTemplate>
    </utu:ExtendedSplashScreen>
  </Border>
</UserControl>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/Shell.xaml.cs
================================================
namespace IpcUno.Presentation
{
    public sealed partial class Shell : UserControl, IContentControlProvider
    {
        public Shell()
        {
            this.InitializeComponent();
        }
        public ContentControl ContentControl => Splash;
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ShellViewModel.cs
================================================
namespace IpcUno.Presentation
{
    public class ShellViewModel
    {
        private readonly INavigator _navigator;

        public ShellViewModel(
            INavigator navigator)
        {
            _navigator = navigator;
            _ = Start();
        }

        public async Task Start()
        {
            await _navigator.NavigateViewModelAsync<ServerViewModel>(this);
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Strings/en/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema

    Version 2.0

    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.

    Example:

    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>

    There are any number of "resheader" rows that contain simple
    name/value pairs.

    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.

    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:

    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.

    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="ApplicationName" xml:space="preserve">
    <value>IpcUno-en</value>
  </data>
</root>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Styles/ColorPaletteOverride.xaml
================================================
<!-- This file is generated by a tool from the file ColorPaletteOverride.zip - - YOU SHOULD NOT EDIT IT manually.-->
<ResourceDictionary xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light">
      <Color x:Key="PrimaryColor">#5946D2</Color>
      <Color x:Key="OnPrimaryColor">#FFFFFF</Color>
      <Color x:Key="PrimaryContainerColor">#E5DEFF</Color>
      <Color x:Key="OnPrimaryContainerColor">#170065</Color>
      <Color x:Key="SecondaryColor">#6B4EA2</Color>
      <Color x:Key="OnSecondaryColor">#FFFFFF</Color>
      <Color x:Key="SecondaryContainerColor">#EBDDFF</Color>
      <Color x:Key="OnSecondaryContainerColor">#220555</Color>
      <Color x:Key="TertiaryColor">#0061A4</Color>
      <Color x:Key="OnTertiaryColor">#FFFFFF</Color>
      <Color x:Key="TertiaryContainerColor">#CFE4FF</Color>
      <Color x:Key="OnTertiaryContainerColor">#001D36</Color>
      <Color x:Key="ErrorColor">#B3261E</Color>
      <Color x:Key="ErrorContainerColor">#F9DEDC</Color>
      <Color x:Key="OnErrorColor">#FFFFFF</Color>
      <Color x:Key="OnErrorContainerColor">#410E0B</Color>
      <Color x:Key="BackgroundColor">#FCFBFF</Color>
      <Color x:Key="OnBackgroundColor">#1C1B1F</Color>
      <Color x:Key="SurfaceColor">#FFFFFF</Color>
      <Color x:Key="OnSurfaceColor">#1C1B1F</Color>
      <Color x:Key="SurfaceVariantColor">#F2EFF5</Color>
      <Color x:Key="OnSurfaceVariantColor">#8B8494</Color>
      <Color x:Key="OutlineColor">#79747E</Color>
      <Color x:Key="OnSurfaceInverseColor">#F4EFF4</Color>
      <Color x:Key="SurfaceInverseColor">#313033</Color>
      <Color x:Key="PrimaryInverseColor">#C8BFFF</Color>
      <Color x:Key="SurfaceTintColor">#5946D2</Color>
      <Color x:Key="OutlineVariantColor">#C9C5D0</Color>
    </ResourceDictionary>
    <ResourceDictionary x:Key="Dark">
      <Color x:Key="PrimaryColor">#C7BFFF</Color>
      <Color x:Key="OnPrimaryColor">#2A009F</Color>
      <Color x:Key="PrimaryContainerColor">#4129BA</Color>
      <Color x:Key="OnPrimaryContainerColor">#E4DFFF</Color>
      <Color x:Key="SecondaryColor">#CDC2DC</Color>
      <Color x:Key="OnSecondaryColor">#332D41</Color>
      <Color x:Key="SecondaryContainerColor">#433C52</Color>
      <Color x:Key="OnSecondaryContainerColor">#EDDFFF</Color>
      <Color x:Key="TertiaryColor">#9FCAFF</Color>
      <Color x:Key="OnTertiaryColor">#003258</Color>
      <Color x:Key="TertiaryContainerColor">#00497D</Color>
      <Color x:Key="OnTertiaryContainerColor">#D1E4FF</Color>
      <Color x:Key="ErrorColor">#FFB4AB</Color>
      <Color x:Key="ErrorContainerColor">#93000A</Color>
      <Color x:Key="OnErrorColor">#690005</Color>
      <Color x:Key="OnErrorContainerColor">#FFDAD6</Color>
      <Color x:Key="BackgroundColor">#1C1B1F</Color>
      <Color x:Key="OnBackgroundColor">#E5E1E6</Color>
      <Color x:Key="SurfaceColor">#302D37</Color>
      <Color x:Key="OnSurfaceColor">#E6E1E5</Color>
      <Color x:Key="SurfaceVariantColor">#47464F</Color>
      <Color x:Key="OnSurfaceVariantColor">#C9C5D0</Color>
      <Color x:Key="OutlineColor">#928F99</Color>
      <Color x:Key="OnSurfaceInverseColor">#1C1B1F</Color>
      <Color x:Key="SurfaceInverseColor">#E6E1E5</Color>
      <Color x:Key="PrimaryInverseColor">#2A009F</Color>
      <Color x:Key="SurfaceTintColor">#C7BFFF</Color>
      <Color x:Key="OutlineVariantColor">#57545D</Color>
    </ResourceDictionary>
  </ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Styles/MaterialFontsOverride.xaml
================================================
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <FontFamily x:Key="MaterialLightFontFamily">ms-appx:///Uno.Fonts.Roboto/Fonts/Roboto-Light.ttf#Roboto</FontFamily>
  <FontFamily x:Key="MaterialMediumFontFamily">ms-appx:///Uno.Fonts.Roboto/Fonts/Roboto-Medium.ttf#Roboto</FontFamily>
  <FontFamily x:Key="MaterialRegularFontFamily">ms-appx:///Uno.Fonts.Roboto/Fonts/Roboto-Regular.ttf#Roboto</FontFamily>

</ResourceDictionary>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/ScrollViewerExtensions.cs
================================================
namespace IpcUno.Utils
{
    static class ScrollViewerExtensions
    {
        public static void ScrollToBottom(this TextBox textBox)
        {
            ScrollToBottomInner(textBox);
        }

        public static void ScrollToBottom(this ListView listView)
        {
            ScrollToBottomInner(listView);
        }

        private static void ScrollToBottomInner(UIElement element)
        {
            if (element.VisualDescendant<ScrollViewer>() is { } scrollViewer)
            {
                scrollViewer.ChangeView(0.0f, scrollViewer.ExtentHeight, 1.0f, true);
            }
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/TreeExtensions.cs
================================================
namespace IpcUno.Utils
{
    static class TreeExtensions
    {
        public static T? VisualDescendant<T>(this UIElement element) where T : DependencyObject
            => VisualDescendant<T>((DependencyObject) element);

        public static T? VisualDescendant<T>(DependencyObject element) where T : DependencyObject
        {
            if (element is T)
            {
                return (T) element;
            }

            T? foundElement = default;
            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
            {
                var child = VisualTreeHelper.GetChild(element, i);
                foundElement = VisualDescendant<T>(child);
                if (foundElement != null)
                {
                    break;
                }
            }

            return foundElement;
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/UISpyHelper.cs
================================================
using System.Diagnostics;

namespace IpcUno.Utils
{
    static class UISpyHelper
    {
        public static void Spy(this DependencyObject element)
        {
            Uno.Extensions.IndentedStringBuilder builder = new ();
            SpyInner(element, builder);
            var spyText = builder.ToString();
            Debug.WriteLine(spyText);
        }

        private static void SpyInner(DependencyObject element, Uno.Extensions.IndentedStringBuilder builder)
        {
            var name = string.Empty;
            if (element is FrameworkElement frameworkElement)
            {
                name = frameworkElement.Name;
            }
            builder.AppendLine($"{name}({element.GetType().FullName})\r\n");

            for (var i = 0; i < VisualTreeHelper.GetChildrenCount(element); i++)
            {
                using var t = builder.Indent();
                var child = VisualTreeHelper.GetChild(element, i);
                SpyInner(child, builder);
            }
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/appsettings.development.json
================================================
{
  "AppConfig": {
    "Environment": "Development"
  }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno/appsettings.json
================================================
{
  "AppConfig": {
    "Environment": "Production"
  }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Base/AppHead.xaml
================================================
<local:App x:Class="IpcUno.AppHead"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:wasm="http://platform.uno/wasm"
       xmlns:local="using:IpcUno"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       mc:Ignorable="wasm">

  <local:App.Resources>
    <ResourceDictionary>
      <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ms-appx:///IpcUno/AppResources.xaml" />
      </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
  </local:App.Resources>

</local:App>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Base/AppHead.xaml.cs
================================================
using Microsoft.UI.Xaml;

using Uno.Resizetizer;

namespace IpcUno
{
    public sealed partial class AppHead : App
    {
        /// <summary>
        /// Initializes the singleton application object. This is the first line of authored code
        /// executed, and as such is the logical equivalent of main() or WinMain().
        /// </summary>
        public AppHead()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used such as when the application is launched to open a specific file.
        /// </summary>
        /// <param name="args">Details about the launch request and process.</param>
        protected override void OnLaunched(LaunchActivatedEventArgs args)
        {
            base.OnLaunched(args);

            MainWindow.SetWindowIcon();
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Base/IpcUno.Base.csproj
================================================
<Project Sdk="Microsoft.Build.NoTargets/3.7.0">
  <PropertyGroup>
    <!-- NOTE: The TargetFramework is required by MSBuild but not used as this project is not built. -->
    <TargetFramework>net8.0</TargetFramework>
    <EnableDefaultItems>false</EnableDefaultItems>
  </PropertyGroup>

  <ItemGroup>
    <None Include="**\*" Exclude="obj\**;bin\**;*.csproj" />
    <None Update="AppHead.xaml.cs" DependentUpon="AppHead.xaml" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Base/base.props
================================================
<Project>
  <ItemGroup>
    <PackageReference Include="Uno.Resizetizer" />
  </ItemGroup>

  <ItemGroup>
    <None Include="$(MSBuildThisFileDirectory)AppHead.xaml" />
    <ApplicationDefinition Include="$(MSBuildThisFileDirectory)AppHead.xaml"
                SubType="Designer"
                XamlRuntime="WinUI"
                Generator="MSBuild:Compile"
                Link="AppHead.xaml" />
    <Compile Include="$(MSBuildThisFileDirectory)AppHead.xaml.cs"
        XamlRuntime="WinUI"
        DependentUpon="AppHead.xaml"
        Link="AppHead.xaml.cs" />
    <UnoIcon Include="$(MSBuildThisFileDirectory)Icons\icon.svg"
        ForegroundFile="$(MSBuildThisFileDirectory)Icons\icon_foreground.svg"
        ForegroundScale="0.65"
        Color="#00000000" />
    <UnoSplashScreen
      Include="$(MSBuildThisFileDirectory)Splash\splash_screen.svg"
      BaseSize="128,128"
      Color="#FFFFFF" />
    <!-- NOTE: Files explicitly linked to display in the head projects for clarity. -->
    <None Include="$(MSBuildThisFileDirectory)Icons\icon.svg" Link="Icons\icon.svg" />
    <None Include="$(MSBuildThisFileDirectory)Icons\icon_foreground.svg" Link="Icons\icon_foreground.svg" />
    <None Include="$(MSBuildThisFileDirectory)Splash\splash_screen.svg" Link="Splash\splash_screen.svg" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/App.xaml
================================================
<?xml version = "1.0" encoding = "UTF-8" ?>
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:IpcUno"
			 x:Class="IpcUno.MauiControls.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles/Colors.xaml" />
                <ResourceDictionary Source="Styles/Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <local:UnoImageConverter x:Key="UnoImageConverter" />
        </ResourceDictionary>
    </Application.Resources>
</Application>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/App.xaml.cs
================================================
namespace IpcUno.MauiControls
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/AppBuilderExtensions.cs
================================================
namespace IpcUno
{
    public static class AppBuilderExtensions
    {
        public static MauiAppBuilder UseMauiControls(this MauiAppBuilder builder) =>
            builder
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("IpcUno/Assets/Fonts/OpenSansRegular.ttf", "OpenSansRegular");
                    fonts.AddFont("IpcUno/Assets/Fonts/OpenSansSemibold.ttf", "OpenSansSemibold");
                });
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/EmbeddedControl.xaml
================================================
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="IpcUno.MauiControls.EmbeddedControl"
             HorizontalOptions="Fill"
             VerticalOptions="Fill">
  <VerticalStackLayout
    Spacing="25"
    Padding="30,0"
    VerticalOptions="Center">

    <Image
      BindingContext="IpcUno/Assets/Images/dotnet_bot.png"
      Source="{Binding Converter={StaticResource UnoImageConverter}}"
      SemanticProperties.Description="Cute dot net bot waving hi to you!"
      HeightRequest="200"
      HorizontalOptions="Center" />

    <Label
      Text="Hello, World!"
      SemanticProperties.HeadingLevel="Level1"
      FontSize="32"
      HorizontalOptions="Center" />

    <Label
      Text="Welcome to .NET Multi-platform App UI"
      SemanticProperties.HeadingLevel="Level2"
      SemanticProperties.Description="Welcome to dot net Multi platform App U I"
      FontSize="18"
      HorizontalOptions="Center" />

    <Button
      Text="{Binding CounterText}"
      SemanticProperties.Hint="Counts the number of times you click"
      Command="{Binding Counter}"
      HorizontalOptions="Center" />

  </VerticalStackLayout>
</ContentView>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/EmbeddedControl.xaml.cs
================================================
namespace IpcUno.MauiControls
{
    public partial class EmbeddedControl : ContentView
    {
        public EmbeddedControl()
        {
            InitializeComponent();
        }

    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/IpcUno.MauiControls.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows')) or '$(EnableWindowsTargeting)' == 'true'">$(TargetFrameworks);net8.0-windows10.0.19041</TargetFrameworks>
    <TargetFrameworks>$(TargetFrameworks);net8.0;</TargetFrameworks>
    <TargetFrameworks Condition="'$(OverrideTargetFrameworks)'!=''">$(OverrideTargetFrameworks)</TargetFrameworks>

    <UseMaui>true</UseMaui>
    <SingleProject>true</SingleProject>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Maui.Controls" />
    <PackageReference Include="Microsoft.Maui.Controls.Compatibility" />
  </ItemGroup>

</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/Styles/Colors.xaml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<?xaml-comp compile="true" ?>
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

    <Color x:Key="Primary">#512BD4</Color>
    <Color x:Key="Secondary">#DFD8F7</Color>
    <Color x:Key="Tertiary">#2B0B98</Color>
    <Color x:Key="White">White</Color>
    <Color x:Key="Black">Black</Color>
    <Color x:Key="Gray100">#E1E1E1</Color>
    <Color x:Key="Gray200">#C8C8C8</Color>
    <Color x:Key="Gray300">#ACACAC</Color>
    <Color x:Key="Gray400">#919191</Color>
    <Color x:Key="Gray500">#6E6E6E</Color>
    <Color x:Key="Gray600">#404040</Color>
    <Color x:Key="Gray900">#212121</Color>
    <Color x:Key="Gray950">#141414</Color>
    <SolidColorBrush x:Key="PrimaryBrush" Color="{StaticResource Primary}"/>
    <SolidColorBrush x:Key="SecondaryBrush" Color="{StaticResource Secondary}"/>
    <SolidColorBrush x:Key="TertiaryBrush" Color="{StaticResource Tertiary}"/>
    <SolidColorBrush x:Key="WhiteBrush" Color="{StaticResource White}"/>
    <SolidColorBrush x:Key="BlackBrush" Color="{StaticResource Black}"/>
    <SolidColorBrush x:Key="Gray100Brush" Color="{StaticResource Gray100}"/>
    <SolidColorBrush x:Key="Gray200Brush" Color="{StaticResource Gray200}"/>
    <SolidColorBrush x:Key="Gray300Brush" Color="{StaticResource Gray300}"/>
    <SolidColorBrush x:Key="Gray400Brush" Color="{StaticResource Gray400}"/>
    <SolidColorBrush x:Key="Gray500Brush" Color="{StaticResource Gray500}"/>
    <SolidColorBrush x:Key="Gray600Brush" Color="{StaticResource Gray600}"/>
    <SolidColorBrush x:Key="Gray900Brush" Color="{StaticResource Gray900}"/>
    <SolidColorBrush x:Key="Gray950Brush" Color="{StaticResource Gray950}"/>

    <Color x:Key="Yellow100Accent">#F7B548</Color>
    <Color x:Key="Yellow200Accent">#FFD590</Color>
    <Color x:Key="Yellow300Accent">#FFE5B9</Color>
    <Color x:Key="Cyan100Accent">#28C2D1</Color>
    <Color x:Key="Cyan200Accent">#7BDDEF</Color>
    <Color x:Key="Cyan300Accent">#C3F2F4</Color>
    <Color x:Key="Blue100Accent">#3E8EED</Color>
    <Color x:Key="Blue200Accent">#72ACF1</Color>
    <Color x:Key="Blue300Accent">#A7CBF6</Color>

</ResourceDictionary>

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/Styles/Styles.xaml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<?xaml-comp compile="true" ?>
<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

    <Style TargetType="ActivityIndicator">
        <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
    </Style>

    <Style TargetType="IndicatorView">
        <Setter Property="IndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}"/>
        <Setter Property="SelectedIndicatorColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray100}}"/>
    </Style>

    <Style TargetType="Border">
        <Setter Property="Stroke" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
        <Setter Property="StrokeShape" Value="Rectangle"/>
        <Setter Property="StrokeThickness" Value="1"/>
    </Style>

    <Style TargetType="BoxView">
        <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
    </Style>

    <Style TargetType="Button">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Primary}}" />
        <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="CornerRadius" Value="8"/>
        <Setter Property="Padding" Value="14,10"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
                            <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="CheckBox">
        <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="Color" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="DatePicker">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Editor">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14" />
        <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Entry">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14" />
        <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Frame">
        <Setter Property="HasShadow" Value="False" />
        <Setter Property="BorderColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
        <Setter Property="CornerRadius" Value="8" />
    </Style>

    <Style TargetType="ImageButton">
        <Setter Property="Opacity" Value="1" />
        <Setter Property="BorderColor" Value="Transparent"/>
        <Setter Property="BorderWidth" Value="0"/>
        <Setter Property="CornerRadius" Value="0"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="Opacity" Value="0.5" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Label">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="ListView">
        <Setter Property="SeparatorColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray500}}" />
        <Setter Property="RefreshControlColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
    </Style>

    <Style TargetType="Picker">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                            <Setter Property="TitleColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="ProgressBar">
        <Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="ProgressColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="RadioButton">
        <Setter Property="BackgroundColor" Value="Transparent"/>
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Black}, Dark={StaticResource White}}" />
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="RefreshView">
        <Setter Property="RefreshColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
    </Style>

    <Style TargetType="SearchBar">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" />
        <Setter Property="CancelButtonColor" Value="{StaticResource Gray500}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                            <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="SearchHandler">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="PlaceholderColor" Value="{StaticResource Gray500}" />
        <Setter Property="BackgroundColor" Value="Transparent" />
        <Setter Property="FontFamily" Value="OpenSansRegular" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                            <Setter Property="PlaceholderColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Shadow">
        <Setter Property="Radius" Value="15" />
        <Setter Property="Opacity" Value="0.5" />
        <Setter Property="Brush" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource White}}" />
        <Setter Property="Offset" Value="10,10" />
    </Style>

    <Style TargetType="Slider">
        <Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray600}}" />
        <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="MinimumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
                            <Setter Property="MaximumTrackColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}"/>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="SwipeItem">
        <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" />
    </Style>

    <Style TargetType="Switch">
        <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="ThumbColor" Value="{StaticResource White}" />
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="On">
                        <VisualState.Setters>
                            <Setter Property="OnColor" Value="{AppThemeBinding Light={StaticResource Secondary}, Dark={StaticResource Gray200}}" />
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="Off">
                        <VisualState.Setters>
                            <Setter Property="ThumbColor" Value="{AppThemeBinding Light={StaticResource Gray400}, Dark={StaticResource Gray500}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="TimePicker">
        <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource White}}" />
        <Setter Property="BackgroundColor" Value="Transparent"/>
        <Setter Property="FontFamily" Value="OpenSansRegular"/>
        <Setter Property="FontSize" Value="14"/>
        <Setter Property="MinimumHeightRequest" Value="44"/>
        <Setter Property="MinimumWidthRequest" Value="44"/>
        <Setter Property="VisualStateManager.VisualStateGroups">
            <VisualStateGroupList>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal" />
                    <VisualState x:Name="Disabled">
                        <VisualState.Setters>
                            <Setter Property="TextColor" Value="{AppThemeBinding Light={StaticResource Gray300}, Dark={StaticResource Gray600}}" />
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateGroupList>
        </Setter>
    </Style>

    <Style TargetType="Page" ApplyToDerivedTypes="True">
        <Setter Property="Padding" Value="0"/>
        <Setter Property="BackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" />
    </Style>

    <Style TargetType="Shell" ApplyToDerivedTypes="True">
        <Setter Property="Shell.BackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource Gray950}}" />
        <Setter Property="Shell.ForegroundColor" Value="{OnPlatform WinUI={StaticResource Primary}, Default={StaticResource White}}" />
        <Setter Property="Shell.TitleColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource White}}" />
        <Setter Property="Shell.DisabledColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
        <Setter Property="Shell.UnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray200}}" />
        <Setter Property="Shell.NavBarHasShadow" Value="False" />
        <Setter Property="Shell.TabBarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Black}}" />
        <Setter Property="Shell.TabBarForegroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="Shell.TabBarTitleColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="Shell.TabBarUnselectedColor" Value="{AppThemeBinding Light={StaticResource Gray900}, Dark={StaticResource Gray200}}" />
    </Style>

    <Style TargetType="NavigationPage">
        <Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource Gray950}}" />
        <Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
        <Setter Property="IconColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource White}}" />
    </Style>

    <Style TargetType="TabbedPage">
        <Setter Property="BarBackgroundColor" Value="{AppThemeBinding Light={StaticResource White}, Dark={StaticResource Gray950}}" />
        <Setter Property="BarTextColor" Value="{AppThemeBinding Light={StaticResource Primary}, Dark={StaticResource White}}" />
        <Setter Property="UnselectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray200}, Dark={StaticResource Gray950}}" />
        <Setter Property="SelectedTabColor" Value="{AppThemeBinding Light={StaticResource Gray950}, Dark={StaticResource Gray200}}" />
    </Style>

</ResourceDictionary>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/UnoImageConverter.cs
================================================
using System.Globalization;

namespace IpcUno
{
    public class UnoImageConverter : IValueConverter
    {
        public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
        {
#if ANDROID
        return (value + "").Replace('/','_').Replace('\\','_');
#else
            return value;
#endif
        }

        public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/IpcUno.Skia.Gtk.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType Condition="'$(Configuration)'=='Release'">WinExe</OutputType>
    <OutputType Condition="'$(Configuration)'=='Debug'">Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ApplicationManifest>app.manifest</ApplicationManifest>
  </PropertyGroup>
  <ItemGroup>
    <EmbeddedResource Include="Package.appxmanifest" />
    <Manifest Include="$(ApplicationManifest)" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Uno.WinUI.Skia.Gtk" />
    <PackageReference Include="CommunityToolkit.Mvvm" />
    <PackageReference Include="Uno.Extensions.Configuration" />
    <PackageReference Include="Uno.Extensions.Logging.WinUI" />
    <PackageReference Include="Uno.Material.WinUI" />
    <PackageReference Include="Uno.Toolkit.WinUI.Material" />
    <PackageReference Include="Uno.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Hosting.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.WinUI" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" />
    <PackageReference Include="SkiaSharp.Views.Uno.WinUI" />
    <PackageReference Include="SkiaSharp.Skottie" />
    <PackageReference Include="Uno.WinUI.DevServer" Condition="'$(Configuration)'=='Debug'" />
    <PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\IpcUno\IpcUno.csproj" />
  </ItemGroup>
  <Import Project="..\IpcUno.Base\base.props" />
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap rescap">

  <Identity
    Name="IpcUno"
    Publisher="O=lindexi"
    Version="1.0.0.0" />

  <Properties>
    <DisplayName>IpcUno</DisplayName>
    <PublisherDisplayName>IpcUno</PublisherDisplayName>
  </Properties>

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
  </Dependencies>

  <Resources>
    <Resource Language="x-generate"/>
  </Resources>

  <Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="$targetentrypoint$">
      <uap:VisualElements
        DisplayName="IpcUno"
        Description="IpcUno">
        <uap:SplashScreen />
      </uap:VisualElements>
    </Application>
  </Applications>

  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/Program.cs
================================================
using System;

using GLib;

using Uno.UI.Runtime.Skia.Gtk;

namespace IpcUno.Skia.Gtk
{
    public class Program
    {
        public static void Main(string[] args)
        {
            ExceptionManager.UnhandledException += delegate (UnhandledExceptionArgs expArgs)
            {
                Console.WriteLine("GLIB UNHANDLED EXCEPTION" + expArgs.ExceptionObject.ToString());
                expArgs.ExitApplication = true;
            };

            var host = new GtkHost(() => new AppHead());
            // 修复虚拟机界面闪烁
            host.RenderSurfaceType = RenderSurfaceType.Software;

            host.Run();
        }
    }
}


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/app.manifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="IpcUno.Gtk"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
             If you want to change the Windows User Account Control level replace the
             requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Specifying requestedExecutionLevel element will disable file and registry virtualization.
            Remove this element if your application requires this virtualization for backwards
            compatibility.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- A list of the Windows versions that this application has been tested on
           and is designed to work with. Uncomment the appropriate elements
           and Windows will automatically select the most compatible environment. -->

      <!-- Windows Vista -->
      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

      <!-- Windows 7 -->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

      <!-- Windows 8 -->
      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

      <!-- Windows 8.1 -->
      <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

      <!-- Windows 10 -->
      <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->

    </application>
  </compatibility>

  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
    </windowsSettings>
  </application>


  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
  <!--
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>
  -->

</assembly>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/IpcUno.Skia.WPF.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType Condition="'$(Configuration)'=='Release'">WinExe</OutputType>
    <OutputType Condition="'$(Configuration)'=='Debug'">Exe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <ApplicationManifest>app.manifest</ApplicationManifest>
  </PropertyGroup>
  <ItemGroup Label="AssemblyInfo">
    <AssemblyAttribute Include="System.Runtime.InteropServices.ComVisibleAttribute">
      <_Parameter1>false</_Parameter1>
    </AssemblyAttribute>
    <AssemblyAttribute Include="System.Windows.ThemeInfo">
      <_Parameter1>System.Windows.ResourceDictionaryLocation.None</_Parameter1>
      <_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
      <_Parameter2>System.Windows.ResourceDictionaryLocation.SourceAssembly</_Parameter2>
      <_Parameter2_IsLiteral>true</_Parameter2_IsLiteral>
    </AssemblyAttribute>
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Include="Package.appxmanifest" />
    <Manifest Include="$(ApplicationManifest)" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Uno.WinUI.Skia.Wpf" />
    <PackageReference Include="CommunityToolkit.Mvvm" />
    <PackageReference Include="Uno.Extensions.Configuration" />
    <PackageReference Include="Uno.Extensions.Logging.WinUI" />
    <PackageReference Include="Uno.Material.WinUI" />
    <PackageReference Include="Uno.Toolkit.WinUI.Material" />
    <PackageReference Include="Uno.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Hosting.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.WinUI" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" />
    <PackageReference Include="SkiaSharp.Views.Uno.WinUI" />
    <PackageReference Include="SkiaSharp.Skottie" />
    <PackageReference Include="Uno.WinUI.DevServer" Condition="'$(Configuration)'=='Debug'" />
    <PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" />
  </ItemGroup>
  <ItemGroup>
    <ApplicationDefinition Include="Wpf\App.xaml" XamlRuntime="Wpf" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\IpcUno\IpcUno.csproj" />
  </ItemGroup>
  <Import Project="..\IpcUno.Base\base.props" />
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap rescap">

  <Identity
    Name="IpcUno"
    Publisher="O=lindexi"
    Version="1.0.0.0" />

  <Properties>
    <DisplayName>IpcUno</DisplayName>
    <PublisherDisplayName>IpcUno</PublisherDisplayName>
  </Properties>

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
  </Dependencies>

  <Resources>
    <Resource Language="x-generate"/>
  </Resources>

  <Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="$targetentrypoint$">
      <uap:VisualElements
        DisplayName="IpcUno"
        Description="IpcUno">
        <uap:SplashScreen />
      </uap:VisualElements>
    </Application>
  </Applications>

  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Wpf/App.xaml
================================================
<Application x:Class="IpcUno.WPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:IpcUno.WPF">
  <Application.Resources>

  </Application.Resources>
</Application>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Wpf/App.xaml.cs
================================================
using Uno.UI.Runtime.Skia.Wpf;

using WpfApp = System.Windows.Application;

namespace IpcUno.WPF
{
    public partial class App : WpfApp
    {
        public App()
        {
            var host = new WpfHost(Dispatcher, () => new AppHead());
            host.Run();
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/app.manifest
================================================
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="IpcUno.Skia.WPF.app"/>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below informs the system that this application is compatible with OS features first introduced in Windows 8.
      For more info see https://docs.microsoft.com/windows/win32/sysinfo/targeting-your-application-at-windows-8-1

      It is also necessary to support features in unpackaged applications, for example the custom titlebar implementation.-->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
    </application>
  </compatibility>

  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <!-- The combination of below two tags have the following effect:
           1) Per-Monitor for >= Windows 10 Anniversary Update
           2) System < Windows 10 Anniversary Update
      -->
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor</dpiAwareness>
    </windowsSettings>
  </application>
</assembly>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Tests/AppInfoTests.cs
================================================
namespace IpcUno.Tests
{
    public class AppInfoTests
    {
        [SetUp]
        public void Setup()
        {
        }

        [Test]
        public void AppInfoCreation()
        {
            var appInfo = new AppConfig { Environment = "Test" };

            appInfo.Should().NotBeNull();
            appInfo.Environment.Should().Be("Test");
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Tests/GlobalUsings.cs
================================================
global using FluentAssertions;

global using IpcUno.Business.Models;

global using NUnit.Framework;


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Tests/IpcUno.Tests.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentAssertions" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" />
    <PackageReference Include="NUnit" />
    <PackageReference Include="NUnit3TestAdapter" />
    <PackageReference Include="coverlet.collector" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\IpcUno\IpcUno.csproj" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/Constants.cs
================================================
namespace IpcUno.UITests
{
    public class Constants
    {
        public readonly static string WebAssemblyDefaultUri = "http://localhost:5001/";
        public readonly static string iOSAppName = "com.companyname.IpcUno";
        public readonly static string AndroidAppName = "com.companyname.IpcUno";
        public readonly static string iOSDeviceNameOrId = "iPad Pro (12.9-inch) (3rd generation)";

        public readonly static Platform CurrentPlatform = Platform.Browser;
        public readonly static Browser WebAssemblyBrowser = Browser.Chrome;
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/Given_MainPage.cs
================================================
namespace IpcUno.UITests
{
    public class Given_MainPage : TestBase
    {
        [Test]
        public async Task When_SmokeTest()
        {
            // NOTICE
            // To run UITests, Run the WASM target without debugger. Note
            // the port that is being used and update the Constants.cs file
            // in the UITests project with the correct port number.

            // Add delay to allow for the splash screen to disappear
            await Task.Delay(5000);


            // Query for the SecondPageButton and then tap it
            Query xamlButton = q => q.All().Marked("SecondPageButton");
            App.WaitForElement(xamlButton);
            App.Tap(xamlButton);

            // Take a screenshot and add it to the test results
            TakeScreenshot("After tapped");
        }
    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/GlobalUsings.cs
================================================
global using NUnit.Framework;

global using Uno.UITest;
global using Uno.UITest.Helpers.Queries;
global using Uno.UITests.Helpers;

global using Query = System.Func<Uno.UITest.IAppQuery, Uno.UITest.IAppQuery>;


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/IpcUno.UITests.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="FluentAssertions" />
    <PackageReference Include="Microsoft.NET.Test.Sdk" />
    <PackageReference Include="Newtonsoft.Json" />
    <PackageReference Include="NUnit" />
    <PackageReference Include="NUnit3TestAdapter" />
    <PackageReference Include="Uno.UITest.Helpers" />
    <PackageReference Include="Xamarin.UITest" />
  </ItemGroup>
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/TestBase.cs
================================================

namespace IpcUno.UITests
{
    public class TestBase
    {
        private IApp? _app;

        static TestBase()
        {
            AppInitializer.TestEnvironment.AndroidAppName = Constants.AndroidAppName;
            AppInitializer.TestEnvironment.WebAssemblyDefaultUri = Constants.WebAssemblyDefaultUri;
            AppInitializer.TestEnvironment.iOSAppName = Constants.iOSAppName;
            AppInitializer.TestEnvironment.AndroidAppName = Constants.AndroidAppName;
            AppInitializer.TestEnvironment.iOSDeviceNameOrId = Constants.iOSDeviceNameOrId;
            AppInitializer.TestEnvironment.CurrentPlatform = Constants.CurrentPlatform;
            AppInitializer.TestEnvironment.WebAssemblyBrowser = Constants.WebAssemblyBrowser;

#if DEBUG
        AppInitializer.TestEnvironment.WebAssemblyHeadless = false;
#endif

            // Start the app only once, so the tests runs don't restart it
            // and gain some time for the tests.
            AppInitializer.ColdStartApp();
        }

        protected IApp App
        {
            get => _app!;
            private set
            {
                _app = value;
                Uno.UITest.Helpers.Queries.Helpers.App = value;
            }
        }

        [SetUp]
        public void SetUpTest()
        {
            App = AppInitializer.AttachToApp();
        }

        [TearDown]
        public void TearDownTest()
        {
            TakeScreenshot("teardown");
        }

        public FileInfo TakeScreenshot(string stepName)
        {
            var title = $"{TestContext.CurrentContext.Test.Name}_{stepName}"
                .Replace(" ", "_")
                .Replace(".", "_");

            var fileInfo = App.Screenshot(title);

            var fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileInfo.Name);
            if (fileNameWithoutExt != title && fileInfo.DirectoryName != null)
            {
                var destFileName = Path
                    .Combine(fileInfo.DirectoryName, title + Path.GetExtension(fileInfo.Name));

                if (File.Exists(destFileName))
                {
                    File.Delete(destFileName);
                }

                File.Move(fileInfo.FullName, destFileName);

                TestContext.AddTestAttachment(destFileName, stepName);

                fileInfo = new FileInfo(destFileName);
            }
            else
            {
                TestContext.AddTestAttachment(fileInfo.FullName, stepName);
            }

            return fileInfo;
        }

    }
}

================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Windows/IpcUno.Windows.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <RootNamespace>IpcUno.Windows</RootNamespace>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <Platforms>x86;x64;arm64</Platforms>
    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    <PublishProfile>win-$(Platform).pubxml</PublishProfile>
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>

    <!-- Bundles the WinAppSDK binaries -->
    <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>

    <!-- <SelfContained>true</SelfContained> -->
  </PropertyGroup>

  <ItemGroup>
    <Content Include="Images\**" />
    <Manifest Include="$(ApplicationManifest)" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Uno.WinUI" />
    <PackageReference Include="Microsoft.WindowsAppSDK" VersionOverride="1.4.231008000" />
    <PackageReference Include="Microsoft.Windows.SDK.BuildTools" VersionOverride="10.0.22621.756" />
    <PackageReference Include="CommunityToolkit.Mvvm" />
    <PackageReference Include="Uno.Extensions.Configuration" />
    <PackageReference Include="Uno.Extensions.Logging.WinUI" />
    <PackageReference Include="Uno.Material.WinUI" />
    <PackageReference Include="Uno.Toolkit.WinUI.Material" />
    <PackageReference Include="Uno.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Hosting.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.Toolkit.WinUI" />
    <PackageReference Include="Uno.Extensions.Navigation.WinUI" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" />
    <PackageReference Include="Uno.Core.Extensions.Logging.Singleton" />
    <PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" />
    <PackageReference Include="Microsoft.Maui.Controls" />
    <PackageReference Include="Microsoft.Maui.Controls.Compatibility" />
  </ItemGroup>

  <ItemGroup>
    <!--
    If you encounter this error message:

      error NETSDK1148: A referenced assembly was compiled using a newer version of Microsoft.Windows.SDK.NET.dll.
      Please update to a newer .NET SDK in order to reference this assembly.

    This means that the two packages below must be aligned with the "build" version number of
    the "Microsoft.Windows.SDK.BuildTools" package above, and the "revision" version number
    must be the highest found in https://www.nuget.org/packages/Microsoft.Windows.SDK.NET.Ref.
    -->
    <!-- <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" RuntimeFrameworkVersion="10.0.22621.28" />
    <FrameworkReference Update="Microsoft.Windows.SDK.NET.Ref" TargetingPackVersion="10.0.22621.28" /> -->
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\IpcUno\IpcUno.csproj" />
  </ItemGroup>

  <!--
    Defining the "Msix" ProjectCapability here allows the Single-project MSIX Packaging
    Tools extension to be activated for this project even if the Windows App SDK Nuget
    package has not yet been restored.
  -->
  <ItemGroup Condition="'$(DisableMsixProjectCapabilityAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <ProjectCapability Include="Msix"/>
  </ItemGroup>

  <!--
    Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
    Explorer "Package and Publish" context menu entry to be enabled for this project even if
    the Windows App SDK Nuget package has not yet been restored.
  -->
  <PropertyGroup Condition="'$(DisableHasPackageAndPublishMenuAddedByProject)'!='true' and '$(EnableMsixTooling)'=='true'">
    <HasPackageAndPublishMenu>true</HasPackageAndPublishMenu>
  </PropertyGroup>

  <Import Project="..\IpcUno.Base\base.props" />
</Project>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Windows/Package.appxmanifest
================================================
<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap rescap">

  <Identity
    Name="IpcUno"
    Publisher="O=lindexi"
    Version="1.0.0.0" />

  <Properties>
    <DisplayName>IpcUno</DisplayName>
    <PublisherDisplayName>IpcUno</PublisherDisplayName>
  </Properties>

  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
    <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.17763.0" MaxVersionTested="10.0.19041.0" />
  </Dependencies>

  <Resources>
    <Resource Language="x-generate"/>
  </Resources>

  <Applications>
    <Application Id="App"
      Executable="$targetnametoken$.exe"
      EntryPoint="$targetentrypoint$">
      <uap:VisualElements
        DisplayName="IpcUno"
        Description="IpcUno">
        <uap:SplashScreen />
      </uap:VisualElements>
    </Application>
  </Applications>

  <Capabilities>
    <rescap:Capability Name="runFullTrust" />
  </Capabilities>
</Package>


================================================
FILE: demo/UnoDemo/IpcUno/IpcUno.Windows/Properties/PublishProfiles/win-arm64.pubxml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
	<PropertyGroup>
		<PublishProtocol>FileSystem</PublishProtocol>
		<Platform>arm64</Platform>
		<RuntimeIdentifier>win-arm64</RuntimeIdentifier>
		<PublishDir>bin\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\publish\</PublishDir>
		<SelfContained>true</SelfContained>
		<PublishSingleFile>False</PublishSingleFile>
		<PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
		<PublishReadyToRun Condition="'$(Configuration)' != 'Debug'">True</PublishReadyToRun>
		<!-- Note: Trimming disabled by default as there may still be an issues with PublishTrimmed support: https://github.com/microsoft/CsWinRT/issues/373 -->
		<!-- 
		<PublishTrimmed Condition="'$(Configuration)' != 'Debug'">True</PublishTrimmed>
		<TrimMode>partial</TrimMode>
		<SuppressTrimAnalysisWarnings>true</SuppressTrimAnalysisWarnings> 
		-->
	</PropertyGroup>
</Project>


=================
Download .txt
gitextract_cjt1cj37/

├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── dotnet-core.yml
│       ├── dotnet-format.yml
│       └── nuget-tag-publish.yml
├── .gitignore
├── CHANGELOG.md
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE
├── README.md
├── analyzers/
│   └── dotnetCampus.Ipc.SourceGenerators/
│       ├── GeneratedIpcJointGenerator.cs
│       ├── Properties/
│       │   └── GlobalUsings.cs
│       └── dotnetCampus.Ipc.SourceGenerators.csproj
├── build/
│   └── Version.props
├── demo/
│   ├── IpcDirectRoutedAotDemo/
│   │   ├── DemoRequest.cs
│   │   ├── DemoResponse.cs
│   │   ├── IpcDirectRoutedAotDemo.csproj
│   │   ├── NotifyInfo.cs
│   │   ├── Program.cs
│   │   └── SourceGenerationContext.cs
│   ├── IpcRemotingObjectDemo/
│   │   ├── IpcRemotingObjectClientDemo/
│   │   │   ├── IFoo.cs
│   │   │   ├── IpcRemotingObjectClientDemo.csproj
│   │   │   └── Program.cs
│   │   └── IpcRemotingObjectServerDemo/
│   │       ├── Foo.cs
│   │       ├── IFoo.cs
│   │       ├── IpcRemotingObjectServerDemo.csproj
│   │       └── Program.cs
│   ├── PipeMvc/
│   │   ├── PipeMvcClientDemo/
│   │   │   ├── App.xaml
│   │   │   ├── App.xaml.cs
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── MainWindow.xaml
│   │   │   ├── MainWindow.xaml.cs
│   │   │   └── PipeMvcClientDemo.csproj
│   │   └── PipeMvcServerDemo/
│   │       ├── FooContent.cs
│   │       ├── FooController.cs
│   │       ├── MainWindow.xaml
│   │       ├── MainWindow.xaml.cs
│   │       ├── PipeMvcServerDemo.csproj
│   │       ├── Program.cs
│   │       ├── Properties/
│   │       │   └── launchSettings.json
│   │       ├── appsettings.Development.json
│   │       └── appsettings.json
│   ├── UnoDemo/
│   │   ├── IpcUno/
│   │   │   ├── .editorconfig
│   │   │   ├── .gitignore
│   │   │   ├── .vsconfig
│   │   │   ├── Directory.Build.props
│   │   │   ├── Directory.Build.targets
│   │   │   ├── Directory.Packages.props
│   │   │   ├── IpcUno/
│   │   │   │   ├── App.cs
│   │   │   │   ├── AppResources.xaml
│   │   │   │   ├── Assets/
│   │   │   │   │   └── SharedAssets.md
│   │   │   │   ├── Business/
│   │   │   │   │   └── Models/
│   │   │   │   │       ├── AppConfig.cs
│   │   │   │   │       ├── ConnectedPeerModel.cs
│   │   │   │   │       ├── Entity.cs
│   │   │   │   │       └── IpcServerEntity.cs
│   │   │   │   ├── GlobalSuppressions.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   ├── IpcUno.csproj
│   │   │   │   ├── Presentation/
│   │   │   │   │   ├── AddConnectPage.xaml
│   │   │   │   │   ├── AddConnectPage.xaml.cs
│   │   │   │   │   ├── ChatPage.xaml
│   │   │   │   │   ├── ChatPage.xaml.cs
│   │   │   │   │   ├── MainPage.xaml
│   │   │   │   │   ├── MainPage.xaml.cs
│   │   │   │   │   ├── MainViewModel.cs
│   │   │   │   │   ├── SecondPage.xaml
│   │   │   │   │   ├── SecondPage.xaml.cs
│   │   │   │   │   ├── SecondViewModel.cs
│   │   │   │   │   ├── ServerPage.xaml
│   │   │   │   │   ├── ServerPage.xaml.cs
│   │   │   │   │   ├── ServerViewModel.cs
│   │   │   │   │   ├── Shell.xaml
│   │   │   │   │   ├── Shell.xaml.cs
│   │   │   │   │   └── ShellViewModel.cs
│   │   │   │   ├── Strings/
│   │   │   │   │   └── en/
│   │   │   │   │       └── Resources.resw
│   │   │   │   ├── Styles/
│   │   │   │   │   ├── ColorPaletteOverride.xaml
│   │   │   │   │   └── MaterialFontsOverride.xaml
│   │   │   │   ├── Utils/
│   │   │   │   │   ├── ScrollViewerExtensions.cs
│   │   │   │   │   ├── TreeExtensions.cs
│   │   │   │   │   └── UISpyHelper.cs
│   │   │   │   ├── appsettings.development.json
│   │   │   │   └── appsettings.json
│   │   │   ├── IpcUno.Base/
│   │   │   │   ├── AppHead.xaml
│   │   │   │   ├── AppHead.xaml.cs
│   │   │   │   ├── IpcUno.Base.csproj
│   │   │   │   └── base.props
│   │   │   ├── IpcUno.MauiControls/
│   │   │   │   ├── App.xaml
│   │   │   │   ├── App.xaml.cs
│   │   │   │   ├── AppBuilderExtensions.cs
│   │   │   │   ├── EmbeddedControl.xaml
│   │   │   │   ├── EmbeddedControl.xaml.cs
│   │   │   │   ├── IpcUno.MauiControls.csproj
│   │   │   │   ├── Styles/
│   │   │   │   │   ├── Colors.xaml
│   │   │   │   │   └── Styles.xaml
│   │   │   │   └── UnoImageConverter.cs
│   │   │   ├── IpcUno.Skia.Gtk/
│   │   │   │   ├── IpcUno.Skia.Gtk.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Program.cs
│   │   │   │   └── app.manifest
│   │   │   ├── IpcUno.Skia.WPF/
│   │   │   │   ├── IpcUno.Skia.WPF.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Wpf/
│   │   │   │   │   ├── App.xaml
│   │   │   │   │   └── App.xaml.cs
│   │   │   │   └── app.manifest
│   │   │   ├── IpcUno.Tests/
│   │   │   │   ├── AppInfoTests.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   └── IpcUno.Tests.csproj
│   │   │   ├── IpcUno.UITests/
│   │   │   │   ├── Constants.cs
│   │   │   │   ├── Given_MainPage.cs
│   │   │   │   ├── GlobalUsings.cs
│   │   │   │   ├── IpcUno.UITests.csproj
│   │   │   │   └── TestBase.cs
│   │   │   ├── IpcUno.Windows/
│   │   │   │   ├── IpcUno.Windows.csproj
│   │   │   │   ├── Package.appxmanifest
│   │   │   │   ├── Properties/
│   │   │   │   │   ├── PublishProfiles/
│   │   │   │   │   │   ├── win-arm64.pubxml
│   │   │   │   │   │   ├── win-x64.pubxml
│   │   │   │   │   │   └── win-x86.pubxml
│   │   │   │   │   └── launchsettings.json
│   │   │   │   ├── Resources.lang-en-us.resw
│   │   │   │   └── app.manifest
│   │   │   └── solution-config.props.sample
│   │   ├── IpcUno.sln
│   │   └── README.md
│   ├── dotnetCampus.Ipc.Demo/
│   │   ├── Program.cs
│   │   └── dotnetCampus.Ipc.Demo.csproj
│   └── dotnetCampus.Ipc.WpfDemo/
│       ├── App.xaml
│       ├── App.xaml.cs
│       ├── AssemblyInfo.cs
│       ├── ConnectedPeerModel.cs
│       ├── DispatcherSwitcher.cs
│       ├── MainWindow.xaml
│       ├── MainWindow.xaml.cs
│       ├── Options.cs
│       ├── View/
│       │   ├── AddConnectPage.xaml
│       │   ├── AddConnectPage.xaml.cs
│       │   ├── CharPage.xaml
│       │   ├── CharPage.xaml.cs
│       │   ├── ListViewExtensions.cs
│       │   ├── ServerPage.xaml
│       │   └── ServerPage.xaml.cs
│       └── dotnetCampus.Ipc.WpfDemo.csproj
├── docs/
│   ├── IpcObject.01.md
│   ├── IpcObject.02.md
│   └── JsonIpcDirectRouted.md
├── dotnetCampus.Ipc.sln
├── dotnetCampus.Ipc.sln.DotSettings
├── src/
│   ├── PipeMvc/
│   │   ├── dotnetCampus.Ipc.PipeMvcClient/
│   │   │   ├── IpcNamedPipeClientHandler.cs
│   │   │   ├── IpcPipeMvcClientProvider.cs
│   │   │   └── dotnetCampus.Ipc.PipeMvcClient.csproj
│   │   ├── dotnetCampus.Ipc.PipeMvcServer/
│   │   │   ├── HostFramework/
│   │   │   │   ├── ApplicationWrapper.cs
│   │   │   │   ├── AsyncStreamWrapper.cs
│   │   │   │   ├── ClientHandler.cs
│   │   │   │   ├── HttpContextBuilder.cs
│   │   │   │   ├── HttpResetTestException.cs
│   │   │   │   ├── IpcServer.cs
│   │   │   │   ├── IpcServerOptions.cs
│   │   │   │   ├── NoopHostLifetime.cs
│   │   │   │   ├── RequestBodyDetectionFeature.cs
│   │   │   │   ├── RequestBuilder.cs
│   │   │   │   ├── RequestFeature.cs
│   │   │   │   ├── RequestLifetimeFeature.cs
│   │   │   │   ├── ResponseBodyPipeWriter.cs
│   │   │   │   ├── ResponseBodyReaderStream.cs
│   │   │   │   ├── ResponseBodyWriterStream.cs
│   │   │   │   ├── ResponseFeature.cs
│   │   │   │   ├── ResponseTrailersFeature.cs
│   │   │   │   ├── TestWebSocket.cs
│   │   │   │   ├── UpgradeFeature.cs
│   │   │   │   ├── WebHostBuilderFactory.cs
│   │   │   │   └── WebSocketClient.cs
│   │   │   ├── IpcFramework/
│   │   │   │   └── IpcPipeMvcServerCore.cs
│   │   │   ├── Properties/
│   │   │   │   └── launchSettings.json
│   │   │   ├── WebHostBuilderExtensions.cs
│   │   │   ├── dotnetCampus.Ipc.PipeMvcServer.csproj
│   │   │   └── dotnetCampus.Ipc.PipeMvcServer.csproj.DotSettings
│   │   └── dotnetCampus.Ipc.PipeMvcShare/
│   │       ├── HeaderContent.cs
│   │       ├── HttpMessageSerializer.cs
│   │       ├── HttpRequestMessageContentBase.cs
│   │       ├── HttpRequestMessageDeserializeContent.cs
│   │       ├── HttpRequestMessageSerializeContent.cs
│   │       ├── HttpResponseMessageContentBase.cs
│   │       ├── HttpResponseMessageDeserializeContent.cs
│   │       ├── HttpResponseMessageSerializeContent.cs
│   │       ├── IpcPipeMvcContext.cs
│   │       ├── IpcResponseMessageResult.cs
│   │       ├── dotnetCampus.Ipc.PipeMvcShare.projitems
│   │       └── dotnetCampus.Ipc.PipeMvcShare.shproj
│   ├── dotnetCampus.Ipc/
│   │   ├── CompilerServices/
│   │   │   ├── Attributes/
│   │   │   │   ├── AssemblyIpcProxyAttribute.cs
│   │   │   │   ├── AssemblyIpcProxyJointAttribute.cs
│   │   │   │   ├── IpcEventAttribute.cs
│   │   │   │   ├── IpcMemberAttribute.cs
│   │   │   │   ├── IpcMethodAttribute.cs
│   │   │   │   ├── IpcPropertyAttribute.cs
│   │   │   │   ├── IpcPublicAttribute.cs
│   │   │   │   └── IpcShapeAttribute.cs
│   │   │   └── GeneratedProxies/
│   │   │       ├── Contexts/
│   │   │       │   └── GeneratedIpcJointResponse.cs
│   │   │       ├── Garms/
│   │   │       │   ├── Garm.cs
│   │   │       │   ├── Garm.generic.cs
│   │   │       │   └── IGarmObject.cs
│   │   │       ├── GeneratedIpcFactory.cs
│   │   │       ├── GeneratedIpcJoint.cs
│   │   │       ├── GeneratedIpcJoint.generic.cs
│   │   │       ├── GeneratedIpcProxy.cs
│   │   │       ├── GeneratedProxyJointIpcContext.cs
│   │   │       ├── GeneratedProxyJointIpcRequestHandler.cs
│   │   │       ├── IpcProxyConfigs.cs
│   │   │       ├── Models/
│   │   │       │   ├── GeneratedIpcProxyJointInstanceCache.cs
│   │   │       │   ├── GeneratedProxyExceptionModel.cs
│   │   │       │   ├── GeneratedProxyMemberInvokeModel.cs
│   │   │       │   ├── GeneratedProxyMemberReturnModel.cs
│   │   │       │   ├── GeneratedProxyObjectModel.cs
│   │   │       │   ├── IpcJsonElement.cs
│   │   │       │   ├── IpcMemberInfo.cs
│   │   │       │   └── MemberInvokingType.cs
│   │   │       ├── PublicIpcJointManager.cs
│   │   │       └── Utils/
│   │   │           └── IpcProxyInvokingHelper.cs
│   │   ├── Context/
│   │   │   ├── AckArgs.cs
│   │   │   ├── AckTask.cs
│   │   │   ├── ConnectToExistingPeerResult.cs
│   │   │   ├── DelegateIpcRequestHandler.cs
│   │   │   ├── IIpcRequestContext.cs
│   │   │   ├── IPeerConnectionBrokenArgs.cs
│   │   │   ├── IPeerMessageArgs.cs
│   │   │   ├── IPeerReconnectedArgs.cs
│   │   │   ├── IpcBufferMessageContext.cs
│   │   │   ├── IpcClientRequestArgs.cs
│   │   │   ├── IpcConfiguration.cs
│   │   │   ├── IpcConfigurationExtensions.cs
│   │   │   ├── IpcContext.cs
│   │   │   ├── IpcInternalPeerConnectedArgs.cs
│   │   │   ├── IpcPipeServerMessageProviderPeerConnectionBrokenArgs.cs
│   │   │   ├── IpcRequest.cs
│   │   │   ├── IpcRequestParameter.cs
│   │   │   ├── IpcRequestParameterType.cs
│   │   │   ├── IpcResponse.cs
│   │   │   ├── IpcSerializableType.cs
│   │   │   ├── IpcStatus.cs
│   │   │   ├── KnownMessageHeaders.cs
│   │   │   ├── LoggingContext/
│   │   │   │   ├── IpcContextLoggerExtension.cs
│   │   │   │   ├── IpcMessageBodyFormatter.cs
│   │   │   │   ├── LoggerEventIds.cs
│   │   │   │   ├── ReceiveMessageBodyLogState.cs
│   │   │   │   ├── SendMessageBodiesLogState.cs
│   │   │   │   └── SendMessageBodyLogState.cs
│   │   │   ├── PeerConnectedArgs.cs
│   │   │   ├── PeerConnectionBrokenArgs.cs
│   │   │   ├── PeerMessageArgs.cs
│   │   │   └── PeerStreamMessageArgs.cs
│   │   ├── Diagnostics/
│   │   │   ├── IIpcMessageInspector.cs
│   │   │   ├── IpcMessageInspectionContext.cs
│   │   │   ├── IpcMessageInspectorManager.cs
│   │   │   └── IpcMessageTracker.cs
│   │   ├── Exceptions/
│   │   │   ├── IpcClientPipeConnectionException.cs
│   │   │   ├── IpcException.cs
│   │   │   ├── IpcInvokingException.cs
│   │   │   ├── IpcInvokingTimeoutException.cs
│   │   │   ├── IpcLocalException.cs
│   │   │   ├── IpcMemberNotFoundException.cs
│   │   │   ├── IpcPeerConnectionBrokenException.cs
│   │   │   ├── IpcPipeConnectionException.cs
│   │   │   ├── IpcRemoteException.cs
│   │   │   ├── JsonIpcDirectRouteSerializeLocalException.cs
│   │   │   ├── JsonIpcDirectRoutedCanNotFindRequestHandlerException.cs
│   │   │   ├── JsonIpcDirectRoutedHandleRequestRemoteException.cs
│   │   │   ├── JsonIpcDirectRoutedLocalException.cs
│   │   │   └── JsonIpcDirectRoutedRemoteException.cs
│   │   ├── IIpcProvider.cs
│   │   ├── IIpcRequestHandler.cs
│   │   ├── IMessageWriter.cs
│   │   ├── IPeerProxy.cs
│   │   ├── Internals/
│   │   │   ├── AckManager.cs
│   │   │   ├── DebugContext.cs
│   │   │   ├── EmptyIpcRequestHandler.cs
│   │   │   ├── IClientMessageWriter.cs
│   │   │   ├── IpcHandleRequestMessageResult.cs
│   │   │   ├── IpcMessageConverter.cs
│   │   │   ├── IpcPipeServerMessageProvider.cs
│   │   │   ├── PeerManager.cs
│   │   │   ├── PeerReConnector.cs
│   │   │   ├── PeerRegisterProvider.cs
│   │   │   └── ServerStreamMessageReader.cs
│   │   ├── IpcMessageCommandType.cs
│   │   ├── IpcMessageWriter.cs
│   │   ├── IpcRouteds/
│   │   │   └── DirectRouteds/
│   │   │       ├── Base_/
│   │   │       │   ├── IpcDirectRoutedClientProxyBase.cs
│   │   │       │   └── IpcDirectRoutedProviderBase.cs
│   │   │       ├── IpcDirectRoutedMessageWriter.cs
│   │   │       ├── Json_/
│   │   │       │   ├── JsonIpcDirectRoutedCanNotFindRequestHandlerExceptionInfo.cs
│   │   │       │   ├── JsonIpcDirectRoutedClientProxy.cs
│   │   │       │   ├── JsonIpcDirectRoutedContext.cs
│   │   │       │   ├── JsonIpcDirectRoutedHandleRequestExceptionInfo.cs
│   │   │       │   ├── JsonIpcDirectRoutedLogStateMessageType.cs
│   │   │       │   ├── JsonIpcDirectRoutedLoggerExtension.cs
│   │   │       │   ├── JsonIpcDirectRoutedMessageLogState.cs
│   │   │       │   ├── JsonIpcDirectRoutedParameterlessType.cs
│   │   │       │   └── JsonIpcDirectRoutedProvider.cs
│   │   │       └── RawByte_/
│   │   │           ├── RawByteIpcDirectRoutedClientProxy.cs
│   │   │           └── RawByteIpcDirectRoutedProvider.cs
│   │   ├── Messages/
│   │   │   ├── Ack.cs
│   │   │   ├── CoreMessageType.cs
│   │   │   ├── IIpcResponseMessage.cs
│   │   │   ├── IpcClientRequestMessage.cs
│   │   │   ├── IpcClientRequestMessageId.cs
│   │   │   ├── IpcMessage.cs
│   │   │   ├── IpcMessageBody.cs
│   │   │   ├── IpcMessageContext.cs
│   │   │   ├── IpcMessageResult.cs
│   │   │   └── KnownResponseMessages.cs
│   │   ├── Package/
│   │   │   └── build/
│   │   │       └── Package.props
│   │   ├── Pipes/
│   │   │   ├── IpcClientService.cs
│   │   │   ├── IpcMessageManagerBase.cs
│   │   │   ├── IpcMessageRequestManager.cs
│   │   │   ├── IpcMessageResponseManager.cs
│   │   │   ├── IpcProvider.cs
│   │   │   ├── IpcRequestHandlerProvider.cs
│   │   │   ├── IpcRequestMessageContext.cs
│   │   │   ├── IpcServerService.cs
│   │   │   ├── PeerProxy.cs
│   │   │   └── PipeConnectors/
│   │   │       ├── IIpcClientPipeConnector.cs
│   │   │       ├── IpcClientPipeConnectionContext.cs
│   │   │       └── IpcClientPipeConnector.cs
│   │   ├── Properties/
│   │   │   └── .gitignore
│   │   ├── Serialization/
│   │   │   ├── IIpcObjectSerializer.cs
│   │   │   ├── IpcObjectJsonSerializer.cs
│   │   │   ├── JsonIpcMessageSerializer.cs
│   │   │   └── SystemTextJsonIpcObjectSerializer.cs
│   │   ├── Threading/
│   │   │   ├── IIpcThreadPool.cs
│   │   │   ├── IpcSingleThreadPool.cs
│   │   │   ├── IpcTaskScheduling.cs
│   │   │   ├── IpcThreadPool.cs
│   │   │   └── Tasks/
│   │   │       ├── IpcStartEndTaskItem.cs
│   │   │       ├── IpcTask.cs
│   │   │       └── TaskItem.cs
│   │   ├── Utils/
│   │   │   ├── Buffers/
│   │   │   │   ├── ISharedArrayPool.cs
│   │   │   │   └── SharedArrayPool.cs
│   │   │   ├── Caching/
│   │   │   │   ├── CachePool.cs
│   │   │   │   └── CachePoolValueMap.cs
│   │   │   ├── Extensions/
│   │   │   │   ├── BinaryArrayExtensions.cs
│   │   │   │   ├── ByteListExtensions.cs
│   │   │   │   ├── DoubleBufferTaskExtensions.cs
│   │   │   │   ├── IpcMessageCommandExtensions.cs
│   │   │   │   ├── IpcMessageContextExtensions.cs
│   │   │   │   ├── IpcMessageExtension.cs
│   │   │   │   ├── LoggerExtensions.cs
│   │   │   │   ├── PeerMessageArgsExtension.cs
│   │   │   │   └── StreamExtensions.cs
│   │   │   ├── IO/
│   │   │   │   ├── AsyncBinaryReader.cs
│   │   │   │   ├── AsyncBinaryWriter.cs
│   │   │   │   ├── ByteListMessageStream.cs
│   │   │   │   └── PipeHelper.cs
│   │   │   ├── Logging/
│   │   │   │   ├── EventId.cs
│   │   │   │   ├── ILogger.cs
│   │   │   │   ├── IpcLogger.cs
│   │   │   │   └── LogLevel.cs
│   │   │   ├── NullableBooleans.cs
│   │   │   └── TaskUtils.cs
│   │   ├── dotnetCampus.Ipc.csproj
│   │   └── dotnetCampus.Ipc.csproj.DotSettings
│   ├── dotnetCampus.Ipc.Analyzers/
│   │   ├── Analyzers/
│   │   │   ├── AddIpcProxyConfigsAnalyzer.cs
│   │   │   ├── AddIpcShapeAnalyzer.cs
│   │   │   ├── Compiling/
│   │   │   │   ├── IpcAttributeHelper.cs
│   │   │   │   └── IpcProxyInvokingInfo.cs
│   │   │   ├── ContractTypeDismatchWithInterfaceAnalyzer.cs
│   │   │   ├── ContractTypeMustBeAnInterfaceAnalyzer.cs
│   │   │   ├── DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer.cs
│   │   │   ├── EmptyIpcMemberAttributeIsUnnecessaryAnalyzer.cs
│   │   │   └── IgnoresIpcExceptionIsRecommendedAnalyzer.cs
│   │   ├── CodeAnalysis/
│   │   │   ├── Core/
│   │   │   │   ├── DiagnosticException.cs
│   │   │   │   └── Diagnostics.cs
│   │   │   ├── Models/
│   │   │   │   ├── IpcPublicAttributeNamedValues.cs
│   │   │   │   └── IpcShapeAttributeNamedValues.cs
│   │   │   └── Utils/
│   │   │       ├── IpcSemanticAttributeHelper.cs
│   │   │       ├── IpcSemanticSyntaxHelper.cs
│   │   │       ├── SemanticAttributeHelper.cs
│   │   │       ├── SemanticModelsHelper.cs
│   │   │       ├── SemanticSyntaxHelper.cs
│   │   │       └── SyntaxNameGuesser.cs
│   │   ├── CodeFixes/
│   │   │   ├── AddIpcShapeCodeFixProvider.cs
│   │   │   ├── ChangeClassContractTypeCodeFixProvider.cs
│   │   │   ├── DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider.cs
│   │   │   ├── EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider.cs
│   │   │   ├── IgnoresIpcExceptionIsRecommendedCodeFixProvider.cs
│   │   │   └── LetClassImplementInterfaceCodeFixProvider.cs
│   │   ├── Core/
│   │   │   └── ComponentModels/
│   │   │       └── Assignable.cs
│   │   ├── Generators/
│   │   │   ├── Compiling/
│   │   │   │   ├── IpcPublicCompilation.cs
│   │   │   │   ├── IpcPublicMemberProxyJointGenerator.cs
│   │   │   │   ├── IpcShapeCompilation.cs
│   │   │   │   └── Members/
│   │   │   │       ├── IPublicIpcObjectMemberGenerator.cs
│   │   │   │       ├── IpcPublicMethodInfo.cs
│   │   │   │       ├── IpcPublicPropertyInfo.cs
│   │   │   │       └── MemberIdGenerator.cs
│   │   │   ├── IpcPublicGenerator.cs
│   │   │   └── Utils/
│   │   │       └── GeneratorHelper.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── GlobalUsings.cs
│   │   │   ├── Localizations.Designer.cs
│   │   │   ├── Localizations.resx
│   │   │   ├── Localizations.zh-hans.resx
│   │   │   └── launchSettings.json
│   │   ├── dotnetCampus.Ipc.Analyzers.csproj
│   │   └── 分析器诊断.xlsx
│   └── dotnetCampus.Ipc.PipeMvc/
│       └── dotnetCampus.Ipc.PipeMvc.csproj
└── tests/
    ├── dotnetCampus.Ipc.Analyzers.Tests/
    │   ├── IgnoresIpcExceptionAnalyzerTests.cs
    │   ├── Verifiers/
    │   │   ├── CSharpAnalyzerVerifier`1+Test.cs
    │   │   ├── CSharpAnalyzerVerifier`1.cs
    │   │   ├── CSharpCodeFixVerifier`2+Test.cs
    │   │   ├── CSharpCodeFixVerifier`2.cs
    │   │   ├── CSharpCodeRefactoringVerifier`1+Test.cs
    │   │   ├── CSharpCodeRefactoringVerifier`1.cs
    │   │   ├── CSharpVerifierHelper.cs
    │   │   ├── VisualBasicAnalyzerVerifier`1+Test.cs
    │   │   ├── VisualBasicAnalyzerVerifier`1.cs
    │   │   ├── VisualBasicCodeFixVerifier`2+Test.cs
    │   │   ├── VisualBasicCodeFixVerifier`2.cs
    │   │   ├── VisualBasicCodeRefactoringVerifier`1+Test.cs
    │   │   └── VisualBasicCodeRefactoringVerifier`1.cs
    │   └── dotnetCampus.Ipc.Analyzers.Tests.csproj
    ├── dotnetCampus.Ipc.FakeTests/
    │   ├── FakeApis/
    │   │   ├── IRemoteFakeIpcArgumentOrReturn.cs
    │   │   ├── IRemoteFakeIpcObject.cs
    │   │   ├── RemoteFakeIpcObject.cs
    │   │   └── RemoteIpcReturn.cs
    │   ├── Program.cs
    │   └── dotnetCampus.Ipc.FakeTests.csproj
    └── dotnetCampus.Ipc.Tests/
        ├── AckManagerTest.cs
        ├── Attributes.cs
        ├── CompilerServices/
        │   ├── Fake/
        │   │   ├── FakeIpcObject.cs
        │   │   ├── FakeIpcObjectSubModelA.cs
        │   │   ├── FakeIpcObjectWithTypeAttributes.cs
        │   │   ├── IFakeIpcObject.cs
        │   │   ├── IFakeIpcObjectBase.cs
        │   │   └── INestedFakeIpcArgumentOrReturn.cs
        │   ├── FakeRemote/
        │   │   └── RemoteIpcArgument.cs
        │   └── GeneratedProxies/
        │       ├── IpcObjectTests.cs
        │       └── NotGeneratedTestOnlyFakeIpcObjectIpcShape.cs
        ├── IpcClientServiceTests.cs
        ├── IpcMessageConverterTest.cs
        ├── IpcObjectJsonSerializerTests.cs
        ├── IpcProviderTests.cs
        ├── IpcRouteds/
        │   └── DirectRouteds/
        │       ├── JsonIpcDirectRoutedProviderSystemJsonSerializerTest.cs
        │       └── JsonIpcDirectRoutedProviderTest.cs
        ├── NotifyTest.cs
        ├── PeerManagerTest.cs
        ├── PeerProxyTest.cs
        ├── PeerReConnectorTest.cs
        ├── PeerRegisterProviderTests.cs
        ├── Pipes/
        │   └── PipeConnectors/
        │       └── IpcClientPipeConnectorTest.cs
        ├── Properties/
        │   └── Compatibility.cs
        ├── ResponseManagerTests.cs
        ├── TaskExtension.cs
        ├── TestJsonContext.cs
        ├── TestLogger.cs
        ├── Threading/
        │   └── IpcThreadPoolTests.cs
        ├── Utils/
        │   ├── Extensions/
        │   │   └── PeerMessageArgsExtensionTest.cs
        │   └── IO/
        │       └── AsyncBinaryReaderTests.cs
        └── dotnetCampus.Ipc.Tests.csproj
Download .txt
Showing preview only (201K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (1721 symbols across 337 files)

FILE: analyzers/dotnetCampus.Ipc.SourceGenerators/GeneratedIpcJointGenerator.cs
  class GeneratedIpcJointGenerator (line 10) | [Generator(LanguageNames.CSharp)]
    method Initialize (line 13) | public void Initialize(IncrementalGeneratorInitializationContext context)
    method Execute (line 30) | private void Execute(SourceProductionContext context, GeneratorSyntaxC...
    method GenerateGeneratedIpcJoint (line 36) | private string GenerateGeneratedIpcJoint(GeneratorSyntaxContext contex...
    method GenerateMethodGroup (line 54) | private IEnumerable<string> GenerateMethodGroup(GeneratorSyntaxContext...
    method GenerateVoidMethod (line 62) | private string GenerateVoidMethod(GeneratorSyntaxContext context, int ...
    method GenerateReturnMethod (line 79) | private string GenerateReturnMethod(GeneratorSyntaxContext context, in...
    method GenerateAsyncVoidMethod (line 96) | private string GenerateAsyncVoidMethod(GeneratorSyntaxContext context,...
    method GenerateAsyncReturnMethod (line 108) | private string GenerateAsyncReturnMethod(GeneratorSyntaxContext contex...
    method GenerateTs (line 120) | private string GenerateTs(int genericCount, string? template = null)
    method GenerateTs (line 128) | private string GenerateTs(int genericCount, Func<int, string> template...
    method GenrateT (line 140) | private string GenrateT(int genericIndex, string template)

FILE: demo/IpcDirectRoutedAotDemo/DemoRequest.cs
  type DemoRequest (line 3) | public record DemoRequest

FILE: demo/IpcDirectRoutedAotDemo/DemoResponse.cs
  type DemoResponse (line 3) | public record DemoResponse

FILE: demo/IpcDirectRoutedAotDemo/NotifyInfo.cs
  type NotifyInfo (line 3) | public record NotifyInfo

FILE: demo/IpcDirectRoutedAotDemo/SourceGenerationContext.cs
  class SourceGenerationContext (line 10) | [JsonSerializable(typeof(NotifyInfo))]

FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/IFoo.cs
  type IFoo (line 8) | [IpcPublic]
    method Add (line 19) | int Add(int a, int b);
    method AddAsync (line 24) | Task<string> AddAsync(string a, int b);

FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/Foo.cs
  class Foo (line 3) | class Foo : IFoo
    method Add (line 7) | public int Add(int a, int b)
    method AddAsync (line 13) | public async Task<string> AddAsync(string a, int b)

FILE: demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/IFoo.cs
  type IFoo (line 8) | [IpcPublic(IgnoresIpcException = true, Timeout = 1000)]
    method Add (line 19) | int Add(int a, int b);
    method AddAsync (line 24) | Task<string> AddAsync(string a, int b);

FILE: demo/PipeMvc/PipeMvcClientDemo/App.xaml.cs
  class App (line 13) | public partial class App : Application

FILE: demo/PipeMvc/PipeMvcClientDemo/MainWindow.xaml.cs
  class MainWindow (line 15) | public partial class MainWindow : Window
    method MainWindow (line 17) | public MainWindow()
    method MainWindow_Loaded (line 24) | private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
    method GetFooButton_Click (line 36) | private async void GetFooButton_Click(object sender, RoutedEventArgs e)
    method Log (line 48) | private void Log(string message)
    method GetFooWithArgumentButton_Click (line 61) | private async void GetFooWithArgumentButton_Click(object sender, Route...
    method PostFooButton_Click (line 73) | private async void PostFooButton_Click(object sender, RoutedEventArgs e)
    method PostFooWithArgumentButton_Click (line 86) | private async void PostFooWithArgumentButton_Click(object sender, Rout...
    method MultiThreadButton_OnClick (line 103) | private void MultiThreadButton_OnClick(object sender, RoutedEventArgs e)
    method BuildRandomText (line 149) | private static string BuildRandomText()

FILE: demo/PipeMvc/PipeMvcServerDemo/FooContent.cs
  class FooContent (line 3) | public class FooContent

FILE: demo/PipeMvc/PipeMvcServerDemo/FooController.cs
  class FooController (line 6) | [Route("api/[controller]")]
    method FooController (line 10) | public FooController(ILogger<FooController> logger)
    method Get (line 17) | [HttpGet]
    method Add (line 24) | [HttpGet("Add")]
    method Post (line 31) | [HttpPost]
    method PostFooContent (line 38) | [HttpPost("PostFoo")]

FILE: demo/PipeMvc/PipeMvcServerDemo/MainWindow.xaml.cs
  class MainWindow (line 19) | public partial class MainWindow : Window
    method MainWindow (line 21) | public MainWindow()
    method Log (line 26) | public void Log(string message)

FILE: demo/PipeMvc/PipeMvcServerDemo/Program.cs
  class Program (line 12) | public class Program
    method Main (line 14) | [STAThread]
    method RunWpf (line 21) | private static void RunWpf()
    method RunMvc (line 32) | private static void RunMvc(string[] args)
    class DemoLogProvider (line 46) | class DemoLogProvider : ILoggerProvider
      method CreateLogger (line 48) | public ILogger CreateLogger(string categoryName)
      method Dispose (line 53) | public void Dispose()
      class DemoLogger (line 58) | class DemoLogger : ILogger
        method BeginScope (line 60) | public IDisposable BeginScope<TState>(TState state)
        class Empty (line 65) | class Empty : IDisposable
          method Dispose (line 68) | public void Dispose()
        method IsEnabled (line 73) | public bool IsEnabled(LogLevel logLevel)
        method Log (line 78) | public void Log<TState>(LogLevel logLevel, EventId eventId, TState...

FILE: demo/UnoDemo/IpcUno/IpcUno.Base/AppHead.xaml.cs
  class AppHead (line 7) | public sealed partial class AppHead : App
    method AppHead (line 13) | public AppHead()
    method OnLaunched (line 23) | protected override void OnLaunched(LaunchActivatedEventArgs args)

FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/App.xaml.cs
  class App (line 3) | public partial class App : Application
    method App (line 5) | public App()

FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/AppBuilderExtensions.cs
  class AppBuilderExtensions (line 3) | public static class AppBuilderExtensions
    method UseMauiControls (line 5) | public static MauiAppBuilder UseMauiControls(this MauiAppBuilder build...

FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/EmbeddedControl.xaml.cs
  class EmbeddedControl (line 3) | public partial class EmbeddedControl : ContentView
    method EmbeddedControl (line 5) | public EmbeddedControl()

FILE: demo/UnoDemo/IpcUno/IpcUno.MauiControls/UnoImageConverter.cs
  class UnoImageConverter (line 5) | public class UnoImageConverter : IValueConverter
    method Convert (line 7) | public object? Convert(object? value, Type targetType, object? paramet...
    method ConvertBack (line 16) | public object? ConvertBack(object? value, Type targetType, object? par...

FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/Program.cs
  class Program (line 9) | public class Program
    method Main (line 11) | public static void Main(string[] args)

FILE: demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Wpf/App.xaml.cs
  class App (line 7) | public partial class App : WpfApp
    method App (line 9) | public App()

FILE: demo/UnoDemo/IpcUno/IpcUno.Tests/AppInfoTests.cs
  class AppInfoTests (line 3) | public class AppInfoTests
    method Setup (line 5) | [SetUp]
    method AppInfoCreation (line 10) | [Test]

FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/Constants.cs
  class Constants (line 3) | public class Constants

FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/Given_MainPage.cs
  class Given_MainPage (line 3) | public class Given_MainPage : TestBase
    method When_SmokeTest (line 5) | [Test]

FILE: demo/UnoDemo/IpcUno/IpcUno.UITests/TestBase.cs
  class TestBase (line 4) | public class TestBase
    method TestBase (line 8) | static TestBase()
    method SetUpTest (line 37) | [SetUp]
    method TearDownTest (line 43) | [TearDown]
    method TakeScreenshot (line 49) | public FileInfo TakeScreenshot(string stepName)

FILE: demo/UnoDemo/IpcUno/IpcUno/App.cs
  class App (line 3) | public class App : EmbeddingApplication
    method OnLaunched (line 9) | protected async override void OnLaunched(LaunchActivatedEventArgs args)
    method RegisterRoutes (line 75) | private static void RegisterRoutes(IViewRegistry views, IRouteRegistry...

FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/AppConfig.cs
  type AppConfig (line 3) | public record AppConfig

FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/ConnectedPeerModel.cs
  class ConnectedPeerModel (line 12) | public class ConnectedPeerModel
    method ConnectedPeerModel (line 14) | public ConnectedPeerModel()
    method ConnectedPeerModel (line 19) | public ConnectedPeerModel(PeerProxy peer)
    method Peer_MessageReceived (line 25) | private void Peer_MessageReceived(object? sender, IPeerMessageArgs e)
    method AddMessage (line 36) | public void AddMessage(string name, string message)

FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/Entity.cs
  type Entity (line 3) | public record Entity(string Name);

FILE: demo/UnoDemo/IpcUno/IpcUno/Business/Models/IpcServerEntity.cs
  type IpcServerEntity (line 3) | public record IpcServerEntity(string Name);

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/AddConnectPage.xaml.cs
  class AddConnectPage (line 3) | public sealed partial class AddConnectPage : Page
    method AddConnectPage (line 5) | public AddConnectPage()
    method ConnectServerButton_OnClick (line 10) | private void ConnectServerButton_OnClick(object sender, RoutedEventArg...
    method StartServerButton_OnClick (line 15) | private void StartServerButton_OnClick(object sender, RoutedEventArgs e)
    method BuildServerName (line 21) | private void BuildServerName()

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ChatPage.xaml.cs
  class ChatPage (line 8) | public sealed partial class ChatPage : Page
    method ChatPage (line 10) | public ChatPage(ConnectedPeerModel model, string serverName)
    method ChatPage_Loaded (line 20) | private void ChatPage_Loaded(object sender, RoutedEventArgs e)
    method SendButton_OnClick (line 38) | private async void SendButton_OnClick(object sender, RoutedEventArgs e)

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/MainPage.xaml.cs
  class MainPage (line 7) | public sealed partial class MainPage : Page
    method MainPage (line 9) | public MainPage()
    method MainPage_Loaded (line 16) | private void MainPage_Loaded(object sender, RoutedEventArgs e)
    method MainPage_DataContextChanged (line 21) | private void MainPage_DataContextChanged(FrameworkElement sender, Data...
    method ViewModel_AddedLogMessage (line 27) | private void ViewModel_AddedLogMessage(object? sender, string message)
    method ConnectedPeerListView_SelectionChanged (line 40) | private void ConnectedPeerListView_SelectionChanged(object sender, Sel...
    method AddConnectButton_Click (line 49) | private void AddConnectButton_Click(object sender, RoutedEventArgs e)
    method ShowAddConnectPage (line 54) | private void ShowAddConnectPage()

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/MainViewModel.cs
  class MainViewModel (line 13) | public partial class MainViewModel : ObservableObject, IInjectable<IServ...
    method MainViewModel (line 21) | public MainViewModel(IpcServerEntity entity)
    method IpcProvider_PeerConnected (line 29) | private void IpcProvider_PeerConnected(object? sender, dotnetCampus.Ip...
    method AddPeer (line 35) | private async Task AddPeer(PeerProxy peer)
    method Peer_PeerConnectBroke (line 73) | private void Peer_PeerConnectBroke(object? sender, IPeerConnectionBrok...
    method Log (line 79) | private void Log(string message)
    method Inject (line 86) | public void Inject(IServiceProvider entity)
    method ConnectAsync (line 90) | public async Task ConnectAsync(string serverName)

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondPage.xaml.cs
  class SecondPage (line 3) | public sealed partial class SecondPage : Page
    method SecondPage (line 5) | public SecondPage()

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondViewModel.cs
  type SecondViewModel (line 3) | public partial record SecondViewModel(Entity Entity)

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerPage.xaml.cs
  class ServerPage (line 3) | public sealed partial class ServerPage : Page
    method ServerPage (line 5) | public ServerPage()

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerViewModel.cs
  class ServerViewModel (line 3) | public partial class ServerViewModel : ObservableObject
    method ServerViewModel (line 5) | public ServerViewModel(INavigator navigator)
    method NavigateMainPage (line 15) | [RelayCommand]

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/Shell.xaml.cs
  class Shell (line 3) | public sealed partial class Shell : UserControl, IContentControlProvider
    method Shell (line 5) | public Shell()

FILE: demo/UnoDemo/IpcUno/IpcUno/Presentation/ShellViewModel.cs
  class ShellViewModel (line 3) | public class ShellViewModel
    method ShellViewModel (line 7) | public ShellViewModel(
    method Start (line 14) | public async Task Start()

FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/ScrollViewerExtensions.cs
  class ScrollViewerExtensions (line 3) | static class ScrollViewerExtensions
    method ScrollToBottom (line 5) | public static void ScrollToBottom(this TextBox textBox)
    method ScrollToBottom (line 10) | public static void ScrollToBottom(this ListView listView)
    method ScrollToBottomInner (line 15) | private static void ScrollToBottomInner(UIElement element)

FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/TreeExtensions.cs
  class TreeExtensions (line 3) | static class TreeExtensions
    method VisualDescendant (line 5) | public static T? VisualDescendant<T>(this UIElement element) where T :...
    method VisualDescendant (line 8) | public static T? VisualDescendant<T>(DependencyObject element) where T...

FILE: demo/UnoDemo/IpcUno/IpcUno/Utils/UISpyHelper.cs
  class UISpyHelper (line 5) | static class UISpyHelper
    method Spy (line 7) | public static void Spy(this DependencyObject element)
    method SpyInner (line 15) | private static void SpyInner(DependencyObject element, Uno.Extensions....

FILE: demo/dotnetCampus.Ipc.Demo/Program.cs
  class Program (line 14) | internal class Program
    method Main (line 16) | private static void Main(string[] args)
    method MainAsync (line 22) | private static async Task MainAsync(string[] args)
    method GetCurrentProcessId (line 81) | private static int GetCurrentProcessId()
    method GetMessageText (line 86) | private static string GetMessageText(IpcMessageBody body)

FILE: demo/dotnetCampus.Ipc.WpfDemo/App.xaml.cs
  class App (line 14) | public partial class App : Application

FILE: demo/dotnetCampus.Ipc.WpfDemo/ConnectedPeerModel.cs
  class ConnectedPeerModel (line 12) | public class ConnectedPeerModel
    method ConnectedPeerModel (line 14) | public ConnectedPeerModel()
    method ConnectedPeerModel (line 19) | public ConnectedPeerModel(PeerProxy peer)
    method Peer_MessageReceived (line 25) | private void Peer_MessageReceived(object? sender, IPeerMessageArgs e)
    method AddMessage (line 36) | public void AddMessage(string name, string message)

FILE: demo/dotnetCampus.Ipc.WpfDemo/DispatcherSwitcher.cs
  class DispatcherSwitcher (line 10) | public static class DispatcherSwitcher
    method ResumeBackground (line 12) | public static ThreadPoolAwaiter ResumeBackground() => new ThreadPoolAw...
    method ResumeBackground (line 14) | public static ThreadPoolAwaiter ResumeBackground(this Dispatcher dispa...
    method ResumeForeground (line 17) | public static DispatcherAwaiter ResumeForeground(this Dispatcher dispa...
    class ThreadPoolAwaiter (line 20) | public class ThreadPoolAwaiter : INotifyCompletion
      method OnCompleted (line 22) | public void OnCompleted(Action continuation)
      method GetResult (line 33) | public void GetResult()
      method GetAwaiter (line 37) | public ThreadPoolAwaiter GetAwaiter() => this;
    class DispatcherAwaiter (line 40) | public class DispatcherAwaiter : INotifyCompletion
      method DispatcherAwaiter (line 44) | public DispatcherAwaiter(Dispatcher dispatcher) => _dispatcher = dis...
      method OnCompleted (line 46) | public void OnCompleted(Action continuation)
      method GetResult (line 57) | public void GetResult()
      method GetAwaiter (line 61) | public DispatcherAwaiter GetAwaiter() => this;

FILE: demo/dotnetCampus.Ipc.WpfDemo/MainWindow.xaml.cs
  class MainWindow (line 30) | public partial class MainWindow : Window
    method MainWindow (line 32) | public MainWindow()
    method ConnectToPeer (line 54) | private async void ConnectToPeer(string peerName)
    method ServerPage_OnServerStarting (line 60) | private void ServerPage_OnServerStarting(object? sender, string e)
    method StartServer (line 65) | private void StartServer(string serverName)
    method IpcProvider_PeerConnected (line 94) | private void IpcProvider_PeerConnected(object? sender, Context.PeerCon...
    method AddPeer (line 99) | private void AddPeer(PeerProxy peer)
    method Peer_PeerConnectBroke (line 118) | private void Peer_PeerConnectBroke(object? sender, IPeerConnectionBrok...
    method Log (line 126) | private async void Log(string message)
    method AddConnectButton_OnClick (line 140) | private void AddConnectButton_OnClick(object sender, RoutedEventArgs e)
    method ConnectedPeerListView_OnSelectionChanged (line 166) | private void ConnectedPeerListView_OnSelectionChanged(object sender, S...

FILE: demo/dotnetCampus.Ipc.WpfDemo/Options.cs
  class Options (line 5) | public class Options

FILE: demo/dotnetCampus.Ipc.WpfDemo/View/AddConnectPage.xaml.cs
  class AddConnectPage (line 19) | public partial class AddConnectPage : UserControl
    method AddConnectPage (line 21) | public AddConnectPage()
    method ConnectServerButton_OnClick (line 27) | private void ConnectServerButton_OnClick(object sender, RoutedEventArg...
    method StartServerButton_OnClick (line 32) | private void StartServerButton_OnClick(object sender, RoutedEventArgs e)
    method BuildServerName (line 38) | private void BuildServerName()

FILE: demo/dotnetCampus.Ipc.WpfDemo/View/CharPage.xaml.cs
  class CharPage (line 20) | public partial class CharPage : UserControl
    method CharPage (line 22) | public CharPage()
    method CharPage_Loaded (line 29) | private void CharPage_Loaded(object sender, RoutedEventArgs e)
    method SendButton_OnClick (line 50) | private async void SendButton_OnClick(object sender, RoutedEventArgs e)

FILE: demo/dotnetCampus.Ipc.WpfDemo/View/ListViewExtensions.cs
  class ListViewExtensions (line 7) | public static class ListViewExtensions
    method ScrollToBottom (line 9) | public static void ScrollToBottom(this ListView listView)

FILE: demo/dotnetCampus.Ipc.WpfDemo/View/ServerPage.xaml.cs
  class ServerPage (line 19) | public partial class ServerPage : UserControl
    method ServerPage (line 21) | public ServerPage()
    method Button_OnClick (line 35) | private void Button_OnClick(object sender, RoutedEventArgs e)
    method OnServerStarting (line 48) | protected virtual void OnServerStarting(string e)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcClient/IpcNamedPipeClientHandler.cs
  class IpcNamedPipeClientHandler (line 11) | class IpcNamedPipeClientHandler : HttpMessageHandler
    method IpcNamedPipeClientHandler (line 13) | public IpcNamedPipeClientHandler(PeerProxy serverProxy, IpcProvider? c...
    method SendAsync (line 28) | protected override async Task<HttpResponseMessage> SendAsync(HttpReque...
    method Dispose (line 45) | protected override void Dispose(bool disposing)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcClient/IpcPipeMvcClientProvider.cs
  class IpcPipeMvcClientProvider (line 13) | public static class IpcPipeMvcClientProvider
    method CreateIpcMvcClientAsync (line 21) | public static async Task<HttpClient> CreateIpcMvcClientAsync(string ip...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ApplicationWrapper.cs
  class ApplicationWrapper (line 12) | internal abstract class ApplicationWrapper
    method CreateContext (line 14) | internal abstract object CreateContext(IFeatureCollection features);
    method ProcessRequestAsync (line 16) | internal abstract Task ProcessRequestAsync(object context);
    method DisposeContext (line 18) | internal abstract void DisposeContext(object context, Exception? excep...
    method ApplicationWrapper (line 26) | public ApplicationWrapper(IHttpApplication<TContext> application, Acti...
    method CreateContext (line 32) | internal override object CreateContext(IFeatureCollection features)
    method CreateContext (line 37) | TContext IHttpApplication<TContext>.CreateContext(IFeatureCollection f...
    method DisposeContext (line 42) | internal override void DisposeContext(object context, Exception? excep...
    method DisposeContext (line 47) | void IHttpApplication<TContext>.DisposeContext(TContext context, Excep...
    method ProcessRequestAsync (line 52) | internal override Task ProcessRequestAsync(object context)
    method ProcessRequestAsync (line 57) | Task IHttpApplication<TContext>.ProcessRequestAsync(TContext context)
  class ApplicationWrapper (line 21) | internal class ApplicationWrapper<TContext> : ApplicationWrapper, IHttpA...
    method CreateContext (line 14) | internal abstract object CreateContext(IFeatureCollection features);
    method ProcessRequestAsync (line 16) | internal abstract Task ProcessRequestAsync(object context);
    method DisposeContext (line 18) | internal abstract void DisposeContext(object context, Exception? excep...
    method ApplicationWrapper (line 26) | public ApplicationWrapper(IHttpApplication<TContext> application, Acti...
    method CreateContext (line 32) | internal override object CreateContext(IFeatureCollection features)
    method CreateContext (line 37) | TContext IHttpApplication<TContext>.CreateContext(IFeatureCollection f...
    method DisposeContext (line 42) | internal override void DisposeContext(object context, Exception? excep...
    method DisposeContext (line 47) | void IHttpApplication<TContext>.DisposeContext(TContext context, Excep...
    method ProcessRequestAsync (line 52) | internal override Task ProcessRequestAsync(object context)
    method ProcessRequestAsync (line 57) | Task IHttpApplication<TContext>.ProcessRequestAsync(TContext context)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/AsyncStreamWrapper.cs
  class AsyncStreamWrapper (line 12) | internal class AsyncStreamWrapper : Stream
    method AsyncStreamWrapper (line 17) | internal AsyncStreamWrapper(Stream inner, Func<bool> allowSynchronousIO)
    method Flush (line 37) | public override void Flush()
    method FlushAsync (line 43) | public override Task FlushAsync(CancellationToken cancellationToken)
    method Read (line 48) | public override int Read(byte[] buffer, int offset, int count)
    method ReadAsync (line 58) | public override Task<int> ReadAsync(byte[] buffer, int offset, int cou...
    method ReadAsync (line 63) | public override ValueTask<int> ReadAsync(Memory<byte> buffer, Cancella...
    method BeginRead (line 68) | public override IAsyncResult BeginRead(byte[] buffer, int offset, int ...
    method EndRead (line 73) | public override int EndRead(IAsyncResult asyncResult)
    method Seek (line 78) | public override long Seek(long offset, SeekOrigin origin)
    method SetLength (line 83) | public override void SetLength(long value)
    method Write (line 88) | public override void Write(byte[] buffer, int offset, int count)
    method BeginWrite (line 98) | public override IAsyncResult BeginWrite(byte[] buffer, int offset, int...
    method EndWrite (line 103) | public override void EndWrite(IAsyncResult asyncResult)
    method WriteAsync (line 108) | public override Task WriteAsync(byte[] buffer, int offset, int count, ...
    method WriteAsync (line 113) | public override ValueTask WriteAsync(ReadOnlyMemory<byte> buffer, Canc...
    method Close (line 118) | public override void Close()
    method Dispose (line 123) | protected override void Dispose(bool disposing)
    method DisposeAsync (line 128) | public override ValueTask DisposeAsync()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ClientHandler.cs
  class ClientHandler (line 26) | internal class ClientHandler : HttpMessageHandler
    method ClientHandler (line 36) | internal ClientHandler(PathString pathBase, ApplicationWrapper applica...
    method SendAsync (line 59) | protected override async Task<HttpResponseMessage> SendAsync(
    method SendInnerAsync (line 66) | public async Task<HttpResponseMessage> SendInnerAsync(HttpRequestMessa...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/HttpContextBuilder.cs
  class HttpContextBuilder (line 15) | internal class HttpContextBuilder : IHttpBodyControlFeature, IHttpResetF...
    method HttpContextBuilder (line 35) | internal HttpContextBuilder(ApplicationWrapper application, bool allow...
    method Configure (line 66) | internal void Configure(Action<HttpContext, PipeReader> configureContext)
    method SendRequestStream (line 76) | internal void SendRequestStream(Func<PipeWriter, Task> sendRequestStream)
    method RegisterResponseReadCompleteCallback (line 86) | internal void RegisterResponseReadCompleteCallback(Action<HttpContext>...
    method SendAsync (line 95) | internal Task<HttpContext> SendAsync(CancellationToken cancellationToken)
    method ClientInitiatedAbort (line 170) | internal void ClientInitiatedAbort()
    method ResponseBodyReadComplete (line 186) | private void ResponseBodyReadComplete()
    method RequestBodyReadInProgress (line 191) | private bool RequestBodyReadInProgress()
    method CompleteResponseAsync (line 203) | internal async Task CompleteResponseAsync()
    method ReturnResponseMessageAsync (line 211) | internal async Task ReturnResponseMessageAsync()
    method Abort (line 251) | internal void Abort(Exception exception)
    method CancelRequestBody (line 260) | private void CancelRequestBody()
    method Reset (line 266) | void IHttpResetFeature.Reset(int errorCode)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/HttpResetTestException.cs
  class HttpResetTestException (line 13) | public class HttpResetTestException : Exception
    method HttpResetTestException (line 19) | public HttpResetTestException(int errorCode)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/IpcServer.cs
  class IpcServer (line 21) | public class IpcServer : IServer
    method IpcServer (line 32) | public IpcServer(IServiceProvider services, IOptions<IpcServerOptions>...
    method IpcServer (line 44) | public IpcServer(IServiceProvider services, IFeatureCollection feature...
    method IpcServer (line 63) | public IpcServer(IServiceProvider services)
    method IpcServer (line 73) | public IpcServer(IServiceProvider services, IFeatureCollection feature...
    method IpcServer (line 84) | public IpcServer(IWebHostBuilder builder)
    method IpcServer (line 94) | public IpcServer(IWebHostBuilder builder, IFeatureCollection featureCo...
    method CreateHandler (line 158) | public HttpMessageHandler CreateHandler()
    method CreateClient (line 167) | public HttpClient CreateClient()
    method SendAsync (line 195) | public async Task<HttpContext> SendAsync(Action<HttpContext> configure...
    method Dispose (line 227) | public void Dispose()
    method StartAsync (line 236) | Task IServer.StartAsync<TContext>(IHttpApplication<TContext> applicati...
    method StopAsync (line 251) | Task IServer.StopAsync(CancellationToken cancellationToken)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/IpcServerOptions.cs
  class IpcServerOptions (line 15) | public class IpcServerOptions

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/NoopHostLifetime.cs
  class NoopHostLifetime (line 11) | internal class NoopHostLifetime : IHostLifetime
    method StopAsync (line 13) | public Task StopAsync(CancellationToken cancellationToken)
    method WaitForStartAsync (line 18) | public Task WaitForStartAsync(CancellationToken cancellationToken)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestBodyDetectionFeature.cs
  class RequestBodyDetectionFeature (line 9) | internal class RequestBodyDetectionFeature : IHttpRequestBodyDetectionFe...
    method RequestBodyDetectionFeature (line 11) | public RequestBodyDetectionFeature(bool canHaveBody)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestBuilder.cs
  class RequestBuilder (line 15) | internal class RequestBuilder
    method RequestBuilder (line 24) | public RequestBuilder(IpcServer server, string path)
    method And (line 40) | public RequestBuilder And(Action<HttpRequestMessage> configure)
    method AddHeader (line 57) | public RequestBuilder AddHeader(string name, string value)
    method SendAsync (line 79) | public Task<HttpResponseMessage> SendAsync(string method)
    method GetAsync (line 89) | public Task<HttpResponseMessage> GetAsync()
    method PostAsync (line 99) | public Task<HttpResponseMessage> PostAsync()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestFeature.cs
  class RequestFeature (line 11) | internal class RequestFeature : IHttpRequestFeature
    method RequestFeature (line 13) | public RequestFeature()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestLifetimeFeature.cs
  class RequestLifetimeFeature (line 11) | internal class RequestLifetimeFeature : IHttpRequestLifetimeFeature
    method RequestLifetimeFeature (line 16) | public RequestLifetimeFeature(Action<Exception> abort)
    method Cancel (line 24) | internal void Cancel()
    method Abort (line 29) | void IHttpRequestLifetimeFeature.Abort()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyPipeWriter.cs
  class ResponseBodyPipeWriter (line 14) | internal class ResponseBodyPipeWriter : PipeWriter
    method ResponseBodyPipeWriter (line 22) | internal ResponseBodyPipeWriter(Pipe pipe, Func<Task> onFirstWriteAsync)
    method FlushAsync (line 29) | public override async ValueTask<FlushResult> FlushAsync(CancellationTo...
    method FirstWriteAsync (line 38) | private Task FirstWriteAsync()
    method Abort (line 48) | internal void Abort(Exception innerException)
    method Complete (line 55) | internal void Complete()
    method CheckNotComplete (line 67) | private void CheckNotComplete()
    method Complete (line 75) | public override void Complete(Exception? exception = null)
    method CancelPendingFlush (line 84) | public override void CancelPendingFlush() => _pipe.Writer.CancelPendin...
    method Advance (line 86) | public override void Advance(int bytes)
    method GetMemory (line 92) | public override Memory<byte> GetMemory(int sizeHint = 0)
    method GetSpan (line 98) | public override Span<byte> GetSpan(int sizeHint = 0)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyReaderStream.cs
  class ResponseBodyReaderStream (line 18) | internal class ResponseBodyReaderStream : Stream
    method ResponseBodyReaderStream (line 29) | internal ResponseBodyReaderStream(Pipe pipe, Action abortRequest, Acti...
    method Seek (line 52) | public override long Seek(long offset, SeekOrigin origin) => throw new...
    method SetLength (line 54) | public override void SetLength(long value) => throw new NotSupportedEx...
    method Flush (line 56) | public override void Flush() => throw new NotSupportedException();
    method FlushAsync (line 58) | public override Task FlushAsync(CancellationToken cancellationToken) =...
    method Write (line 61) | public override void Write(byte[] buffer, int offset, int count) => th...
    method WriteAsync (line 63) | public override Task WriteAsync(byte[] buffer, int offset, int count, ...
    method Read (line 67) | public override int Read(byte[] buffer, int offset, int count)
    method ReadAsync (line 72) | public override async Task<int> ReadAsync(byte[] buffer, int offset, i...
    method VerifyBuffer (line 105) | private static void VerifyBuffer(byte[] buffer, int offset, int count)
    method Cancel (line 121) | internal void Cancel()
    method Abort (line 126) | internal void Abort(Exception innerException)
    method CheckAborted (line 139) | private void CheckAborted()
    method Dispose (line 150) | protected override void Dispose(bool disposing)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyWriterStream.cs
  class ResponseBodyWriterStream (line 12) | internal class ResponseBodyWriterStream : Stream
    method ResponseBodyWriterStream (line 17) | public ResponseBodyWriterStream(ResponseBodyPipeWriter responseWriter,...
    method Read (line 33) | public override int Read(byte[] buffer, int offset, int count)
    method Seek (line 38) | public override long Seek(long offset, SeekOrigin origin)
    method SetLength (line 43) | public override void SetLength(long value)
    method Flush (line 48) | public override void Flush()
    method FlushAsync (line 58) | public override async Task FlushAsync(CancellationToken cancellationTo...
    method Write (line 63) | public override void Write(byte[] buffer, int offset, int count)
    method WriteAsync (line 74) | public override async Task WriteAsync(byte[] buffer, int offset, int c...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseFeature.cs
  class ResponseFeature (line 15) | internal class ResponseFeature : IHttpResponseFeature, IHttpResponseBody...
    method ResponseFeature (line 25) | public ResponseFeature(Action<Exception> abort)
    method OnStarting (line 79) | public void OnStarting(Func<object, Task> callback, object state)
    method OnCompleted (line 94) | public void OnCompleted(Func<object, Task> callback, object state)
    method FireOnSendingHeadersAsync (line 110) | public async Task FireOnSendingHeadersAsync()
    method FireOnResponseCompletedAsync (line 126) | public Task FireOnResponseCompletedAsync()
    method StartAsync (line 131) | public async Task StartAsync(CancellationToken token = default)
    method DisableBuffering (line 144) | public void DisableBuffering()
    method SendFileAsync (line 148) | public Task SendFileAsync(string path, long offset, long? count, Cance...
    method CompleteAsync (line 153) | public Task CompleteAsync()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseTrailersFeature.cs
  class ResponseTrailersFeature (line 10) | internal class ResponseTrailersFeature : IHttpResponseTrailersFeature

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/TestWebSocket.cs
  class TestWebSocket (line 14) | internal class TestWebSocket : WebSocket
    method CreatePair (line 24) | public static Tuple<TestWebSocket, TestWebSocket> CreatePair(string? s...
    method CloseAsync (line 52) | public override async Task CloseAsync(WebSocketCloseStatus closeStatus...
    method CloseOutputAsync (line 75) | public override async Task CloseOutputAsync(WebSocketCloseStatus close...
    method Abort (line 94) | public override void Abort()
    method Dispose (line 105) | public override void Dispose()
    method ReceiveAsync (line 116) | public override async Task<WebSocketReceiveResult> ReceiveAsync(ArrayS...
    method SendAsync (line 160) | public override Task SendAsync(ArraySegment<byte> buffer, WebSocketMes...
    method Close (line 173) | private void Close()
    method ThrowIfDisposed (line 179) | private void ThrowIfDisposed()
    method ThrowIfOutputClosed (line 187) | private void ThrowIfOutputClosed()
    method ThrowIfInputClosed (line 195) | private void ThrowIfInputClosed()
    method ValidateSegment (line 203) | private void ValidateSegment(ArraySegment<byte> buffer)
    method TestWebSocket (line 219) | private TestWebSocket(string? subProtocol, ReceiverSenderBuffer readBu...
    class Message (line 227) | private class Message
      method Message (line 229) | public Message(ArraySegment<byte> buffer, WebSocketMessageType messa...
      method Message (line 238) | public Message(WebSocketCloseStatus? closeStatus, string? closeStatu...
    class ReceiverSenderBuffer (line 254) | private class ReceiverSenderBuffer
      method ReceiverSenderBuffer (line 262) | public ReceiverSenderBuffer()
      method ReceiveAsync (line 268) | public virtual async Task<Message> ReceiveAsync(CancellationToken ca...
      method SendAsync (line 287) | public virtual Task SendAsync(Message message, CancellationToken can...
      method SetReceiverClosed (line 312) | public void SetReceiverClosed()
      method SetSenderClosed (line 327) | public void SetSenderClosed()
      method ThrowNoReceive (line 342) | private void ThrowNoReceive()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/UpgradeFeature.cs
  class UpgradeFeature (line 12) | internal class UpgradeFeature : IHttpUpgradeFeature
    method UpgradeAsync (line 17) | public Task<Stream> UpgradeAsync()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/WebSocketClient.cs
  class WebSocketClient (line 23) | class WebSocketClient
    method WebSocketClient (line 28) | internal WebSocketClient(PathString pathBase, ApplicationWrapper appli...
    method ConnectAsync (line 60) | public async Task<WebSocket> ConnectAsync(Uri uri, CancellationToken c...
    method CreateRequestKey (line 119) | private string CreateRequestKey()
    class WebSocketFeature (line 126) | private class WebSocketFeature : IHttpWebSocketFeature
      method WebSocketFeature (line 130) | public WebSocketFeature(HttpContext context)
      method AcceptAsync (line 141) | async Task<WebSocket> IHttpWebSocketFeature.AcceptAsync(WebSocketAcc...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/IpcFramework/IpcPipeMvcServerCore.cs
  class IpcPipeMvcServerCore (line 14) | class IpcPipeMvcServerCore
    method IpcPipeMvcServerCore (line 16) | public IpcPipeMvcServerCore(IServiceProvider serviceProvider, string? ...
    method Start (line 38) | public void Start() => IpcServer.StartServer();

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/WebHostBuilderExtensions.cs
  class WebHostBuilderExtensions (line 20) | public static class WebHostBuilderExtensions
    method UsePipeIpcServer (line 28) | public static IWebHostBuilder UsePipeIpcServer(this IWebHostBuilder bu...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HeaderContent.cs
  class HeaderContent (line 7) | class HeaderContent

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpMessageSerializer.cs
  class HttpMessageSerializer (line 12) | static class HttpMessageSerializer
    method Serialize (line 14) | public static byte[] Serialize(HttpResponseMessage response)
    method Serialize (line 22) | public static byte[] Serialize(HttpRequestMessage request)
    method DeserializeToResponse (line 29) | internal static HttpResponseMessage DeserializeToResponse(IpcMessageBo...
    method DeserializeToRequest (line 38) | public static HttpRequestMessage DeserializeToRequest(IpcMessageBody b...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageContentBase.cs
  class HttpRequestMessageContentBase (line 11) | class HttpRequestMessageContentBase
    method HttpRequestMessageContentBase (line 13) | public HttpRequestMessageContentBase(HttpRequestMessage message)
    method HttpRequestMessageContentBase (line 30) | public HttpRequestMessageContentBase()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageDeserializeContent.cs
  class HttpRequestMessageDeserializeContent (line 12) | class HttpRequestMessageDeserializeContent : HttpRequestMessageContentBase
    method ToHttpResponseMessage (line 14) | public HttpRequestMessage ToHttpResponseMessage()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageSerializeContent.cs
  class HttpRequestMessageSerializeContent (line 8) | class HttpRequestMessageSerializeContent : HttpRequestMessageContentBase
    method HttpRequestMessageSerializeContent (line 10) | public HttpRequestMessageSerializeContent(HttpRequestMessage message) ...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageContentBase.cs
  class HttpResponseMessageContentBase (line 11) | class HttpResponseMessageContentBase
    method HttpResponseMessageContentBase (line 13) | public HttpResponseMessageContentBase()
    method HttpResponseMessageContentBase (line 17) | public HttpResponseMessageContentBase(HttpResponseMessage message)

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageDeserializeContent.cs
  class HttpResponseMessageDeserializeContent (line 12) | class HttpResponseMessageDeserializeContent : HttpResponseMessageContent...
    method ToHttpResponseMessage (line 17) | public HttpResponseMessage ToHttpResponseMessage()

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageSerializeContent.cs
  class HttpResponseMessageSerializeContent (line 8) | class HttpResponseMessageSerializeContent : HttpResponseMessageContentBase
    method HttpResponseMessageSerializeContent (line 10) | public HttpResponseMessageSerializeContent(HttpResponseMessage message...

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/IpcPipeMvcContext.cs
  class IpcPipeMvcContext (line 3) | class IpcPipeMvcContext

FILE: src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/IpcResponseMessageResult.cs
  class IpcResponseMessageResult (line 5) | class IpcResponseMessageResult : IIpcResponseMessage
    method IpcResponseMessageResult (line 7) | public IpcResponseMessageResult(IpcMessage responseMessage)

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/AddIpcProxyConfigsAnalyzer.cs
  class AddIpcProxyConfigsAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method AddIpcProxyConfigsAnalyzer (line 8) | public AddIpcProxyConfigsAnalyzer()
    method Initialize (line 17) | public override void Initialize(AnalysisContext context)
    method AnalyzeIpcPublicAttributes (line 25) | private void AnalyzeIpcPublicAttributes(SyntaxNodeAnalysisContext cont...

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/AddIpcShapeAnalyzer.cs
  class AddIpcShapeAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method AddIpcShapeAnalyzer (line 8) | public AddIpcShapeAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeIpcPublicAttributes (line 23) | private void AnalyzeIpcPublicAttributes(SyntaxNodeAnalysisContext cont...

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/Compiling/IpcAttributeHelper.cs
  class IpcAttributeHelper (line 6) | internal static class IpcAttributeHelper
    method TryFindIpcPublicAttributes (line 8) | public static IEnumerable<(AttributeSyntax attributeNode, IpcPublicAtt...
    method TryFindIpcShapeAttributes (line 35) | public static IEnumerable<(AttributeSyntax attributeNode, IpcShapeAttr...
    method TryFindMemberAttributes (line 62) | public static IEnumerable<(AttributeSyntax? attributeNode, IpcPublicAt...
    method TryFindIpcPublicType (line 113) | private static bool TryFindIpcPublicType(SemanticModel semanticModel, ...

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/Compiling/IpcProxyInvokingInfo.cs
  type IpcProxyInvokingInfo (line 6) | [DebuggerDisplay("{MemberAccessNode.GetLocation()?.SourceSpan.Start,nq}:...
    method IpcProxyInvokingInfo (line 9) | private IpcProxyInvokingInfo(SemanticModel semanticModel, MemberAccess...
    method IpcProxyInvokingInfo (line 19) | private IpcProxyInvokingInfo(SemanticModel semanticModel, MemberAccess...
    method GetHashCode (line 55) | public override int GetHashCode()
    method TryCreateIpcProxyInvokingInfo (line 64) | public static IpcProxyInvokingInfo? TryCreateIpcProxyInvokingInfo(Sema...
    class EqualityComparerByContractType (line 111) | private sealed class EqualityComparerByContractType : IEqualityCompare...
      method Equals (line 113) | public bool Equals(IpcProxyInvokingInfo x, IpcProxyInvokingInfo y)
      method GetHashCode (line 118) | public int GetHashCode(IpcProxyInvokingInfo info)

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/ContractTypeDismatchWithInterfaceAnalyzer.cs
  class ContractTypeDismatchWithInterfaceAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method ContractTypeDismatchWithInterfaceAnalyzer (line 8) | public ContractTypeDismatchWithInterfaceAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeTypeIpcAttributes (line 23) | private void AnalyzeTypeIpcAttributes(SyntaxNodeAnalysisContext context)

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/ContractTypeMustBeAnInterfaceAnalyzer.cs
  class ContractTypeMustBeAnInterfaceAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method ContractTypeMustBeAnInterfaceAnalyzer (line 8) | public ContractTypeMustBeAnInterfaceAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeTypeIpcAttributes (line 23) | private void AnalyzeTypeIpcAttributes(SyntaxNodeAnalysisContext context)

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer.cs
  class DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer (line 8) | public DefaultReturnDependsOnIgnoresIpcExceptionAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeIpcTypeAttributes (line 24) | private void AnalyzeIpcTypeAttributes(SyntaxNodeAnalysisContext context)

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/EmptyIpcMemberAttributeIsUnnecessaryAnalyzer.cs
  class EmptyIpcMemberAttributeIsUnnecessaryAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method EmptyIpcMemberAttributeIsUnnecessaryAnalyzer (line 8) | public EmptyIpcMemberAttributeIsUnnecessaryAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeIpcPublicAttributes (line 23) | private void AnalyzeIpcPublicAttributes(SyntaxNodeAnalysisContext cont...

FILE: src/dotnetCampus.Ipc.Analyzers/Analyzers/IgnoresIpcExceptionIsRecommendedAnalyzer.cs
  class IgnoresIpcExceptionIsRecommendedAnalyzer (line 5) | [DiagnosticAnalyzer(LanguageNames.CSharp)]
    method IgnoresIpcExceptionIsRecommendedAnalyzer (line 8) | public IgnoresIpcExceptionIsRecommendedAnalyzer()
    method Initialize (line 15) | public override void Initialize(AnalysisContext context)
    method AnalyzeIpcPublicAttributes (line 24) | private void AnalyzeIpcPublicAttributes(SyntaxNodeAnalysisContext cont...
    method AnalyzeIpcShapeAttributes (line 38) | private void AnalyzeIpcShapeAttributes(SyntaxNodeAnalysisContext context)

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Core/DiagnosticException.cs
  class DiagnosticException (line 6) | internal class DiagnosticException : Exception
    method DiagnosticException (line 10) | public DiagnosticException(DiagnosticDescriptor diagnostic)
    method DiagnosticException (line 17) | public DiagnosticException(DiagnosticDescriptor diagnostic, Location? ...
    method ToDiagnostic (line 28) | public Diagnostic ToDiagnostic()

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Core/Diagnostics.cs
  class Diagnostics (line 11) | internal static class Diagnostics
    class Categories (line 406) | private static class Categories
    method Localize (line 444) | private static LocalizableString Localize(string key) => new Localizab...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Models/IpcPublicAttributeNamedValues.cs
  method IpcPublicAttributeNamedValues (line 8) | public IpcPublicAttributeNamedValues(INamedTypeSymbol? ipcType)
  method IpcPublicAttributeNamedValues (line 13) | public IpcPublicAttributeNamedValues(INamedTypeSymbol? ipcType, ISymbol?...
  method ToString (line 36) | public override string ToString() => ToIndentString("    ", 0);
  method ToIndentString (line 38) | public string ToIndentString(string indent, int baseIndentLevel = 1)
  method Format (line 66) | protected string Format<T>(string name, Assignable<T>? assignable, Func<...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Models/IpcShapeAttributeNamedValues.cs
  class IpcShapeAttributeNamedValues (line 6) | internal class IpcShapeAttributeNamedValues : IpcPublicAttributeNamedValues
    method IpcShapeAttributeNamedValues (line 8) | public IpcShapeAttributeNamedValues(INamedTypeSymbol? contractType, IN...
    method IpcShapeAttributeNamedValues (line 14) | public IpcShapeAttributeNamedValues(INamedTypeSymbol? contractType, IN...
    method ToString (line 22) | public override string ToString()

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/IpcSemanticAttributeHelper.cs
  class IpcSemanticAttributeHelper (line 8) | internal static class IpcSemanticAttributeHelper
    method GetIsIpcType (line 16) | internal static bool GetIsIpcType(this ITypeSymbol type)
    method GetIpcPublicNamedValues (line 26) | internal static IpcPublicAttributeNamedValues GetIpcPublicNamedValues(...
    method GetIpcShapeNamedValues (line 42) | internal static IpcShapeAttributeNamedValues GetIpcShapeNamedValues(th...
    method GetIpcNamedValues (line 61) | internal static IpcPublicAttributeNamedValues GetIpcNamedValues(this I...
    method GetIpcNamedValues (line 85) | public static IpcPublicAttributeNamedValues GetIpcNamedValues(this IPr...
    method GetAttributedContractType (line 103) | private static INamedTypeSymbol? GetAttributedContractType<TAttribute>...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/IpcSemanticSyntaxHelper.cs
  class IpcSemanticSyntaxHelper (line 6) | internal static class IpcSemanticSyntaxHelper
    method TryGetClassDeclarationWithIpcAttribute (line 14) | public static AttributeSyntax? TryGetClassDeclarationWithIpcAttribute(...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/SemanticAttributeHelper.cs
  class SemanticAttributeHelper (line 6) | internal static class SemanticAttributeHelper
    method GetAttributeValue (line 16) | public static Assignable<T>? GetAttributeValue<TAttribute, T>(this ISy...
    method GetIsDefined (line 63) | internal static bool GetIsDefined<TAttribute>(this ISymbol symbol)
    method GetAttributeValue (line 78) | private static Assignable<object?>? GetAttributeValue(ISymbol symbol, ...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/SemanticModelsHelper.cs
  class SemanticModelsHelper (line 7) | internal static class SemanticModelsHelper
    method ToFullyQualifiedName (line 9) | public static string ToFullyQualifiedName(this INamedTypeSymbol typeSy...
    method ReplaceNodeWithUsings (line 16) | public static SyntaxNode ReplaceNodeWithUsings(this SyntaxNode rootSyn...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/SemanticSyntaxHelper.cs
  class SemanticSyntaxHelper (line 5) | internal static class SemanticSyntaxHelper
    method TryGetTypeDeclaration (line 7) | public static TypeDeclarationSyntax? TryGetTypeDeclaration(this INamed...
    method TryGetMemberDeclaration (line 14) | public static EventDeclarationSyntax? TryGetMemberDeclaration(this IEv...
    method TryGetMemberDeclaration (line 21) | public static PropertyDeclarationSyntax? TryGetMemberDeclaration(this ...
    method TryGetMemberDeclaration (line 28) | public static MethodDeclarationSyntax? TryGetMemberDeclaration(this IM...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeAnalysis/Utils/SyntaxNameGuesser.cs
  class SyntaxNameGuesser (line 3) | internal static class SyntaxNameGuesser
    method GetAttributeName (line 10) | public static string GetAttributeName(string typeName)
    method GenerateClassNameByInterfaceName (line 25) | public static string GenerateClassNameByInterfaceName(string interface...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/AddIpcShapeCodeFixProvider.cs
  class AddIpcShapeCodeFixProvider (line 11) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method AddIpcShapeCodeFixProvider (line 14) | public AddIpcShapeCodeFixProvider()
    method GetFixAllProvider (line 21) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 27) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method GenerateIpcShapeInNewFileAsync (line 66) | private async Task<Solution> GenerateIpcShapeInNewFileAsync(Document d...
    method GetNamespace (line 108) | private static string? GetNamespace(SyntaxNode root)

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/ChangeClassContractTypeCodeFixProvider.cs
  class ChangeClassContractTypeCodeFixProvider (line 9) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method ChangeClassContractTypeCodeFixProvider (line 12) | public ChangeClassContractTypeCodeFixProvider()
    method GetFixAllProvider (line 21) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 27) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method ChangeContractType (line 69) | private async Task<Document> ChangeContractType(Document document,
    method FindClassDeclarationNodeFromDiagnostic (line 87) | private (ClassDeclarationSyntax? classDeclarationNode, TypeSyntax? typ...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider.cs
  class DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider (line 8) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider (line 11) | public DefaultReturnDependsOnIgnoresIpcExceptionCodeFixProvider()
    method GetFixAllProvider (line 18) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 24) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method RemoveDefaultReturn (line 54) | private async Task<Document> RemoveDefaultReturn(Document document, At...
    method SetIgnoresIpcException (line 92) | private async Task<Document> SetIgnoresIpcException(Document document,...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider.cs
  class EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider (line 7) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider (line 10) | public EmptyIpcMemberAttributeIsUnnecessaryCodeFixProvider()
    method GetFixAllProvider (line 17) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 23) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method RemoveAttribute (line 58) | private async Task<Document> RemoveAttribute(Document document, Syntax...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/IgnoresIpcExceptionIsRecommendedCodeFixProvider.cs
  class IgnoresIpcExceptionIsRecommendedCodeFixProvider (line 8) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method IgnoresIpcExceptionIsRecommendedCodeFixProvider (line 11) | public IgnoresIpcExceptionIsRecommendedCodeFixProvider()
    method GetFixAllProvider (line 18) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 24) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method SetIgnoresIpcException (line 53) | private async Task<Document> SetIgnoresIpcException(Document document,...

FILE: src/dotnetCampus.Ipc.Analyzers/CodeFixes/LetClassImplementInterfaceCodeFixProvider.cs
  class LetClassImplementInterfaceCodeFixProvider (line 9) | [ExportCodeFixProvider(LanguageNames.CSharp, Name = nameof(IgnoresIpcExc...
    method LetClassImplementInterfaceCodeFixProvider (line 12) | public LetClassImplementInterfaceCodeFixProvider()
    method GetFixAllProvider (line 19) | public override FixAllProvider? GetFixAllProvider()
    method RegisterCodeFixesAsync (line 25) | public override async Task RegisterCodeFixesAsync(CodeFixContext context)
    method ImplementInterface (line 57) | private async Task<Document> ImplementInterface(Document document,
    method FindClassDeclarationSyntaxFromDiagnostic (line 73) | private ClassDeclarationSyntax? FindClassDeclarationSyntaxFromDiagnost...

FILE: src/dotnetCampus.Ipc.Analyzers/Core/ComponentModels/Assignable.cs
  type Assignable (line 8) | internal readonly struct Assignable<T>
    method Assignable (line 10) | public Assignable()
    method Assignable (line 15) | public Assignable(T? value)

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/IpcPublicCompilation.cs
  class IpcPublicCompilation (line 5) | [DebuggerDisplay("IpcPublic : {IpcType.Name,nq}")]
    method IpcPublicCompilation (line 19) | public IpcPublicCompilation(SyntaxTree syntaxTree, SemanticModel seman...
    method GetUsing (line 40) | public string GetUsing()
    method GetNamespace (line 51) | public string GetNamespace()
    method EnumerateMembers (line 60) | public virtual IEnumerable<(INamedTypeSymbol IpcType, ISymbol Member)>...
    method TryCreateIpcPublicCompilation (line 99) | public static bool TryCreateIpcPublicCompilation(InterfaceDeclarationS...
    method TryFindIpcPublicCompilations (line 124) | public static bool TryFindIpcPublicCompilations(Compilation compilatio...
    method Equals (line 145) | public override bool Equals(object? obj)
    method Equals (line 150) | public bool Equals(IpcPublicCompilation? other)
    method GetHashCode (line 156) | public override int GetHashCode()

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/IpcPublicMemberProxyJointGenerator.cs
  class IpcPublicMemberProxyJointGenerator (line 8) | internal class IpcPublicMemberProxyJointGenerator
    method IpcPublicMemberProxyJointGenerator (line 19) | public IpcPublicMemberProxyJointGenerator(INamedTypeSymbol ipcType, IS...
    method IpcPublicMemberProxyJointGenerator (line 44) | public IpcPublicMemberProxyJointGenerator(INamedTypeSymbol contractTyp...
    method GenerateProxyMember (line 66) | public string GenerateProxyMember() => _proxyMemberGenerator.GenerateP...
    method GenerateShapeMember (line 72) | internal string GenerateShapeMember() => _shapeMemberGenerator.Generat...
    method GenerateJointMatch (line 79) | public string GenerateJointMatch(string realInstanceVariableName) => _...

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/IpcShapeCompilation.cs
  class IpcShapeCompilation (line 5) | [DebuggerDisplay("{ShapeType} : {ContractType.Name,nq}")]
    method IpcShapeCompilation (line 15) | public IpcShapeCompilation(SyntaxTree syntaxTree, SemanticModel semant...
    method EnumerateMembersByContractType (line 31) | public IEnumerable<(INamedTypeSymbol contractType, INamedTypeSymbol sh...
    method TryCreateIpcShapeCompilation (line 83) | public static bool TryCreateIpcShapeCompilation(ClassDeclarationSyntax...
    method TryFindIpcShapeCompilations (line 130) | public static bool TryFindIpcShapeCompilations(Compilation compilation...
    method Equals (line 151) | public override bool Equals(object? obj)
    method Equals (line 156) | public bool Equals(IpcShapeCompilation? other)
    method GetHashCode (line 163) | public override int GetHashCode()

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/Members/IPublicIpcObjectMemberGenerator.cs
  type IPublicIpcObjectProxyMemberGenerator (line 3) | internal interface IPublicIpcObjectProxyMemberGenerator
    method GenerateProxyMember (line 5) | string GenerateProxyMember();
  type IPublicIpcObjectShapeMemberGenerator (line 8) | internal interface IPublicIpcObjectShapeMemberGenerator
    method GenerateShapeMember (line 10) | string GenerateShapeMember();
  type IPublicIpcObjectJointMatchGenerator (line 13) | internal interface IPublicIpcObjectJointMatchGenerator
    method GenerateJointMatch (line 15) | string GenerateJointMatch(string real);

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/Members/IpcPublicMethodInfo.cs
  class IpcPublicMethodInfo (line 5) | internal class IpcPublicMethodInfo : IPublicIpcObjectProxyMemberGenerato...
    method IpcPublicMethodInfo (line 51) | public IpcPublicMethodInfo(INamedTypeSymbol contractType, INamedTypeSy...
    method GenerateProxyMember (line 65) | public string GenerateProxyMember()
    method GenerateShapeMember (line 121) | public string GenerateShapeMember()
    method GenerateJointMatch (line 140) | public string GenerateJointMatch(string real)
    method GenerateMethodParameters (line 196) | private string GenerateMethodParameters(ImmutableArray<IParameterSymbo...
    method GenerateMethodParameterTypes (line 208) | private string GenerateMethodParameterTypes(ImmutableArray<IParameterS...
    method GenerateMethodArguments (line 220) | private string GenerateMethodArguments(ImmutableArray<IParameterSymbol...
    method GenerateGarmArguments (line 234) | private string GenerateGarmArguments(ImmutableArray<IParameterSymbol> ...
    method GetAsyncReturnType (line 248) | private ITypeSymbol? GetAsyncReturnType(ITypeSymbol returnType)
    method GenerateGarmReturn (line 284) | private string GenerateGarmReturn(ITypeSymbol @return, string value)

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/Members/IpcPublicPropertyInfo.cs
  class IpcPublicPropertyInfo (line 5) | internal class IpcPublicPropertyInfo : IPublicIpcObjectProxyMemberGenera...
    method IpcPublicPropertyInfo (line 46) | public IpcPublicPropertyInfo(INamedTypeSymbol contractType, INamedType...
    method GenerateProxyMember (line 58) | public string GenerateProxyMember()
    method GenerateShapeMember (line 90) | public string GenerateShapeMember()
    method GenerateJointMatch (line 117) | public string GenerateJointMatch(string real)
    method GenerateGarmArgument (line 150) | private string GenerateGarmArgument(ITypeSymbol parameterType, string ...

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Compiling/Members/MemberIdGenerator.cs
  class MemberIdGenerator (line 8) | public static class MemberIdGenerator
    method GeneratePropertyId (line 16) | public static string GeneratePropertyId(string getSet, string property...
    method GenerateMethodId (line 24) | public static string GenerateMethodId(IMethodSymbol method)
    method GenerateMethodId (line 33) | public static string GenerateMethodId(string methodName, IEnumerable<s...
    method CalculateHash (line 41) | private static string CalculateHash(string text)

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/IpcPublicGenerator.cs
  class IpcPublicGenerator (line 10) | [Generator(LanguageNames.CSharp)]
    method Initialize (line 13) | public void Initialize(IncrementalGeneratorInitializationContext context)
    method Execute (line 46) | private void Execute(SourceProductionContext context, IpcPublicCompila...
    method Execute (line 55) | private void Execute(SourceProductionContext context, IpcShapeCompilat...
    method Execute (line 63) | private void Execute(SourceProductionContext context,

FILE: src/dotnetCampus.Ipc.Analyzers/Generators/Utils/GeneratorHelper.cs
  class GeneratorHelper (line 6) | internal static class GeneratorHelper
    method GenerateProxySource (line 13) | internal static string GenerateProxySource(IpcPublicCompilation ipc)
    method GenerateProxySource (line 32) | internal static string GenerateProxySource(IpcShapeCompilation ipc)
    method GenerateShapeSource (line 53) | internal static string GenerateShapeSource(IpcPublicCompilation ipc, s...
    method GenerateJointSource (line 76) | internal static string GenerateJointSource(IpcPublicCompilation ipc)
    method GenerateModuleInitializerSource (line 99) | internal static string GenerateModuleInitializerSource(
    method GenerateIpcPublicRegistration (line 120) | private static string GenerateIpcPublicRegistration(IpcPublicCompilati...
    method GenerateIpcPublicRegistration (line 126) | private static string GenerateIpcPublicRegistration(IpcShapeCompilatio...
    method GenerateIpcPublicAssemblyAttribute (line 131) | private static string GenerateIpcPublicAssemblyAttribute(IpcPublicComp...
    method GenerateIpcPublicAssemblyAttribute (line 138) | private static string GenerateIpcPublicAssemblyAttribute(IpcShapeCompi...
    method ReportDiagnosticsThatHaveNotBeenReported (line 158) | internal static void ReportDiagnosticsThatHaveNotBeenReported(SourcePr...

FILE: src/dotnetCampus.Ipc.Analyzers/Properties/Localizations.Designer.cs
  class Localizations (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
    method Localizations (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/AssemblyIpcProxyAttribute.cs
  class AssemblyIpcProxyAttribute (line 8) | [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherit...
    method AssemblyIpcProxyAttribute (line 20) | public AssemblyIpcProxyAttribute(Type contractType, Type ipcType, Type...

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/AssemblyIpcProxyJointAttribute.cs
  class AssemblyIpcProxyJointAttribute (line 8) | [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true, Inherit...
    method AssemblyIpcProxyJointAttribute (line 20) | public AssemblyIpcProxyJointAttribute(Type ipcType, Type proxyType, Ty...

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcEventAttribute.cs
  class IpcEventAttribute (line 8) | [AttributeUsage(AttributeTargets.Event, AllowMultiple = false, Inherited...
    method IpcEventAttribute (line 17) | public IpcEventAttribute()

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcMemberAttribute.cs
  class IpcMemberAttribute (line 9) | [EditorBrowsable(EditorBrowsableState.Never)]
    method IpcMemberAttribute (line 18) | protected IpcMemberAttribute()

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcMethodAttribute.cs
  class IpcMethodAttribute (line 10) | [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherite...
    method IpcMethodAttribute (line 19) | public IpcMethodAttribute()

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcPropertyAttribute.cs
  class IpcPropertyAttribute (line 10) | [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inheri...
    method IpcPropertyAttribute (line 19) | public IpcPropertyAttribute()

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcPublicAttribute.cs
  class IpcPublicAttribute (line 12) | [AttributeUsage(AttributeTargets.Interface, AllowMultiple = false, Inher...
    method IpcPublicAttribute (line 21) | public IpcPublicAttribute()

FILE: src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcShapeAttribute.cs
  class IpcShapeAttribute (line 8) | [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited...
    method IpcShapeAttribute (line 18) | public IpcShapeAttribute(Type contractType)

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Contexts/GeneratedIpcJointResponse.cs
  class GeneratedIpcJointResponse (line 8) | internal class GeneratedIpcJointResponse : IIpcResponseMessage
    method GeneratedIpcJointResponse (line 12) | private GeneratedIpcJointResponse()
    method GeneratedIpcJointResponse (line 16) | private GeneratedIpcJointResponse(IpcMessage message)
    method FromAsyncReturnModel (line 23) | internal static async Task<GeneratedIpcJointResponse> FromAsyncReturnM...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/Garm.cs
  type Garm (line 9) | internal readonly record struct Garm : IGarmObject

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/Garm.generic.cs
  type Garm (line 14) | public readonly struct Garm<T> : IGarmObject
    method Garm (line 19) | public Garm()
    method Garm (line 29) | public Garm(T? value)
    method Garm (line 40) | public Garm(T? value, Type? ipcType)

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/IGarmObject.cs
  type IGarmObject (line 8) | public interface IGarmObject
  class GarmObjectExtensions (line 30) | internal static class GarmObjectExtensions

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedIpcFactory.cs
  class GeneratedIpcFactory (line 20) | public static class GeneratedIpcFactory
    method RegisterIpcPublic (line 38) | [EditorBrowsable(EditorBrowsableState.Never)]
    method RegisterIpcShape (line 51) | [EditorBrowsable(EditorBrowsableState.Never)]
    method CreateIpcProxy (line 67) | public static TPublic CreateIpcProxy<TPublic>(this IIpcProvider ipcPro...
    method CreateIpcProxy (line 93) | public static TPublic CreateIpcProxy<TPublic>(this IIpcProvider ipcPro...
    method CreateIpcProxy (line 121) | public static TPublic CreateIpcProxy<TPublic, TShape>(this IIpcProvide...
    method CreateIpcJoint (line 145) | public static TPublic CreateIpcJoint<TPublic>(this IIpcProvider ipcPro...
    method SafeGetIpcPublicFactories (line 173) | private static (Func<GeneratedIpcProxy>? ProxyFactory, Func<GeneratedI...
    method SafeGetIpcShapeFactory (line 209) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method GetGeneratedContext (line 233) | private static GeneratedProxyJointIpcContext GetGeneratedContext(this ...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedIpcJoint.cs
  class GeneratedIpcJoint (line 9) | public abstract class GeneratedIpcJoint
    method SetInstance (line 26) | internal abstract void SetInstance(object realInstance);
    method GetProperty (line 28) | internal abstract IGarmObject GetProperty(ulong memberId, string prope...
    method SetProperty (line 29) | internal abstract IGarmObject SetProperty(ulong memberId, string prope...
    method CallMethod (line 30) | internal abstract IGarmObject CallMethod(ulong memberId, string method...
    method CallMethodAsync (line 31) | internal abstract Task<IGarmObject> CallMethodAsync(ulong memberId, st...
    method GetParameterTypes (line 32) | internal abstract Type[] GetParameterTypes(ulong memberId, string? mem...
    method SetInstance (line 75) | internal sealed override void SetInstance(object realInstance) => SetI...
    method SetInstance (line 81) | internal void SetInstance(TContract realInstance)
    method MatchMembers (line 96) | protected abstract void MatchMembers(TContract realInstance);
    method MatchMethod (line 103) | protected void MatchMethod(ulong memberId, Action methodInvoker)
    method MatchMethod (line 118) | protected void MatchMethod<TReturn>(ulong memberId, Func<Garm<TReturn>...
    method MatchMethod (line 128) | protected void MatchMethod(ulong memberId, Func<Task> methodInvoker)
    method MatchMethod (line 143) | protected void MatchMethod<TReturn>(ulong memberId, Func<Task<Garm<TRe...
    method MatchMethod (line 153) | protected void MatchMethod<T>(ulong memberId, Action<T> methodInvoker)
    method MatchMethod (line 168) | protected void MatchMethod<T>(ulong memberId, Func<T, Task> methodInvo...
    method MatchMethod (line 183) | protected void MatchMethod<T, TReturn>(ulong memberId, Func<T, Garm<TR...
    method MatchMethod (line 193) | protected void MatchMethod<T, TReturn>(ulong memberId, Func<T, Task<Ga...
    method MatchProperty (line 203) | protected void MatchProperty<T>(ulong getPropertyId, Func<Garm<T>> get...
    method MatchProperty (line 215) | protected void MatchProperty<T>(ulong getPropertyId, ulong setProperty...
    method GetProperty (line 221) | internal sealed override IGarmObject GetProperty(ulong memberId, strin...
    method SetProperty (line 230) | internal sealed override IGarmObject SetProperty(ulong memberId, strin...
    method CallMethod (line 240) | internal sealed override IGarmObject CallMethod(ulong memberId, string...
    method CallMethodAsync (line 249) | internal sealed override async Task<IGarmObject> CallMethodAsync(ulong...
    method CastArg (line 258) | private T? CastArg<T>(IGarmObject argModel) => argModel switch
    method GetParameterTypes (line 265) | internal override Type[] GetParameterTypes(ulong memberId, string? mem...
    method CreateMethodNotMatchException (line 294) | private Exception CreateMethodNotMatchException(ulong memberId, string...
  class GeneratedIpcJoint (line 39) | public abstract partial class GeneratedIpcJoint<TContract> : GeneratedIp...
    method SetInstance (line 26) | internal abstract void SetInstance(object realInstance);
    method GetProperty (line 28) | internal abstract IGarmObject GetProperty(ulong memberId, string prope...
    method SetProperty (line 29) | internal abstract IGarmObject SetProperty(ulong memberId, string prope...
    method CallMethod (line 30) | internal abstract IGarmObject CallMethod(ulong memberId, string method...
    method CallMethodAsync (line 31) | internal abstract Task<IGarmObject> CallMethodAsync(ulong memberId, st...
    method GetParameterTypes (line 32) | internal abstract Type[] GetParameterTypes(ulong memberId, string? mem...
    method SetInstance (line 75) | internal sealed override void SetInstance(object realInstance) => SetI...
    method SetInstance (line 81) | internal void SetInstance(TContract realInstance)
    method MatchMembers (line 96) | protected abstract void MatchMembers(TContract realInstance);
    method MatchMethod (line 103) | protected void MatchMethod(ulong memberId, Action methodInvoker)
    method MatchMethod (line 118) | protected void MatchMethod<TReturn>(ulong memberId, Func<Garm<TReturn>...
    method MatchMethod (line 128) | protected void MatchMethod(ulong memberId, Func<Task> methodInvoker)
    method MatchMethod (line 143) | protected void MatchMethod<TReturn>(ulong memberId, Func<Task<Garm<TRe...
    method MatchMethod (line 153) | protected void MatchMethod<T>(ulong memberId, Action<T> methodInvoker)
    method MatchMethod (line 168) | protected void MatchMethod<T>(ulong memberId, Func<T, Task> methodInvo...
    method MatchMethod (line 183) | protected void MatchMethod<T, TReturn>(ulong memberId, Func<T, Garm<TR...
    method MatchMethod (line 193) | protected void MatchMethod<T, TReturn>(ulong memberId, Func<T, Task<Ga...
    method MatchProperty (line 203) | protected void MatchProperty<T>(ulong getPropertyId, Func<Garm<T>> get...
    method MatchProperty (line 215) | protected void MatchProperty<T>(ulong getPropertyId, ulong setProperty...
    method GetProperty (line 221) | internal sealed override IGarmObject GetProperty(ulong memberId, strin...
    method SetProperty (line 230) | internal sealed override IGarmObject SetProperty(ulong memberId, strin...
    method CallMethod (line 240) | internal sealed override IGarmObject CallMethod(ulong memberId, string...
    method CallMethodAsync (line 249) | internal sealed override async Task<IGarmObject> CallMethodAsync(ulong...
    method CastArg (line 258) | private T? CastArg<T>(IGarmObject argModel) => argModel switch
    method GetParameterTypes (line 265) | internal override Type[] GetParameterTypes(ulong memberId, string? mem...
    method CreateMethodNotMatchException (line 294) | private Exception CreateMethodNotMatchException(ulong memberId, string...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedIpcJoint.generic.cs
  class GeneratedIpcJoint (line 3) | partial class GeneratedIpcJoint<TContract>
    method MatchMethod (line 10) | protected void MatchMethod<T1, T2>(ulong memberId, Action<T1, T2> meth...
    method MatchMethod (line 25) | protected void MatchMethod<T1, T2>(ulong memberId, Func<T1, T2, Task> ...
    method MatchMethod (line 40) | protected void MatchMethod<T1, T2, TReturn>(ulong memberId, Func<T1, T...
    method MatchMethod (line 50) | protected void MatchMethod<T1, T2, TReturn>(ulong memberId, Func<T1, T...
    method MatchMethod (line 60) | protected void MatchMethod<T1, T2, T3>(ulong memberId, Action<T1, T2, ...
    method MatchMethod (line 75) | protected void MatchMethod<T1, T2, T3>(ulong memberId, Func<T1, T2, T3...
    method MatchMethod (line 90) | protected void MatchMethod<T1, T2, T3, TReturn>(ulong memberId, Func<T...
    method MatchMethod (line 100) | protected void MatchMethod<T1, T2, T3, TReturn>(ulong memberId, Func<T...
    method MatchMethod (line 110) | protected void MatchMethod<T1, T2, T3, T4>(ulong memberId, Action<T1, ...
    method MatchMethod (line 125) | protected void MatchMethod<T1, T2, T3, T4>(ulong memberId, Func<T1, T2...
    method MatchMethod (line 140) | protected void MatchMethod<T1, T2, T3, T4, TReturn>(ulong memberId, Fu...
    method MatchMethod (line 150) | protected void MatchMethod<T1, T2, T3, T4, TReturn>(ulong memberId, Fu...
    method MatchMethod (line 160) | protected void MatchMethod<T1, T2, T3, T4, T5>(ulong memberId, Action<...
    method MatchMethod (line 175) | protected void MatchMethod<T1, T2, T3, T4, T5>(ulong memberId, Func<T1...
    method MatchMethod (line 190) | protected void MatchMethod<T1, T2, T3, T4, T5, TReturn>(ulong memberId...
    method MatchMethod (line 200) | protected void MatchMethod<T1, T2, T3, T4, T5, TReturn>(ulong memberId...
    method MatchMethod (line 210) | protected void MatchMethod<T1, T2, T3, T4, T5, T6>(ulong memberId, Act...
    method MatchMethod (line 225) | protected void MatchMethod<T1, T2, T3, T4, T5, T6>(ulong memberId, Fun...
    method MatchMethod (line 240) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, TReturn>(ulong memb...
    method MatchMethod (line 250) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, TReturn>(ulong memb...
    method MatchMethod (line 260) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7>(ulong memberId,...
    method MatchMethod (line 275) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7>(ulong memberId,...
    method MatchMethod (line 290) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, TReturn>(ulong ...
    method MatchMethod (line 300) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, TReturn>(ulong ...
    method MatchMethod (line 310) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8>(ulong membe...
    method MatchMethod (line 325) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8>(ulong membe...
    method MatchMethod (line 340) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>(ul...
    method MatchMethod (line 350) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, TReturn>(ul...
    method MatchMethod (line 360) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9>(ulong m...
    method MatchMethod (line 375) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9>(ulong m...
    method MatchMethod (line 390) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn...
    method MatchMethod (line 400) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, TReturn...
    method MatchMethod (line 410) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(ul...
    method MatchMethod (line 425) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(ul...
    method MatchMethod (line 440) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TR...
    method MatchMethod (line 450) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TR...
    method MatchMethod (line 460) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 476) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 492) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 503) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 514) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 530) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 546) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 557) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 568) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 584) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 600) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 611) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 622) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 638) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 654) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 665) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 676) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 692) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 708) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 719) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 730) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 746) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 762) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...
    method MatchMethod (line 773) | protected void MatchMethod<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T1...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedIpcProxy.cs
  class GeneratedIpcProxy (line 14) | public abstract partial class GeneratedIpcProxy
    method GeneratedIpcProxy (line 74) | protected GeneratedIpcProxy()
    method GetValueAsync (line 87) | protected async Task<T> GetValueAsync<T>(ulong memberId, IpcMemberInfo...
    method SetValueAsync (line 118) | protected Task SetValueAsync<T>(ulong memberId, Garm<T> value, IpcMemb...
    method CallMethod (line 131) | protected Task CallMethod(ulong memberId, IGarmObject[]? args, IpcMemb...
    method CallMethod (line 144) | protected Task<T> CallMethod<T>(ulong memberId, IGarmObject[]? args, I...
    method CallMethodAsync (line 157) | protected Task CallMethodAsync(ulong memberId, IGarmObject[]? args, Ip...
    method CallMethodAsync (line 170) | protected Task<T> CallMethodAsync<T>(ulong memberId, IGarmObject[]? ar...
    method IpcInvokeAsync (line 185) | private async Task<T> IpcInvokeAsync<T>(MemberInvokingType callType, u...
    method InvokeWithTimeoutAsync (line 228) | private async Task<T> InvokeWithTimeoutAsync<T>(MemberInvokingType cal...
    method IgnoreTaskExceptionsAsync (line 254) | private static async void IgnoreTaskExceptionsAsync(Task task)
  class GeneratedIpcProxy (line 67) | public abstract class GeneratedIpcProxy<TContract> : GeneratedIpcProxy w...
    method GeneratedIpcProxy (line 74) | protected GeneratedIpcProxy()
    method GetValueAsync (line 87) | protected async Task<T> GetValueAsync<T>(ulong memberId, IpcMemberInfo...
    method SetValueAsync (line 118) | protected Task SetValueAsync<T>(ulong memberId, Garm<T> value, IpcMemb...
    method CallMethod (line 131) | protected Task CallMethod(ulong memberId, IGarmObject[]? args, IpcMemb...
    method CallMethod (line 144) | protected Task<T> CallMethod<T>(ulong memberId, IGarmObject[]? args, I...
    method CallMethodAsync (line 157) | protected Task CallMethodAsync(ulong memberId, IGarmObject[]? args, Ip...
    method CallMethodAsync (line 170) | protected Task<T> CallMethodAsync<T>(ulong memberId, IGarmObject[]? ar...
    method IpcInvokeAsync (line 185) | private async Task<T> IpcInvokeAsync<T>(MemberInvokingType callType, u...
    method InvokeWithTimeoutAsync (line 228) | private async Task<T> InvokeWithTimeoutAsync<T>(MemberInvokingType cal...
    method IgnoreTaskExceptionsAsync (line 254) | private static async void IgnoreTaskExceptionsAsync(Task task)

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedProxyJointIpcContext.cs
  class GeneratedProxyJointIpcContext (line 9) | public class GeneratedProxyJointIpcContext
    method GeneratedProxyJointIpcContext (line 15) | internal GeneratedProxyJointIpcContext(IpcContext ipcContext)

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/GeneratedProxyJointIpcRequestHandler.cs
  class GeneratedProxyJointIpcRequestHandler (line 9) | internal sealed class GeneratedProxyJointIpcRequestHandler : IIpcRequest...
    method GeneratedProxyJointIpcRequestHandler (line 15) | internal GeneratedProxyJointIpcRequestHandler(GeneratedProxyJointIpcCo...
    method HandleRequest (line 21) | Task<IIpcResponseMessage> IIpcRequestHandler.HandleRequest(IIpcRequest...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/IpcProxyConfigs.cs
  class IpcProxyConfigs (line 18) | public class IpcProxyConfigs

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/GeneratedIpcProxyJointInstanceCache.cs
  class GeneratedIpcProxyJointInstanceCache (line 12) | internal static class GeneratedIpcProxyJointInstanceCache
    method TryCreateProxyFromSerializationInfo (line 34) | public static bool TryCreateProxyFromSerializationInfo(this GeneratedP...
    method TryCreateSerializationInfoFromIpcRealInstance (line 59) | public static bool TryCreateSerializationInfoFromIpcRealInstance(this ...
    method ConvertTypeAndIdToProxy (line 80) | public static GeneratedIpcProxy ConvertTypeAndIdToProxy((Type IpcPubli...
    method ConvertTypeAndIdToJoint (line 88) | public static (GeneratedIpcJoint JointInstance, string? ObjectId) Conv...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/GeneratedProxyExceptionModel.cs
  class GeneratedProxyExceptionModel (line 16) | [DataContract]
    method GeneratedProxyExceptionModel (line 19) | public GeneratedProxyExceptionModel()
    method GeneratedProxyExceptionModel (line 23) | public GeneratedProxyExceptionModel(Exception exception)
    method Throw (line 63) | public void Throw()
  class ExceptionHacker (line 106) | file static class ExceptionHacker
    method ExceptionHacker (line 108) | static ExceptionHacker()
    method SetRemoteStackTrace (line 113) | internal static Exception SetRemoteStackTrace(Exception source, string...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/GeneratedProxyMemberInvokeModel.cs
  class GeneratedProxyMemberInvokeModel (line 18) | [DataContract]
    method ToString (line 105) | public override string ToString()

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/GeneratedProxyMemberReturnModel.cs
  class GeneratedProxyMemberReturnModel (line 12) | [DataContract]
    method GeneratedProxyMemberReturnModel (line 15) | public GeneratedProxyMemberReturnModel()
    method GeneratedProxyMemberReturnModel (line 19) | public GeneratedProxyMemberReturnModel(Exception exception)
    method GeneratedProxyMemberReturnModel (line 29) | public GeneratedProxyMemberReturnModel(IpcJsonElement @return)

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/GeneratedProxyObjectModel.cs
  class GeneratedProxyObjectModel (line 14) | [DataContract]

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/IpcJsonElement.cs
  type IpcJsonElement (line 15) | public readonly record struct IpcJsonElement

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/IpcMemberInfo.cs
  class GeneratedIpcProxy (line 8) | partial class GeneratedIpcProxy
    type IpcMemberInfo (line 13) | protected readonly record struct IpcMemberInfo

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Models/MemberInvokingType.cs
  type MemberInvokingType (line 9) | internal enum MemberInvokingType

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/PublicIpcJointManager.cs
  class PublicIpcJointManager (line 16) | public class PublicIpcJointManager
    method PublicIpcJointManager (line 23) | internal PublicIpcJointManager(GeneratedProxyJointIpcContext context)
    method AddPublicIpcObject (line 39) | public void AddPublicIpcObject<TContract>(GeneratedIpcJoint<TContract>...
    method AddPublicIpcObject (line 53) | public void AddPublicIpcObject(Type contractType, GeneratedIpcJoint jo...
    method TryJoint (line 69) | public bool TryJoint(IIpcRequestContext request, out Task<IIpcResponse...
    method EnumerateJointNames (line 86) | internal IEnumerable<string> EnumerateJointNames()
    method TryFindJoint (line 102) | private bool TryFindJoint(GeneratedProxyMemberInvokeModel model, [NotN...
    method InvokeAndReturn (line 128) | private async Task<GeneratedProxyMemberReturnModel?> InvokeAndReturn(
    method ExtractArgsFromArgsModel (line 158) | private IGarmObject[] ExtractArgsFromArgsModel(
    method CreateReturnModelFromReturnObject (line 202) | private GeneratedProxyMemberReturnModel CreateReturnModelFromReturnObj...
    method InvokeMember (line 223) | private static async Task<IGarmObject> InvokeMember(GeneratedIpcJoint ...

FILE: src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Utils/IpcProxyInvokingHelper.cs
  class IpcProxyInvokingHelper (line 8) | internal class IpcProxyInvokingHelper
    method IpcInvokeAsync (line 42) | internal async Task<T?> IpcInvokeAsync<T>(MemberInvokingType callType,...
    method IpcInvokeAsync (line 89) | private async Task<GeneratedProxyMemberReturnModel?> IpcInvokeAsync(Ge...
    method Cast (line 110) | private T? Cast<T>(IpcJsonElement? arg) => arg is { } jsonElement
    method SerializeArg (line 114) | private GeneratedProxyObjectModel? SerializeArg(IGarmObject argModel)

FILE: src/dotnetCampus.Ipc/Context/AckArgs.cs
  class AckArgs (line 10) | public class AckArgs : EventArgs
    method AckArgs (line 17) | public AckArgs(string peerName, in Ack ack)

FILE: src/dotnetCampus.Ipc/Context/AckTask.cs
  class AckTask (line 12) | class AckTask
    method AckTask (line 21) | public AckTask(string peerName, in Ack ack, TaskCompletionSource<bool>...

FILE: src/dotnetCampus.Ipc/Context/ConnectToExistingPeerResult.cs
  type ConnectToExistingPeerResult (line 16) | public readonly struct ConnectToExistingPeerResult
    method ConnectToExistingPeerResult (line 18) | internal ConnectToExistingPeerResult(PeerProxy? peerProxy, Task peerCo...
    method Fail (line 40) | internal static ConnectToExistingPeerResult Fail() => new ConnectToExi...

FILE: src/dotnetCampus.Ipc/Context/DelegateIpcRequestHandler.cs
  class DelegateIpcRequestHandler (line 11) | public class DelegateIpcRequestHandler : IIpcRequestHandler
    method DelegateIpcRequestHandler (line 17) | public DelegateIpcRequestHandler(Func<IIpcRequestContext, Task<IIpcRes...
    method DelegateIpcRequestHandler (line 25) | public DelegateIpcRequestHandler(Func<IIpcRequestContext, IIpcResponse...
    method HandleRequest (line 30) | Task<IIpcResponseMessage> IIpcRequestHandler.HandleRequest(IIpcRequest...

FILE: src/dotnetCampus.Ipc/Context/IIpcRequestContext.cs
  type IIpcRequestContext (line 8) | public interface IIpcRequestContext
  type ICoreIpcRequestContext (line 26) | internal interface ICoreIpcRequestContext

FILE: src/dotnetCampus.Ipc/Context/IPeerConnectionBrokenArgs.cs
  type IPeerConnectionBrokenArgs (line 6) | public interface IPeerConnectionBrokenArgs
  type BrokenReason (line 13) | public enum BrokenReason

FILE: src/dotnetCampus.Ipc/Context/IPeerMessageArgs.cs
  type IPeerMessageArgs (line 10) | public interface IPeerMessageArgs
    method TryGetPayload (line 28) | bool TryGetPayload(byte[] requiredHeader, out IpcMessage subMessage);

FILE: src/dotnetCampus.Ipc/Context/IPeerReconnectedArgs.cs
  type IPeerReconnectedArgs (line 8) | public interface IPeerReconnectedArgs
  class PeerReconnectedArgs (line 13) | class PeerReconnectedArgs : EventArgs, IPeerReconnectedArgs

FILE: src/dotnetCampus.Ipc/Context/IpcBufferMessageContext.cs
  type IpcBufferMessageContext (line 12) | readonly struct IpcBufferMessageContext
    method IpcBufferMessageContext (line 20) | public IpcBufferMessageContext(string summary, IpcMessageCommandType i...
    method BuildWithCombine (line 60) | public IpcBufferMessageContext BuildWithCombine(IpcMessageCommandType ...
    method BuildWithCombine (line 71) | public IpcBufferMessageContext BuildWithCombine(string summary, IpcMes...

FILE: src/dotnetCampus.Ipc/Context/IpcClientRequestArgs.cs
  class IpcClientRequestArgs (line 10) | public class IpcClientRequestArgs : EventArgs
    method IpcClientRequestArgs (line 18) | internal IpcClientRequestArgs(in IpcClientRequestMessageId messageId, ...

FILE: src/dotnetCampus.Ipc/Context/IpcConfiguration.cs
  class IpcConfiguration (line 16) | public class IpcConfiguration
    method AddFrameworkRequestHandlers (line 84) | internal void AddFrameworkRequestHandlers(params IIpcRequestHandler[] ...
    method AddFrameworkRequestHandler (line 90) | internal void AddFrameworkRequestHandler(IIpcRequestHandler handler)
    method GetIpcRequestHandlers (line 99) | internal IEnumerable<IIpcRequestHandler> GetIpcRequestHandlers()

FILE: src/dotnetCampus.Ipc/Context/IpcConfigurationExtensions.cs
  class IpcConfigurationExtensions (line 11) | public static class IpcConfigurationExtensions
    method UseNewtonsoftJsonIpcObjectSerializer (line 20) | public static IpcConfiguration UseNewtonsoftJsonIpcObjectSerializer(th...
    method UseSystemTextJsonIpcObjectSerializer (line 42) | public static IpcConfiguration UseSystemTextJsonIpcObjectSerializer(th...

FILE: src/dotnetCampus.Ipc/Context/IpcContext.cs
  class IpcContext (line 14) | public class IpcContext
    method IpcContext (line 29) | public IpcContext(IpcProvider ipcProvider, string pipeName, IpcConfigu...
    method ToString (line 63) | public override string ToString()

FILE: src/dotnetCampus.Ipc/Context/IpcInternalPeerConnectedArgs.cs
  class IpcInternalPeerConnectedArgs (line 13) | internal class IpcInternalPeerConnectedArgs : EventArgs
    method IpcInternalPeerConnectedArgs (line 22) | internal IpcInternalPeerConnectedArgs(string peerName, Stream namedPip...

FILE: src/dotnetCampus.Ipc/Context/IpcPipeServerMessageProviderPeerConnectionBrokenArgs.cs
  class IpcPipeServerMessageProviderPeerConnectionBrokenArgs (line 6) | internal class IpcPipeServerMessageProviderPeerConnectionBrokenArgs : Ev...
    method IpcPipeServerMessageProviderPeerConnectionBrokenArgs (line 8) | public IpcPipeServerMessageProviderPeerConnectionBrokenArgs(IpcPipeSer...

FILE: src/dotnetCampus.Ipc/Context/IpcRequest.cs
  class IpcRequest (line 10) | [Obsolete("此类型不再使用,等待下次大版本更新一起删掉")]

FILE: src/dotnetCampus.Ipc/Context/IpcRequestParameter.cs
  class IpcRequestParameter (line 5) | public class IpcRequestParameter

FILE: src/dotnetCampus.Ipc/Context/IpcRequestParameterType.cs
  class IpcRequestParameterType (line 5) | public class IpcRequestParameterType : IpcSerializableType
    method IpcRequestParameterType (line 7) | public IpcRequestParameterType()
    method IpcRequestParameterType (line 11) | public IpcRequestParameterType(Type type) : base(type)

FILE: src/dotnetCampus.Ipc/Context/IpcResponse.cs
  class IpcResponse (line 11) | [Obsolete("此类型不再使用,等待下次大版本更新一起删掉")]
    method Success (line 16) | public static IpcResponse Success(object data)
    method BadRequest (line 19) | public static IpcResponse BadRequest()
    method BadRequest (line 22) | public static IpcResponse BadRequest(string errorDetails)
    method BadRequest (line 25) | public static IpcResponse BadRequest(string errorDetails, Exception in...
    method InternalServerError (line 28) | public static IpcResponse InternalServerError()
    method InternalServerError (line 31) | public static IpcResponse InternalServerError(string errorDetails)
    method InternalServerError (line 34) | public static IpcResponse InternalServerError(string errorDetails, Exc...
    method IpcResponse (line 37) | public IpcResponse(
    method Succeed (line 61) | public bool Succeed() => Status == IpcStatus.Ok;

FILE: src/dotnetCampus.Ipc/Context/IpcSerializableType.cs
  class IpcSerializableType (line 8) | public class IpcSerializableType
    method IpcSerializableType (line 12) | public IpcSerializableType()
    method IpcSerializableType (line 16) | public IpcSerializableType(Type type)

FILE: src/dotnetCampus.Ipc/Context/IpcStatus.cs
  type IpcStatus (line 9) | [Obsolete("此类型不再使用,等待下次大版本更新一起删掉")]

FILE: src/dotnetCampus.Ipc/Context/KnownMessageHeaders.cs
  type KnownMessageHeaders (line 15) | public enum KnownMessageHeaders : ulong

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/IpcContextLoggerExtension.cs
  class IpcContextLoggerExtension (line 7) | internal static class IpcContextLoggerExtension
    method LogReceiveMessage (line 15) | public static void LogReceiveMessage(this IpcContext context, ByteList...
    method LogReceiveOriginMessage (line 39) | public static void LogReceiveOriginMessage(this IpcContext context, Ip...
    method LogSendMessage (line 64) | public static void LogSendMessage(this IpcContext context, byte[] buff...
    method LogSendMessage (line 76) | public static void LogSendMessage(this IpcContext context, in IpcMessa...
    method LogSendMessage (line 96) | public static void LogSendMessage(this IpcContext context, in IpcBuffe...

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/IpcMessageBodyFormatter.cs
  class IpcMessageBodyFormatter (line 6) | static class IpcMessageBodyFormatter
    method GetSendHeaderLength (line 8) | public static int GetSendHeaderLength(string localPeerName, string rem...
    method AppendSendHeader (line 16) | public static void AppendSendHeader(StringBuilder stringBuilder, strin...
    method GetReceiveHeaderLength (line 26) | public static int GetReceiveHeaderLength(string localPeerName, string ...
    method AppendReceiveHeader (line 34) | public static void AppendReceiveHeader(StringBuilder stringBuilder, st...
    method GetIpcMessageBodyAsBinaryLength (line 44) | public static int GetIpcMessageBodyAsBinaryLength(IpcMessageBody ipcMe...
    method AppendIpcMessageBodyAsBinary (line 49) | public static void AppendIpcMessageBodyAsBinary(StringBuilder stringBu...

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/LoggerEventIds.cs
  class LoggerEventIds (line 5) | internal static class LoggerEventIds

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/ReceiveMessageBodyLogState.cs
  type ReceiveMessageBodyLogState (line 10) | public readonly struct ReceiveMessageBodyLogState
    method ReceiveMessageBodyLogState (line 15) | public ReceiveMessageBodyLogState(IpcMessageBody ipcMessageBody, strin...
    method FormatAsText (line 48) | public string FormatAsText()
    method FormatAsBinary (line 58) | public string FormatAsBinary()
    method Format (line 75) | public static string Format(ReceiveMessageBodyLogState state, Exceptio...

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/SendMessageBodiesLogState.cs
  type SendMessageBodiesLogState (line 11) | public readonly struct SendMessageBodiesLogState
    method SendMessageBodiesLogState (line 16) | internal SendMessageBodiesLogState(IpcMessageBody[] ipcBufferMessageLi...
    method FormatAsText (line 43) | public string FormatAsText()
    method FormatAsBinary (line 58) | public string FormatAsBinary()
    method Format (line 89) | public static string Format(SendMessageBodiesLogState state, Exception...

FILE: src/dotnetCampus.Ipc/Context/LoggingContext/SendMessageBodyLogState.cs
  type SendMessageBodyLogState (line 10) | public readonly struct SendMessageBodyLogState
    method SendMessageBodyLogState (line 15) | public SendMessageBodyLogState(IpcMessageBody ipcMessageBody, string l...
    method FormatAsText (line 41) | public string FormatAsText()
    method FormatAsBinary (line 51) | public string FormatAsBinary()
    method Format (line 68) | public static string Format(SendMessageBodyLogState state, Exception? ...

FILE: src/dotnetCampus.Ipc/Context/PeerConnectedArgs.cs
  class PeerConnectedArgs (line 11) | public class PeerConnectedArgs : EventArgs
    method PeerConnectedArgs (line 17) | public PeerConnectedArgs(PeerProxy peer)

FILE: src/dotnetCampus.Ipc/Context/PeerConnectionBrokenArgs.cs
  class PeerConnectionBrokenArgs (line 8) | public class PeerConnectionBrokenArgs : EventArgs, IPeerConnectionBroken...

FILE: src/dotnetCampus.Ipc/Context/PeerMessageArgs.cs
  class PeerMessageArgs (line 13) | public class PeerMessageArgs : EventArgs, IPeerMessageArgs
    method PeerMessageArgs (line 22) | [DebuggerStepThrough]
    method TryGetPayload (line 46) | public bool TryGetPayload(byte[] requiredHeader, out IpcMessage subMes...
    method SetHandle (line 66) | public void SetHandle(string message)

FILE: src/dotnetCampus.Ipc/Context/PeerStreamMessageArgs.cs
  class PeerStreamMessageArgs (line 12) | internal class PeerStreamMessageArgs : EventArgs
    method PeerStreamMessageArgs (line 22) | [DebuggerStepThrough]
    method SetHandle (line 66) | public void SetHandle(string message)
    method ToPeerMessageArgs (line 72) | internal PeerMessageArgs ToPeerMessageArgs()

FILE: src/dotnetCampus.Ipc/Diagnostics/IIpcMessageInspector.cs
  type IIpcMessageInspector (line 6) | public interface IIpcMessageInspector
    method Send (line 12) | void Send(IpcMessageInspectionContext context);
    method SendCore (line 18) | void SendCore(IpcMessageInspectionContext context);
    method ReceiveCore (line 24) | void ReceiveCore(IpcMessageInspectionContext context);
    method Receive (line 30) | void Receive(IpcMessageInspectionContext context);

FILE: src/dotnetCampus.Ipc/Diagnostics/IpcMessageInspectionContext.cs
  class IpcMessageInspectionContext (line 11) | public sealed class IpcMessageInspectionContext
    method IpcMessageInspectionContext (line 15) | internal IpcMessageInspectionContext(string localPeerName, string remo...
    method GetMessageParts (line 47) | public IEnumerable<IpcMessageBody> GetMessageParts() => _messageParts;

FILE: src/dotnetCampus.Ipc/Diagnostics/IpcMessageInspectorManager.cs
  class IpcMessageInspectorManager (line 9) | public class IpcMessageInspectorManager
    method FromLocalPeerName (line 18) | public static IpcMessageInspectorManager FromLocalPeerName(string peer...
    method IpcMessageInspectorManager (line 27) | private IpcMessageInspectorManager(string peerName)
    method RegisterInspector (line 36) | public void RegisterInspector(IIpcMessageInspector inspector)
    method Call (line 41) | internal void Call(Action<IIpcMessageInspector> caller)

FILE: src/dotnetCampus.Ipc/Diagnostics/IpcMessageTracker.cs
  type IIpcMessageTracker (line 12) | interface IIpcMessageTracker
    method Debug (line 16) | void Debug(string message);
  class IpcMessageTracker (line 28) | internal class IpcMessageTracker<T> : IIpcMessageTracker
    method IpcMessageTracker (line 58) | public IpcMessageTracker(string localPeerName, string remotePeerName, ...
    method IpcMessageTracker (line 77) | private IpcMessageTracker(string localPeerName, string remotePeerName,...
    method TrackNext (line 103) | public IpcMessageTracker<TNext> TrackNext<TNext>(TNext nextMessage)
    method Debug (line 108) | [Conditional("DEBUG")]
    method Debug (line 115) | void IIpcMessageTracker.Debug(string message)
    method CriticalStep (line 127) | [Conditional("DEBUG")]
    method CriticalStep (line 139) | [Conditional("DEBUG")]

FILE: src/dotnetCampus.Ipc/Exceptions/IpcClientPipeConnectionException.cs
  class IpcClientPipeConnectionException (line 8) | public class IpcClientPipeConnectionException : IpcRemoteException
    method IpcClientPipeConnectionException (line 15) | public IpcClientPipeConnectionException(string peerName, string? messa...
    method IpcClientPipeConnectionException (line 22) | public IpcClientPipeConnectionException(string peerName, Exception? in...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcException.cs
  class IpcException (line 8) | public class IpcException : Exception
    method IpcException (line 13) | public IpcException() : base()
    method IpcException (line 21) | public IpcException(string message) : base(message)
    method IpcException (line 30) | public IpcException(string? message, Exception? innerException) : base...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcInvokingException.cs
  class IpcInvokingException (line 8) | internal class IpcInvokingException(string message, string? remoteStackT...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcInvokingTimeoutException.cs
  class IpcInvokingTimeoutException (line 8) | internal class IpcInvokingTimeoutException : IpcRemoteException
    method IpcInvokingTimeoutException (line 10) | public IpcInvokingTimeoutException(string memberName, TimeSpan timeout...
    method IpcInvokingTimeoutException (line 16) | public IpcInvokingTimeoutException(string memberName, TimeSpan timeout...
    method IpcInvokingTimeoutException (line 22) | public IpcInvokingTimeoutException(string memberName, TimeSpan timeout...
    method VerifyMemberName (line 38) | private string VerifyMemberName(string? memberName)
    method VerifyTimeout (line 48) | private TimeSpan VerifyTimeout(TimeSpan timeout)

FILE: src/dotnetCampus.Ipc/Exceptions/IpcLocalException.cs
  class IpcLocalException (line 6) | public class IpcLocalException : IpcException
    method IpcLocalException (line 11) | public IpcLocalException() : base()
    method IpcLocalException (line 19) | public IpcLocalException(string message) : base(message)
    method IpcLocalException (line 28) | public IpcLocalException(string message, Exception innerException) : b...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcMemberNotFoundException.cs
  class IpcMemberNotFoundException (line 6) | public class IpcMemberNotFoundException : IpcLocalException
    method IpcMemberNotFoundException (line 11) | public IpcMemberNotFoundException() : base()
    method IpcMemberNotFoundException (line 19) | public IpcMemberNotFoundException(string message) : base(message)
    method IpcMemberNotFoundException (line 28) | public IpcMemberNotFoundException(string message, Exception innerExcep...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcPeerConnectionBrokenException.cs
  class IpcPeerConnectionBrokenException (line 6) | public class IpcPeerConnectionBrokenException : IpcRemoteException
    method IpcPeerConnectionBrokenException (line 11) | public IpcPeerConnectionBrokenException() : base($"对方已断开")
    method IpcPeerConnectionBrokenException (line 18) | public IpcPeerConnectionBrokenException(string message) : base(message)

FILE: src/dotnetCampus.Ipc/Exceptions/IpcPipeConnectionException.cs
  class IpcPipeConnectionException (line 8) | public class IpcPipeConnectionException : IpcLocalException
    method IpcPipeConnectionException (line 10) | internal IpcPipeConnectionException(string connectingPipeName, string ...

FILE: src/dotnetCampus.Ipc/Exceptions/IpcRemoteException.cs
  class IpcRemoteException (line 8) | public class IpcRemoteException : IpcException
    method IpcRemoteException (line 15) | public IpcRemoteException()
    method IpcRemoteException (line 23) | public IpcRemoteException(string message) : base(message)
    method IpcRemoteException (line 32) | public IpcRemoteException(string message, string? remoteStackTrace) : ...
    method IpcRemoteException (line 42) | public IpcRemoteException(string? message, Exception? innerException) ...

FILE: src/dotnetCampus.Ipc/Exceptions/JsonIpcDirectRouteSerializeLocalException.cs
  class JsonIpcDirectRouteSerializeLocalException (line 8) | public class JsonIpcDirectRouteSerializeLocalException : JsonIpcDirectRo...
    method JsonIpcDirectRouteSerializeLocalException (line 10) | internal JsonIpcDirectRouteSerializeLocalException(IpcMessage response...

FILE: src/dotnetCampus.Ipc/Exceptions/JsonIpcDirectRoutedCanNotFindRequestHandlerException.cs
  class JsonIpcDirectRoutedCanNotFindRequestHandlerException (line 9) | public class JsonIpcDirectRoutedCanNotFindRequestHandlerException : Json...
    method JsonIpcDirectRoutedCanNotFindRequestHandlerException (line 11) | internal JsonIpcDirectRoutedCanNotFindRequestHandlerException(PeerProx...

FILE: src/dotnetCampus.Ipc/Exceptions/JsonIpcDirectRoutedHandleRequestRemoteException.cs
  class JsonIpcDirectRoutedHandleRequestRemoteException (line 9) | public class JsonIpcDirectRoutedHandleRequestRemoteException : JsonIpcDi...
    method JsonIpcDirectRoutedHandleRequestRemoteException (line 11) | internal JsonIpcDirectRoutedHandleRequestRemoteException(PeerProxy rem...
    method ToString (line 40) | public override string ToString()

FILE: src/dotnetCampus.Ipc/Exceptions/JsonIpcDirectRoutedLocalException.cs
  class JsonIpcDirectRoutedLocalException (line 12) | public class JsonIpcDirectRoutedLocalException : IpcLocalException
    method JsonIpcDirectRoutedLocalException (line 14) | internal JsonIpcDirectRoutedLocalException()
    method JsonIpcDirectRoutedLocalException (line 18) | internal JsonIpcDirectRoutedLocalException(string message) : base(mess...
    method JsonIpcDirectRoutedLocalException (line 22) | internal JsonIpcDirectRoutedLocalException(string message, Exception i...

FILE: src/dotnetCampus.Ipc/Exceptions/JsonIpcDirectRoutedRemoteException.cs
  class JsonIpcDirectRoutedRemoteException (line 6) | public class JsonIpcDirectRoutedRemoteException : IpcRemoteException
    method JsonIpcDirectRoutedRemoteException (line 8) | internal JsonIpcDirectRoutedRemoteException()
    method JsonIpcDirectRoutedRemoteException (line 12) | internal JsonIpcDirectRoutedRemoteException(string message) : base(mes...
    method JsonIpcDirectRoutedRemoteException (line 16) | internal JsonIpcDirectRoutedRemoteException(string message, string? re...
    method JsonIpcDirectRoutedRemoteException (line 20) | internal JsonIpcDirectRoutedRemoteException(string? message, Exception...

FILE: src/dotnetCampus.Ipc/IIpcProvider.cs
  type IIpcProvider (line 8) | public interface IIpcProvider

FILE: src/dotnetCampus.Ipc/IIpcRequestHandler.cs
  type IIpcRequestHandler (line 11) | public interface IIpcRequestHandler
    method HandleRequest (line 18) | Task<IIpcResponseMessage> HandleRequest(IIpcRequestContext requestCont...

FILE: src/dotnetCampus.Ipc/IMessageWriter.cs
  type IRawMessageWriter (line 9) | public interface IRawMessageWriter
    method WriteMessageAsync (line 19) | Task WriteMessageAsync(byte[] data, int offset, int length, [CallerMem...

FILE: src/dotnetCampus.Ipc/IPeerProxy.cs
  type IPeerProxy (line 12) | public interface IPeerProxy
    method NotifyAsync (line 24) | Task NotifyAsync(IpcMessage request);
    method GetResponseAsync (line 31) | Task<IpcMessage> GetResponseAsync(IpcMessage request);

FILE: src/dotnetCampus.Ipc/Internals/AckManager.cs
  class AckManager (line 12) | internal class AckManager
    method GetAck (line 76) | public Ack GetAck()
    method OnAckReceived (line 263) | internal void OnAckReceived(object? sender, AckArgs e)

FILE: src/dotnetCampus.Ipc/Internals/DebugContext.cs
  class DebugContext (line 3) | class DebugContext

FILE: src/dotnetCampus.Ipc/Internals/EmptyIpcRequestHandler.cs
  class EmptyIpcRequestHandler (line 8) | class EmptyIpcRequestHandler : IIpcRequestHandler
    method HandleRequest (line 10) | public Task<IIpcResponseMessage> HandleRequest(IIpcRequestContext requ...

FILE: src/dotnetCampus.Ipc/Internals/IClientMessageWriter.cs
  type IClientMessageWriter (line 7) | internal interface IClientMessageWriter : IRawMessageWriter
    method WriteMessageAsync (line 9) | Task WriteMessageAsync(in IpcBufferMessageContext ipcBufferMessageCont...

FILE: src/dotnetCampus.Ipc/Internals/IpcHandleRequestMessageResult.cs
  class IpcHandleRequestMessageResult (line 7) | class IpcHandleRequestMessageResult : IIpcResponseMessage
    method IpcHandleRequestMessageResult (line 9) | [DebuggerStepThrough]

FILE: src/dotnetCampus.Ipc/Internals/IpcMessageConverter.cs
  class IpcMessageConverter (line 18) | internal static class IpcMessageConverter
    method WriteAsync (line 20) | public static async Task WriteAsync(Stream stream, byte[] messageHeade...
    method WriteAsync (line 38) | public static async Task WriteAsync(Stream stream, byte[] messageHeade...
    method VerifyMessageLength (line 49) | private static void VerifyMessageLength(int messageLength, string? tag...
    method WriteHeaderAsync (line 64) | public static async Task WriteHeaderAsync(Stream stream, byte[] messag...
    method ReadAsync (line 125) | public static async Task<StreamReadResult<IpcMessageResult>> ReadAsync...
    method ReadBufferAsync (line 220) | private static async Task<StreamReadResult<int>> ReadBufferAsync(Strea...
    method GetHeader (line 239) | private static async Task<StreamReadResult<bool>> GetHeader(Stream str...

FILE: src/dotnetCampus.Ipc/Internals/IpcPipeServerMessageProvider.cs
  class IpcPipeServerMessageProvider (line 22) | internal class IpcPipeServerMessageProvider : IDisposable
    method IpcPipeServerMessageProvider (line 24) | public IpcPipeServerMessageProvider(IpcContext ipcContext, IpcServerSe...
    method Start (line 46) | public async Task Start()
    method CreateNamedPipeServerStream (line 97) | private NamedPipeServerStream CreateNamedPipeServerStream()
    method Dispose (line 223) | public void Dispose()
    type SECURITY_ATTRIBUTES (line 248) | [StructLayout(LayoutKind.Sequential)]
    method CreateNamedPipe (line 256) | [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unic...
    method CreateNamedPipeServerStreamWithSecurity (line 271) | private static NamedPipeServerStream CreateNamedPipeServerStreamWithSe...

FILE: src/dotnetCampus.Ipc/Internals/PeerManager.cs
  type IPeerManager (line 14) | public interface IPeerManager
    method GetCurrentConnectedPeerProxyList (line 30) | IReadOnlyList<PeerProxy> GetCurrentConnectedPeerProxyList();
  class PeerManager (line 33) | class PeerManager : IPeerManager, IDisposable
    method PeerManager (line 35) | public PeerManager(IpcProvider ipcProvider)
    method TryAdd (line 40) | public bool TryAdd(PeerProxy peerProxy)
    method TryGetValue (line 47) | public bool TryGetValue(string key, [NotNullWhen(true)] out PeerProxy?...
    method RemovePeerProxy (line 56) | public void RemovePeerProxy(PeerProxy peerProxy)
    method WaitForPeerConnectFinishedAsync (line 89) | public async Task WaitForPeerConnectFinishedAsync(PeerProxy peerProxy)
    method OnAdd (line 98) | private void OnAdd(PeerProxy peerProxy)
    method GetCurrentConnectedPeerProxyList (line 122) | public IReadOnlyList<PeerProxy> GetCurrentConnectedPeerProxyList()
    method PeerReConnector_ReconnectFail (line 128) | private void PeerReConnector_ReconnectFail(object? sender, ReconnectFa...
    method Dispose (line 137) | public void Dispose()
    method PeerProxy_PeerConnectionBroken (line 152) | private void PeerProxy_PeerConnectionBroken(object? sender, IPeerConne...

FILE: src/dotnetCampus.Ipc/Internals/PeerReConnector.cs
  class PeerReConnector (line 15) | class PeerReConnector
    method PeerReConnector (line 17) | public PeerReConnector(PeerProxy peerProxy, IpcProvider ipcProvider)
    method PeerProxy_PeerConnectionBroken (line 25) | private void PeerProxy_PeerConnectionBroken(object? sender, IPeerConne...
    method Reconnect (line 35) | private async void Reconnect()
    method TryReconnectAsync (line 60) | private async Task<bool> TryReconnectAsync(IpcClientService ipcClientS...
  class ReconnectFailEventArgs (line 114) | class ReconnectFailEventArgs : EventArgs
    method ReconnectFailEventArgs (line 116) | public ReconnectFailEventArgs(PeerProxy peerProxy, IpcProvider ipcProv...

FILE: src/dotnetCampus.Ipc/Internals/PeerRegisterProvider.cs
  class PeerRegisterProvider (line 13) | internal class PeerRegisterProvider
    method BuildPeerRegisterMessage (line 15) | public IpcBufferMessageContext BuildPeerRegisterMessage(string peerName)
    method TryParsePeerRegisterMessage (line 33) | public bool TryParsePeerRegisterMessage(Stream stream, out string peer...
    method TryParsePeerRegisterMessageInner (line 48) | private bool TryParsePeerRegisterMessageInner(Stream stream, long posi...

FILE: src/dotnetCampus.Ipc/Internals/ServerStreamMessageReader.cs
  class ServerStreamMessageReader (line 19) | [DebuggerDisplay("ServerStreamMessageReader [{" + nameof(IpcContext) + "...
    method ServerStreamMessageReader (line 22) | public ServerStreamMessageReader(IpcContext ipcContext, Stream stream)
    method Run (line 64) | public async void Run()
    method RunAsync (line 80) | public async Task RunAsync()
    method DispatchMessage (line 152) | private void DispatchMessage(IpcMessageResult ipcMessageResult)
    method CriticalTrackReceiveCore (line 239) | [Conditional("DEBUG")]
    method WaitForConnectionAsync (line 255) | private async Task WaitForConnectionAsync()
    method ReadMessageAsync (line 332) | private async Task ReadMessageAsync()
    method OnAckRequested (line 387) | [Obsolete(DebugContext.DoNotUseAck)]
    method OnAckReceived (line 402) | private void OnAckReceived(AckArgs e)
    method OnMessageReceived (line 407) | private void OnMessageReceived(PeerStreamMessageArgs e)
    method OnPeerConnected (line 412) | private void OnPeerConnected(IpcInternalPeerConnectedArgs e)
    method Dispose (line 429) | protected virtual void Dispose(bool disposing)
    method Dispose (line 441) | public void Dispose()
    method OnPeerConnectBroke (line 447) | private void OnPeerConnectBroke(PeerConnectionBrokenArgs e)

FILE: src/dotnetCampus.Ipc/IpcMessageCommandType.cs
  type IpcMessageCommandType (line 8) | [Flags]

FILE: src/dotnetCampus.Ipc/IpcMessageWriter.cs
  class IpcMessageWriter (line 12) | public class IpcMessageWriter : IRawMessageWriter
    method IpcMessageWriter (line 18) | public IpcMessageWriter(IRawMessageWriter messageWriter)
    method WriteMessageAsync (line 26) | public Task WriteMessageAsync(byte[] buffer, int offset, int count, [C...
    method WriteMessageAsync (line 37) | public Task WriteMessageAsync(string message, string? tag = null)
    method WriteMessageAsync (line 49) | public Task WriteMessageAsync(IpcMessage message)

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Base_/IpcDirectRoutedClientProxyBase.cs
  class IpcDirectRoutedClientProxyBase (line 10) | public abstract class IpcDirectRoutedClientProxyBase
    method WriteHeader (line 22) | protected void WriteHeader(MemoryStream stream, string routedPath)
    method ToIpcMessage (line 34) | protected IpcMessage ToIpcMessage(MemoryStream stream, string tag = "")

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Base_/IpcDirectRoutedProviderBase.cs
  class IpcDirectRoutedProviderBase (line 18) | public abstract class IpcDirectRoutedProviderBase
    method IpcDirectRoutedProviderBase (line 25) | protected IpcDirectRoutedProviderBase(string? pipeName = null, IpcConf...
    method IpcDirectRoutedProviderBase (line 36) | protected IpcDirectRoutedProviderBase(IpcProvider ipcProvider)
    method StartServer (line 51) | public void StartServer()
    method ThrowIfStarted (line 74) | protected void ThrowIfStarted()
    method IpcServerService_MessageReceived (line 87) | private void IpcServerService_MessageReceived(object? sender, PeerMess...
    method OnHandleNotify (line 114) | protected abstract void OnHandleNotify(IpcDirectRoutedMessage message,...
    class RequestHandler (line 116) | class RequestHandler : IIpcRequestHandler
      method RequestHandler (line 118) | public RequestHandler(IpcDirectRoutedProviderBase ipcDirectRoutedPro...
      method HandleRequest (line 125) | public Task<IIpcResponseMessage> HandleRequest(IIpcRequestContext re...
    method OnHandleRequestAsync (line 149) | protected abstract Task<IIpcResponseMessage> OnHandleRequestAsync(IpcD...
    method TryHandleMessage (line 151) | private bool TryHandleMessage(in IpcMessage ipcMessage, [NotNullWhen(t...
    type IpcDirectRoutedMessage (line 176) | protected readonly struct IpcDirectRoutedMessage
      method IpcDirectRoutedMessage (line 184) | public IpcDirectRoutedMessage(string routedPath, MemoryStream stream,
      method GetData (line 196) | public IpcMessageBody GetData()

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/IpcDirectRoutedMessageWriter.cs
  class IpcDirectRoutedMessageWriter (line 5) | static class IpcDirectRoutedMessageWriter
    method WriteHeader (line 13) | public static void WriteHeader(BinaryWriter writer, ulong businessMess...

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedCanNotFindRequestHandlerExceptionInfo.cs
  class JsonIpcDirectRoutedCanNotFindRequestHandlerExceptionInfo (line 5) | internal static class JsonIpcDirectRoutedCanNotFindRequestHandlerExcepti...
    method CreateExceptionResponse (line 7) | public static JsonIpcDirectRoutedHandleRequestExceptionResponse Create...
    method IsCanNotFindRequestHandlerException (line 19) | public static bool IsCanNotFindRequestHandlerException([NotNullWhen(tr...

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedClientProxy.cs
  class JsonIpcDirectRoutedClientProxy (line 17) | public class JsonIpcDirectRoutedClientProxy : IpcDirectRoutedClientProxy...
    method JsonIpcDirectRoutedClientProxy (line 22) | public JsonIpcDirectRoutedClientProxy(PeerProxy peerProxy)
    method NotifyAsync (line 36) | public Task NotifyAsync(string routedPath)
    method NotifyAsync (line 46) | public Task NotifyAsync<T>(string routedPath, T obj) where T : class
    method GetResponseAsync (line 59) | public Task<TResponse?> GetResponseAsync<TResponse>(string routedPath)...
    method GetResponseAsync (line 69) | public async Task<TResponse?> GetResponseAsync<TResponse>(string route...
    method BuildMessage (line 125) | private IpcMessage BuildMessage(string routedPath, object obj)

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedContext.cs
  class JsonIpcDirectRoutedContext (line 6) | public class JsonIpcDirectRoutedContext
    method JsonIpcDirectRoutedContext (line 12) | public JsonIpcDirectRoutedContext(string peerName)

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedHandleRequestExceptionInfo.cs
  class JsonIpcDirectRoutedHandleRequestExceptionResponse (line 10) | internal class JsonIpcDirectRoutedHandleRequestExceptionResponse
    class JsonIpcDirectRoutedHandleRequestExceptionInfo (line 20) | internal class JsonIpcDirectRoutedHandleRequestExceptionInfo

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedLogStateMessageType.cs
  type JsonIpcDirectRoutedLogStateMessageType (line 6) | public enum JsonIpcDirectRoutedLogStateMessageType

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedLoggerExtension.cs
  class JsonIpcDirectRoutedLoggerExtension (line 10) | internal static class JsonIpcDirectRoutedLoggerExtension
    method LogSendJsonIpcDirectRoutedRequest (line 19) | public static void LogSendJsonIpcDirectRoutedRequest(this IpcContext c...
    method LogReceiveJsonIpcDirectRoutedResponse (line 43) | public static void LogReceiveJsonIpcDirectRoutedResponse(this IpcConte...
    method LogSendJsonIpcDirectRoutedNotify (line 66) | public static void LogSendJsonIpcDirectRoutedNotify(this IpcContext co...
    method LogSendJsonIpcDirectRoutedResponse (line 90) | public static void LogSendJsonIpcDirectRoutedResponse(this IpcContext ...
    method LogReceiveJsonIpcDirectRoutedRequest (line 114) | public static void LogReceiveJsonIpcDirectRoutedRequest(this IpcContex...
    method LogReceiveJsonIpcDirectRoutedNotify (line 138) | public static void LogReceiveJsonIpcDirectRoutedNotify(this IpcContext...

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedMessageLogState.cs
  type JsonIpcDirectRoutedMessageLogState (line 9) | public readonly struct JsonIpcDirectRoutedMessageLogState
    method JsonIpcDirectRoutedMessageLogState (line 11) | internal JsonIpcDirectRoutedMessageLogState(string routedPath, string ...
    method GetJsonText (line 48) | public string GetJsonText()
    method Format (line 63) | public static string Format(JsonIpcDirectRoutedMessageLogState state, ...

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedParameterlessType.cs
  class JsonIpcDirectRoutedParameterlessType (line 6) | internal class JsonIpcDirectRoutedParameterlessType

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/Json_/JsonIpcDirectRoutedProvider.cs
  class JsonIpcDirectRoutedProvider (line 27) | public class JsonIpcDirectRoutedProvider : IpcDirectRoutedProviderBase
    method JsonIpcDirectRoutedProvider (line 34) | public JsonIpcDirectRoutedProvider(string? pipeName = null, IpcConfigu...
    method JsonIpcDirectRoutedProvider (line 42) | public JsonIpcDirectRoutedProvider(IpcProvider ipcProvider) : base(ipc...
    method GetAndConnectClientAsync (line 51) | public async Task<JsonIpcDirectRoutedClientProxy> GetAndConnectClientA...
    method AddNotifyHandler (line 64) | public void AddNotifyHandler(string routedPath, Action handler)
    method AddNotifyHandler (line 72) | public void AddNotifyHandler(string routedPath, Func<Task> handler)
    method AddNotifyHandler (line 81) | public void AddNotifyHandler<T>(string routedPath, Func<T, Task> handler)
    method AddNotifyHandler (line 92) | public void AddNotifyHandler<T>(string routedPath, Func<T, JsonIpcDire...
    method AddNotifyHandler (line 109) | public void AddNotifyHandler<T>(string routedPath, Action<T> handler)
    method AddNotifyHandler (line 120) | public void AddNotifyHandler<T>(string routedPath, Action<T, JsonIpcDi...
    method AddNotifyHandler (line 137) | private void AddNotifyHandler(string routedPath, NotifyHandler notifyH...
    class NotifyHandler (line 147) | private class NotifyHandler
    method OnHandleNotify (line 160) | protected override void OnHandleNotify(IpcDirectRoutedMessage message,...
    method AddRequestHandler (line 221) | public void AddRequestHandler<TResponse>(string routedPath, Func<TResp...
    method AddRequestHandler (line 230) | public void AddRequestHandler<TResponse>(string routedPath, Func<Task<...
    method AddRequestHandler (line 240) | public void AddRequestHandler<TRequest, TResponse>(string routedPath, ...
    method AddRequestHandler (line 256) | public void AddRequestHandler<TRequest, TResponse>(string routedPath, ...
    method AddRequestHandler (line 268) | public void AddRequestHandler<TRequest, TResponse>(string routedPath,
    method AddRequestHandler (line 286) | public void AddRequestHandler<TRequest, TResponse>(string routedPath,
    method OnHandleRequestAsync (line 327) | protected override async Task<IIpcResponseMessage> OnHandleRequestAsyn...
    method ResponseToIpcMessageBody (line 394) | private IpcMessageBody ResponseToIpcMessageBody<TResponse>(TResponse r...
    method ToObject (line 409) | private T? ToObject<T>(MemoryStream stream)

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/RawByte_/RawByteIpcDirectRoutedClientProxy.cs
  class RawByteIpcDirectRoutedClientProxy (line 12) | public class RawByteIpcDirectRoutedClientProxy : IpcDirectRoutedClientPr...
    method RawByteIpcDirectRoutedClientProxy (line 14) | public RawByteIpcDirectRoutedClientProxy(IPeerProxy peerProxy)
    method NotfiyAsync (line 23) | public Task NotfiyAsync(string routedPath, in IpcMessageBody data)
    method NotfiyAsync (line 26) | public Task NotfiyAsync(string routedPath, Span<byte> data)
    method GetResponseAsync (line 32) | public async Task<IpcMessageBody> GetResponseAsync(string routedPath, ...
    method BuildMessage (line 40) | private IpcMessage BuildMessage(string routedPath, Span<byte> data)
    method NotfiyAsync (line 50) | public Task NotfiyAsync(string routedPath, IpcMessageBody data)
    method GetResponseAsync (line 56) | public async Task<IpcMessageBody> GetResponseAsync(string routedPath, ...
    method BuildMessage (line 64) | private IpcMessage BuildMessage(string routedPath, in IpcMessageBody d...

FILE: src/dotnetCampus.Ipc/IpcRouteds/DirectRouteds/RawByte_/RawByteIpcDirectRoutedProvider.cs
  class RawByteIpcDirectRoutedProvider (line 13) | public class RawByteIpcDirectRoutedProvider : IpcDirectRoutedProviderBase
    method RawByteIpcDirectRoutedProvider (line 15) | public RawByteIpcDirectRoutedProvider(string? pipeName = null, IpcConf...
    method RawByteIpcDirectRoutedProvider (line 20) | public RawByteIpcDirectRoutedProvider(IpcProvider ipcProvider) : base(...
    method AddNotifyHandler (line 31) | public void AddNotifyHandler(string routedPath, Func<IpcMessageBody, T...
    method AddNotifyHandler (line 39) | public void AddNotifyHandler(string routedPath, Func<IpcMessageBody, J...
    method AddNotifyHandler (line 62) | public void AddNotifyHandler(string routedPath, Action<IpcMessageBody>...
    method AddNotifyHandler (line 71) | public void AddNotifyHandler(string routedPath, Action<IpcMessageBody,...
    method OnHandleNotify (line 91) | protected override void OnHandleNotify(IpcDirectRoutedMessage message,...
    method AddRequestHandler (line 128) | public void AddRequestHandler(string routedPath,
    method AddRequestHandler (line 137) | public void AddRequestHandler(string routedPath,
    method AddRequestHandler (line 146) | public void AddRequestHandler(string routedPath, Func<IpcMessageBody, ...
    method AddRequestHandler (line 154) | public void AddRequestHandler(string routedPath,
    method OnHandleRequestAsync (line 175) | protected override async Task<IIpcResponseMessage> OnHandleRequestAsyn...

FILE: src/dotnetCampus.Ipc/Messages/Ack.cs
  type Ack (line 9) | public readonly struct Ack
    method Ack (line 15) | public Ack(ulong ack)
    method ToString (line 35) | public override string ToString()

FILE: src/dotnetCampus.Ipc/Messages/CoreMessageType.cs
  type CoreMessageType (line 9) | [Flags]

FILE: src/dotnetCampus.Ipc/Messages/IIpcResponseMessage.cs
  type IIpcResponseMessage (line 6) | public interface IIpcResponseMessage

FILE: src/dotnetCampus.Ipc/Messages/IpcClientRequestMessage.cs
  class IpcClientRequestMessage (line 7) | class IpcClientRequestMessage
    method IpcClientRequestMessage (line 9) | public IpcClientRequestMessage(IpcBufferMessageContext ipcBufferMessag...

FILE: src/dotnetCampus.Ipc/Messages/IpcClientRequestMessageId.cs
  type IpcClientRequestMessageId (line 7) | public readonly struct IpcClientRequestMessageId
    method IpcClientRequestMessageId (line 13) | public IpcClientRequestMessageId(ulong messageIdValue)

FILE: src/dotnetCampus.Ipc/Messages/IpcMessage.cs
  type IpcMessage (line 11) | public readonly struct IpcMessage
    method IpcMessage (line 18) | [DebuggerStepThrough]
    method IpcMessage (line 29) | [DebuggerStepThrough]
    method IpcMessage (line 42) | [DebuggerStepThrough]
    method ToIpcBufferMessageContextWithMessageHeader (line 72) | internal IpcBufferMessageContext ToIpcBufferMessageContextWithMessageH...
    method ToDebugString (line 85) | internal string ToDebugString()

FILE: src/dotnetCampus.Ipc/Messages/IpcMessageBody.cs
  type IpcMessageBody (line 10) | public readonly struct IpcMessageBody
    method IpcMessageBody (line 16) | [DebuggerStepThrough]
    method IpcMessageBody (line 30) | [DebuggerStepThrough]
  class IpcMessageBodyExtensions (line 74) | public static class IpcMessageBodyExtensions
    method ToMemoryStream (line 81) | public static MemoryStream ToMemoryStream(this IpcMessageBody message) =>
    method AsSpan (line 90) | public static Span<byte> AsSpan(this IpcMessageBody message) => new Sp...

FILE: src/dotnetCampus.Ipc/Messages/IpcMessageContext.cs
  type IpcMessageContext (line 5) | internal readonly struct IpcMessageContext
    method IpcMessageContext (line 7) | public IpcMessageContext(in ulong ack, byte[] messageBuffer, in uint m...

FILE: src/dotnetCampus.Ipc/Messages/IpcMessageResult.cs
  class IpcMessageResult (line 3) | class IpcMessageResult
    method IpcMessageResult (line 5) | public IpcMessageResult(bool success, in IpcMessageContext ipcMessageC...
    method IpcMessageResult (line 13) | public IpcMessageResult(string debugText) : this(success: false)
    method Deconstruct (line 28) | public void Deconstruct(out bool success, out IpcMessageContext ipcMes...

FILE: src/dotnetCampus.Ipc/Messages/KnownResponseMessages.cs
  class KnownIpcResponseMessages (line 10) | public static class KnownIpcResponseMessages
    method IsCanNotHandleResponseMessage (line 22) | internal static bool IsCanNotHandleResponseMessage(IIpcResponseMessage...
    method IsCustomCanNotHandleResponseMessage (line 32) | internal static bool IsCustomCanNotHandleResponseMessage(IIpcResponseM...
    method CreateCanNotHandleResponseMessage (line 43) | internal static IIpcResponseMessage CreateCanNotHandleResponseMessage(...
    class NamedCanNotHandleIpcResponseMessage (line 48) | [DebuggerDisplay("IpcResponseMessage.{" + nameof(Name) + ",nq}")]
      method NamedCanNotHandleIpcResponseMessage (line 51) | public NamedCanNotHandleIpcResponseMessage(string name)
      method NamedCanNotHandleIpcResponseMessage (line 57) | public NamedCanNotHandleIpcResponseMessage(IpcMessage responseMessage)
      method Equals (line 67) | public override bool Equals(object? obj)
      method Equals (line 72) | public bool Equals(NamedCanNotHandleIpcResponseMessage? other)
      method GetHashCode (line 77) | public override int GetHashCode()

FILE: src/dotnetCampus.Ipc/Pipes/IpcClientService.cs
  class IpcClientService (line 31) | public class IpcClientService : IRawMessageWriter, IDisposable, IClientM...
    method IpcClientService (line 38) | internal IpcClientService(IpcContext ipcContext, string peerName = Ipc...
    method DoTask (line 46) | private async Task DoTask(List<Func<Task>> list)
    type NamedPipeClientStreamResult (line 65) | readonly struct NamedPipeClientStreamResult
      method NamedPipeClientStreamResult (line 67) | public NamedPipeClientStreamResult(NamedPipeClientStream? namedPipeC...
      method NamedPipeClientStreamResult (line 73) | public NamedPipeClientStreamResult(Exception exception)
    method Start (line 108) | public async Task Start(bool shouldRegisterToPeer = true)
    method TryConnectToExistingPeerAsync (line 122) | internal Task<bool> TryConnectToExistingPeerAsync()
    method StartInternalAsync (line 132) | internal async Task<bool> StartInternalAsync(bool isReConnect, bool sh...
    method ConnectNamedPipeAsync (line 192) | private async Task<bool> ConnectNamedPipeAsync(bool isReConnect, Named...
    method CustomConnectNamedPipeAsync (line 239) | private async Task<bool> CustomConnectNamedPipeAsync(IIpcClientPipeCon...
    method DefaultConnectNamedPipeAsync (line 264) | private async Task DefaultConnectNamedPipeAsync(NamedPipeClientStream ...
    method RegisterToPeerAsync (line 296) | internal async Task RegisterToPeerAsync()
    method Stop (line 311) | public void Stop()
    method WriteMessageAsync (line 322) | internal async Task WriteMessageAsync(IpcMessageTracker<IpcBufferMessa...
    method WriteMessageAsync (line 407) | internal async Task WriteMessageAsync(IpcMessageTracker<IpcMessage> tr...
    method WriteMessageAsync (line 475) | public async Task WriteMessageAsync(byte[] buffer, int offset, int count,
    method Dispose (line 573) | public void Dispose()
    method VerifyNotDisposed (line 596) | private void VerifyNotDisposed()
    method WriteMessageAsync (line 604) | Task IClientMessageWriter.WriteMessageAsync(in IpcBufferMessageContext...

FILE: src/dotnetCampus.Ipc/Pipes/IpcMessageManagerBase.cs
  class IpcMessageManagerBase (line 10) | class IpcMessageManagerBase
    method CreateResponseMessageInner (line 14) | protected static IpcBufferMessageContext CreateResponseMessageInner(Ip...
    method CreateRequestMessageInner (line 56) | protected static IpcBufferMessageContext CreateRequestMessageInner(in ...
    method CheckHeader (line 99) | private static bool CheckHeader(Stream stream, byte[] header)
    method CheckResponseHeader (line 115) | protected static bool CheckResponseHeader(Stream stream)
    method CheckRequestHeader (line 121) | protected static bool CheckRequestHeader(Stream stream)

FILE: src/dotnetCampus.Ipc/Pipes/IpcMessageRequestManager.cs
  class IpcMessageRequestManager (line 27) | class IpcMessageRequestManager : IpcMessageManagerBase
    method IpcMessageRequestManager (line 33) | public IpcMessageRequestManager(IpcContext ipcContext)
    method CreateRequestMessage (line 54) | public IpcClientRequestMessage CreateRequestMessage(IpcMessage request)
    method OnReceiveMessage (line 78) | public void OnReceiveMessage(PeerStreamMessageArgs args)
    method BreakAllRequestTaskByIpcBroken (line 102) | public void BreakAllRequestTaskByIpcBroken()
    method HandleRequest (line 125) | private void HandleRequest(PeerStreamMessageArgs args)
    method HandleResponse (line 180) | private void HandleResponse(PeerStreamMessageArgs args)
    method ToString (line 251) | public override string ToString()

FILE: src/dotnetCampus.Ipc/Pipes/IpcMessageResponseManager.cs
  class IpcMessageResponseManager (line 11) | class IpcMessageResponseManager : IpcMessageManagerBase
    method CreateResponseMessage (line 13) | public IpcBufferMessageContext CreateResponseMessage(IpcClientRequestM...

FILE: src/dotnetCampus.Ipc/Pipes/IpcProvider.cs
  class IpcProvider (line 23) | public class IpcProvider : IIpcProvider, IDisposable
    method IpcProvider (line 28) | public IpcProvider() : this(Guid.NewGuid().ToString("N"))
    method IpcProvider (line 37) | public IpcProvider(string pipeName, IpcConfiguration? ipcConfiguration...
    method StartServer (line 81) | public async void StartServer()
    method IpcServerService_OnPeerConnected (line 110) | private async void IpcServerService_OnPeerConnected(object? sender, Ip...
    method ConnectBackToPeer (line 148) | private async Task ConnectBackToPeer(IpcInternalPeerConnectedArgs e)
    method ConnectBackToPeerCore (line 214) | private async Task ConnectBackToPeerCore(IpcInternalPeerConnectedArgs e)
    method NotifyPeerConnected (line 296) | private void NotifyPeerConnected(PeerProxy peer)
    method GetAndConnectToPeerAsync (line 326) | public async Task<PeerProxy> GetAndConnectToPeerAsync(string peerName)
    method TryConnectToExistingPeerAsync (line 342) | public async Task<ConnectToExistingPeerResult> TryConnectToExistingPee...
    method GetOrCreatePeerProxyAsync (line 403) | internal async Task<PeerProxy> GetOrCreatePeerProxyAsync(string peerName)
    method CreatePeerProxyAsync (line 419) | private async Task<PeerProxy> CreatePeerProxyAsync(string peerName)
    method CreateIpcClientService (line 431) | internal IpcClientService CreateIpcClientService(string peerName) => n...
    method Dispose (line 434) | public void Dispose()

FILE: src/dotnetCampus.Ipc/Pipes/IpcRequestHandlerProvider.cs
  class IpcRequestHandlerProvider (line 20) | class IpcRequestHandlerProvider
    method IpcRequestHandlerProvider (line 22) | public IpcRequestHandlerProvider(IpcContext ipcContext)
    method HandleRequest (line 38) | public async void HandleRequest(PeerProxy sender, IpcClientRequestArgs...
    method HandleRequestAsync (line 89) | private async Task<IIpcResponseMessage> HandleRequestAsync(IpcMessageT...
    method FormatHandlerAsErrorMessage (line 151) | private string FormatHandlerAsErrorMessage(IIpcRequestHandler handler)...
    method HandleRequestCoreAsync (line 160) | private static async Task<IIpcResponseMessage> HandleRequestCoreAsync(...
    method WriteResponseMessageAsync (line 166) | private async Task WriteResponseMessageAsync(PeerProxy peerProxy, IpcM...

FILE: src/dotnetCampus.Ipc/Pipes/IpcRequestMessageContext.cs
  class IpcRequestMessageContext (line 8) | class IpcRequestMessageContext : ICoreIpcRequestContext, IIpcRequestContext
    method IpcRequestMessageContext (line 10) | [DebuggerStepThrough]

FILE: src/dotnetCampus.Ipc/Pipes/IpcServerService.cs
  class IpcServerService (line 17) | public class IpcServerService : IDisposable
    method IpcServerService (line 23) | public IpcServerService(IpcContext ipcContext)
    method Start (line 53) | internal async Task Start()
    method PipeServerMessage_PeerConnectBroke (line 70) | private void PipeServerMessage_PeerConnectBroke(object? sender, IpcPip...
    method OnMessageReceived (line 102) | internal void OnMessageReceived(object? sender, PeerStreamMessageArgs e)
    method OnPeerConnected (line 112) | internal void OnPeerConnected(object? sender, IpcInternalPeerConnected...
    method Dispose (line 119) | private void Dispose(bool disposing)
    method Dispose (line 143) | public void Dispose()

FILE: src/dotnetCampus.Ipc/Pipes/PeerProxy.cs
  class PeerProxy (line 17) | public class PeerProxy : IPeerProxy
    method PeerProxy (line 22) | internal PeerProxy(string peerName, IpcClientService ipcClientService,...
    method PeerProxy (line 33) | internal PeerProxy(string peerName, IpcClientService ipcClientService,...
    method NotifyAsync (line 57) | public async Task NotifyAsync(IpcMessage request)
    method GetResponseAsync (line 100) | public async Task<IpcMessage> GetResponseAsync(IpcMessage request)
    method Update (line 185) | internal void Update(IpcInternalPeerConnectedArgs ipcInternalPeerConne...
    method Reconnect (line 213) | internal async void Reconnect(IpcClientService ipcClientService)
    method ServerStreamMessageReader_PeerConnectBroke (line 233) | private void ServerStreamMessageReader_PeerConnectBroke(object? sender...
    method ServerStreamMessageReader_MessageReceived (line 238) | private void ServerStreamMessageReader_MessageReceived(object? sender,...
    method ResponseManager_OnIpcClientRequestReceived (line 253) | private void ResponseManager_OnIpcClientRequestReceived(object? sender...
    method OnPeerConnectionBroken (line 259) | private void OnPeerConnectionBroken(IPeerConnectionBrokenArgs e)
    method WaitConnectAsync (line 278) | private async Task WaitConnectAsync(IIpcMessageTracker requestTracker)
    method DisposePeer (line 330) | internal void DisposePeer()

FILE: src/dotnetCampus.Ipc/Pipes/PipeConnectors/IIpcClientPipeConnector.cs
  type IIpcClientPipeConnector (line 8) | public interface IIpcClientPipeConnector
    method ConnectNamedPipeAsync (line 15) | Task<IpcClientNamedPipeConnectResult> ConnectNamedPipeAsync(IpcClientP...
  type IpcClientNamedPipeConnectResult (line 21) | public readonly struct IpcClientNamedPipeConnectResult
    method IpcClientNamedPipeConnectResult (line 27) | public IpcClientNamedPipeConnectResult(bool success, string? reason = ...

FILE: src/dotnetCampus.Ipc/Pipes/PipeConnectors/IpcClientPipeConnectionContext.cs
  type IpcClientPipeConnectionContext (line 9) | public readonly struct IpcClientPipeConnectionContext
    method IpcClientPipeConnectionContext (line 14) | public IpcClientPipeConnectionContext(string peerName, NamedPipeClient...

FILE: src/dotnetCampus.Ipc/Pipes/PipeConnectors/IpcClientPipeConnector.cs
  class IpcClientPipeConnector (line 9) | public class IpcClientPipeConnector : IIpcClientPipeConnector
    method IpcClientPipeConnector (line 17) | public IpcClientPipeConnector(CanContinueDelegate canContinue, TimeSpa...
    method ConnectNamedPipeAsync (line 26) | public async Task<IpcClientNamedPipeConnectResult> ConnectNamedPipeAsy...
    method DefaultGetStepSleepTime (line 102) | public static TimeSpan DefaultGetStepSleepTime(IpcClientPipeConnection...

FILE: src/dotnetCampus.Ipc/Serialization/IIpcObjectSerializer.cs
  type IIpcObjectSerializer (line 8) | public interface IIpcObjectSerializer
    method Serialize (line 15) | byte[] Serialize(object value);
    method Serialize (line 22) | void Serialize(Stream stream, object? value);
    method SerializeToElement (line 29) | IpcJsonElement SerializeToElement(object? value);
    method Deserialize (line 39) | T? Deserialize<T>(byte[] data, int start, int length);
    method Deserialize (line 47) | T? Deserialize<T>(Stream stream);
    method Deserialize (line 55) | T? Deserialize<T>(IpcJsonElement jsonElement);

FILE: src/dotnetCampus.Ipc/Serialization/IpcObjectJsonSerializer.cs
  class IpcObjectJsonSerializer (line 16) | [Obsolete("此类型已改名为 NewtonsoftJsonIpcObjectSerializer,并已在新的 .NET 框架中移除。")]
    method IpcObjectJsonSerializer (line 22) | public IpcObjectJsonSerializer()
    method IpcObjectJsonSerializer (line 30) | public IpcObjectJsonSerializer(JsonSerializer jsonSerializer) : base(j...
    method Serialize (line 144) | byte[] IIpcObjectSerializer.Serialize(object value) => throw null!;
    method Serialize (line 145) | void IIpcObjectSerializer.Serialize(Stream stream, object? value) => t...
    method SerializeToElement (line 146) | IpcJsonElement IIpcObjectSerializer.SerializeToElement(object? value) ...
    method Deserialize (line 147) | T? IIpcObjectSerializer.Deserialize<T>(byte[] data, int start, int len...
    method Deserialize (line 148) | T? IIpcObjectSerializer.Deserialize<T>(Stream stream) where T : defaul...
    method Deserialize (line 149) | T? IIpcObjectSerializer.Deserialize<T>(IpcJsonElement jsonElement) whe...
  class NewtonsoftJsonIpcObjectSerializer (line 38) | public class NewtonsoftJsonIpcObjectSerializer : IIpcObjectSerializer
    method NewtonsoftJsonIpcObjectSerializer (line 48) | public NewtonsoftJsonIpcObjectSerializer()
    method NewtonsoftJsonIpcObjectSerializer (line 57) | public NewtonsoftJsonIpcObjectSerializer(JsonSerializer jsonSerializer)
    method Serialize (line 68) | public byte[] Serialize(object value)
    method Serialize (line 75) | public void Serialize(Stream stream, object? value)
    method SerializeToElement (line 82) | public IpcJsonElement SerializeToElement(object? value) => new IpcJson...
    method Deserialize (line 98) | public T? Deserialize<T>(byte[] byteList, int start, int length)
    method Deserialize (line 111) | public T? Deserialize<T>(Stream stream)
    method Deserialize (line 128) | public T? Deserialize<T>(IpcJsonElement jsonElement) => jsonElement.Ra...
  class IpcObjectJsonSerializer (line 141) | [Obsolete("新的 .NET 框架中已不再支持 Newtonsoft.Json 依赖,请更换成基于 System.Text.Json 的...
    method IpcObjectJsonSerializer (line 22) | public IpcObjectJsonSerializer()
    method IpcObjectJsonSerializer (line 30) | public IpcObjectJsonSerializer(JsonSerializer jsonSerializer) : base(j...
    method Serialize (line 144) | byte[] IIpcObjectSerializer.Serialize(object value) => throw null!;
    method Serialize (line 145) | void IIpcObjectSerializer.Serialize(Stream stream, object? value) => t...
    method SerializeToElement (line 146) | IpcJsonElement IIpcObjectSerializer.SerializeToElement(object? value) ...
    method Deserialize (line 147) | T? IIpcObjectSerializer.Deserialize<T>(byte[] data, int start, int len...
    method Deserialize (line 148) | T? IIpcObjectSerializer.Deserialize<T>(Stream stream) where T : defaul...
    method Deserialize (line 149) | T? IIpcObjectSerializer.Deserialize<T>(IpcJsonElement jsonElement) whe...

FILE: src/dotnetCampus.Ipc/Serialization/JsonIpcMessageSerializer.cs
  class JsonIpcMessageSerializer (line 18) | public static class JsonIpcMessageSerializer
    method Serialize (line 27) | [Obsolete("因为 AOT 需要,此方法已计划删除。请自行序列化后,通过 new IpcMessage(tag, new IpcMe...
    method TryDeserialize (line 39) | [Obsolete("因为 AOT 需要,此方法已计划删除。请自行序列化后,通过 new IpcMessage(tag, new IpcMe...
    method Serialize (line 51) | [Obsolete("因为 AOT 需要,此方法已删除。请自行序列化后,通过 new IpcMessage(tag, new IpcMess...
    method TryDeserialize (line 63) | [Obsolete("因为 AOT 需要,此方法已删除。请自行序列化后,通过 new IpcMessage(tag, new IpcMess...
    method SerializeToIpcMessage (line 78) | internal static IpcMessage SerializeToIpcMessage(
    method TryDeserializeFromIpcMessage (line 99) | internal static bool TryDeserializeFromIpcMessage<T>(this IIpcObjectSe...

FILE: src/dotnetCampus.Ipc/Serialization/SystemTextJsonIpcObjectSerializer.cs
  class SystemTextJsonIpcObjectSerializer (line 15) | public class SystemTextJsonIpcObjectSerializer : IIpcObjectSerializer
    method SystemTextJsonIpcObjectSerializer (line 17) | internal SystemTextJsonIpcObjectSerializer()
    method SystemTextJsonIpcObjectSerializer (line 27) | public SystemTextJsonIpcObjectSerializer(JsonSerializerContext jsonSer...
    method Serialize (line 38) | public byte[] Serialize(object? value)
    method Serialize (line 59) | public void Serialize(Stream stream, object? value)
    method SerializeToElement (line 78) | public IpcJsonElement SerializeToElement(object? value)
    method Deserialize (line 99) | public T? Deserialize<T>(byte[] data, int start, int length)
    method Deserialize (line 114) | public T? Deserialize<T>(Stream stream)
    method Deserialize (line 127) | public T? Deserialize<T>(IpcJsonElement jsonElement)
  class IpcCompositeJsonSerializerContext (line 145) | internal class IpcCompositeJsonSerializerContext(JsonSerializerContext b...
    method GetTypeInfo (line 147) | public override JsonTypeInfo? GetTypeInfo(Type type)
  class IpcInternalJsonSerializerContext (line 156) | [JsonSerializable(typeof(bool))]

FILE: src/dotnetCampus.Ipc/Threading/IIpcThreadPool.cs
  type IIpcThreadPool (line 11) | internal interface IIpcThreadPool
    method Run (line 25) | Task<Task> Run(Action action, ILogger? logger);
  class CustomIpcThreadPoolBase (line 31) | public abstract class CustomIpcThreadPoolBase : IIpcThreadPool
    method Run (line 33) | Task<Task> IIpcThreadPool.Run(Action action, ILogger? logger)
    method Run (line 39) | protected abstract Task<Task> Run(Action action);

FILE: src/dotnetCampus.Ipc/Threading/IpcSingleThreadPool.cs
  class IpcSingleThreadPool (line 12) | internal class IpcSingleThreadPool : IIpcThreadPool
    method Run (line 14) | public Task<Task> Run(Action action, ILogger? logger)

FILE: src/dotnetCampus.Ipc/Threading/IpcTaskScheduling.cs
  type IpcTaskScheduling (line 8) | public enum IpcTaskScheduling

FILE: src/dotnetCampus.Ipc/Threading/IpcThreadPool.cs
  class IpcThreadPool (line 21) | internal sealed class IpcThreadPool : IIpcThreadPool
    method Run (line 87) | public Task<Task> Run(Action action, ILogger? logger)
    method RunRecursively (line 94) | private async void RunRecursively(IpcStartEndTaskItem taskItem, ILogge...
    method StartThread (line 128) | private void StartThread(Producer c, ILogger? logger)
    method OnThreadStart (line 140) | private void OnThreadStart(object? arg)
    method ClearWaitings (line 182) | private void ClearWaitings()
    method DelayOrAnyThreadAvailable (line 195) | private async Task DelayOrAnyThreadAvailable(TimeSpan delayTime)
    method GetCurrentStartThreadDelayTime (line 213) | private TimeSpan GetCurrentStartThreadDelayTime(int count)
    method ThreadCountToDelayTime (line 230) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method RecycleUselessThreads (line 251) | private void RecycleUselessThreads(ILogger? logger)
    method Log (line 293) | private void Log(ILogger? logger, string message)

FILE: src/dotnetCampus.Ipc/Threading/Tasks/IpcStartEndTaskItem.cs
  class IpcStartEndTaskItem (line 6) | internal sealed class IpcStartEndTaskItem
    method IpcStartEndTaskItem (line 11) | public IpcStartEndTaskItem(Action action)
    method AsTask (line 18) | public async Task<Task> AsTask()
    method Start (line 24) | internal void Start()
    method End (line 29) | internal void End()

FILE: src/dotnetCampus.Ipc/Threading/Tasks/IpcTask.cs
  class IpcTask (line 17) | internal sealed class IpcTask
    method IpcTask (line 29) | public IpcTask(IIpcThreadPool threadPool)
    method Run (line 41) | public Task Run(Action action, ILogger? logger = null) => Run(() =>
    method Run (line 55) | public Task<T> Run<T>(Func<Task<T>> task, ILogger? logger = null)
    method ResumeRunning (line 63) | private async void ResumeRunning()
    method ConsumeTaskItemAsync (line 115) | private async Task ConsumeTaskItemAsync(TaskItem taskItem)

FILE: src/dotnetCampus.Ipc/Threading/Tasks/TaskItem.cs
  class TaskItem (line 8) | internal abstract class TaskItem
    method TaskItem (line 10) | protected TaskItem(ILogger? logger)
    method Run (line 17) | internal abstract void Run();
    method TaskItem (line 24) | public TaskItem(Func<Task<T>> func, ILogger? logger)
    method AsTask (line 33) | public Task<T> AsTask() => _source.Task;
    method Run (line 35) | internal override async void Run()
  class TaskItem (line 20) | internal sealed class TaskItem<T> : TaskItem
    method TaskItem (line 10) | protected TaskItem(ILogger? logger)
    method Run (line 17) | internal abstract void Run();
    method TaskItem (line 24) | public TaskItem(Func<Task<T>> func, ILogger? logger)
    method AsTask (line 33) | public Task<T> AsTask() => _source.Task;
    method Run (line 35) | internal override async void Run()

FILE: src/dotnetCampus.Ipc/Utils/Buffers/ISharedArrayPool.cs
  type ISharedArrayPool (line 7) | public interface ISharedArrayPool
    method Rent (line 14) | byte[] Rent(int minLength);
    method Return (line 20) | void Return(byte[] array);

FILE: src/dotnetCampus.Ipc/Utils/Buffers/SharedArrayPool.cs
  class SharedArrayPool (line 11) | public class SharedArrayPool : ISharedArrayPool
    method SharedArrayPool (line 17) | public SharedArrayPool(ArrayPool<byte>? arrayPool = null)
    method Rent (line 28) | public byte[] Rent(int minLength)
    method Return (line 34) | public void Return(byte[] array)
    method Rent (line 47) | public byte[] Rent(int minLength)
    method Return (line 61) | public void Return(byte[] array)
  class SharedArrayPool (line 44) | public class SharedArrayPool : ISharedArrayPool
    method SharedArrayPool (line 17) | public SharedArrayPool(ArrayPool<byte>? arrayPool = null)
    method Rent (line 28) | public byte[] Rent(int minLength)
    method Return (line 34) | public void Return(byte[] array)
    method Rent (line 47) | public byte[] Rent(int minLength)
    method Return (line 61) | public void Return(byte[] array)

FILE: src/dotnetCampus.Ipc/Utils/Caching/CachePool.cs
  class CachePool (line 12) | internal sealed class CachePool<TSource, TCache> where TSource : notnull
    method CachePool (line 19) | public CachePool(Func<TSource, TCache> conversion, bool threadSafe = f...
    method CachePool (line 37) | public CachePool(CachePoolValueMap<TSource, TCache> conversion, bool t...
    method GetOrCacheValue (line 74) | private TCache GetOrCacheValue(TSource source)

FILE: src/dotnetCampus.Ipc/Utils/Caching/CachePoolValueMap.cs
  class CachePoolValueMap (line 13) | internal sealed class CachePoolValueMap<TSource, TCache> where TSource :...
    method CachePoolValueMap (line 20) | public CachePoolValueMap(Func<TSource, TCache> defaultConverter)
    method Convert (line 40) | [MethodImpl(MethodImplOptions.AggressiveInlining)]
    method ToCachePool (line 67) | public CachePool<TSource, TCache> ToCachePool() => new(this);

FILE: src/dotnetCampus.Ipc/Utils/Extensions/BinaryArrayExtensions.cs
  class BinaryArrayExtensions (line 6) | class BinaryArrayExtensions
    method Combine (line 8) | public static byte[] Combine(params byte[][] arrays)

FILE: src/dotnetCampus.Ipc/Utils/Extensions/ByteListExtensions.cs
  class ByteListExtensions (line 3) | internal static class ByteListExtensions
    method Equals (line 5) | public static bool Equals(byte[] a, byte[] b, int length)
    method Equals (line 18) | public static bool Equals(byte[] a, byte[] b)

FILE: src/dotnetCampus.Ipc/Utils/Extensions/DoubleBufferTaskExtensions.cs
  class DoubleBufferTaskExtensions (line 9) | static class DoubleBufferTaskExtensions
    method AddTaskAsync (line 13) | public static async Task AddTaskAsync(this DoubleBufferTask<Func<Task>...

FILE: src/dotnetCampus.Ipc/Utils/Extensions/IpcMessageCommandExtensions.cs
  class IpcMessageCommandExtensions (line 14) | internal static class IpcMessageCommandExtensions
    method AsMessageCommandTypeFlags (line 21) | public static IpcMessageCommandType AsMessageCommandTypeFlags(this Cor...
    method ToCoreMessageType (line 31) | public static CoreMessageType ToCoreMessageType(this IpcMessageCommand...
    method ToDebugMessageText (line 43) | internal static string? ToDebugMessageText(this IpcMessageBody body, I...
    method ToDebugMessageText (line 53) | internal static string? ToDebugMessageText(this IpcBufferMessageContex...
    method ToDebugMessageText (line 60) | internal static string? ToDebugMessageText(this PeerStreamMessageArgs ...

FILE: src/dotnetCampus.Ipc/Utils/Extensions/IpcMessageContextExtensions.cs
  class IpcMessageContextExtensions (line 6) | static class IpcMessageContextExtensions
    method ToStream (line 8) | public static ByteListMessageStream ToStream(this in IpcMessageContext...

FILE: src/dotnetCampus.Ipc/Utils/Extensions/IpcMessageExtension.cs
  class IpcMessageExtension (line 6) | static class IpcMessageExtension
    method Skip (line 8) | public static IpcMessage Skip(this IpcMessage ipcMessage, int length)

FILE: src/dotnetCampus.Ipc/Utils/Extensions/LoggerExtensions.cs
  class LoggerExtensions (line 8) | internal static class LoggerExtensions
    method Trace (line 10) | public static void Trace(this ILogger? logger, string message)
    method Debug (line 15) | public static void Debug(this ILogger? logger, string message)
    method Information (line 20) | public static void Information(this ILogger? logger, string message)
    method Warning (line 25) | public static void Warning(this ILogger? logger, string message)
    method Error (line 37) | public static void Error(this ILogger? logger, string message)
    method Error (line 49) | public static void Error(this ILogger? logger, Exception exception, st...

FILE: src/dotnetCampus.Ipc/Utils/Extensions/PeerMessageArgsExtension.cs
  class PeerMessageArgsExtension (line 11) | public static class PeerMessageArgsExtension
    method TryGetPayload (line 13) | internal static bool TryGetPayload(IPeerMessageArgs args, byte[] requi...
    method TryGetPayload (line 27) | public static bool TryGetPayload(this IPeerMessageArgs args, ulong req...
    method TryGetPayload (line 41) | public static bool TryGetPayload(in this IpcMessage ipcMessage, byte[]...
    method TryGetPayload (line 72) | public static bool TryGetPayload(in this IpcMessage ipcMessage, ulong ...

FILE: src/dotnetCampus.Ipc/Utils/Extensions/StreamExtensions.cs
  class StreamExtensions (line 7) | static class StreamExtensions
    method WriteAsync (line 18) | public static Task WriteAsync(this Stream stream, byte[] data)

FILE: src/dotnetCampus.Ipc/Utils/IO/AsyncBinaryReader.cs
  class AsyncBinaryReader (line 8) | class AsyncBinaryReader
    method AsyncBinaryReader (line 10) | public AsyncBinaryReader(Stream stream, ISharedArrayPool sharedArrayPool)
    method ReadUInt16Async (line 19) | public Task<StreamReadResult<ushort>> ReadUInt16Async()
    method ReadReadUInt64Async (line 24) | public Task<StreamReadResult<ulong>> ReadReadUInt64Async()
    method ReadUInt32Async (line 29) | public Task<StreamReadResult<uint>> ReadUInt32Async()
    method ReadAsync (line 34) | private async Task<StreamReadResult<T>> ReadAsync<T>(int byteCount, Fu...
    method InternalReadAsync (line 49) | private async Task<StreamReadResult<byte[]>> InternalReadAsync(int num...
  type StreamReadResult (line 69) | readonly struct StreamReadResult<T>
    method StreamReadResult (line 71) | public StreamReadResult(T result, bool isEndOfStream = false)

FILE: src/dotnetCampus.Ipc/Utils/IO/AsyncBinaryWriter.cs
  class AsyncBinaryWriter (line 9) | class AsyncBinaryWriter
    method AsyncBinaryWriter (line 11) | public AsyncBinaryWriter(Stream stream)
    method WriteAsync (line 18) | public async Task WriteAsync(ushort value)
    method WriteAsync (line 23) | public async Task WriteAsync(uint value)
    method WriteAsync (line 28) | public async Task WriteAsync(ulong value)
    method WriteAsync (line 33) | public async Task WriteAsync(int value)

FILE: src/dotnetCampus.Ipc/Utils/IO/ByteListMessageStream.cs
  class ByteListMessageStream (line 11) | internal sealed class ByteListMessageStream : MemoryStream
    method ByteListMessageStream (line 13) | private ByteListMessageStream(byte[] buffer, int count) : base(buffer, 0,
    method ByteListMessageStream (line 20) | public ByteListMessageStream(in IpcMessageContext ipcMessageContext) :...
    method Dispose (line 28) | protected override void Dispose(bool disposing)

FILE: src/dotnetCampus.Ipc/Utils/IO/PipeHelper.cs
  class PipeHelper (line 12) | internal static class PipeHelper
    method IsPipeExists (line 19) | public static bool IsPipeExists(string pipeName)
    method IsPipeExistsForWindows (line 42) | #if NET6_0_OR_GREATER
    method FindFirstFile (line 75) | [DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "Fi...
    method FindClose (line 78) | [DllImport("kernel32.dll", CharSet = CharSet.Unicode, EntryPoint = "Fi...

FILE: src/dotnetCampus.Ipc/Utils/Logging/EventId.cs
  type EventId (line 3) | internal readonly struct EventId
    method EventId (line 41) | public EventId(int id, string? name = null)
    method ToString (line 58) | public override string ToString()
    method Equals (line 68) | public bool Equals(EventId other)
    method Equals (line 74) | public override bool Equals(object? obj)
    method GetHashCode (line 85) | public override int GetHashCode()

FILE: src/dotnetCampus.Ipc/Utils/Logging/ILogger.cs
  type ILogger (line 5) | internal interface ILogger
    method Log (line 16) | void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exc...
    method IsEnabled (line 23) | bool IsEnabled(LogLevel logLevel);

FILE: src/dotnetCampus.Ipc/Utils/Logging/IpcLogger.cs
  class IpcLogger (line 9) | public class IpcLogger : ILogger
    method IpcLogger (line 15) | public IpcLogger(string name)
    method Log (line 22) | void ILogger.Log<TState>(LogLevel logLevel, EventId eventId, TState st...
    method IsEnabled (line 27) | bool ILogger.IsEnabled(LogLevel logLevel)
    method IsEnabled (line 42) | protected virtual bool IsEnabled(LogLevel logLevel)
    method Log (line 55) | protected virtual void Log<TState>(LogLevel logLevel, TState state, Ex...
    method ToString (line 69) | public override string ToString()

FILE: src/dotnetCampus.Ipc/Utils/Logging/LogLevel.cs
  type LogLevel (line 3) | public enum LogLevel

FILE: src/dotnetCampus.Ipc/Utils/NullableBooleans.cs
  type NullableBooleans (line 8) | internal struct NullableBooleans
    method GetBooleanAt (line 39) | [Pure]
    method SetBooleanAt (line 46) | public void SetBooleanAt(int indexFromEnd, bool value)

FILE: src/dotnetCampus.Ipc/Utils/TaskUtils.cs
  class TaskUtils (line 5) | internal static class TaskUtils
    method As (line 7) | public static async Task<TTarget> As<TSource, TTarget>(this Task<TSour...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/IgnoresIpcExceptionAnalyzerTests.cs
  class IgnoresIpcExceptionAnalyzerTests (line 13) | [TestClass]

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier`1+Test.cs
  class CSharpAnalyzerVerifier (line 6) | public static partial class CSharpAnalyzerVerifier<TAnalyzer>
    class Test (line 9) | public class Test : CSharpAnalyzerTest<TAnalyzer, MSTestVerifier>
      method Test (line 11) | public Test()

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier`1.cs
  class CSharpAnalyzerVerifier (line 11) | public static partial class CSharpAnalyzerVerifier<TAnalyzer>
    method Diagnostic (line 15) | public static DiagnosticResult Diagnostic()
    method Diagnostic (line 19) | public static DiagnosticResult Diagnostic(string diagnosticId)
    method Diagnostic (line 23) | public static DiagnosticResult Diagnostic(DiagnosticDescriptor descrip...
    method VerifyAnalyzerAsync (line 27) | public static async Task VerifyAnalyzerAsync(string source, params Dia...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier`2+Test.cs
  class CSharpCodeFixVerifier (line 7) | public static partial class CSharpCodeFixVerifier<TAnalyzer, TCodeFix>
    class Test (line 11) | public class Test : CSharpCodeFixTest<TAnalyzer, TCodeFix, MSTestVerif...
      method Test (line 13) | public Test()

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpCodeFixVerifier`2.cs
  class CSharpCodeFixVerifier (line 15) | public static partial class CSharpCodeFixVerifier<TAnalyzer, TCodeFix>
    method Diagnostic (line 20) | public static DiagnosticResult Diagnostic()
    method Diagnostic (line 24) | public static DiagnosticResult Diagnostic(string diagnosticId)
    method Diagnostic (line 28) | public static DiagnosticResult Diagnostic(DiagnosticDescriptor descrip...
    method VerifyAnalyzerAsync (line 32) | public static async Task VerifyAnalyzerAsync(string source, params Dia...
    method VerifyCodeFixAsync (line 44) | public static async Task VerifyCodeFixAsync(string source, string fixe...
    method VerifyCodeFixAsync (line 48) | public static async Task VerifyCodeFixAsync(string source, DiagnosticR...
    method VerifyCodeFixAsync (line 52) | public static async Task VerifyCodeFixAsync(string source, DiagnosticR...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpCodeRefactoringVerifier`1+Test.cs
  class CSharpCodeRefactoringVerifier (line 6) | public static partial class CSharpCodeRefactoringVerifier<TCodeRefactoring>
    class Test (line 9) | public class Test : CSharpCodeRefactoringTest<TCodeRefactoring, MSTest...
      method Test (line 11) | public Test()

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpCodeRefactoringVerifier`1.cs
  class CSharpCodeRefactoringVerifier (line 8) | public static partial class CSharpCodeRefactoringVerifier<TCodeRefactoring>
    method VerifyRefactoringAsync (line 12) | public static async Task VerifyRefactoringAsync(string source, string ...
    method VerifyRefactoringAsync (line 18) | public static async Task VerifyRefactoringAsync(string source, Diagnos...
    method VerifyRefactoringAsync (line 24) | public static async Task VerifyRefactoringAsync(string source, Diagnos...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/CSharpVerifierHelper.cs
  class CSharpVerifierHelper (line 8) | internal static class CSharpVerifierHelper
    method GetNullableWarningsFromCompiler (line 19) | private static ImmutableDictionary<string, ReportDiagnostic> GetNullab...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicAnalyzerVerifier`1+Test.cs
  class VisualBasicAnalyzerVerifier (line 6) | public static partial class VisualBasicAnalyzerVerifier<TAnalyzer>
    class Test (line 9) | public class Test : VisualBasicAnalyzerTest<TAnalyzer, MSTestVerifier>
      method Test (line 11) | public Test()

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicAnalyzerVerifier`1.cs
  class VisualBasicAnalyzerVerifier (line 11) | public static partial class VisualBasicAnalyzerVerifier<TAnalyzer>
    method Diagnostic (line 15) | public static DiagnosticResult Diagnostic()
    method Diagnostic (line 19) | public static DiagnosticResult Diagnostic(string diagnosticId)
    method Diagnostic (line 23) | public static DiagnosticResult Diagnostic(DiagnosticDescriptor descrip...
    method VerifyAnalyzerAsync (line 27) | public static async Task VerifyAnalyzerAsync(string source, params Dia...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicCodeFixVerifier`2+Test.cs
  class VisualBasicCodeFixVerifier (line 7) | public static partial class VisualBasicCodeFixVerifier<TAnalyzer, TCodeFix>
    class Test (line 11) | public class Test : VisualBasicCodeFixTest<TAnalyzer, TCodeFix, MSTest...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicCodeFixVerifier`2.cs
  class VisualBasicCodeFixVerifier (line 12) | public static partial class VisualBasicCodeFixVerifier<TAnalyzer, TCodeFix>
    method Diagnostic (line 17) | public static DiagnosticResult Diagnostic()
    method Diagnostic (line 21) | public static DiagnosticResult Diagnostic(string diagnosticId)
    method Diagnostic (line 25) | public static DiagnosticResult Diagnostic(DiagnosticDescriptor descrip...
    method VerifyAnalyzerAsync (line 29) | public static async Task VerifyAnalyzerAsync(string source, params Dia...
    method VerifyCodeFixAsync (line 41) | public static async Task VerifyCodeFixAsync(string source, string fixe...
    method VerifyCodeFixAsync (line 45) | public static async Task VerifyCodeFixAsync(string source, DiagnosticR...
    method VerifyCodeFixAsync (line 49) | public static async Task VerifyCodeFixAsync(string source, DiagnosticR...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicCodeRefactoringVerifier`1+Test.cs
  class VisualBasicCodeRefactoringVerifier (line 6) | public static partial class VisualBasicCodeRefactoringVerifier<TCodeRefa...
    class Test (line 9) | public class Test : VisualBasicCodeRefactoringTest<TCodeRefactoring, M...

FILE: tests/dotnetCampus.Ipc.Analyzers.Tests/Verifiers/VisualBasicCodeRefactoringVerifier`1.cs
  class VisualBasicCodeRefactoringVerifier (line 8) | public static partial class VisualBasicCodeRefactoringVerifier<TCodeRefa...
    method VerifyRefactoringAsync (line 12) | public static async Task VerifyRefactoringAsync(string source, string ...
    method VerifyRefactoringAsync (line 18) | public static async Task VerifyRefactoringAsync(string source, Diagnos...
    method VerifyRefactoringAsync (line 24) | public static async Task VerifyRefactoringAsync(string source, Diagnos...

FILE: tests/dotnetCampus.Ipc.FakeTests/FakeApis/IRemoteFakeIpcArgumentOrReturn.cs
  type IRemoteFakeIpcArgumentOrReturn (line 4) | [IpcPublic]

FILE: tests/dotnetCampus.Ipc.FakeTests/FakeApis/IRemoteFakeIpcObject.cs
  type IRemoteFakeIpcObject (line 4) | [IpcPublic]
    method MethodWithIpcParameterAsync (line 7) | [IpcMethod(IgnoresIpcException = false)]
    method ShutdownAsync (line 10) | [IpcMethod(IgnoresIpcException = true, Timeout = 2000)]

FILE: tests/dotnetCampus.Ipc.FakeTests/FakeApis/RemoteFakeIpcObject.cs
  class RemoteFakeIpcObject (line 4) | public class RemoteFakeIpcObject : IRemoteFakeIpcObject
    method MethodWithIpcParameterAsync (line 9) | public async Task<IRemoteFakeIpcArgumentOrReturn> MethodWithIpcParamet...
    method ShutdownAsync (line 21) | Task IRemoteFakeIpcObject.ShutdownAsync()
    method WaitForShutdownAsync (line 27) | internal Task WaitForShutdownAsync()

FILE: tests/dotnetCampus.Ipc.FakeTests/FakeApis/RemoteIpcReturn.cs
  class RemoteIpcReturn (line 5) | public class RemoteIpcReturn : IRemoteFakeIpcArgumentOrReturn
    method RemoteIpcReturn (line 7) | public RemoteIpcReturn(string value)

FILE: tests/dotnetCampus.Ipc.FakeTests/Program.cs
  class Program (line 9) | internal static class Program
    method Main (line 11) | private static async Task Main(string[] args)
  type CommandLineOptions (line 34) | internal record CommandLineOptions

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/FakeIpcObject.cs
  class FakeIpcObject (line 13) | internal class FakeIpcObject : IFakeIpcObject
    method FakeIpcObject (line 21) | public FakeIpcObject()
    method FakeIpcObject (line 25) | public FakeIpcObject(INestedFakeIpcArgumentOrReturn jointSideObject)
    method SetIpcReadonlyProperty (line 46) | public void SetIpcReadonlyProperty(bool value)
    method WaitsVoidMethod (line 67) | public void WaitsVoidMethod()
    method NonWaitsVoidMethod (line 73) | public void NonWaitsVoidMethod()
    method MethodThatIgnoresIpcException (line 79) | public Task MethodThatIgnoresIpcException()
    method MethodThatThrowsIpcException (line 85) | public Task MethodThatThrowsIpcException()
    method MethodThatHasTimeout (line 91) | public Task MethodThatHasTimeout()
    method MethodThatHasAsyncNullableReturn (line 97) | public async Task<string?> MethodThatHasAsyncNullableReturn()
    method MethodThatHasAsyncNullableComplexReturn (line 104) | public async Task<FakeIpcObjectSubModelA?> MethodThatHasAsyncNullableC...
    method MethodThatHasDefaultReturn (line 110) | public async Task<string> MethodThatHasDefaultReturn()
    method MethodThatHasObjectWithObjectDefaultReturn (line 116) | public async Task<object> MethodThatHasObjectWithObjectDefaultReturn()
    method MethodThatHasObjectWithStringDefaultReturn (line 122) | public async Task<object> MethodThatHasObjectWithStringDefaultReturn()
    method MethodThatHasStringDefaultReturn (line 129) | public async Task<String> MethodThatHasStringDefaultReturn()
    method MethodThatHasCustomDefaultReturn (line 135) | public async Task<IntPtr> MethodThatHasCustomDefaultReturn()
    method MethodThatCannotBeCompiled_MustSetOtherAttributes (line 141) | public async Task<string> MethodThatCannotBeCompiled_MustSetOtherAttri...
    method MethodWithListParametersAndListReturn (line 147) | public async Task<List<string>> MethodWithListParametersAndListReturn(...
    method MethodWithCollectionParametersAndCollectionReturn (line 153) | public async Task<IList<string>> MethodWithCollectionParametersAndColl...
    method MethodWithArrayParametersAndArrayReturn (line 159) | public async Task<string[]> MethodWithArrayParametersAndArrayReturn(st...
    method MethodWithStructParameters (line 165) | public void MethodWithStructParameters(BindingFlags flags)
    method MethodWithStructReturn (line 169) | public bool MethodWithStructReturn()
    method MethodWithSameParameterCountOverloading (line 174) | public int MethodWithSameParameterCountOverloading(int a, int b)
    method MethodWithSameParameterCountOverloading (line 179) | public long MethodWithSameParameterCountOverloading(long a, long b)
    method MethodWithNestedEnumReturn (line 184) | public IFakeIpcObject.NestedEnum MethodWithNestedEnumReturn()
    method AsyncMethodWithNestedEnumReturn (line 189) | public Task<IFakeIpcObject.NestedEnum> AsyncMethodWithNestedEnumReturn()
    method AsyncMethod (line 194) | public async Task AsyncMethod()
    method AsyncMethodWithIpcPublicObjectParametersAndIpcPublicObjectReturn (line 199) | public async Task<INestedFakeIpcArgumentOrReturn> AsyncMethodWithIpcPu...
    method AsyncMethodWithStructParametersAndStructReturn (line 212) | public Task<(double a, uint b, int? c, byte d)> AsyncMethodWithStructP...
    method AsyncMethodWithComplexValueTupleParametersAndComplexValueTupleReturn (line 219) | public Task<(FakeIpcObjectSubModelA a, FakeIpcObjectSubModelA? b, IntP...
    method AsyncMethodWithComplexParametersAndComplexReturn (line 225) | public Task<FakeIpcObjectSubModelA> AsyncMethodWithComplexParametersAn...
    method AsyncMethodWithPrimaryParametersAndPrimaryReturn (line 230) | public Task<string> AsyncMethodWithPrimaryParametersAndPrimaryReturn(s...

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/FakeIpcObjectSubModelA.cs
  class FakeIpcObjectSubModelA (line 3) | internal class FakeIpcObjectSubModelA
    method FakeIpcObjectSubModelA (line 5) | public FakeIpcObjectSubModelA()
    method FakeIpcObjectSubModelA (line 9) | public FakeIpcObjectSubModelA(double a, uint b, int c, byte d)

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/FakeIpcObjectWithTypeAttributes.cs
  type IFakeIpcObjectWithTypeAttributes (line 5) | [IpcPublic(IgnoresIpcException = true, Timeout = 100)]
  class FakeIpcObjectWithTypeAttributes (line 10) | internal class FakeIpcObjectWithTypeAttributes : FakeIpcObject, IFakeIpc...

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/IFakeIpcObject.cs
  type IFakeIpcObject (line 11) | [IpcPublic]
    method WaitsVoidMethod (line 31) | [IpcMethod(WaitsVoid = true)]
    method NonWaitsVoidMethod (line 34) | [IpcMethod(WaitsVoid = false)]
    method MethodThatIgnoresIpcException (line 37) | [IpcMethod(IgnoresIpcException = true)]
    method MethodThatThrowsIpcException (line 40) | Task MethodThatThrowsIpcException();
    method MethodThatHasTimeout (line 42) | [IpcMethod(Timeout = 100)]
    method MethodThatHasAsyncNullableReturn (line 46) | Task<string?> MethodThatHasAsyncNullableReturn();
    method MethodThatHasAsyncNullableComplexReturn (line 50) | Task<FakeIpcObjectSubModelA?> MethodThatHasAsyncNullableComplexReturn();
    method MethodThatHasDefaultReturn (line 53) | [IpcMethod(DefaultReturn = "\"default1\"", IgnoresIpcException = true,...
    method MethodThatHasObjectWithObjectDefaultReturn (line 56) | [IpcMethod(DefaultReturn = "default", IgnoresIpcException = true, Time...
    method MethodThatHasObjectWithStringDefaultReturn (line 59) | [IpcMethod(DefaultReturn = "\"default1\"", IgnoresIpcException = true,...
    method MethodThatHasStringDefaultReturn (line 63) | [IpcMethod(DefaultReturn = "\"default1\"", IgnoresIpcException = true,...
    method MethodThatHasCustomDefaultReturn (line 66) | [IpcMethod(DefaultReturn = "new System.IntPtr(1)", IgnoresIpcException...
    method MethodThatCannotBeCompiled_MustSetOtherAttributes (line 69) | [IpcMethod(DefaultReturn = "\"default1\"")]
    method MethodWithListParametersAndListReturn (line 72) | Task<List<string>> MethodWithListParametersAndListReturn(List<string> ...
    method MethodWithCollectionParametersAndCollectionReturn (line 74) | Task<IList<string>> MethodWithCollectionParametersAndCollectionReturn(...
    method MethodWithArrayParametersAndArrayReturn (line 76) | Task<string[]> MethodWithArrayParametersAndArrayReturn(string[] a, str...
    method MethodWithStructParameters (line 78) | void MethodWithStructParameters(BindingFlags flags);
    method MethodWithStructReturn (line 80) | bool MethodWithStructReturn();
    method MethodWithSameParameterCountOverloading (line 82) | int MethodWithSameParameterCountOverloading(int a, int b);
    method MethodWithSameParameterCountOverloading (line 84) | long MethodWithSameParameterCountOverloading(long a, long b);
    method MethodWithNestedEnumReturn (line 86) | NestedEnum MethodWithNestedEnumReturn();
    method AsyncMethodWithNestedEnumReturn (line 88) | Task<IFakeIpcObject.NestedEnum> AsyncMethodWithNestedEnumReturn();
    method AsyncMethod (line 90) | Task AsyncMethod();
    method AsyncMethodWithIpcPublicObjectParametersAndIpcPublicObjectReturn (line 92) | Task<INestedFakeIpcArgumentOrReturn> AsyncMethodWithIpcPublicObjectPar...
    method AsyncMethodWithStructParametersAndStructReturn (line 95) | Task<(double a, uint b, int? c, byte d)> AsyncMethodWithStructParamete...
    method AsyncMethodWithComplexValueTupleParametersAndComplexValueTupleReturn (line 99) | Task<(FakeIpcObjectSubModelA a, FakeIpcObjectSubModelA? b, IntPtr c, I...
    method AsyncMethodWithComplexParametersAndComplexReturn (line 102) | Task<FakeIpcObjectSubModelA> AsyncMethodWithComplexParametersAndComple...
    method AsyncMethodWithPrimaryParametersAndPrimaryReturn (line 104) | Task<string> AsyncMethodWithPrimaryParametersAndPrimaryReturn(string s...
    type NestedEnum (line 106) | public enum NestedEnum

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/IFakeIpcObjectBase.cs
  type IFakeIpcObjectBase (line 3) | internal interface IFakeIpcObjectBase

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/Fake/INestedFakeIpcArgumentOrReturn.cs
  type INestedFakeIpcArgumentOrReturn (line 5) | [IpcPublic]
  class FakeNestedIpcArgumentOrReturn (line 11) | internal sealed class FakeNestedIpcArgumentOrReturn : INestedFakeIpcArgu...
    method FakeNestedIpcArgumentOrReturn (line 13) | public FakeNestedIpcArgumentOrReturn(string value)

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/FakeRemote/RemoteIpcArgument.cs
  class RemoteIpcArgument (line 4) | public class RemoteIpcArgument : IRemoteFakeIpcArgumentOrReturn
    method RemoteIpcArgument (line 6) | public RemoteIpcArgument(string value)

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/GeneratedProxies/IpcObjectTests.cs
  class IpcObjectTests (line 17) | [TestClass]
    method IpcPropertyTests1 (line 20) | [TestMethod("IPC 代理生成:可空字符串属性")]
    method IpcPropertyTests2 (line 33) | [TestMethod("IPC 代理生成:非可空字符串属性")]
    method IpcPropertyTests3 (line 46) | [TestMethod("IPC 代理生成:枚举属性")]
    method IpcPropertyTests4 (line 59) | [TestMethod("IPC 代理生成:IPC 只读属性")]
    method IpcPropertyTests5 (line 77) | [TestMethod("IPC 代理生成:没有原生序列化的属性(以指针属性为例,仅支持 Newtonsoft.Json)")]
    method IpcMethodsTests1 (line 91) | [TestMethod("IPC 代理生成:要等待完成的 void 方法")]
    method IpcMethodsTests2 (line 105) | [TestMethod("IPC 代理生成:不等待完成的 void 方法")]
    method IpcMethodsTests3 (line 119) | [TestMethod("IPC 代理生成:会 IPC 超时的方法")]
    method IpcMethodsTests4 (line 132) | [TestMethod("IPC 代理生成:返回默认值的方法")]
    method IpcMethodsTests5 (line 145) | [TestMethod("IPC 代理生成:返回默认表达式默认值的方法")]
    method IpcMethodsTests6 (line 158) | [TestMethod("IPC 代理生成:返回字符串表达式默认值的方法")]
    method IpcMethodsTests7 (line 171) | [TestMethod("IPC 代理生成:返回大写字符串表达式默认值的方法")]
    method IpcMethodsTests8 (line 184) | [TestMethod("IPC 代理生成:返回自定义表达式默认值的方法")]
    method IpcParametersAndReturnsTests1 (line 197) | [TestMethod("IPC 代理生成:枚举参数")]
    method IpcParametersAndReturnsTests2 (line 207) | [TestMethod("IPC 代理生成:布尔返回值")]
    method IpcParametersAndReturnsTests3 (line 220) | [TestMethod("IPC 代理生成:同数量的参数组成的重载方法组。")]
    method IpcParametersAndReturnsTests4 (line 235) | [TestMethod("IPC 代理生成:异步返回值")]
    method IpcParametersAndReturnsTests5 (line 245) | [TestMethod("IPC 代理生成:多参数和异步结构体返回值。")]
    method IpcParametersAndReturnsTests6 (line 258) | [TestMethod("IPC 代理生成:复杂参数和异步复杂返回值")]
    method IpcParametersAndReturnsTests7 (line 274) | [TestMethod("IPC 代理生成:字符串参数和异步字符串返回值。")]
    method IpcParametersAndReturnsTests8 (line 287) | [TestMethod("IPC 代理生成:IPC 参数和异步 IPC 返回值")]
    method DifferentAssembliesIpcParametersAndReturnsTests (line 318) | [TestMethod("IPC 代理生成:不同程序集中的同名 IPC 参数和异步 IPC 返回值")]
    method IpcCollectionTests1 (line 389) | [TestMethod("IPC 代理生成:集合(列表)属性")]
    method IpcCollectionTests2 (line 402) | [TestMethod("IPC 代理生成:集合(接口)属性")]
    method IpcCollectionTests3 (line 415) | [TestMethod("IPC 代理生成:集合(数组)属性")]
    method IpcCollectionTests4 (line 428) | [TestMethod("IPC 代理生成:集合(列表)异步方法")]
    method IpcCollectionTests5 (line 443) | [TestMethod("IPC 代理生成:集合(接口)异步方法")]
    method IpcCollectionTests6 (line 458) | [TestMethod("IPC 代理生成:集合(数组)异步方法")]
    method IpcMethodExceptionTests1 (line 473) | [TestMethod("IPC 代理生成:忽略异常的方法")]
    method IpcMethodExceptionTests2 (line 499) | [TestMethod("IPC 代理生成:没有忽略异常的方法")]
    method IpcMethodExceptionTests3 (line 541) | [TestMethod("IPC 代理生成:成员上没有标记忽略异常,但是类型上标记了,也要忽略异常")]
    method CreateIpcPairAsync (line 567) | private async Task<(IPeerProxy peer, IFakeIpcObject proxy)> CreateIpcP...
    method CreateIpcPairWithProvidersAsync (line 591) | private async Task<(IIpcProvider aProvider, IIpcProvider bProvider, IP...

FILE: tests/dotnetCampus.Ipc.Tests/CompilerServices/GeneratedProxies/NotGeneratedTestOnlyFakeIpcObjectIpcShape.cs
  class NotGeneratedTestOnlyFakeIpcObjectIpcShape (line 8) | [IpcShape(typeof(IFakeIpcObject))]
    method WaitsVoidMethod (line 41) | [IpcMethod]
    method NonWaitsVoidMethod (line 47) | [IpcMethod]
    method MethodThatIgnoresIpcException (line 53) | [IpcMethod]
    method MethodThatThrowsIpcException (line 59) | [IpcMethod]
    method MethodThatHasTimeout (line 65) | [IpcMethod]
    method MethodThatHasAsyncNullableReturn (line 71) | [IpcMethod]
    method MethodThatHasAsyncNullableComplexReturn (line 77) | [IpcMethod]
    method MethodThatHasDefaultReturn (line 83) | [IpcMethod]
    method MethodThatHasObjectWithObjectDefaultReturn (line 89) | [IpcMethod]
    method MethodThatHasObjectWithStringDefaultReturn (line 95) | [IpcMethod]
    method MethodThatHasStringDefaultReturn (line 101) | [IpcMethod]
    method MethodThatHasCustomDefaultReturn (line 107) | [IpcMethod]
    method MethodThatCannotBeCompiled_MustSetOtherAttributes (line 113) | [IpcMethod]
    method MethodWithListParametersAndListReturn (line 119) | public Task<List<string>> MethodWithListParametersAndListReturn(List<s...
    method MethodWithCollectionParametersAndCollectionReturn (line 124) | public Task<IList<string>> MethodWithCollectionParametersAndCollection...
    method MethodWithArrayParametersAndArrayReturn (line 129) | public Task<string[]> MethodWithArrayParametersAndArrayReturn(string[]...
    method MethodWithStructParameters (line 134) | [IpcMethod]
    method MethodWithStructReturn (line 140) | [IpcMethod]
    method MethodWithSameParameterCountOverloading (line 146) | public int MethodWithSameParameterCountOverloading(int a, int b)
    method MethodWithSameParameterCountOverloading (line 151) | public long MethodWithSameParameterCountOverloading(long a, long b)
    method MethodWithNestedEnumReturn (line 156) | [IpcMethod]
    method AsyncMethodWithNestedEnumReturn (line 162) | [IpcMethod]
    method AsyncMethod (line 168) | [IpcMethod]
    method AsyncMethodWithIpcPublicObjectParametersAndIpcPublicObjectReturn (line 174) | [IpcMethod]
    method AsyncMethodWithStructParametersAndStructReturn (line 180) | [IpcMethod]
    method AsyncMethodWithComplexValueTupleParametersAndComplexValueTupleReturn (line 186) | [IpcMethod]
    method AsyncMethodWithComplexParametersAndComplexReturn (line 192) | [IpcMethod]
    method AsyncMethodWithPrimaryParametersAndPrimaryReturn (line 198) | [IpcMethod]

FILE: tests/dotnetCampus.Ipc.Tests/IpcClientServiceTests.cs
  class IpcClientServiceTests (line 8) | [TestClass]
    method SendWhenDisposed (line 11) | [TestMethod("连接断开之后持续发送消息,将会收到 ObjectDisposedException 异常")]

FILE: tests/dotnetCampus.Ipc.Tests/IpcMessageConverterTest.cs
  class IpcMessageConverterTest (line 10) | [TestClass]
    method IpcMessageConverterWriteAsync1 (line 13) | [TestMethod("读取消息头不对的数据,可以返回读取失败")]
    method IpcMessageConverterWriteAsync2 (line 37) | [TestMethod("读取消息头长度不对的数据,可以返回读取失败")]
    method IpcMessageConverterWriteAsync3 (line 61) | [TestMethod("写入的数据和读取的相同,可以读取到写入的数据")]

FILE: tests/dotnetCampus.Ipc.Tests/IpcObjectJsonSerializerTests.cs
  class IpcObjectJsonSerializerTests (line 7) | [TestClass]
    method Serialize (line 10) | [TestMethod("序列化对象之后,能通过二进制反序列化回对象")]
    class Foo (line 30) | public class Foo
  class FooJsonContext (line 37) | [JsonSerializable(typeof(IpcObjectJsonSerializerTests.Foo))]

FILE: tests/dotnetCampus.Ipc.Tests/IpcProviderTests.cs
  class IpcProviderTests (line 9) | [TestClass]
    method TestTryConnectToExistingPeerAsync1 (line 12) | [TestMethod("使用 TryConnectToExistingPeerAsync 尝试连接不存在的对方,可以立刻返回连接失败")]
    method TestTryConnectToExistingPeerAsync2 (line 20) | [TestMethod("使用 TryConnectToExistingPeerAsync 尝试连接存在的对方,可以返回连接成功")]
    method TestTryConnectToExistingPeerAsync3 (line 53) | public async Task TestTryConnectToExistingPeerAsync3()

FILE: tests/dotnetCampus.Ipc.Tests/IpcRouteds/DirectRouteds/JsonIpcDirectRoutedProviderSystemJsonSerializerTest.cs
  class JsonIpcDirectRoutedProviderSystemJsonSerializerTest (line 9) | [TestClass]
    method TestRequestNotMatchResponse (line 12) | [TestMethod("测试直接路由匹配到不符合预期的响应时的异常")]
  class JsonIpcDirectRoutedSystemJsonSerializerTestGenerationContext (line 65) | [JsonSerializable(typeof(JsonIpcDirectRoutedSystemJsonSerializerTestRequ...
  type JsonIpcDirectRoutedSystemJsonSerializerTestRequest1 (line 72) | public record JsonIpcDirectRoutedSystemJsonSerializerTestRequest1
  type JsonIpcDirectRoutedSystemJsonSerializerTestResponse1 (line 77) | public record JsonIpcDirectRoutedSystemJsonSerializerTestResponse1

FILE: tests/dotnetCampus.Ipc.Tests/IpcRouteds/DirectRouteds/JsonIpcDirectRoutedProviderTest.cs
  class JsonIpcDirectRoutedProviderTest (line 14) | [TestClass]
    method TestShared (line 17) | [TestMethod("多个通讯框架共用相同的 IpcProvider 对象,相互之间不受影响")]
    method TestRequest1 (line 59) | [TestMethod("客户端请求服务端,可以在服务端收到客户端请求的内容")]
    method TestRequest2 (line 110) | [TestMethod("客户端到服务端的请求,可以获取到服务端的响应")]
    method TestRequest3 (line 156) | [TestMethod("允许创建多个服务端实例共用相同的 IpcProvider 对象,但是如果多个服务端对相同的路由进行处理,只有先添加...
    method TestRequest4 (line 207) | [TestMethod("请求不存在的路径,能收到异常")]
    method TestException1 (line 234) | [TestMethod("如果请求的对象出现了异常,可以正确收到请求响应结束和具体的远端异常信息,而不会进入无限等待")]
    method AddNotifyHandler (line 272) | [TestMethod("重复调用 JsonIpcDirectRoutedProvider 添加通知处理相同的消息,将会抛出异常")]
    method AddRequestHandler (line 291) | [TestMethod("重复调用 AddRequestHandler 添加请求处理相同的消息,将会抛出异常")]
    method TestNotify1 (line 312) | [TestMethod("允许创建多个服务端实例共用相同的 IpcProvider 对象,从而每个服务端接收不同的通知")]
    method TestNotify2 (line 367) | [TestMethod("从客户端通知到服务端,可以在服务端获取到通知的客户端名")]
    method TestNotify3 (line 410) | [TestMethod("客户端的通知可以成功发送到服务端")]
    method TestNotifyLocalOneByOne (line 452) | [TestMethod("配置 LocalOneByOne 即可让服务端收到的通知消息是一条条按照顺序接收的")]
    method TestParameterless (line 496) | [TestMethod("发送无参请求,可以让服务端收到请求")]
    method TestParameterless2 (line 525) | [TestMethod("发送无参通知,可以让服务端收到通知")]
    method TestParameterless3 (line 553) | [TestMethod("发送无参请求,服务端订阅有参,依然可以让服务端收到请求")]
    method TestParameterless4 (line 586) | [TestMethod("客户端发送有参请求,服务端订阅无参,依然可以让服务端收到请求")]
    type FakeArgument (line 614) | internal record class FakeArgument(string Name, int Count)
    type FakeResult (line 618) | internal record class FakeResult(string Name);
    class FooException1 (line 620) | private class FooException1 : Exception
      method FooException1 (line 622) | public FooException1(string? message) : base(message)

FILE: tests/dotnetCampus.Ipc.Tests/NotifyTest.cs
  class NotifyTest (line 10) | [TestClass]
    method Notify1 (line 13) | [TestMethod("使用 LocalOneByOne 的线程调度,按照顺序调用 NotifyAsync 方法,但是不等待 Notify...
    method Notify2 (line 65) | [TestMethod("使用 LocalOneByOne 的线程调度,按照顺序调用 Notify 方法,可以按照顺序接收")]

FILE: tests/dotnetCampus.Ipc.Tests/PeerManagerTest.cs
  class PeerManagerTest (line 7) | [TestClass]
    method TestPeerManager1 (line 10) | [TestMethod("无论是主动连接还是被动连接,都能触发 PeerManager.PeerConnected 事件")]
    method TestPeerManager2 (line 87) | [TestMethod("a 主动连接 b 和 c,测试三端的 PeerManager.PeerConnected 事件和连接数量")]
    method TestPeerManager3 (line 194) | [TestMethod("b 和 c 主动连接 a,测试三端的 PeerManager.PeerConnected 事件和连接数量")]

FILE: tests/dotnetCampus.Ipc.Tests/PeerProxyTest.cs
  class PeerProxyTest (line 11) | [TestClass]
    method SendWithReconnect1 (line 14) | [TestMethod("断开连接过程中,所有请求响应,都可以在重连之后请求成功")]
    method SendWithReconnect2 (line 57) | [TestMethod("断开连接过程中,发送的所有消息,都可以在重连之后发送")]
    method GetResponseAsync (line 139) | [TestMethod("向对方请求响应,可以拿到对方的回复")]
    method PeerReconnected (line 165) | [TestMethod("连接过程中,对方断掉重连,可以收到重连事件")]
    method PeerConnectionBroken1 (line 204) | [TestMethod("发送请求响应,对方断掉,请求将会抛出异常")]
    method PeerConnectionBroken2 (line 261) | [TestMethod("连接过程中,对方断掉,可以收到对方断掉的消息")]
    method Dispose1 (line 309) | [TestMethod("使用释放的服务发送消息,将会提示对象释放")]
    method Dispose (line 335) | [TestMethod("设置为自动重连的服务,释放之后,不会有任何资源进入等待")]

FILE: tests/dotnetCampus.Ipc.Tests/PeerReConnectorTest.cs
  class PeerReConnectorTest (line 11) | [TestClass]
    method IpcClientPipeConnectorTest (line 14) | [TestMethod("设置自动重新连接,但是重新连接器里面永远返回不继续连接。在对方结束之后,重新再开始,可以被重复连接")]
    method Connect (line 123) | [TestMethod("不自动重新连接,对方结束之后,重新再开始,可以被重复连接")]
    method Reconnect (line 220) | [TestMethod("连接过程中,对方断掉,可以自动重新连接对方")]

FILE: tests/dotnetCampus.Ipc.Tests/PeerRegisterProviderTests.cs
  class PeerRegisterProviderTests (line 10) | [TestClass]
    method BuildPeerRegisterMessage1 (line 13) | [TestMethod("如果注册消息的内容添加了其他内容,不会读取到不属于注册消息的内容")]
    method BuildPeerRegisterMessage2 (line 40) | [TestMethod("如果消息不是对方的注册消息,那么将不修改Stream的起始")]
    method BuildPeerRegisterMessage3 (line 57) | [TestMethod("使用发送端之后,能序列化之前的字符串")]
    method BuildPeerRegisterMessage4 (line 83) | [TestMethod("创建的注册服务器名内容可以序列化,序列化之后可以反序列化出服务器名")]

FILE: tests/dotnetCampus.Ipc.Tests/Pipes/PipeConnectors/IpcClientPipeConnectorTest.cs
  class IpcClientPipeConnectorTest (line 10) | [TestClass]
    method ReConnectBreak (line 13) | [TestMethod("重连接时,调用 CanContinue 方法返回不支持再次重新连接,则不再次重新连接")]
    method ConnectNamedPipeAsync1 (line 48) | [TestMethod("连接一个不存在的服务,会调用到 CanContinue 方法判断是否可以再次重新连接。如 CanContinue ...
    method ConnectNamedPipeAsync2 (line 76) | [TestMethod("连接能立刻连上的服务,不会调用到 CanContinue 方法判断是否可以再次重新连接")]

FILE: tests/dotnetCampus.Ipc.Tests/Properties/Compatibility.cs
  class Compatibility (line 5) | public static class Compatibility
    method WaitAsync (line 8) | public static async Task<T> WaitAsync<T>(this Task<T> task, TimeSpan t...
  class TaskCompletionSource (line 23) | public sealed class TaskCompletionSource
    method SetResult (line 29) | public void SetResult() => _tcs.SetResult(true);
    method TrySetResult (line 31) | public void TrySetResult() => _tcs.TrySetResult(true);

FILE: tests/dotnetCampus.Ipc.Tests/ResponseManagerTests.cs
  class ResponseManagerTests (line 9) | [TestClass]
    method SendAndGetResponse (line 12) | [TestMethod("发送消息到另一个 IPC 服务,可以等待收到对方的返回值")]
    method GetResponseAsync (line 44) | [TestMethod("发送消息之后,能等待收到对应的回复")]
    method WaitingResponseCount (line 80) | [TestMethod("所有发送消息都收到回复后,将清空等待响应的数量")]
    method IpcBufferMessageContextToStream (line 159) | private static MemoryStream IpcBufferMessageContextToStream(IpcBufferM...
    class FakeClientMessageWriter (line 171) | class FakeClientMessageWriter : IClientMessageWriter
      method WriteMessageAsync (line 173) | public Task WriteMessageAsync(byte[] buffer, int offset, int count, ...
      method WriteMessageAsync (line 180) | public Task WriteMessageAsync(in IpcBufferMessageContext ipcBufferMe...

FILE: tests/dotnetCampus.Ipc.Tests/TaskExtension.cs
  class TaskExtension (line 3) | static class TaskExtension
    method WaitTimeout (line 5) | public static async Task WaitTimeout(this Task task, TimeSpan? timeout...

FILE: tests/dotnetCampus.Ipc.Tests/TestJsonContext.cs
  class TestJsonContext (line 11) | [JsonSerializable(typeof(BindingFlags))]
    method CreateIpcConfiguration (line 26) | public static IpcConfiguration CreateIpcConfiguration() => new IpcConf...
    method CreateIpcConfiguration (line 34) | public static IpcConfiguration CreateIpcConfiguration() => new IpcConf...
  class TestJsonContext (line 32) | internal static class TestJsonContext
    method CreateIpcConfiguration (line 26) | public static IpcConfiguration CreateIpcConfiguration() => new IpcConf...
    method CreateIpcConfiguration (line 34) | public static IpcConfiguration CreateIpcConfiguration() => new IpcConf...
  class IpcConfigurationExtensions (line 40) | internal static class IpcConfigurationExtensions
    method UseTestFrameworkJsonSerializer (line 42) | public static IpcConfiguration UseTestFrameworkJsonSerializer(this Ipc...

FILE: tests/dotnetCampus.Ipc.Tests/TestLogger.cs
  class TestLogger (line 5) | class TestLogger : IpcLogger
    method TestLogger (line 7) | public TestLogger() : base(nameof(TestLogger))
    method IsEnabled (line 11) | protected override bool IsEnabled(LogLevel logLevel)
    method Log (line 16) | protected override void Log<TState>(LogLevel logLevel, TState state, E...
    method GetAllLogMessage (line 26) | public string GetAllLogMessage()

FILE: tests/dotnetCampus.Ipc.Tests/Threading/IpcThreadPoolTests.cs
  class IpcThreadPoolTests (line 10) | [TestClass]
    method RunRecursively (line 13) | [TestMethod("线程池满,等待新任务调度时,本递归调用不应出现 StackOverflowException。")]
    method HandleRequest (line 36) | public Task<IIpcResponseMessage> HandleRequest(IIpcRequestContext requ...

FILE: tests/dotnetCampus.Ipc.Tests/Utils/Extensions/PeerMessageArgsExtensionTest.cs
  class PeerMessageArgsExtensionTest (line 10) | [TestClass]
    method GetPayload1 (line 13) | [TestMethod("给定的 IpcMessage 不包含正确 byte 数组的有效负载,获取有效负载失败")]
    method GetPayload2 (line 37) | [TestMethod("给定的 IpcMessage 存在偏移,但包含正确 byte 数组的有效负载,可以成功获取到有效负载")]
    method GetPayload3 (line 66) | [TestMethod("给定 IpcMessage 包含正确 byte 数组的有效负载,可以成功获取到有效负载")]
    method GetPayload4 (line 92) | [TestMethod("给定的 IpcMessage 不包含正确 ulong 的有效负载,获取有效负载失败")]
    method GetPayload5 (line 116) | [TestMethod("给定的 IpcMessage 存在偏移,但包含正确 ulong 的有效负载,可以成功获取到有效负载")]
    method GetPayload6 (line 145) | [TestMethod("给定 IpcMessage 包含正确 ulong 的有效负载,可以成功获取到有效负载")]

FILE: tests/dotnetCampus.Ipc.Tests/Utils/IO/AsyncBinaryReaderTests.cs
  class AsyncBinaryReaderTests (line 7) | [TestClass]
    method AsyncBinaryReaderTest (line 10) | [TestMethod("给定的共享数组远远超过所需长度,可以成功读取正确的数值")]
    class FakeSharedArrayPool (line 33) | class FakeSharedArrayPool : ISharedArrayPool
      method Rent (line 35) | public byte[] Rent(int minLength)
      method Return (line 40) | public void Return(byte[] array)
Condensed preview — 455 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,477K chars).
[
  {
    "path": ".editorconfig",
    "chars": 4037,
    "preview": "[*]\nend_of_line = crlf\ncharset = utf-8-bom\nindent_size = 4\ninsert_final_newline = true\ntab_width = 4\ntrim_trailing_whit"
  },
  {
    "path": ".gitattributes",
    "chars": 2518,
    "preview": "###############################################################################\n# Set default behavior to automatically "
  },
  {
    "path": ".github/workflows/dotnet-core.yml",
    "chars": 684,
    "preview": "name: .NET Core\n\non: [push]\n\njobs:\n  build:\n\n    runs-on: windows-latest\n    timeout-minutes: 15\n\n    steps:\n    - uses"
  },
  {
    "path": ".github/workflows/dotnet-format.yml",
    "chars": 2004,
    "preview": "name: Code format check\n# 代码格式化机器人,详细请看 [dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人](https://blog.lindexi.com/p"
  },
  {
    "path": ".github/workflows/nuget-tag-publish.yml",
    "chars": 1255,
    "preview": "name: publish nuget\n\non: \n  push:\n    tags:\n    - '*'\n\njobs:\n  build:\n\n    runs-on: windows-latest\n\n    steps:\n    - use"
  },
  {
    "path": ".gitignore",
    "chars": 5914,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 18,
    "preview": "# dotnetCampus.Ipc"
  },
  {
    "path": "Directory.Build.props",
    "chars": 1523,
    "preview": "<Project>\n\n  <Import Project=\"build\\Version.props\" />\n\n  <!-- Framework and language -->\n  <PropertyGroup>\n    <!-- Lan"
  },
  {
    "path": "Directory.Packages.props",
    "chars": 2429,
    "preview": "<Project>\n  <ItemGroup>\n    <PackageVersion Include=\"coverlet.collector\" Version=\"6.0.2\" />\n    <PackageVersion Include"
  },
  {
    "path": "LICENSE",
    "chars": 1076,
    "preview": "MIT License\n\nCopyright (c) 2020-2023 dotnet campus\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "README.md",
    "chars": 5440,
    "preview": "# dotnetCampus.Ipc\n\n本机内多进程通讯库\n\n| Build | NuGet |\n|--|--|\n|![](https://github.com/dotnet-campus/dotnetCampus.Ipc/workflo"
  },
  {
    "path": "analyzers/dotnetCampus.Ipc.SourceGenerators/GeneratedIpcJointGenerator.cs",
    "chars": 6699,
    "preview": "using System.Text.RegularExpressions;\n\nusing Microsoft.CodeAnalysis.Text;\n\nnamespace dotnetCampus.Ipc;\n\n/// <summary>\n/"
  },
  {
    "path": "analyzers/dotnetCampus.Ipc.SourceGenerators/Properties/GlobalUsings.cs",
    "chars": 555,
    "preview": "global using System;\nglobal using System.Collections.Generic;\nglobal using System.Collections.Immutable;\nglobal using S"
  },
  {
    "path": "analyzers/dotnetCampus.Ipc.SourceGenerators/dotnetCampus.Ipc.SourceGenerators.csproj",
    "chars": 916,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n    <AppendT"
  },
  {
    "path": "build/Version.props",
    "chars": 86,
    "preview": "<Project>\n  <PropertyGroup>\n    <Version>1.0.0</Version>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/DemoRequest.cs",
    "chars": 114,
    "preview": "namespace IpcDirectRoutedAotDemo;\n\npublic record DemoRequest\n{\n    public required string Value { get; init; }\n}\n"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/DemoResponse.cs",
    "chars": 116,
    "preview": "namespace IpcDirectRoutedAotDemo;\n\npublic record DemoResponse\n{\n    public required string Result { get; init; }\n}\n"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/IpcDirectRoutedAotDemo.csproj",
    "chars": 488,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net9.0</Targ"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/NotifyInfo.cs",
    "chars": 113,
    "preview": "namespace IpcDirectRoutedAotDemo;\n\npublic record NotifyInfo\n{\n    public required string Value { get; init; }\n}\n"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/Program.cs",
    "chars": 3124,
    "preview": "// See https://aka.ms/new-console-template for more information\n\nusing System.Diagnostics;\n\nusing dotnetCampus.Ipc.Cont"
  },
  {
    "path": "demo/IpcDirectRoutedAotDemo/SourceGenerationContext.cs",
    "chars": 386,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Text.Json.Serializat"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/IFoo.cs",
    "chars": 539,
    "preview": "using dotnetCampus.Ipc.CompilerServices.Attributes;\n\nnamespace IpcRemotingObjectServerDemo; // Must the same namespace\n"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/IpcRemotingObjectClientDemo.csproj",
    "chars": 561,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net6.0</Targ"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectClientDemo/Program.cs",
    "chars": 457,
    "preview": "using dotnetCampus.Ipc.CompilerServices.GeneratedProxies;\nusing dotnetCampus.Ipc.Pipes;\n\nusing IpcRemotingObjectServerD"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/Foo.cs",
    "chars": 439,
    "preview": "namespace IpcRemotingObjectServerDemo;\n\nclass Foo : IFoo\n{\n    public string Name { get; set; } = \"Foo\";\n\n    public in"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/IFoo.cs",
    "chars": 556,
    "preview": "using dotnetCampus.Ipc.CompilerServices.Attributes;\n\nnamespace IpcRemotingObjectServerDemo;\n\n/// <summary>\n/// 可跨进程调用的接"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/IpcRemotingObjectServerDemo.csproj",
    "chars": 561,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net6.0</Targ"
  },
  {
    "path": "demo/IpcRemotingObjectDemo/IpcRemotingObjectServerDemo/Program.cs",
    "chars": 428,
    "preview": "using System;\nusing dotnetCampus.Ipc.CompilerServices.GeneratedProxies;\nusing dotnetCampus.Ipc.Pipes;\nusing IpcRemoting"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/App.xaml",
    "chars": 377,
    "preview": "<Application x:Class=\"PipeMvcClientDemo.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentat"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/App.xaml.cs",
    "chars": 304,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/AssemblyInfo.cs",
    "chars": 596,
    "preview": "using System.Windows;\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dicti"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/MainWindow.xaml",
    "chars": 1499,
    "preview": "<Window x:Class=\"PipeMvcClientDemo.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/MainWindow.xaml.cs",
    "chars": 5466,
    "preview": "using System;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\nusing Sys"
  },
  {
    "path": "demo/PipeMvc/PipeMvcClientDemo/PipeMvcClientDemo.csproj",
    "chars": 535,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net6.0-wi"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/FooContent.cs",
    "chars": 135,
    "preview": "namespace PipeMvcServerDemo;\n\npublic class FooContent\n{\n    public string? Foo1 { set; get; }\n    public string? Foo2 {"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/FooController.cs",
    "chars": 1099,
    "preview": "using Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\n\nnamespace PipeMvcServerDemo;\n\n[Route(\"api/[control"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/MainWindow.xaml",
    "chars": 629,
    "preview": "<Window x:Class=\"PipeMvcServerDemo.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/MainWindow.xaml.cs",
    "chars": 856,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/PipeMvcServerDemo.csproj",
    "chars": 467,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net6.0-windows</TargetFramework>\n    <OutputT"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/Program.cs",
    "chars": 2442,
    "preview": "using System.Windows;\nusing System.Windows.Threading;\n\nusing dotnetCampus.Ipc.PipeMvcServer;\n\nusing Microsoft.AspNetCor"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/Properties/launchSettings.json",
    "chars": 660,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n     "
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/appsettings.Development.json",
    "chars": 119,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  }\n}\n"
  },
  {
    "path": "demo/PipeMvc/PipeMvcServerDemo/appsettings.json",
    "chars": 142,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.AspNetCore\": \"Warning\"\n    }\n  },\n  "
  },
  {
    "path": "demo/UnoDemo/IpcUno/.editorconfig",
    "chars": 5579,
    "preview": "; This file is for unifying the coding style for different editors and IDEs.\n; More information at http://editorconfig.o"
  },
  {
    "path": "demo/UnoDemo/IpcUno/.gitignore",
    "chars": 6982,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "demo/UnoDemo/IpcUno/.vsconfig",
    "chars": 893,
    "preview": "{\n  \"version\": \"1.0\",\n  \"components\": [\n    \"Microsoft.VisualStudio.Component.CoreEditor\",\n    \"Microsoft.VisualStudio.W"
  },
  {
    "path": "demo/UnoDemo/IpcUno/Directory.Build.props",
    "chars": 3710,
    "preview": "<Project>\n\n  <!--\n    If working on a single target framework, copy solution-config.props.sample to solution-config.prop"
  },
  {
    "path": "demo/UnoDemo/IpcUno/Directory.Build.targets",
    "chars": 172,
    "preview": "<Project>\n  <ItemGroup>\n    <!-- Removes native usings to avoid Ambiguous reference -->\n    <Using Remove=\"@(Using->Has"
  },
  {
    "path": "demo/UnoDemo/IpcUno/Directory.Packages.props",
    "chars": 2752,
    "preview": "<Project ToolsVersion=\"15.0\">\n  <ItemGroup>\n    <PackageVersion Include=\"CommunityToolkit.Mvvm\" Version=\"8.2.1\" />\n    "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/App.cs",
    "chars": 4149,
    "preview": "namespace IpcUno\n{\n    public class App : EmbeddingApplication\n    {\n        public Microsoft.UI.Dispatching.DispatcherQ"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/AppResources.xaml",
    "chars": 834,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n          xmlns:x=\"http://schemas"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Assets/SharedAssets.md",
    "chars": 1007,
    "preview": "# Shared Assets\n\nSee documentation about assets here: https://github.com/unoplatform/uno/blob/master/doc/articles/featur"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Business/Models/AppConfig.cs",
    "chars": 126,
    "preview": "namespace IpcUno.Business.Models\n{\n    public record AppConfig\n    {\n        public string? Environment { get; init; }\n "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Business/Models/ConnectedPeerModel.cs",
    "chars": 1307,
    "preview": "using System.Collections.ObjectModel;\n\nusing dotnetCampus.Ipc.Context;\nusing dotnetCampus.Ipc.Messages;\nusing dotnetCam"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Business/Models/Entity.cs",
    "chars": 76,
    "preview": "namespace IpcUno.Business.Models\n{\n    public record Entity(string Name);\n}\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Business/Models/IpcServerEntity.cs",
    "chars": 85,
    "preview": "namespace IpcUno.Business.Models\n{\n    public record IpcServerEntity(string Name);\n}\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/GlobalSuppressions.cs",
    "chars": 378,
    "preview": "// This file is used by Code Analysis to maintain SuppressMessage\n// attributes that are applied to this project.\n// Pro"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/GlobalUsings.cs",
    "chars": 889,
    "preview": "global using System.Collections.Immutable;\nglobal using System.Windows.Input;\n\nglobal using Microsoft.Extensions.Depend"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/IpcUno.csproj",
    "chars": 4543,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <TargetFrameworks Condition=\"$([MSBuild]::IsOSPlatform('windows'"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/AddConnectPage.xaml",
    "chars": 1777,
    "preview": "<Page x:Class=\"IpcUno.Presentation.AddConnectPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/AddConnectPage.xaml.cs",
    "chars": 818,
    "preview": "namespace IpcUno.Presentation\n{\n    public sealed partial class AddConnectPage : Page\n    {\n        public AddConnectPag"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ChatPage.xaml",
    "chars": 1591,
    "preview": "<Page x:Class=\"IpcUno.Presentation.ChatPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ChatPage.xaml.cs",
    "chars": 1270,
    "preview": "using System.Reflection;\nusing System.Text;\n\nusing IpcUno.Utils;\n\nnamespace IpcUno.Presentation\n{\n    public sealed part"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/MainPage.xaml",
    "chars": 3830,
    "preview": "<Page x:Class=\"IpcUno.Presentation.MainPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/MainPage.xaml.cs",
    "chars": 2243,
    "preview": "using System.Diagnostics;\n\nusing IpcUno.Utils;\n\nnamespace IpcUno.Presentation\n{\n    public sealed partial class MainPage"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/MainViewModel.cs",
    "chars": 3610,
    "preview": "using System.Collections.ObjectModel;\n\nusing dotnetCampus.Ipc.Context;\nusing dotnetCampus.Ipc.Pipes;\n\nusing Microsoft.UI"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondPage.xaml",
    "chars": 615,
    "preview": "<Page x:Class=\"IpcUno.Presentation.SecondPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondPage.xaml.cs",
    "chars": 184,
    "preview": "namespace IpcUno.Presentation\n{\n    public sealed partial class SecondPage : Page\n    {\n        public SecondPage()\n   "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/SecondViewModel.cs",
    "chars": 102,
    "preview": "namespace IpcUno.Presentation\n{\n    public partial record SecondViewModel(Entity Entity)\n    {\n    }\n}"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerPage.xaml",
    "chars": 1827,
    "preview": "<Page x:Class=\"IpcUno.Presentation.ServerPage\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerPage.xaml.cs",
    "chars": 272,
    "preview": "namespace IpcUno.Presentation\n{\n    public sealed partial class ServerPage : Page\n    {\n        public ServerPage()\n    "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ServerViewModel.cs",
    "chars": 557,
    "preview": "namespace IpcUno.Presentation\n{\n    public partial class ServerViewModel : ObservableObject\n    {\n        public ServerV"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/Shell.xaml",
    "chars": 1415,
    "preview": "<UserControl x:Class=\"IpcUno.Presentation.Shell\"\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/Shell.xaml.cs",
    "chars": 262,
    "preview": "namespace IpcUno.Presentation\n{\n    public sealed partial class Shell : UserControl, IContentControlProvider\n    {\n    "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Presentation/ShellViewModel.cs",
    "chars": 404,
    "preview": "namespace IpcUno.Presentation\n{\n    public class ShellViewModel\n    {\n        private readonly INavigator _navigator;\n\n "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Strings/en/Resources.resw",
    "chars": 5720,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Styles/ColorPaletteOverride.xaml",
    "chars": 3598,
    "preview": "<!-- This file is generated by a tool from the file ColorPaletteOverride.zip - - YOU SHOULD NOT EDIT IT manually.-->\n<R"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Styles/MaterialFontsOverride.xaml",
    "chars": 534,
    "preview": "<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n          xmlns:x=\"http://schemas"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Utils/ScrollViewerExtensions.cs",
    "chars": 615,
    "preview": "namespace IpcUno.Utils\n{\n    static class ScrollViewerExtensions\n    {\n        public static void ScrollToBottom(this Te"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Utils/TreeExtensions.cs",
    "chars": 858,
    "preview": "namespace IpcUno.Utils\n{\n    static class TreeExtensions\n    {\n        public static T? VisualDescendant<T>(this UIEleme"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/Utils/UISpyHelper.cs",
    "chars": 1015,
    "preview": "using System.Diagnostics;\n\nnamespace IpcUno.Utils\n{\n    static class UISpyHelper\n    {\n        public static void Spy(th"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/appsettings.development.json",
    "chars": 59,
    "preview": "{\n  \"AppConfig\": {\n    \"Environment\": \"Development\"\n  }\n}\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno/appsettings.json",
    "chars": 57,
    "preview": "{\n  \"AppConfig\": {\n    \"Environment\": \"Production\"\n  }\n}\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Base/AppHead.xaml",
    "chars": 641,
    "preview": "<local:App x:Class=\"IpcUno.AppHead\"\n       xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n       xml"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Base/AppHead.xaml.cs",
    "chars": 931,
    "preview": "using Microsoft.UI.Xaml;\n\nusing Uno.Resizetizer;\n\nnamespace IpcUno\n{\n    public sealed partial class AppHead : App\n    {"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Base/IpcUno.Base.csproj",
    "chars": 456,
    "preview": "<Project Sdk=\"Microsoft.Build.NoTargets/3.7.0\">\n  <PropertyGroup>\n    <!-- NOTE: The TargetFramework is required by MSBu"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Base/base.props",
    "chars": 1323,
    "preview": "<Project>\n  <ItemGroup>\n    <PackageReference Include=\"Uno.Resizetizer\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <None Inclu"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/App.xaml",
    "chars": 703,
    "preview": "<?xml version = \"1.0\" encoding = \"UTF-8\" ?>\n<Application xmlns=\"http://schemas.microsoft.com/dotnet/2021/maui\"\n        "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/App.xaml.cs",
    "chars": 165,
    "preview": "namespace IpcUno.MauiControls\n{\n    public partial class App : Application\n    {\n        public App()\n        {\n       "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/AppBuilderExtensions.cs",
    "chars": 457,
    "preview": "namespace IpcUno\n{\n    public static class AppBuilderExtensions\n    {\n        public static MauiAppBuilder UseMauiContro"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/EmbeddedControl.xaml",
    "chars": 1293,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<ContentView xmlns=\"http://schemas.microsoft.com/dotnet/2021/maui\"\n            "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/EmbeddedControl.xaml.cs",
    "chars": 189,
    "preview": "namespace IpcUno.MauiControls\n{\n    public partial class EmbeddedControl : ContentView\n    {\n        public EmbeddedCont"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/IpcUno.MauiControls.csproj",
    "chars": 676,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks Condition=\"$([MSBuild]::IsOSPlatform('windows"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/Styles/Colors.xaml",
    "chars": 2234,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<?xaml-comp compile=\"true\" ?>\n<ResourceDictionary \n    xmlns=\"http://schemas.mi"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/Styles/Styles.xaml",
    "chars": 23183,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<?xaml-comp compile=\"true\" ?>\n<ResourceDictionary \n    xmlns=\"http://schemas.mi"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.MauiControls/UnoImageConverter.cs",
    "chars": 529,
    "preview": "using System.Globalization;\n\nnamespace IpcUno\n{\n    public class UnoImageConverter : IValueConverter\n    {\n        publi"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/IpcUno.Skia.Gtk.csproj",
    "chars": 1615,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType Condition=\"'$(Configuration)'=='Release'\">WinExe</Ou"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/Package.appxmanifest",
    "chars": 1261,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/Program.cs",
    "chars": 637,
    "preview": "using System;\n\nusing GLib;\n\nusing Uno.UI.Runtime.Skia.Gtk;\n\nnamespace IpcUno.Skia.Gtk\n{\n    public class Program\n    {\n "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.Gtk/app.manifest",
    "chars": 3182,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <ass"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/IpcUno.Skia.WPF.csproj",
    "chars": 2319,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType Condition=\"'$(Configuration)'=='Release'\">WinExe</O"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Package.appxmanifest",
    "chars": 1261,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Wpf/App.xaml",
    "chars": 308,
    "preview": "<Application x:Class=\"IpcUno.WPF.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n  "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/Wpf/App.xaml.cs",
    "chars": 284,
    "preview": "using Uno.UI.Runtime.Skia.Wpf;\n\nusing WpfApp = System.Windows.Application;\n\nnamespace IpcUno.WPF\n{\n    public partial cl"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Skia.WPF/app.manifest",
    "chars": 1289,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <asse"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Tests/AppInfoTests.cs",
    "chars": 368,
    "preview": "namespace IpcUno.Tests\n{\n    public class AppInfoTests\n    {\n        [SetUp]\n        public void Setup()\n        {\n     "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Tests/GlobalUsings.cs",
    "chars": 100,
    "preview": "global using FluentAssertions;\n\nglobal using IpcUno.Business.Models;\n\nglobal using NUnit.Framework;\n"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Tests/IpcUno.Tests.csproj",
    "chars": 541,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <IsPackable>false"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.UITests/Constants.cs",
    "chars": 565,
    "preview": "namespace IpcUno.UITests\n{\n    public class Constants\n    {\n        public readonly static string WebAssemblyDefaultUri "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.UITests/Given_MainPage.cs",
    "chars": 829,
    "preview": "namespace IpcUno.UITests\n{\n    public class Given_MainPage : TestBase\n    {\n        [Test]\n        public async Task Whe"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.UITests/GlobalUsings.cs",
    "chars": 210,
    "preview": "global using NUnit.Framework;\n\nglobal using Uno.UITest;\nglobal using Uno.UITest.Helpers.Queries;\nglobal using Uno.UITest"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.UITests/IpcUno.UITests.csproj",
    "chars": 518,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n  </PropertyGroup>\n\n "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.UITests/TestBase.cs",
    "chars": 2550,
    "preview": "\nnamespace IpcUno.UITests\n{\n    public class TestBase\n    {\n        private IApp? _app;\n\n        static TestBase()\n     "
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/IpcUno.Windows.csproj",
    "chars": 3793,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0-wind"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Package.appxmanifest",
    "chars": 1261,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<Package\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Properties/PublishProfiles/win-arm64.pubxml",
    "chars": 1070,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\""
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Properties/PublishProfiles/win-x64.pubxml",
    "chars": 1065,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\"4"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Properties/PublishProfiles/win-x86.pubxml",
    "chars": 1065,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nhttps://go.microsoft.com/fwlink/?LinkID=208121.\n-->\n<Project ToolsVersion=\"4"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Properties/launchsettings.json",
    "chars": 157,
    "preview": "{\n\t\"profiles\": {\n\t\t\"IpcUno.Windows (Unpackaged)\": {\n\t\t\t\"commandName\": \"Project\"\n\t\t},\n\t\t\"IpcUno.Windows (Package)\": {\n\t\t\t"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/Resources.lang-en-us.resw",
    "chars": 5786,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "demo/UnoDemo/IpcUno/IpcUno.Windows/app.manifest",
    "chars": 1288,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <asse"
  },
  {
    "path": "demo/UnoDemo/IpcUno/solution-config.props.sample",
    "chars": 1342,
    "preview": "<Project>\n    <!--\n        This file is used to control the platforms compiled by visual studio, and\n            allow f"
  },
  {
    "path": "demo/UnoDemo/IpcUno.sln",
    "chars": 14548,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.7.3422"
  },
  {
    "path": "demo/UnoDemo/README.md",
    "chars": 355,
    "preview": "# IpcUno\n\n这是一个使用 UNO 框架开发的 Ipc 测试应用软件,用于测试在 Windows 和 Linux 等平台下的 IPC 库的行为。当前已经在 UOS 统信系统上测试通过\n\n![](http://image.acmx.x"
  },
  {
    "path": "demo/dotnetCampus.Ipc.Demo/Program.cs",
    "chars": 3435,
    "preview": "using System;\nusing System.Diagnostics;\nusing System.Text;\nusing System.Threading.Tasks;\n\nusing dotnetCampus.Ipc.Contex"
  },
  {
    "path": "demo/dotnetCampus.Ipc.Demo/dotnetCampus.Ipc.Demo.csproj",
    "chars": 449,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFrameworks>net9.0;netc"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/App.xaml",
    "chars": 391,
    "preview": "<Application x:Class=\"dotnetCampus.Ipc.WpfDemo.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/App.xaml.cs",
    "chars": 338,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/AssemblyInfo.cs",
    "chars": 596,
    "preview": "using System.Windows;\n\n[assembly: ThemeInfo(\n    ResourceDictionaryLocation.None, //where theme specific resource dicti"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/ConnectedPeerModel.cs",
    "chars": 1322,
    "preview": "using System;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Windows.Threading;\n\nusing dotnetCampu"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/DispatcherSwitcher.cs",
    "chars": 1892,
    "preview": "using System;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\nusing System.Windows.Threading;\n\n// "
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/MainWindow.xaml",
    "chars": 3528,
    "preview": "<Window x:Class=\"dotnetCampus.Ipc.WpfDemo.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/MainWindow.xaml.cs",
    "chars": 6036,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics;\nusing S"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/Options.cs",
    "chars": 314,
    "preview": "using DotNetCampus.Cli.Compiler;\n\nnamespace dotnetCampus.Ipc.WpfDemo;\n\npublic class Options\n{\n    /// <summary>\n    ///"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/AddConnectPage.xaml",
    "chars": 1803,
    "preview": "<UserControl x:Class=\"dotnetCampus.Ipc.WpfDemo.View.AddConnectPage\"\n             xmlns=\"http://schemas.microsoft.com/wi"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/AddConnectPage.xaml.cs",
    "chars": 1260,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Controls;"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/CharPage.xaml",
    "chars": 1672,
    "preview": "<UserControl x:Class=\"dotnetCampus.Ipc.WpfDemo.View.CharPage\"\n             xmlns=\"http://schemas.microsoft.com/winfx/20"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/CharPage.xaml.cs",
    "chars": 1659,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Text;\nusing System.Windows;\nusin"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/ListViewExtensions.cs",
    "chars": 482,
    "preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace dotnetCampus.Ipc.WpfDemo.Vi"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/ServerPage.xaml",
    "chars": 1532,
    "preview": "<UserControl x:Class=\"dotnetCampus.Ipc.WpfDemo.ServerPage\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/View/ServerPage.xaml.cs",
    "chars": 1474,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Text;\nusing System.Windows;\nusing System.Windows.Controls;"
  },
  {
    "path": "demo/dotnetCampus.Ipc.WpfDemo/dotnetCampus.Ipc.WpfDemo.csproj",
    "chars": 462,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFram"
  },
  {
    "path": "docs/IpcObject.01.md",
    "chars": 7132,
    "preview": "# 使用「远程对象调用」的方式做进程间通信\n\n假设你有一个接口 `IFoo`,有 A、B 两个进程想做进程间通信。通过 IPC 的「远程对象调用」的方式,你可以让 A 进程调用 B 进程的 `IFoo` 接口方法,就像调用本地对象一样。\n\n"
  },
  {
    "path": "docs/IpcObject.02.md",
    "chars": 6229,
    "preview": "# IpcRemotingObject\n\n使用 .NET Remoting 模式的对象远程调用的 IPC 通讯方式。\n\n## 概念\n\n在 .NET Remoting 里,可以在当前进程里拿到一个对象,这个对象的实际执行逻辑是放在另一个进程执"
  },
  {
    "path": "docs/JsonIpcDirectRouted.md",
    "chars": 6289,
    "preview": "# JsonIpcDirectRouted\n\n使用直接路由和 Json 通讯格式的 IPC 通讯方式\n\n## 概念和特点\n\n这是采用直接路由的调度方式的 IPC 通讯,直接路由可以理解为每个路由是一个字符串,要求请求和响应的代码所标识的字符"
  },
  {
    "path": "dotnetCampus.Ipc.sln",
    "chars": 21522,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.1.31911."
  },
  {
    "path": "dotnetCampus.Ipc.sln.DotSettings",
    "chars": 399,
    "preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcClient/IpcNamedPipeClientHandler.cs",
    "chars": 1803,
    "preview": "using System.Net.Http;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nusing dotnetCampus.Ipc.Messages;\nusing do"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcClient/IpcPipeMvcClientProvider.cs",
    "chars": 1218,
    "preview": "using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nusing dotnetCampus.Ipc.PipeMvcServer.IpcFramework;\n"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcClient/dotnetCampus.Ipc.PipeMvcClient.csproj",
    "chars": 485,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net5.0</TargetFramework>\n    <GenerateDocumen"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ApplicationWrapper.cs",
    "chars": 2259,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/AsyncStreamWrapper.cs",
    "chars": 4582,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ClientHandler.cs",
    "chars": 9664,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/HttpContextBuilder.cs",
    "chars": 11641,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/HttpResetTestException.cs",
    "chars": 1063,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/IpcServer.cs",
    "chars": 10282,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/IpcServerOptions.cs",
    "chars": 1516,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/NoopHostLifetime.cs",
    "chars": 665,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestBodyDetectionFeature.cs",
    "chars": 548,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestBuilder.cs",
    "chars": 3817,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestFeature.cs",
    "chars": 1165,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/RequestLifetimeFeature.cs",
    "chars": 1099,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyPipeWriter.cs",
    "chars": 3091,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyReaderStream.cs",
    "chars": 5157,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseBodyWriterStream.cs",
    "chars": 2733,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseFeature.cs",
    "chars": 4493,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/ResponseTrailersFeature.cs",
    "chars": 493,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/TestWebSocket.cs",
    "chars": 12753,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/UpgradeFeature.cs",
    "chars": 667,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/WebHostBuilderFactory.cs",
    "chars": 1865,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/HostFramework/WebSocketClient.cs",
    "chars": 6418,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/IpcFramework/IpcPipeMvcServerCore.cs",
    "chars": 1567,
    "preview": "using System;\nusing System.Threading;\n\nusing dotnetCampus.Ipc.Context;\nusing dotnetCampus.Ipc.Messages;\nusing dotnetCam"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/Properties/launchSettings.json",
    "chars": 667,
    "preview": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      "
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/WebHostBuilderExtensions.cs",
    "chars": 1464,
    "preview": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/dotnetCampus.Ipc.PipeMvcServer.csproj",
    "chars": 821,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <Description>NamedPipeStreamForMvc</Description>\n    <Targ"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcServer/dotnetCampus.Ipc.PipeMvcServer.csproj.DotSettings",
    "chars": 576,
    "preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HeaderContent.cs",
    "chars": 253,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System.Collections.Generic;\n\nnamespace dotnetCampus.Ipc.PipeMvcServer.IpcFrame"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpMessageSerializer.cs",
    "chars": 1570,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System.Net.Http;\nusing System.Text;\n\nusing dotnetCampus.Ipc.Messages;\n\nusing N"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageContentBase.cs",
    "chars": 1352,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System;\nusing System.IO;\nusing System.Net.Http;\nusing System.Net.Http.Headers;"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageDeserializeContent.cs",
    "chars": 1933,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Net.Ht"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpRequestMessageSerializeContent.cs",
    "chars": 448,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System.Net.Http;\nusing System.Net.Http.Headers;\n\nnamespace dotnetCampus.Ipc.Pi"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageContentBase.cs",
    "chars": 939,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System;\nusing System.IO;\nusing System.Net;\nusing System.Net.Http;\nusing System"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageDeserializeContent.cs",
    "chars": 1860,
    "preview": "#nullable disable // 序列化的代码,不需要可空\n\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Net.Ht"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/HttpResponseMessageSerializeContent.cs",
    "chars": 588,
    "preview": "using System.Net.Http;\nusing System.Net.Http.Headers;\n\n#nullable disable // 序列化的代码,不需要可空\n\nnamespace dotnetCampus.Ipc.Pi"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/IpcPipeMvcContext.cs",
    "chars": 165,
    "preview": "namespace dotnetCampus.Ipc.PipeMvcServer.IpcFramework\n{\n    class IpcPipeMvcContext\n    {\n        public const string B"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/IpcResponseMessageResult.cs",
    "chars": 349,
    "preview": "using dotnetCampus.Ipc.Messages;\n\nnamespace dotnetCampus.Ipc.PipeMvcServer.IpcFramework\n{\n    class IpcResponseMessageR"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/dotnetCampus.Ipc.PipeMvcShare.projitems",
    "chars": 1445,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Propert"
  },
  {
    "path": "src/PipeMvc/dotnetCampus.Ipc.PipeMvcShare/dotnetCampus.Ipc.PipeMvcShare.shproj",
    "chars": 1054,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/AssemblyIpcProxyAttribute.cs",
    "chars": 1254,
    "preview": "using System;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// 由编译器自动生成,将 IPC 类型与其自动生成的代理类型关"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/AssemblyIpcProxyJointAttribute.cs",
    "chars": 1308,
    "preview": "using System;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// 由编译器自动生成,将 IPC 类型与其自动生成的代理和对接"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcEventAttribute.cs",
    "chars": 412,
    "preview": "using System;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// 指定此事件的 IPC 代理访问方式和对接方式。\n/// <"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcMemberAttribute.cs",
    "chars": 1371,
    "preview": "using System;\nusing System.ComponentModel;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// "
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcMethodAttribute.cs",
    "chars": 1711,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace dotnetCampus.Ipc.CompilerS"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcPropertyAttribute.cs",
    "chars": 1739,
    "preview": "using System;\nusing System.ComponentModel;\nusing System.Diagnostics.CodeAnalysis;\n\nnamespace dotnetCampus.Ipc.CompilerS"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcPublicAttribute.cs",
    "chars": 1670,
    "preview": "using System;\nusing System.ComponentModel;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// "
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/Attributes/IpcShapeAttribute.cs",
    "chars": 750,
    "preview": "using System;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Attributes;\n\n/// <summary>\n/// 标记一个类型是 IPC 形状代理。这个类型的所有成员都没有"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Contexts/GeneratedIpcJointResponse.cs",
    "chars": 1136,
    "preview": "using dotnetCampus.Ipc.CompilerServices.GeneratedProxies.Models;\nusing dotnetCampus.Ipc.Context;\nusing dotnetCampus.Ipc"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/Garm.cs",
    "chars": 2392,
    "preview": "using dotnetCampus.Ipc.CompilerServices.GeneratedProxies.Models;\nusing dotnetCampus.Ipc.Serialization;\n\nnamespace dotne"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/Garm.generic.cs",
    "chars": 1978,
    "preview": "using dotnetCampus.Ipc.CompilerServices.Attributes;\n\nnamespace dotnetCampus.Ipc.CompilerServices.GeneratedProxies;\n\n///"
  },
  {
    "path": "src/dotnetCampus.Ipc/CompilerServices/GeneratedProxies/Garms/IGarmObject.cs",
    "chars": 899,
    "preview": "using dotnetCampus.Ipc.CompilerServices.GeneratedProxies.Models;\n\nnamespace dotnetCampus.Ipc.CompilerServices.Generated"
  }
]

// ... and 255 more files (download for full content)

About this extraction

This page contains the full source code of the dotnet-campus/dotnetCampus.Ipc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 455 files (1.2 MB), approximately 342.7k tokens, and a symbol index with 1721 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!