Ilyaki / ProtoInput

Proto Input enables split screen on PC games by hooking Windows functions and redirecting input from multiple keyboards/mice/controllers
MIT License
45 stars 11 forks source link

fix named pipe to also check for LastError ERROR_PIPE_CONNECTED #7

Open zZeck opened 2 years ago

zZeck commented 2 years ago

ConnectNamedPipe can return 0, but have a good connection, when a client opens the pipe between the pipe's creation and the ConnectNamedPipe call. In that case, GetLastError() is ERROR_PIPE_CONNECTED.

For whatever reason, the threads in the host and client hit this scenario constantly on my PC. The Host goes into an infinite loop of "failed" ConnectNamedPipe calls since it never checked GetLastError.


I also had to edit the EasyHook csproj files so their default Configurations correspond to Configurations those projects actually define. The ProtoInput.sln didn't build in the ms build tools developer command line. Properties set for an sln build only apply to projects directly referenced in the sln file. If those projects reference a project not in the sln, that external project is built with its defaults.

This is an intentional* behavior when a build goes outside of a solution. The AssignProjectConfiguration task maps ProjectReferences to the appropriate project-level Configuration and Platform, given the active solution-level Configuration and Platform. When the referenced project is not part of the solution, there's no such mapping, and the build has to choose between passing along the referencing project's configuration or taking the referenced project's default configuration.

The csproj files for EasyHook define PropertyGroups for Configuration netfx4-Debug not Debug

PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'netfx4-Debug|AnyCPU'"

but were setting the default Configuration to Debug

Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration

Now these commands both work

msbuild .\ProtoInput.sln /p:ConfigurationPlatforms=Debug /p:Platform="x64" msbuild .\ProtoInput.sln /p:ConfigurationPlatforms=Debug /p:Platform="x86"

zZeck commented 2 years ago

This is likely the fix for this issue. That's the behavior that happens for me. The host hangs when it tries to inject.