M src/Core/NosSmooth.Comms.Abstractions/NosSmooth.Comms.Abstractions.csproj => src/Core/NosSmooth.Comms.Abstractions/NosSmooth.Comms.Abstractions.csproj +2 -2
@@ 11,8 11,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
- <PackageReference Include="NosSmooth.Core" Version="4.0.2" />
- <PackageReference Include="NosSmooth.Packets" Version="3.5.1" />
+ <PackageReference Include="NosSmooth.Core" Version="4.0.3" />
+ <PackageReference Include="NosSmooth.Packets" Version="3.6.0" />
<PackageReference Include="NosSmooth.PacketSerializer.Abstractions" Version="1.3.1" />
</ItemGroup>
M src/Core/NosSmooth.Comms.Core/NosSmooth.Comms.Core.csproj => src/Core/NosSmooth.Comms.Core/NosSmooth.Comms.Core.csproj +1 -1
@@ 10,7 10,7 @@
<ItemGroup>
<PackageReference Include="MessagePack" Version="2.4.59" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="7.0.0" />
- <PackageReference Include="NosSmooth.Core" Version="4.0.2" />
+ <PackageReference Include="NosSmooth.Core" Version="4.0.3" />
</ItemGroup>
<ItemGroup>
M src/Local/NosSmooth.Comms.Inject/MessageResponders/FocusResponder.cs => src/Local/NosSmooth.Comms.Inject/MessageResponders/FocusResponder.cs +20 -8
@@ 7,6 7,7 @@
using NosSmooth.Comms.Data.Responders;
using NosSmooth.Comms.Inject.Messages;
using NosSmooth.LocalBinding;
+using NosSmooth.LocalBinding.Errors;
using NosSmooth.LocalBinding.Hooks;
using NosSmooth.LocalBinding.Structs;
using Remora.Results;
@@ 20,7 21,7 @@ public class FocusResponder : IMessageResponder<FocusMessage>
{
private readonly NosBrowserManager _browserManager;
private readonly NosThreadSynchronizer _synchronizer;
- private readonly IEntityFocusHook _focusHook;
+ private readonly Optional<IEntityFocusHook> _focusHook;
/// <summary>
/// Initializes a new instance of the <see cref="FocusResponder"/> class.
@@ 29,7 30,7 @@ public class FocusResponder : IMessageResponder<FocusMessage>
/// <param name="synchronizer">The synchronizer.</param>
/// <param name="focusHook">The focus hook.</param>
public FocusResponder
- (NosBrowserManager browserManager, NosThreadSynchronizer synchronizer, IEntityFocusHook focusHook)
+ (NosBrowserManager browserManager, NosThreadSynchronizer synchronizer, Optional<IEntityFocusHook> focusHook)
{
_browserManager = browserManager;
_synchronizer = synchronizer;
@@ 40,9 41,14 @@ public class FocusResponder : IMessageResponder<FocusMessage>
public async Task<Result> Respond(FocusMessage message, CancellationToken ct = default)
{
MapBaseObj? entity = null;
+ if (!_browserManager.SceneManager.TryGet(out var sceneManager))
+ {
+ return new OptionalNotPresentError(nameof(SceneManager));
+ }
+
if (message.EntityId is not null)
{
- var entityResult = _browserManager.SceneManager.FindEntity(message.EntityId.Value);
+ var entityResult = sceneManager.FindEntity(message.EntityId.Value);
if (!entityResult.IsDefined(out entity))
{
@@ 52,11 58,17 @@ public class FocusResponder : IMessageResponder<FocusMessage>
return await _synchronizer.SynchronizeAsync
(
- () =>
- {
- _focusHook.WrapperFunction(entity);
- return Result.FromSuccess();
- },
+ () => _focusHook.MapResult
+ (
+ hook => hook.WrapperFunction.MapResult
+ (
+ wrapper =>
+ {
+ wrapper(entity);
+ return Result.FromSuccess();
+ }
+ )
+ ),
ct
);
}
M src/Local/NosSmooth.Comms.Inject/MessageResponders/FollowResponder.cs => src/Local/NosSmooth.Comms.Inject/MessageResponders/FollowResponder.cs +30 -7
@@ 7,6 7,7 @@
using NosSmooth.Comms.Data.Responders;
using NosSmooth.Comms.Inject.Messages;
using NosSmooth.LocalBinding;
+using NosSmooth.LocalBinding.Errors;
using NosSmooth.LocalBinding.Hooks;
using NosSmooth.LocalBinding.Structs;
using Remora.Results;
@@ 40,9 41,14 @@ public class FollowResponder : IMessageResponder<FollowMessage>
public async Task<Result> Respond(FollowMessage message, CancellationToken ct = default)
{
MapBaseObj? entity = null;
+ if (!_browserManager.SceneManager.TryGet(out var sceneManager))
+ {
+ return new OptionalNotPresentError(nameof(SceneManager));
+ }
+
if (message.EntityId is not null)
{
- var entityResult = _browserManager.SceneManager.FindEntity(message.EntityId.Value);
+ var entityResult = sceneManager.FindEntity(message.EntityId.Value);
if (!entityResult.IsDefined(out entity))
{
@@ 56,13 62,30 @@ public class FollowResponder : IMessageResponder<FollowMessage>
{
if (entity is null)
{
- _hookManager.EntityUnfollow.WrapperFunction();
+ return _hookManager.EntityUnfollow.MapResult
+ (
+ unfollow => unfollow.WrapperFunction.MapResult
+ (
+ wrapper =>
+ {
+ wrapper();
+ return Result.FromSuccess();
+ }
+ )
+ );
}
- else
- {
- _hookManager.EntityFollow.WrapperFunction(entity);
- }
- return Result.FromSuccess();
+
+ return _hookManager.EntityFollow.MapResult
+ (
+ unfollow => unfollow.WrapperFunction.MapResult
+ (
+ wrapper =>
+ {
+ wrapper(entity);
+ return Result.FromSuccess();
+ }
+ )
+ );
},
ct
);
M src/Local/NosSmooth.Comms.Inject/MessageResponders/HandshakeResponder.cs => src/Local/NosSmooth.Comms.Inject/MessageResponders/HandshakeResponder.cs +5 -3
@@ 57,10 57,12 @@ public class HandshakeResponder : IMessageResponder<HandshakeRequest>
string? playerName = null;
long? playerId = null;
- if (_browserManager.IsInGame)
+ if (_browserManager.PlayerManager.TryGet(out var playerManager) &&
+ _browserManager.IsInGame.TryGet(out var isInGame) &&
+ isInGame)
{
- playerName = _browserManager.PlayerManager.Player.Name;
- playerId = _browserManager.PlayerManager.PlayerId;
+ playerName = playerManager.Player.Name;
+ playerId = playerManager.PlayerId;
}
var result = await _connectionHandler.SendMessageAsync
M src/Local/NosSmooth.Comms.Inject/NosSmooth.Comms.Inject.csproj => src/Local/NosSmooth.Comms.Inject/NosSmooth.Comms.Inject.csproj +5 -5
@@ 14,12 14,12 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
- <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="7.0.0" />
- <PackageReference Include="NosSmooth.Core" Version="4.0.2" />
- <PackageReference Include="NosSmooth.Extensions.SharedBinding" Version="0.1.0" />
- <PackageReference Include="NosSmooth.LocalBinding" Version="1.0.1" />
- <PackageReference Include="NosSmooth.LocalClient" Version="1.1.1" />
+ <PackageReference Include="NosSmooth.Core" Version="4.0.3" />
+ <PackageReference Include="NosSmooth.Extensions.SharedBinding" Version="1.0.0" />
+ <PackageReference Include="NosSmooth.LocalBinding" Version="2.0.0" />
+ <PackageReference Include="NosSmooth.LocalClient" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
M src/Local/NosSmooth.Comms.Local/NosSmooth.Comms.Local.csproj => src/Local/NosSmooth.Comms.Local/NosSmooth.Comms.Local.csproj +2 -2
@@ 17,12 17,12 @@
</ItemGroup>
<ItemGroup>
- <PackageReference Include="NosSmooth.Injector" Version="1.1.0">
+ <PackageReference Include="NosSmooth.Injector" Version="1.1.1">
<IncludeAssets>All</IncludeAssets>
<PrivateAssets>None</PrivateAssets>
</PackageReference>
- <PackageReference Include="NosSmooth.LocalBinding" Version="1.0.1" />
+ <PackageReference Include="NosSmooth.LocalBinding" Version="2.0.0" />
</ItemGroup>
</Project>
M src/Samples/ConsolePacketLogger/Program.cs => src/Samples/ConsolePacketLogger/Program.cs +2 -2
@@ 50,8 50,8 @@ public static class Program
.Title("Choose NosTale process to log packets from.")
.UseConverter
(
- x => x.IsInGame
- ? $"{x.PlayerManager.Player.Name} ({x.Process.ProcessName} - {x.Process.Id})"
+ x => x.IsInGame.Get()
+ ? $"{x.PlayerManager.Get().Player.Name} ({x.Process.ProcessName} - {x.Process.Id})"
: $"Not in game ({x.Process.ProcessName} - {x.Process.Id})"
)
.AddChoices(nostaleProcesses)