Skip to content

Commit

Permalink
Fixed a few things, and improved network protocol
Browse files Browse the repository at this point in the history
  • Loading branch information
JunaMeinhold committed May 28, 2024
1 parent 9e8bf02 commit 218fe6b
Show file tree
Hide file tree
Showing 52 changed files with 1,668 additions and 1,076 deletions.
1 change: 1 addition & 0 deletions AssetsBundler/AssetsBundler.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

<ItemGroup>
<ProjectReference Include="..\HexaEngine.Core\HexaEngine.Core.csproj" />
<ProjectReference Include="..\HexaEngine\HexaEngine.csproj" />
</ItemGroup>

</Project>
41 changes: 37 additions & 4 deletions AssetsBundler/Program.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
namespace AssetsBundler
{
using CommandLine;
using HexaEngine;
using HexaEngine.Core;
using HexaEngine.Core.Assets;
using HexaEngine.Core.IO;
using HexaEngine.Core.IO.Binary.Archives;
using HexaEngine.Core.Windows;
using HexaEngine.Windows;
using System;
using System.IO;
using System.IO.Compression;
using System.IO.Hashing;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;

internal class Program
Expand All @@ -19,6 +26,9 @@ private class Options
[Option('p', "path", Required = true, HelpText = "path to dir")]
public string Path { get; set; }

[Option('o', "output", Required = false, HelpText = "out dir")]
public string Output { get; set; }

[Option('c', "Compression", Required = false, HelpText = "Compression 0 = none, 1 = deflate")]
public int Compress { get; set; } = 0;

Expand All @@ -34,6 +44,13 @@ private enum Mode
extract
}

public struct ProgressDummy : IProgress<float>
{
public void Report(float value)
{
}
}

private static void Main(string[] args)
{
Parser.Default.ParseArguments<Options>(args).WithParsed(o =>
Expand All @@ -53,19 +70,35 @@ private static void Main(string[] args)
AssetArchive bundle = new(o.Path);
Crc32 crc = new();
foreach (BundleAsset asset in bundle.Assets)
Console.WriteLine($"Archive Entries: {bundle.Assets.Count}, BaseOffset: {bundle.BaseOffset}, Flags: {bundle.Flags}, CRC32: {bundle.CRC32:X8}");
foreach (AssetArchiveEntry asset in bundle.Assets)
{
crc.Append(asset.GetData());
Console.WriteLine($"[{asset.Type}] CRC32:{ByteArrayToString(crc.GetHashAndReset())} {asset.Path}");
Console.WriteLine($"[{asset.Type}] CRC32:{crc.GetCurrentHashAsUInt32():X8}, [{asset.Start}..{asset.Length}] {asset.Name}##{asset.Guid}, {asset.PathInArchive}");
}
}
break;
case Mode.gen:
if (Directory.Exists(o.Path))
Window window = new();
Application.Boot(HexaEngine.Core.Graphics.GraphicsBackend.D3D11, HexaEngine.Core.Audio.AudioBackend.Disabled);
Platform.Init(window, true);
Application.Init();
SourceAssetsDatabase.Init(o.Path, new ProgressDummy()).Wait();
AssetArchive archive = new();
foreach (var artifact in ArtifactDatabase.Artifacts)
{
AssetArchive.GenerateFrom(o.Path, (Compression)o.Compress, (CompressionLevel)o.CompressionLevel);
archive.AddArtifact(artifact, Path.GetRelativePath(o.Path, artifact.GetSourceMetadata().GetFullPath()));
}
string name = Path.GetFileName(o.Path);
RSA rsa = RSA.Create(4096);
archive.Save(Path.Combine(o.Path, $"{name}.bundle"), Compression.LZ4, CompressionLevel.SmallestSize, rsa);
Application.Shutdown();
break;
case Mode.extract:
Expand Down
6 changes: 5 additions & 1 deletion AssetsBundler/Properties/launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@
"profiles": {
"AssetsBundler": {
"commandName": "Project",
"commandLineArgs": "-m create -c 2 -l 3 -p C:\\Users\\Juna\\source\\repos\\JunaMeinhold\\HexaEngine\\Editor\\bin\\x64\\Debug\\net7.0\\assets\\"
"commandLineArgs": "-m gen -c 2 -l 3 -p C:\\Users\\juna\\Desktop\\Base -o C:\\Users\\juna\\Desktop\\Base"
},
"Profile 1": {
"commandName": "Project",
"commandLineArgs": "-m list -p \"C:\\Users\\juna\\Desktop\\Base\\Base.bundle\""
}
}
}
32 changes: 32 additions & 0 deletions AssetsBundler/openssl.crt
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFmzCCA4OgAwIBAgIUL8Kqfi/MwafXspMmWjeo1EKOU2swDQYJKoZIhvcNAQEL
BQAwXTELMAkGA1UEBhMCREUxEDAOBgNVBAgMB0dlcm1hbnkxEjAQBgNVBAcMCUZy
aWVkYmVyZzETMBEGA1UECgwKSGV4YUVuZ2luZTETMBEGA1UEAwwKSGV4YUVuZ2lu
ZTAeFw0yNDA1MjcxNDQ5NDVaFw0yNDA2MjYxNDQ5NDVaMF0xCzAJBgNVBAYTAkRF
MRAwDgYDVQQIDAdHZXJtYW55MRIwEAYDVQQHDAlGcmllZGJlcmcxEzARBgNVBAoM
CkhleGFFbmdpbmUxEzARBgNVBAMMCkhleGFFbmdpbmUwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQDiBvtfxJ+/n3SJZiNayb1GiJO4ZofYHDENlEhMSuRZ
JIyvPcg5f0L4owdYIOUqaZy0xLfC7PP0qdRafHvPaGJBtc5vz64W3UnrCGrEhFi7
/58spRHJeNJWCeiHl+o3JR4y2scrXMvDZ6JPY7fxkSou606Ivs/WtDFnS2NdYU+x
+J4eN0IU+SQ9DXEs52ZhBPkIRiUYRa6zG+ck278pq8kNcEtI9TUcGkS5/V9AQmT1
K1npgOcp6j7E4ZUUjjO+mG/bAP9C8OU4+6LVHI1Re89qyw/67VvHiz6Lh++AKFBU
kUWoYQNDnj2MYsSUxHIiwbKwfzJv1olmhc6brTzMMsjDnpFbHvpuHQn9jCb8sfXE
PyDG8Rn42zpYDu0XDTG+VP3pIUHG/S17X6N7ynLCHCA9sUNoeJENcsMGIaJiBuxs
NLm0+1XK3r8Eb+AkCLilbcrv5D63DdtAc6mmQiqTc7GOIgnGPjMoA+peIdFjs7xX
X4ugQPxZyNXPC+FkxIN1Z94qDhmz3DY+eLaiNohZhPLtz1XW3SFUQdTc+SBpeJGq
L1piNwQDtjXjx2EsaSh8tmwJwo8ZGwIDLOrdDZoncDru/0s/1V6EsHhm0csqZ63Q
IUOc/xYq6bZloPPZ5uBlvalO9JBODs6VtzXCzHPm59E93zM720+RY9Sqf8SNhEEt
KQIDAQABo1MwUTAdBgNVHQ4EFgQUTQJtcl/WvoVXyiI6q/eAhKUkYRIwHwYDVR0j
BBgwFoAUTQJtcl/WvoVXyiI6q/eAhKUkYRIwDwYDVR0TAQH/BAUwAwEB/zANBgkq
hkiG9w0BAQsFAAOCAgEADkIJMDrAadcYGqLf505R1hmrTYywPkxWpQzMtdHg/zKU
sWA3atAX7CpJqIXbI0s8vZ9Q1Jp0JNAySqzPED3jVx8xSKX2Rh4jn/e07fPthpPw
fMieogmfEDhwTDtBMlnX+5+Kw+xzB4mOSkqD1H+xSG1Rq76P+UhDKdH25RuozwIE
EG0knod//gdiO7A05uIGLZaHMFrV6WC3I3CLEsyfplouy3fQAKT13YWzpjlqbsGr
+I/HJ8g8ntUAYvteALiGnQB1D9RCD39rodwj7iobjH7nyPw+5R3aeCU6MhZKjN+d
nVqJl7p1AdOOARHcRhdHZE1yApwO3iIL7WuUDHki4v52zEQKicYqFyMqCsaCNi/U
81Fpw2rrEKkk8incbXY/nMrOBTvoJDfljCPQqPGhYf5K+8FeitM/wEv2yTkegeQf
2YhM8L5tdyL0sc75tXrz5tTgGNn6I7xcZBT7jPI/etupToslApJqVs9I+Fovf0UL
dRZNC44bMQiep9Da+2F/Ro/JTrZNG/wJudhxwyqoZieLhwZIefffmWB8yZ7TgsZ7
lNqjSubxRe5WIZ55CpcZ3Pfk7H7pRnkGaD7H2wK8ZVGmHd66o2N01rrPZJugL53W
Utx1qhSd2LZ1xdvcmbBEGSIQ5UGUNgJfziapmKvtSVK5McxbuuhVLXJIGj5uXvA=
-----END CERTIFICATE-----
54 changes: 54 additions & 0 deletions AssetsBundler/openssl.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
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
PBITbe9rVHRPHMdEgXGIVQ==
-----END ENCRYPTED PRIVATE KEY-----
9 changes: 9 additions & 0 deletions HexaEngine.Analyzers.Annotations/DisposeIgnoreAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace HexaEngine.Analyzers.Annotations
{
using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class DisposeIgnoreAttribute : Attribute
{
}
}
9 changes: 9 additions & 0 deletions HexaEngine.Analyzers.Annotations/DisposeIsCrucialAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace HexaEngine.Analyzers.Annotations
{
using System;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class DisposeIsCrucialAttribute : Attribute
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
using Microsoft;

namespace HexaEngine.Analyzers.Tests
{
using Microsoft;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Testing.NUnit;
using Microsoft.CodeAnalysis.Testing;
using NUnit.Framework;

public class AvoidExpensiveOperationsInUpdateAnalyzerTests
{
public const string MockScriptBehaviour = @"
namespace HexaEngine.Scripts
{
public class ScriptBehaviour
{
public T GetComponent<T>() => default;
public HexaEngine.Scenes.GameObject GameObject;
public HexaEngine.Scenes.Scene Scene;
}
public class GameObject
{
public T GetComponentFromParent<T>() => default;
}
}
public class SomeComponent : HexaEngine.Scenes.IComponent
{
public System.Guid Guid { get; set; }
public HexaEngine.Scenes.GameObject GameObject { get; set; }
public bool IsSerializable { get; }
public void Awake()
{
}
public void Destroy()
{
}
}
public class SomeClass : System.IDisposable
{
public void Dispose()
{
}
}
namespace HexaEngine.Scenes
{
public class GameObject
{
}
public class SceneDispatcher
{
public void Invoke(object? context, System.Action<object?> action)
{
}
public void Invoke<T>(T context, System.Action<T> action)
{
}
}
public class Scene
{
public SceneDispatcher Dispatcher { get; } = new();
public void AddChildUnsafe(GameObject child)
{
}
}
public interface IComponent
{
System.Guid Guid { get; set; }
GameObject GameObject { get; set; }
bool IsSerializable { get; }
void Awake();
void Destroy();
}
}
";

[Test]
public async Task DetectsGetComponentInUpdateMethod()
{
var testCode = MockScriptBehaviour + @"
public class TestScript : HexaEngine.Scripts.ScriptBehaviour
{
void Update()
{
var component = GetComponent<SomeComponent>();
}
}";
var expected = new DiagnosticResult(AvoidExpensiveOperationsInUpdateAnalyzer.DiagnosticId, DiagnosticSeverity.Warning)
.WithSpan(86, 25, 86, 54)
.WithMessage("Avoid calling 'GetComponent' in the Update method");

await AnalyzerVerifier<AvoidExpensiveOperationsInUpdateAnalyzer>.VerifyAnalyzerAsync(testCode, expected);
}

[Test]
public async Task DetectsGetComponentNotInAwakeMethod()
{
var testCode = MockScriptBehaviour + @"
public class TestScript : HexaEngine.Scripts.ScriptBehaviour
{
void Awake()
{
var component = GetComponent<SomeComponent>();
}
}";

await AnalyzerVerifier<AvoidExpensiveOperationsInUpdateAnalyzer>.VerifyAnalyzerAsync(testCode);
}
}
}
1 change: 1 addition & 0 deletions HexaEngine.Analyzers.Tests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using NUnit.Framework;
37 changes: 37 additions & 0 deletions HexaEngine.Analyzers.Tests/HexaEngine.Analyzers.Tests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.9.2" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.9.2" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Analyzer.Testing.NUnit" Version="1.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.2.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\HexaEngine.Analyzers\HexaEngine.Analyzers.csproj" />
<ProjectReference Include="..\HexaEngine\HexaEngine.csproj" />
</ItemGroup>



</Project>
Loading

0 comments on commit 218fe6b

Please sign in to comment.