Skip to content

Commit 6dc282f

Browse files
committed
Update Deucalion
1 parent 199b8aa commit 6dc282f

File tree

73 files changed

+51
-17
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+51
-17
lines changed

BardMusicPlayer.Seer/BardMusicPlayer.Seer.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@
3535
</ItemGroup>
3636

3737
<ItemGroup>
38-
<EmbeddedResource Include="Lib\Machina\FFXIV\Deucalion\Distrib\deucalion-0.8.0.dll" />
39-
<EmbeddedResource Include="Lib\Machina\FFXIV\Headers\Opcodes\Chinese.txt" />
40-
<EmbeddedResource Include="Lib\Machina\FFXIV\Headers\Opcodes\Global.txt" />
41-
<EmbeddedResource Include="Lib\Machina\FFXIV\Headers\Opcodes\Korean.txt" />
38+
<EmbeddedResource Include="Lib\Machina.FFXIV\Deucalion\Distrib\deucalion-0.9.0.dll" />
39+
<EmbeddedResource Include="Lib\Machina.FFXIV\Headers\Opcodes\Chinese.txt" />
40+
<EmbeddedResource Include="Lib\Machina.FFXIV\Headers\Opcodes\Global.txt" />
41+
<EmbeddedResource Include="Lib\Machina.FFXIV\Headers\Opcodes\Korean.txt" />
4242
</ItemGroup>
4343

4444
</Project>

BardMusicPlayer.Seer/Lib/Machina/FFXIV/Deucalion/DeucalionClient.cs renamed to BardMusicPlayer.Seer/Lib/Machina.FFXIV/Deucalion/DeucalionClient.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,19 @@ public struct DeucalionSegment
109109

110110
public delegate void MessageReceivedHandler(byte[] message);
111111
public MessageReceivedHandler MessageReceived;
112+
113+
public delegate void MessageSentHandler(byte[] message);
114+
public MessageSentHandler MessageSent;
115+
112116
public void OnMessageReceived(byte[] message)
113117
{
114118
MessageReceived?.Invoke(message);
115119
}
120+
121+
public void OnMessageSent(byte[] message)
122+
{
123+
MessageSent?.Invoke(message);
124+
}
116125

117126
public unsafe void Connect(int processId)
118127
{
@@ -137,18 +146,18 @@ public unsafe void Connect(int processId)
137146
return;
138147
}
139148

140-
// Set opcode filter to just recv for zone packets. Assume it was processed successfully.
149+
// Set opcode filter to get recv/send for zone packets. Assume it was processed successfully.
141150
WritePipe(new DeucalionMessage()
142151
{
143152
header = new DeucalionHeader()
144153
{
145-
channel = (FFXIVChannel)(1 << 1),
154+
channel = (FFXIVChannel)(1 << 1 | 1 << 4),
146155
Opcode = FFXIVOpcodes.Option
147156
},
148157
data = Array.Empty<byte>()
149158
});
150159

151-
if (result.debug.Contains("RECV REQUIRES SIG"))
160+
if (result.debug.Contains("REQUIRES SIG"))
152161
{
153162
Trace.WriteLine("DeucalionClient: Named Pipe connected, but requires updated signature. Cannot find network data.");
154163
return;
@@ -195,8 +204,17 @@ private void ProcessReadLoop(CancellationToken token)
195204
}
196205

197206
foreach (DeucalionMessage message in messages)
198-
if (message.header.Opcode == FFXIVOpcodes.Recv)
199-
OnMessageReceived(message.data);
207+
{
208+
switch (message.header.Opcode)
209+
{
210+
case FFXIVOpcodes.Recv:
211+
OnMessageReceived(message.data);
212+
break;
213+
case FFXIVOpcodes.Send:
214+
OnMessageSent(message.data);
215+
break;
216+
}
217+
}
200218
}
201219
catch (OperationCanceledException)
202220
{
@@ -292,6 +310,10 @@ private unsafe DeucalionMessage[] ReadPipe(byte[] buffer)
292310
if (messagePtr->channel == FFXIVChannel.Zone)
293311
response.Add(newMessage);
294312
break;
313+
case FFXIVOpcodes.Send:
314+
if (messagePtr->channel == FFXIVChannel.Zone)
315+
response.Add(newMessage);
316+
break;
295317
case FFXIVOpcodes.Exit:
296318
Trace.WriteLine("DeucalionClient: Received exit opcode from injected code.", "DEBUG-MACHINA");
297319
Disconnect();

BardMusicPlayer.Seer/Lib/Machina/FFXIV/Deucalion/DeucalionInjector.cs renamed to BardMusicPlayer.Seer/Lib/Machina.FFXIV/Deucalion/DeucalionInjector.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ private struct SECURITY_DESCRIPTOR
116116

117117
public static string ExtractLibrary()
118118
{
119-
string fileName = Path.Combine(Path.GetTempPath(), "Machina.FFXIV", "deucalion-0.8.0.dll");
119+
string fileName = Path.Combine(Path.GetTempPath(), "Machina.FFXIV", "deucalion-0.9.0.dll");
120120
if (File.Exists(fileName))
121121
{
122122
try
@@ -135,7 +135,8 @@ public static string ExtractLibrary()
135135
if (!Directory.Exists(fileName.Substring(0, fileName.LastIndexOf("\\") + 1)))
136136
Directory.CreateDirectory(fileName.Substring(0, fileName.LastIndexOf("\\") + 1));
137137

138-
string resourceName = $"BardMusicPlayer.Seer.Lib.Machina.FFXIV.Deucalion.Distrib.deucalion-0.8.0.dll";
138+
string resourceName = $"BardMusicPlayer.Seer.Lib.Machina.FFXIV.Deucalion.Distrib.deucalion-0.9.0.dll";
139+
139140
using (Stream s = typeof(DeucalionInjector).Module.Assembly.GetManifestResourceStream(resourceName))
140141
{
141142
using (BinaryReader sr = new BinaryReader(s))
@@ -146,7 +147,7 @@ public static string ExtractLibrary()
146147
}
147148
}
148149

149-
string release_checksum = "15-76-26-8C-BD-7A-B3-9B-7A-81-C6-8B-DC-16-AC-E1";//pre-0.7.0: "1B-9B-7A-E7-5F-C1-A7-05-40-AD-60-C7-62-77-01-36";
150+
string release_checksum = "6C-9C-32-45-10-B6-B9-A8-64-20-53-7A-E3-7D-66-9D"; //0.8.0: "15-76-26-8C-BD-7A-B3-9B-7A-81-C6-8B-DC-16-AC-E1"; //pre-0.7.0: "1B-9B-7A-E7-5F-C1-A7-05-40-AD-60-C7-62-77-01-36";
150151

151152
// validate checksum
152153
byte[] checksum = CalculateChecksum(fileName);
Binary file not shown.

BardMusicPlayer.Seer/Lib/Machina/FFXIV/FFXIVNetworkMonitor.cs renamed to BardMusicPlayer.Seer/Lib/Machina.FFXIV/FFXIVNetworkMonitor.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,15 @@ public void Start()
130130

131131
if (UseDeucalion)
132132
{
133+
if (ProcessID == 0)
134+
throw new ArgumentException("ProcessID must be specified for Deucalion.");
135+
133136
string library = DeucalionInjector.ExtractLibrary();
134137
DeucalionInjector.InjectLibrary((int)ProcessID, library);
135138

136139
_deucalionClient = new DeucalionClient();
137-
_deucalionClient.MessageReceived = (byte[] message) => ProcessDeucalionMessage(message);
140+
_deucalionClient.MessageSent = (message) => ProcessDeucalionMessage(message, true);
141+
_deucalionClient.MessageReceived = (message) => ProcessDeucalionMessage(message, false);
138142
_deucalionClient.Connect((int)ProcessID);
139143
}
140144
else
@@ -209,15 +213,22 @@ public void ProcessReceivedMessage(TCPConnection connection, byte[] data)
209213

210214
}
211215

212-
public void ProcessDeucalionMessage(byte[] data)
216+
public void ProcessDeucalionMessage(byte[] data, bool isSend)
213217
{
214218
// TCP Connection is irrelevent for this, but needed by interface, so make new one.
215219
TCPConnection connection = new TCPConnection();
216220
connection.ProcessId = ProcessID;
217221

218222
(long epoch, byte[] packet) = DeucalionClient.ConvertDeucalionFormatToPacketFormat(data);
219-
220-
OnMessageReceived(connection, epoch, packet);
223+
224+
if (isSend)
225+
{
226+
OnMessageSent(connection, epoch, packet);
227+
}
228+
else
229+
{
230+
OnMessageReceived(connection, epoch, packet);
231+
}
221232
}
222233

223234

0 commit comments

Comments
 (0)