Skip to content

Commit d0cf588

Browse files
author
Aytackydln
committed
start stop icue server with icue.exe with process monitoring
1 parent 475d16f commit d0cf588

5 files changed

Lines changed: 92 additions & 19 deletions

File tree

Project-Aurora/Project-Aurora/Modules/Icue/AuroraIcueServer.cs

Lines changed: 87 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,28 @@ public sealed class AuroraIcueServer : IDisposable, IAsyncDisposable
2525

2626
public event EventHandler? StatusChanged;
2727

28-
private IcueServerStatus _serverStatus = IcueServerStatus.Disabled;
29-
3028
public IcueServerStatus ServerStatus
3129
{
32-
get => _serverStatus;
30+
get;
3331
private set
3432
{
35-
if (_serverStatus == value) return;
36-
_serverStatus = value;
33+
if (field == value) return;
34+
field = value;
3735
StatusChanged?.Invoke(this, EventArgs.Empty);
3836
}
39-
}
37+
} = IcueServerStatus.Disabled;
4038

4139
private IcueServer? _icueServer;
4240
private GameHandler? _gameHandler;
41+
private RunningProcessMonitor? _processMonitor;
4342

4443
public void RunServer(RunningProcessMonitor processMonitor)
4544
{
46-
Sdk.RunningProcessMonitor = processMonitor;
45+
_processMonitor = processMonitor;
46+
47+
processMonitor.ProcessStarted += ProcessMonitorOnProcessStarted;
48+
processMonitor.ProcessStopped += ProcessMonitorOnProcessStopped;
49+
4750
var runApproved = IcueInstallationUtils.IsIcueInstalled() && IcueInstallationUtils.IsIcueAutorunEnabled();
4851
if (runApproved || processMonitor.IsProcessRunning(IcueInstallationUtils.IcueExe))
4952
{
@@ -54,6 +57,58 @@ public void RunServer(RunningProcessMonitor processMonitor)
5457
TryStartServer();
5558
}
5659

60+
private void ProcessMonitorOnProcessStarted(object? sender, ProcessStarted e)
61+
{
62+
if (e.ProcessName != IcueInstallationUtils.IcueExe)
63+
{
64+
return;
65+
}
66+
67+
switch (ServerStatus)
68+
{
69+
case IcueServerStatus.Conflicted:
70+
case IcueServerStatus.Disabled:
71+
case IcueServerStatus.PipesInUse:
72+
return;
73+
case IcueServerStatus.Waiting:
74+
// proceed to close the server
75+
break;
76+
}
77+
ServerStatus = IcueServerStatus.Conflicted;
78+
79+
if (_icueServer == null) return;
80+
_icueServer.GameConnected -= OnGameConnected;
81+
_icueServer.Dispose();
82+
_icueServer = null;
83+
}
84+
85+
private void ProcessMonitorOnProcessStopped(object? sender, ProcessStopped e)
86+
{
87+
if (e.ProcessName != IcueInstallationUtils.IcueExe)
88+
{
89+
return;
90+
}
91+
92+
switch (ServerStatus)
93+
{
94+
case IcueServerStatus.Waiting:
95+
case IcueServerStatus.Disabled:
96+
return;
97+
case IcueServerStatus.Conflicted:
98+
case IcueServerStatus.PipesInUse:
99+
// Aurora's turn to use the pipes
100+
break;
101+
}
102+
103+
var runApproved = IcueInstallationUtils.IsIcueInstalled() && IcueInstallationUtils.IsIcueAutorunEnabled();
104+
if (runApproved)
105+
{
106+
ServerStatus = IcueServerStatus.Conflicted;
107+
}
108+
109+
TryStartServer();
110+
}
111+
57112
private void TryStartServer()
58113
{
59114
try
@@ -118,23 +173,43 @@ private void OnGameDisconnected(object? sender, EventArgs e)
118173
Sdk.ClearSdkHandler();
119174
}
120175

121-
public void Dispose()
176+
public void Stop()
122177
{
178+
if (_processMonitor != null)
179+
{
180+
_processMonitor.ProcessStarted -= ProcessMonitorOnProcessStarted;
181+
_processMonitor.ProcessStopped -= ProcessMonitorOnProcessStopped;
182+
}
183+
123184
ServerStatus = IcueServerStatus.Disabled;
124185
if (_icueServer == null) return;
125186
_icueServer.GameConnected -= OnGameConnected;
126187
_icueServer.Dispose();
188+
_icueServer = null;
127189
}
128190

129-
public async ValueTask DisposeAsync()
191+
public async Task StopAsync()
130192
{
131-
ServerStatus = IcueServerStatus.Disabled;
132-
if (_icueServer == null)
193+
if (_processMonitor != null)
133194
{
134-
return;
195+
_processMonitor.ProcessStarted -= ProcessMonitorOnProcessStarted;
196+
_processMonitor.ProcessStopped -= ProcessMonitorOnProcessStopped;
135197
}
136198

199+
ServerStatus = IcueServerStatus.Disabled;
200+
if (_icueServer == null) return;
137201
_icueServer.GameConnected -= OnGameConnected;
138202
await _icueServer.DisposeAsync();
203+
_icueServer = null;
204+
}
205+
206+
public void Dispose()
207+
{
208+
Stop();
209+
}
210+
211+
public async ValueTask DisposeAsync()
212+
{
213+
await StopAsync();
139214
}
140215
}

Project-Aurora/Project-Aurora/Modules/Icue/IcueSdk.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ public class IcueSdk
1818

1919
private SdkHandler? _sdkHandler;
2020

21-
public RunningProcessMonitor? RunningProcessMonitor { get; set; }
22-
2321
public void SetSdkHandler(SdkHandler gameHandlerSdkHandler, int gamePid)
2422
{
2523
IsGameConnected = true;

Project-Aurora/Project-Aurora/Modules/IcueModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ private void ConfigurationOnPropertyChanged(object? sender, PropertyChangedEvent
3939
}
4040
else
4141
{
42-
AuroraIcueServer.Dispose();
42+
AuroraIcueServer.Stop();
4343
}
4444
}
4545

Project-Aurora/Project-Aurora/Project-Aurora.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
<PrivateAssets>all</PrivateAssets>
7474
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
7575
</PackageReference>
76-
<PackageReference Include="iCUE-ReverseEngineeredServer" Version="0.2.9" />
76+
<PackageReference Include="iCUE-ReverseEngineeredServer" Version="0.3.0" />
7777
<PackageReference Include="JetBrains.Annotations" Version="2024.3.0" />
7878
<PackageReference Include="JsonSubTypes" Version="2.0.1" />
7979
<PackageReference Include="LibreHardwareMonitorLib" Version="0.9.7-pre642" />

Project-Aurora/Project-Aurora/packages.lock.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@
9696
},
9797
"iCUE-ReverseEngineeredServer": {
9898
"type": "Direct",
99-
"requested": "[0.2.9, )",
100-
"resolved": "0.2.9",
101-
"contentHash": "PYiz6DE/z3W+bqqjpArxWsVCeOIbKEqslyxggjC627weEhlDR0SfrAVP31dAC7IEb/ZXx0sW0ztKJlEmu87hkg=="
99+
"requested": "[0.3.0, )",
100+
"resolved": "0.3.0",
101+
"contentHash": "xHuJMKdfMqWBjWBk1P/tZw0YavrY6nCYvwxpRQRhoRvEBt126+9tKKGWGJ6w51Zq5AGpIlwg6r9Pl7kHopxKXw=="
102102
},
103103
"JetBrains.Annotations": {
104104
"type": "Direct",

0 commit comments

Comments
 (0)