diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 42ccf95..af0ebc9 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -10,9 +10,9 @@ jobs: ubuntu-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Restore dependencies @@ -25,9 +25,9 @@ jobs: windows-build: runs-on: windows-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: 6.0.x - name: Restore dependencies diff --git a/README.md b/README.md index 2647998..7b21c89 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ I can also download from [NuGet Package Manager](https://docs.microsoft.com/nuge ## Usage in code +Please check the `Sample` for the combination with the actual application. ### About avatar parameters If you want to control avatar parameters, use classes in `BuildSoft.VRChat.Osc.Avatar`. @@ -104,6 +105,36 @@ await Task.Delay(1000); OscButtonInput.Jump.Release(); ``` +### About Chatbox +If you want to use button input with OSC, use classes in `BuildSoft.VRChat.Osc.Chatbox`. + +#### e.g.) Send a string to Chatbox +```cs +using BuildSoft.VRChat.Osc.Chatbox; + +OscChatbox.SendMessage("some message", direct: true); +``` + +#### e.g.) Send a string to Chatbox UI +```cs +using BuildSoft.VRChat.Osc.Chatbox; + +OscChatbox.SendMessage("some message", direct: false); +``` + +#### e.g.) Act like typing +```cs +using BuildSoft.VRChat.Osc.Chatbox; +using System.Threading.Tasks; + +// typing during 3 second. +OscChatbox.SetIsTyping(true); +await Task.Delay(3000); + +OscChatbox.SendMessage("some message", direct: true); +``` + + diff --git a/src/vrcosclib.Test/TestUtility.cs b/src/vrcosclib.Test/TestUtility.cs index 1386af6..7f2152a 100644 --- a/src/vrcosclib.Test/TestUtility.cs +++ b/src/vrcosclib.Test/TestUtility.cs @@ -95,50 +95,39 @@ public static void RestoreOscDirectory() } } -#if NETFRAMEWORK +#if !NET6_0_OR_GREATER public static async Task WaitAsync(this Task task, TimeSpan timeout) { - // if not running, start task - try - { - task.Start(); - } - catch (InvalidOperationException) - { - } + var source = CreateCancellationTokenSourceWithDelay(timeout); - bool isSuccessed = Task.Run(() => { while (task.Status == TaskStatus.Running || task.Status == TaskStatus.WaitingForActivation) ; }).Wait(timeout); - if (!isSuccessed) + await Task.Run(() => { - throw new TimeoutException(); - } + while (true) + { + if (source.IsCancellationRequested) { throw new TimeoutException(); } + if (task.IsCompleted) { break; } + } + }); if (task.IsFaulted) { - throw task.Exception.InnerException; + throw task.Exception!.InnerException!; } } public static async Task WaitAsync(this Task task, TimeSpan timeout) { - // if not running, start task - try - { - task.Start(); - } - catch (InvalidOperationException) - { - } + await WaitAsync((Task)task, timeout); + return task.Result; + } - bool isSuccessed = Task.Run(() => { while (task.Status == TaskStatus.Running || task.Status == TaskStatus.WaitingForActivation) ; }).Wait(timeout); - if (!isSuccessed) - { - throw new TimeoutException(); - } - if (task.IsFaulted) + private static CancellationTokenSource CreateCancellationTokenSourceWithDelay(TimeSpan delay) + { + CancellationTokenSource source = new(delay); + if (delay <= TimeSpan.Zero) { - throw task.Exception.InnerException; + source.Cancel(); } - return task.Result; + return source; } #endif } diff --git a/src/vrcosclib.Test/vrcosclib.Test.csproj b/src/vrcosclib.Test/vrcosclib.Test.csproj index 0e3a609..217f59f 100644 --- a/src/vrcosclib.Test/vrcosclib.Test.csproj +++ b/src/vrcosclib.Test/vrcosclib.Test.csproj @@ -7,17 +7,15 @@ BuildSoft.VRChat.Osc.Test 10.0 enable - false + false + true - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + + + diff --git a/src/vrcosclib/Avatar/OscAvatarParametorContainer.cs b/src/vrcosclib/Avatar/OscAvatarParametorContainer.cs index a0b2aab..2c55ea0 100644 --- a/src/vrcosclib/Avatar/OscAvatarParametorContainer.cs +++ b/src/vrcosclib/Avatar/OscAvatarParametorContainer.cs @@ -36,7 +36,7 @@ public OscAvatarParametorContainer(ImmutableArray parameters for (int i = 0; i < parameters.Length; i++) { var param = parameters[i]; - var outputInterface = param.Output; + var outputInterface = param.Output!; Debug.Assert(outputInterface != null); allParams.AddValueChangedEventByAddress(outputInterface.Address, GetValueCallback); } diff --git a/src/vrcosclib/Inputs/OscAxisInput.cs b/src/vrcosclib/Input/OscAxisInput.cs similarity index 100% rename from src/vrcosclib/Inputs/OscAxisInput.cs rename to src/vrcosclib/Input/OscAxisInput.cs diff --git a/src/vrcosclib/Inputs/OscButtonInput.cs b/src/vrcosclib/Input/OscButtonInput.cs similarity index 100% rename from src/vrcosclib/Inputs/OscButtonInput.cs rename to src/vrcosclib/Input/OscButtonInput.cs diff --git a/src/vrcosclib/Inputs/OscInput.cs b/src/vrcosclib/Input/OscInput.cs similarity index 100% rename from src/vrcosclib/Inputs/OscInput.cs rename to src/vrcosclib/Input/OscInput.cs diff --git a/src/vrcosclib/vrcosclib.csproj b/src/vrcosclib/vrcosclib.csproj index 57c3559..ec14c1f 100644 --- a/src/vrcosclib/vrcosclib.csproj +++ b/src/vrcosclib/vrcosclib.csproj @@ -3,14 +3,14 @@ netstandard2.0;netstandard2.1 enable - BuildSoft.VRChat.Osc + BuildSoft.VRChat.Osc 10.0 enable ..\..\bin VRCOscLib - 1.3.1 + 1.3.2 ChanyaKushima MIT A OSC library for VRChat @@ -22,6 +22,9 @@ + + +