Implement handshake Hello NetControlMessage, recv and send

This commit is contained in:
AeonLucid
2022-01-12 07:26:25 +01:00
parent 0a27bdd3c0
commit 65a28b32ef
50 changed files with 2768 additions and 156 deletions
@@ -0,0 +1,41 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Collections.Generic;
using System.Collections.Immutable;
namespace Prospect.Unreal.Generator
{
internal class NetControlMessageParser
{
internal IReadOnlyList<NetControlMessageEntry> Parse(ImmutableArray<AttributeSyntax> attributes)
{
var entries = new List<NetControlMessageEntry>();
foreach (var attribute in attributes)
{
var attributeParams = attribute.ArgumentList.Arguments;
var attributeEntry = new NetControlMessageEntry();
attributeEntry.Name = ((LiteralExpressionSyntax)attributeParams[0].Expression).Token.ValueText; // StringLiteralExpression
attributeEntry.Index = (int)((LiteralExpressionSyntax)attributeParams[1].Expression).Token.Value; // NumericLiteralExpression
for (int i = 2; i < attributeParams.Count; i++)
{
var paramType = ((TypeOfExpressionSyntax)attributeParams[i].Expression);
var paramKeyword = paramType.Type;
if (paramKeyword is IdentifierNameSyntax paramIdentifierName)
{
attributeEntry.Params.Add(paramIdentifierName.Identifier.ValueText);
}
else if (paramKeyword is PredefinedTypeSyntax predefinedTypeSyntax)
{
attributeEntry.Params.Add(predefinedTypeSyntax.Keyword.ValueText);
}
}
entries.Add(attributeEntry);
}
return entries;
}
}
}