This commit is contained in:
Glax 2023-12-31 18:43:18 +01:00
parent 3467e13715
commit 36520e8426
3 changed files with 43 additions and 8 deletions

View File

@ -1,5 +1,8 @@
using BuildSoft.OscCore; using System.Net;
using BuildSoft.OscCore;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using VRC.OSCQuery;
using Extensions = VRC.OSCQuery.Extensions;
namespace VRC_Console; namespace VRC_Console;
@ -13,7 +16,6 @@ public class OSCCollar
{ {
var jObject = JObject.Parse(File.ReadAllText(configFilePath)); var jObject = JObject.Parse(File.ReadAllText(configFilePath));
string ip = jObject.GetValue("ip")?.ToObject<string>() ?? "127.0.0.1"; string ip = jObject.GetValue("ip")?.ToObject<string>() ?? "127.0.0.1";
int portReceive = jObject.GetValue("portReceive")?.ToObject<int>() ?? 9001;
int portSend = jObject.GetValue("portSend")?.ToObject<int>() ?? 9000; int portSend = jObject.GetValue("portSend")?.ToObject<int>() ?? 9000;
double radius = jObject.GetValue("radius")?.ToObject<double>() ?? 100; double radius = jObject.GetValue("radius")?.ToObject<double>() ?? 100;
double calibrationX = jObject.GetValue("calibrationX")?.ToObject<double>() ?? 0; double calibrationX = jObject.GetValue("calibrationX")?.ToObject<double>() ?? 0;
@ -21,7 +23,7 @@ public class OSCCollar
double walkStretchDeadzone = jObject.GetValue("walkStretchDeadzone")?.ToObject<double>() ?? 0.1; double walkStretchDeadzone = jObject.GetValue("walkStretchDeadzone")?.ToObject<double>() ?? 0.1;
double runStretch = jObject.GetValue("runStretch")?.ToObject<double>() ?? 0.4; double runStretch = jObject.GetValue("runStretch")?.ToObject<double>() ?? 0.4;
bool skipSetup = jObject.GetValue("skipSetup")?.ToObject<bool>() ?? true; bool skipSetup = jObject.GetValue("skipSetup")?.ToObject<bool>() ?? true;
var _ = new OSCCollar(ip, portReceive, portSend, radius, calibrationX, calibrationY, walkStretchDeadzone, runStretch, skipSetup); var _ = new OSCCollar(ip, portSend, radius, calibrationX, calibrationY, walkStretchDeadzone, runStretch, skipSetup);
}else }else
{ {
var _ = new OSCCollar(); var _ = new OSCCollar();
@ -31,6 +33,7 @@ public class OSCCollar
private readonly string _ip; private readonly string _ip;
private readonly int _portReceive, _portSend; private readonly int _portReceive, _portSend;
private OSCQueryService _oscQueryService { get; init; }
private OscServer Server { get; init; } private OscServer Server { get; init; }
private OscClient Client { get; init; } private OscClient Client { get; init; }
private float _leashStretch; private float _leashStretch;
@ -57,10 +60,28 @@ public class OSCCollar
private double GPSConstantD { get; init; } private double GPSConstantD { get; init; }
private double GPSConstantE { get; init; } private double GPSConstantE { get; init; }
private OSCCollar(string ip = "127.0.0.1", int portReceive = 9001, int portSend = 9000, double radius = 100, double calibrationX = 0, double calibrationY = 0, double walkStretch = 0.1, double runStretch = 0.4, bool skipSetup = true) private OSCCollar(string ip = "127.0.0.1", int portSend = 9000, double radius = 100, double calibrationX = 0, double calibrationY = 0, double walkStretch = 0.1, double runStretch = 0.4, bool skipSetup = true)
{ {
this._ip = ip; this._ip = ip;
this._portReceive = portReceive; var tcpPort = Extensions.GetAvailableTcpPort();
var udpPort = Extensions.GetAvailableUdpPort();
this._oscQueryService = new OSCQueryServiceBuilder()
.WithHostIP(IPAddress.Parse(ip))
.WithOscIP(IPAddress.Parse(ip))
.WithDiscovery(new MeaModDiscovery())
.WithTcpPort(tcpPort)
.WithUdpPort(udpPort)
.WithServiceName("Collar")
.StartHttpServer()
.AdvertiseOSC()
.AdvertiseOSCQuery()
.Build();
this._oscQueryService.AddEndpoint<float>("/avatar/parameters/GPS1", Attributes.AccessValues.WriteOnly);
this._oscQueryService.AddEndpoint<float>("/avatar/parameters/GPS2", Attributes.AccessValues.WriteOnly);
this._oscQueryService.AddEndpoint<float>("/avatar/parameters/GPS3", Attributes.AccessValues.WriteOnly);
this._oscQueryService.AddEndpoint<float>("/avatar/parameters/Leash_Stretch", Attributes.AccessValues.WriteOnly);
this._oscQueryService.AddEndpoint<bool>("/avatar/parameters/Leash_Toggle", Attributes.AccessValues.WriteOnly);
this._portReceive = this._oscQueryService.OscPort;
this._portSend = portSend; this._portSend = portSend;
this._walkStretch = walkStretch; this._walkStretch = walkStretch;
this._runStretch = runStretch; this._runStretch = runStretch;
@ -79,15 +100,17 @@ public class OSCCollar
if (!skipSetup) if (!skipSetup)
{ {
Console.WriteLine($"OSC Port: {this._portReceive} TCP Port: {this._oscQueryService.TcpPort}");
Console.WriteLine("Position your GPS receivers:"); Console.WriteLine("Position your GPS receivers:");
Console.WriteLine($"GPS 1 x: {GPS1.X} y: {GPS1.Y}"); Console.WriteLine($"GPS 1 x: {GPS1.X} y: {GPS1.Y}");
Console.WriteLine($"GPS 2 x: {GPS2.X} y: {GPS2.Y}"); Console.WriteLine($"GPS 2 x: {GPS2.X} y: {GPS2.Y}");
Console.WriteLine($"GPS 3 x: {GPS3.X} y: {GPS3.Y}"); Console.WriteLine($"GPS 3 x: {GPS3.X} y: {GPS3.Y}");
Console.WriteLine($"Radius of each receiver (sphere): {radius * 2}"); Console.WriteLine($"Radius of each receiver (sphere): {radius * 2}");
Console.ReadKey();
} }
this.Server = new OscServer(portReceive); this.Server = new OscServer(this._portReceive);
this.Client = new OscClient(ip, portSend); this.Client = new OscClient(this._ip, this._portSend);
this.Server.TryAddMethod("/avatar/parameters/GPS1", GPS1Handle); this.Server.TryAddMethod("/avatar/parameters/GPS1", GPS1Handle);
this.Server.TryAddMethod("/avatar/parameters/GPS2", GPS2Handle); this.Server.TryAddMethod("/avatar/parameters/GPS2", GPS2Handle);
this.Server.TryAddMethod("/avatar/parameters/GPS3", GPS3Handle); this.Server.TryAddMethod("/avatar/parameters/GPS3", GPS3Handle);
@ -97,13 +120,15 @@ public class OSCCollar
Thread runningThread = new Thread(RunningThread); Thread runningThread = new Thread(RunningThread);
runningThread.Start(); runningThread.Start();
this._oscQueryService.RefreshServices();
} }
private void PrintOutput() private void PrintOutput()
{ {
Console.Clear(); Console.Clear();
Console.ForegroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine($"OSC Collar - Status: {(_allowMoving ? "enabled" : "disabled")} IP: {_ip} Send: {_portSend} Receive: {_portReceive}"); Console.WriteLine($"OSC Collar - Status: {(_allowMoving ? "enabled" : "disabled")} IP: {_ip} Send: {_portSend} Receive: {_portReceive} HTTP: {this._oscQueryService.TcpPort}");
Console.WriteLine("=============================="); Console.WriteLine("==============================");
Console.WriteLine($"GPS 1:................{GPS1.Distance:00.00000}"); Console.WriteLine($"GPS 1:................{GPS1.Distance:00.00000}");
Console.WriteLine($"GPS 2:................{GPS2.Distance:00.00000}"); Console.WriteLine($"GPS 2:................{GPS2.Distance:00.00000}");

View File

@ -10,7 +10,15 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="BuildSoft.OscCore" Version="1.2.1.1" /> <PackageReference Include="BuildSoft.OscCore" Version="1.2.1.1" />
<PackageReference Include="MeaMod.DNS" Version="1.0.70" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="vrc-oscquery-lib">
<HintPath>..\..\vrc-oscquery-lib\vrc-oscquery-lib\bin\Debug\net6.0\vrc-oscquery-lib.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/AddReferences/RecentPaths/=C_003A_005CUsers_005CGlax_005CRiderProjects_005Cvrc_002Doscquery_002Dlib_005Cvrc_002Doscquery_002Dlib_005Cbin_005CDebug_005Cnet6_002E0_005Cvrc_002Doscquery_002Dlib_002Edll/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>