Initial commit: Complete open-source Decal rebuild
All 5 phases of the open-source Decal rebuild: Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil) Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters - Decal.Core, DecalControls, DecalRender, D3DService Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL Phase 4: DenAgent WinForms tray application Phase 5: WiX installer and build script 25 C# projects building with 0 errors. Native C++ projects require VS 2022 + Windows SDK (x86). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
d1442e3747
1382 changed files with 170725 additions and 0 deletions
130
Managed/Decal.Adapter/Decal.Adapter.NetParser/MessageRootImpl.cs
Normal file
130
Managed/Decal.Adapter/Decal.Adapter.NetParser/MessageRootImpl.cs
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
using System.Diagnostics;
|
||||
using Decal.Interop.Net;
|
||||
|
||||
namespace Decal.Adapter.NetParser;
|
||||
|
||||
public class MessageRootImpl : MessageRoot, IMessageIterator
|
||||
{
|
||||
protected MessageWrapper Wrapped;
|
||||
|
||||
protected MessageStruct Data;
|
||||
|
||||
protected int FieldIndex;
|
||||
|
||||
protected const int Error = -1;
|
||||
|
||||
public object Current => Data.Value<object>(FieldIndex);
|
||||
|
||||
public string FieldName => Data.Name(FieldIndex);
|
||||
|
||||
public int Index => FieldIndex;
|
||||
|
||||
public IMessage Message => Wrapped;
|
||||
|
||||
public MessageRoot NextObjectIndex
|
||||
{
|
||||
[DebuggerNonUserCode]
|
||||
get
|
||||
{
|
||||
if (FieldIndex < Data.mCount)
|
||||
{
|
||||
MessageMemberWrapper result = new MessageMemberWrapper(Data.Struct(FieldIndex), Wrapped);
|
||||
FieldIndex++;
|
||||
return result;
|
||||
}
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
}
|
||||
|
||||
// IMessageIterator properties - parameterless accessors for the COM interface.
|
||||
// The parameterized get_Next/get_NextString etc. below are the COM parameterized property accessors.
|
||||
object IMessageIterator.Next => throw new COMHResultException(HResults.E_FAIL);
|
||||
string IMessageIterator.NextString => throw new COMHResultException(HResults.E_FAIL);
|
||||
int IMessageIterator.NextInt => throw new COMHResultException(HResults.E_FAIL);
|
||||
double IMessageIterator.NextFloat => throw new COMHResultException(HResults.E_FAIL);
|
||||
MessageRoot IMessageIterator.NextObject => throw new COMHResultException(HResults.E_FAIL);
|
||||
ulong IMessageIterator.NextQWord => throw new COMHResultException(HResults.E_FAIL);
|
||||
|
||||
protected MessageRootImpl()
|
||||
{
|
||||
}
|
||||
|
||||
protected MessageRootImpl(MessageStruct data, MessageWrapper wrapper)
|
||||
: this()
|
||||
{
|
||||
Wrapped = wrapper;
|
||||
Data = data;
|
||||
if (!Data.mParsed)
|
||||
{
|
||||
Data.Parse();
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
FieldIndex = 0;
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
private T GetNext<T>(string name)
|
||||
{
|
||||
FieldIndex = Data.IndexFromName(name);
|
||||
if (FieldIndex != -1)
|
||||
{
|
||||
return Data.Value<T>(FieldIndex);
|
||||
}
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
private T GetNext<T>(int index)
|
||||
{
|
||||
if (index >= 0 && index < Data.mCount)
|
||||
{
|
||||
FieldIndex = index;
|
||||
return Data.Value<T>(FieldIndex);
|
||||
}
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public object get_Next(object vIndex)
|
||||
{
|
||||
return GetNext<object>(Data.ObjectToIndex(vIndex));
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public double get_NextFloat(string Name)
|
||||
{
|
||||
return GetNext<double>(Name);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public int get_NextInt(string Name)
|
||||
{
|
||||
return GetNext<int>(Name);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public MessageRoot get_NextObject(string Name)
|
||||
{
|
||||
FieldIndex = Data.IndexFromName(Name);
|
||||
if (FieldIndex != -1)
|
||||
{
|
||||
return new MessageMemberWrapper(Data.Struct(FieldIndex), Wrapped);
|
||||
}
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public ulong get_NextQWord(string Name)
|
||||
{
|
||||
return GetNext<ulong>(Name);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
public string get_NextString(string Name)
|
||||
{
|
||||
return GetNext<string>(Name);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue