Add Multiplatform HISP-NOOBS

This commit is contained in:
Li 2022-07-19 16:40:51 +12:00
parent b3df338715
commit cdc136dcd4
24 changed files with 2140 additions and 668 deletions

View file

@ -7,7 +7,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibHISP", "LibHISP\LibHISP.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HISPd", "HISPd\HISPd.csproj", "{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "N00BS", "N00BS\N00BS.csproj", "{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MPN00BS", "MPN00BS\MPN00BS.csproj", "{72EF95FC-03DB-4E61-A696-E0095DD42A4E}"
ProjectSection(ProjectDependencies) = postProject
{C48CBD82-AB30-494A-8FFA-4DE7069B5827} = {C48CBD82-AB30-494A-8FFA-4DE7069B5827}
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "N00BS", "N00BS\N00BS.csproj", "{C368A652-31D2-42AE-A3F3-D63A51378BC7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -36,6 +41,11 @@ Global
MacOS|ARM64 = MacOS|ARM64
MacOS|x64 = MacOS|x64
MacOS|x86 = MacOS|x86
Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
Windows|Any CPU = Windows|Any CPU
Windows|ARM = Windows|ARM
Windows|ARM64 = Windows|ARM64
@ -92,6 +102,16 @@ Global
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x64.Build.0 = MacOS|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.ActiveCfg = MacOS|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.MacOS|x86.Build.0 = MacOS|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|Any CPU.Build.0 = Windows|Any CPU
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.ActiveCfg = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM.Build.0 = Windows|ARM
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.ActiveCfg = Windows|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|ARM64.Build.0 = Windows|ARM64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x64.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.ActiveCfg = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Release|x86.Build.0 = Windows|x86
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.ActiveCfg = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|Any CPU.Build.0 = Windows|x64
{C48CBD82-AB30-494A-8FFA-4DE7069B5827}.Windows|ARM.ActiveCfg = Windows|ARM
@ -151,6 +171,16 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x64.Build.0 = MacOS|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.ActiveCfg = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.MacOS|x86.Build.0 = MacOS|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.ActiveCfg = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|Any CPU.Build.0 = Windows|Any CPU
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.ActiveCfg = MacOS|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM.Build.0 = MacOS|ARM
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.ActiveCfg = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|ARM64.Build.0 = Windows|ARM64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.ActiveCfg = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.ActiveCfg = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Release|x86.Build.0 = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.ActiveCfg = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|Any CPU.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|ARM.ActiveCfg = Windows|Any CPU
@ -161,44 +191,146 @@ Global
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x64.Build.0 = Windows|x64
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.ActiveCfg = Windows|x86
{DEAD5CB0-C6B6-4B63-B1FB-A9F649CA1D27}.Windows|x86.Build.0 = Windows|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|Any CPU.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x64.ActiveCfg = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Android|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.ActiveCfg = Debug|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x64.Build.0 = Debug|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.ActiveCfg = Debug|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Debug|x86.Build.0 = Debug|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|Any CPU.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|ARM.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|ARM64.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|x64.ActiveCfg = Debug|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.iOS|x86.ActiveCfg = Windows|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|Any CPU.Build.0 = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Linux|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|Any CPU.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x64.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.MacOS|x86.ActiveCfg = Debug|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.ActiveCfg = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|Any CPU.Build.0 = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|ARM64.ActiveCfg = Windows|Any CPU
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.ActiveCfg = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x64.Build.0 = Windows|x64
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.ActiveCfg = Windows|x86
{6B45A1E8-0F54-4BF7-AF48-41B9FE676570}.Windows|x86.Build.0 = Windows|x86
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Android|x86.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Debug|x86.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.iOS|x86.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Linux|x86.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.MacOS|x86.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|Any CPU.Build.0 = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.ActiveCfg = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM.Build.0 = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.ActiveCfg = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|ARM64.Build.0 = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.ActiveCfg = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x64.Build.0 = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.ActiveCfg = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Release|x86.Build.0 = Release|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|Any CPU.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|ARM64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x64.Build.0 = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.ActiveCfg = Debug|Any CPU
{72EF95FC-03DB-4E61-A696-E0095DD42A4E}.Windows|x86.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Android|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Debug|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.iOS|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Linux|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.MacOS|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|Any CPU.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|ARM.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|ARM.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|ARM64.ActiveCfg = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|ARM64.Build.0 = Debug|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|x64.ActiveCfg = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|x64.Build.0 = Debug|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|x86.ActiveCfg = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Release|x86.Build.0 = Debug|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|Any CPU.ActiveCfg = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|Any CPU.Build.0 = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|ARM.ActiveCfg = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|ARM.Build.0 = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|ARM64.ActiveCfg = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|ARM64.Build.0 = Windows|Any CPU
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|x64.ActiveCfg = Windows|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|x64.Build.0 = Windows|x64
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|x86.ActiveCfg = Windows|x86
{C368A652-31D2-42AE-A3F3-D63A51378BC7}.Windows|x86.Build.0 = Windows|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View file

@ -1,5 +1,5 @@
Package: hisp
Version: 1.7.99
Version: 1.7.100
Depends: coreutils,systemd,mariadb-server,libsqlite3-dev,zlib1g-dev,libicu-dev,libkrb5-dev
Maintainer: Li
Homepage: https://islehorse.com

View file

@ -30,5 +30,5 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.7.99.0")]
[assembly: AssemblyFileVersion("1.7.99.0")]
[assembly: AssemblyVersion("1.7.100.0")]
[assembly: AssemblyFileVersion("1.7.100.0")]

View file

@ -8,8 +8,6 @@ using HISP.Security;
using System;
using System.Diagnostics;
using System.Threading;
using System.IO;
namespace HISP.Server
{

File diff suppressed because it is too large Load diff

454
HorseIsleServer/MPN00BS/.gitignore vendored Normal file
View file

@ -0,0 +1,454 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# JetBrains Rider
.idea/
*.sln.iml
##
## Visual Studio Code
##
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

View file

@ -0,0 +1,7 @@
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MPN00BS.App">
<Application.Styles>
<FluentTheme Mode="Light"/>
</Application.Styles>
</Application>

View file

@ -0,0 +1,24 @@
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
namespace MPN00BS
{
public partial class App : Application
{
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
}
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
desktop.MainWindow = new MpOrSp();
}
base.OnFrameworkInitializationCompleted();
}
}
}

View file

@ -0,0 +1,296 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace HTTP
{
class ContentItem
{
public String name;
public String filePath;
public ContentItem(string Name,string FilePath)
{
if(File.Exists(FilePath))
{
filePath = FilePath;
name = Name;
}
else
{
throw new FileNotFoundException();
}
}
}
class ContentClient
{
public ContentClient(ContentServer Server, Socket ClientSocket)
{
clientSock = ClientSocket;
baseServ = Server;
baseServ.WriteDebugOutput("Client Connected @ " + clientSock.RemoteEndPoint.ToString());
ProcessRequests();
clientSock.Close();
}
private ContentServer baseServ;
private Socket clientSock;
private byte[] ReadData()
{
while (clientSock.Available < 1) { }
byte[] by = new byte[clientSock.Available];
clientSock.Receive(by);
return by;
}
private void SendString(string str)
{
byte[] response = Encoding.UTF8.GetBytes(str);
clientSock.Send(response);
}
private string GenerateHeaders(string path, long content_length = 0)
{
string headers = "";
if (path == "/")
{
headers += "HTTP/1.1 200 OK\r\n";
headers += "Content-Type: text/html\r\n";
headers += "Accept-Ranges: bytes\r\n";
headers += "Server: ContentServer\r\n";
headers += "Content-Length: " + content_length + "\r\n";
headers += "Cache-Control: max-age=0\r\n";
headers += "Connection: keep-alive\r\n";
headers += "\r\n";
}
else if (File.Exists(path))
{
FileInfo info = new FileInfo(path);
long length = info.Length;
if (content_length != 0)
length = content_length;
headers += "HTTP/1.1 200 OK\r\n";
headers += "Content-Type: application/x-shockwave-flash\r\n";
headers += "Accept-Ranges: bytes\r\n";
headers += "Server: ContentServer\r\n";
headers += "Content-Length: " + length + "\r\n";
headers += "Cache-Control: max-age=0\r\n";
headers += "Connection: keep-alive\r\n";
headers += "\r\n";
}
else
{
headers += "HTTP/1.1 404 Not Found\r\n";
headers += "Content-Type: text/plain\r\n";
headers += "Accept-Ranges: bytes\r\n";
headers += "Server: ContentServer\r\n";
headers += "Content-Length: " + content_length + "\r\n";
headers += "Cache-Control: max-age=3600\r\n";
headers += "Connection: keep-alive\r\n";
headers += "\r\n";
}
return headers;
}
private void RespondGet(string name)
{
baseServ.WriteDebugOutput("GET " + name);
if (ContentItemExists(name))
{
ContentItem ci = GetContentItem(name);
FileStream fs = File.OpenRead(ci.filePath);
try
{
string requestStr = GenerateHeaders(ci.filePath, fs.Length - fs.Position);
SendString(requestStr);
while(fs.Position < fs.Length)
{
int BUFFER_SIZE = 0x8500000;
if(fs.Position + BUFFER_SIZE <= fs.Length)
{
byte[] buffer = new byte[BUFFER_SIZE];
fs.Read(buffer, 0x00, BUFFER_SIZE);
clientSock.Send(buffer);
}
else
{
byte[] buffer = new byte[fs.Length - fs.Position];
fs.Read(buffer, 0x00, buffer.Length);
clientSock.Send(buffer);
}
}
}
catch (Exception) {
fs.Close();
};
}
else
{
string body = GeneratePage(name);
string requestStr = GenerateHeaders(name, body.Length);
requestStr += body;
SendString(requestStr);
}
}
private void RespondHead(string path)
{
string name = Path.GetFileName(path);
baseServ.WriteDebugOutput("HEAD " + path);
if (ContentItemExists(name))
{
ContentItem ci = GetContentItem(name);
string requestStr = GenerateHeaders(ci.filePath);
SendString(requestStr);
}
else
{
string body = GeneratePage(path);
string requestStr = GenerateHeaders(path, body.Length);
SendString(requestStr);
}
}
private bool ContentItemExists(string name)
{
bool exists = false;
foreach (ContentItem ci in baseServ.Contents)
{
if (ci.name == name)
{
exists = true;
}
}
return exists;
}
private ContentItem GetContentItem(string name)
{
foreach (ContentItem ci in baseServ.Contents)
{
if (ci.name == name)
{
return ci;
}
}
throw new FileNotFoundException();
}
private string GeneratePage(string path)
{
if (path == "/")
{
string body = "Horse Isle Web Server..<br>Fork of SilicaAndPina's \"Content Server\"";
return body;
}
else
{
string body = "File not found.";
return body;
}
}
private string ExtractPath(string relativeUri)
{
int questionIndex = relativeUri.IndexOf("?");
if (questionIndex != -1)
return relativeUri.Substring(0, questionIndex);
else
return relativeUri;
}
private string ExtractRelativeUrl(string header)
{
return header.Split(' ')[1];
}
private void ProcessRequests()
{
byte[] data = ReadData();
// Parse Request
string curReq = Encoding.UTF8.GetString(data);
curReq = curReq.Replace("\r\n", "\n");
string[] reqLines = curReq.Split('\n');
foreach (string line in reqLines)
{
if (line.StartsWith("GET"))
{
string relUrl = ExtractRelativeUrl(line);
string path = ExtractPath(relUrl);
//Dictionary<string,string> query = ExtractQuery(relUrl);
RespondGet(path);
return;
}
else if (line.StartsWith("HEAD"))
{
string relUrl = ExtractRelativeUrl(line);
string path = ExtractPath(relUrl);
RespondHead(path);
return;
}
}
}
}
class ContentServer
{
public List<ContentItem> Contents = new List<ContentItem>();
public Socket ServerSocket;
public void WriteDebugOutput(string txt)
{
Console.WriteLine("[HTTP] " + txt);
}
public void CreateClient(object sender, SocketAsyncEventArgs e)
{
do
{
Socket eSocket = e.AcceptSocket;
if (eSocket != null)
new ContentClient(this, eSocket);
e.AcceptSocket = null;
} while (!ServerSocket.AcceptAsync(e));
}
public ContentServer(string ip)
{
WriteDebugOutput("Listening for connections on port 80.");
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip), 80);
ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
ServerSocket.Bind(ep);
ServerSocket.Listen(0x7fffffff);
SocketAsyncEventArgs e = new SocketAsyncEventArgs();
e.Completed += CreateClient;
CreateClient(this, e);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1,19 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="820" d:DesignHeight="200"
x:Class="MPN00BS.LoadingWindow"
Title="Starting Server ..." Height="200" Width="820"
MaxHeight="200" MaxWidth="820">
<Grid Height="200" Width="820">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<Image Name="hispLogo" HorizontalAlignment="Left" Height="128" Margin="20,0,0,0" VerticalAlignment="Center" Width="128" Source="/HispLogo.gif" Grid.Column="0"/>
<Label Name="startingServer" Content="Starting Server ..." HorizontalAlignment="Left" Margin="20,52,0,0" VerticalAlignment="Top" Grid.Column="1" />
<ProgressBar Name="startupProgress" HorizontalAlignment="Left" Maximum="18" Height="27" Margin="20,83,0,0" VerticalAlignment="Top" Width="637" Grid.Column="1"/>
</Grid>
</Window>

View file

@ -0,0 +1,49 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.Threading;
using System.Threading.Tasks;
namespace MPN00BS
{
public partial class LoadingWindow : Window
{
private void OnClientExit()
{
Dispatcher.UIThread.InvokeAsync(() =>
{
this.Close();
});
}
public void ProgressUpdate()
{
Dispatcher.UIThread.InvokeAsync(() =>
{
startupProgress.Value++;
if (startupProgress.Value >= startupProgress.Maximum)
{
this.Hide();
ServerStarter.StartHorseIsleClient(OnClientExit, "127.0.0.1", 12321);
}
});
}
public LoadingWindow()
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
ServerStarter.StartHttpServer();
new Task( () => ServerStarter.StartHispServer(ProgressUpdate) ).Start();
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
startupProgress = this.FindControl<ProgressBar>("startupProgress");
}
}
}

View file

@ -0,0 +1,92 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<!--Avalonia doesen't support TrimMode=link currently,but we are working on that https://github.com/AvaloniaUI/Avalonia/issues/6892 -->
<TrimMode>copyused</TrimMode>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
</PropertyGroup>
<ItemGroup>
<None Remove=".gitignore" />
<None Remove="HispLogo.gif" />
</ItemGroup>
<ItemGroup>
<!--This helps with theme dll-s trimming.
If you will publish your application in self-contained mode with p:PublishTrimmed=true and it will use Fluent theme Default theme will be trimmed from the output and vice versa.
https://github.com/AvaloniaUI/Avalonia/issues/5593 -->
<TrimmableAssembly Include="Avalonia.Themes.Fluent" />
<TrimmableAssembly Include="Avalonia.Themes.Default" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Avalonia" Version="0.10.14" />
<PackageReference Include="Avalonia.Desktop" Version="0.10.14" />
<!--Condition below is needed to remove Avalonia.Diagnostics package from build output in Release configuration.-->
<PackageReference Condition="'$(Configuration)' == 'Debug'" Include="Avalonia.Diagnostics" Version="0.10.14" />
<PackageReference Include="XamlNameReferenceGenerator" Version="1.3.4" />
</ItemGroup>
<ItemGroup>
<Compile Update="MpOrSp.axaml.cs">
<DependentUpon>MpOrSp.axaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\*.swf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\map750.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\map750.png</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\mod\*.swf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\mod\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\tack\*.swf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\tack\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\breed\*.swf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\breed\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<ContentWithTargetPath Include="..\..\HorseIsleWeb\game-site\resource\*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>client\resource\%(Filename)%(Extension)</TargetPath>
</ContentWithTargetPath>
</ItemGroup>
<ItemGroup>
<AvaloniaResource Include="HispLogo.gif">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</AvaloniaResource>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LibHISP\LibHISP.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="flash.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View file

@ -0,0 +1,17 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="MPN00BS.MessageBox" SizeToContent="WidthAndHeight" CanResize="False">
<StackPanel HorizontalAlignment="Center">
<TextBlock HorizontalAlignment="Center" Name="Text"/>
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal" Name="Buttons">
<StackPanel.Styles>
<Style Selector="Button">
<Setter Property="Margin" Value="5"/>
</Style>
</StackPanel.Styles>
</StackPanel>
</StackPanel>
</Window>

View file

@ -0,0 +1,76 @@
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace MPN00BS
{
public partial class MessageBox : Window
{
public enum MessageBoxButtons
{
Ok,
OkCancel,
YesNo,
YesNoCancel
}
public enum MessageBoxResult
{
Ok,
Cancel,
Yes,
No
}
public MessageBox()
{
AvaloniaXamlLoader.Load(this);
}
public static Task<MessageBoxResult> Show(Window parent, string text, string title, MessageBoxButtons buttons)
{
var msgbox = new MessageBox()
{
Title = title
};
msgbox.FindControl<TextBlock>("Text").Text = text;
var buttonPanel = msgbox.FindControl<StackPanel>("Buttons");
var res = MessageBoxResult.Ok;
void AddButton(string caption, MessageBoxResult r, bool def = false)
{
var btn = new Button { Content = caption };
btn.Click += (_, __) => {
res = r;
msgbox.Close();
};
buttonPanel.Children.Add(btn);
if (def)
res = r;
}
if (buttons == MessageBoxButtons.Ok || buttons == MessageBoxButtons.OkCancel)
AddButton("Ok", MessageBoxResult.Ok, true);
if (buttons == MessageBoxButtons.YesNo || buttons == MessageBoxButtons.YesNoCancel)
{
AddButton("Yes", MessageBoxResult.Yes);
AddButton("No", MessageBoxResult.No, true);
}
if (buttons == MessageBoxButtons.OkCancel || buttons == MessageBoxButtons.YesNoCancel)
AddButton("Cancel", MessageBoxResult.Cancel, true);
var tcs = new TaskCompletionSource<MessageBoxResult>();
msgbox.Closed += delegate { tcs.TrySetResult(res); };
if (parent != null)
msgbox.ShowDialog(parent);
else msgbox.Show();
return tcs.Task;
}
}
}

View file

@ -0,0 +1,21 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="550" d:DesignHeight="90"
x:Class="MPN00BS.MpOrSp"
Title="Select Mode"
Height="90"
Width="550"
MaxWidth="550"
MaxHeight="90">
<Grid Height="70" Width="550" HorizontalAlignment="Center" VerticalAlignment="Center" >
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Button Name="playSingleplayer" Content="Play Singleplayer" HorizontalAlignment="Center" VerticalAlignment="Center" Width="515" Click="playSingleplayer_Click" Grid.Row="0"/>
<Button Name="playMultiplayer" Content="Play Multiplayer" HorizontalAlignment="Center" VerticalAlignment="Center" Width="515" Click="playMultiplayer_Click" Grid.Row="1"/>
</Grid>
</Window>

View file

@ -0,0 +1,29 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
namespace MPN00BS
{
public partial class MpOrSp : Window
{
public MpOrSp()
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
}
private void playSingleplayer_Click(object sender, RoutedEventArgs e)
{
new LoadingWindow().Show();
this.Close();
}
private void playMultiplayer_Click(object sender, RoutedEventArgs e)
{
new ServerSelection().Show();
this.Close();
}
}
}

View file

@ -0,0 +1,23 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using System;
namespace MPN00BS
{
internal class Program
{
// Initialization code. Don't use any Avalonia, third-party APIs or any
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
// yet and stuff might break.
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
// Avalonia configuration, don't remove; also used by visual designer.
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace();
}
}

View file

@ -0,0 +1,23 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="780" d:DesignHeight="100"
x:Class="MPN00BS.ServerSelection"
Title="Server Selection"
Height="100"
Width="780"
MaxWidth="780"
MaxHeight="100">
<Grid Height="100" Width="780">
<Grid.RowDefinitions>
<RowDefinition Height="1*" />
<RowDefinition Height="1*" />
</Grid.RowDefinitions>
<Label Name="serverIpLabel" Content="Server IP:" HorizontalAlignment="Left" Margin="20,20,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.707,2.242" Grid.Row="0"/>
<TextBox Name="serverIp" HorizontalAlignment="Left" Margin="90,15,0,0" TextWrapping="Wrap" Text="game.islehorse.com" VerticalAlignment="Top" Width="440" Grid.Row="0"/>
<Label Name="serverPortLabel" Content="Server PORT:" HorizontalAlignment="Left" Margin="535,20,0,0" VerticalAlignment="Top"/>
<NumericUpDown Name="serverPort" HorizontalAlignment="Left" Margin="630,15,0,0" Value="12321" Minimum="0" Maximum="65535" VerticalAlignment="Top" Width="130"/>
<Button Name="joinServer" Content="Join Server" HorizontalAlignment="Left" Margin="20,0,0,0" Grid.Row="1" VerticalAlignment="Center" Width="740" Click="joinServer_Click" />
</Grid>
</Window>

View file

@ -0,0 +1,37 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using System;
namespace MPN00BS
{
public partial class ServerSelection : Window
{
public ServerSelection()
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
serverIp = this.FindControl<TextBox>("serverIp");
serverPort = this.FindControl<NumericUpDown>("serverPort");
}
private void joinServer_Click(object sender, RoutedEventArgs e)
{
this.Hide();
ServerStarter.StartHttpServer();
ServerStarter.StartHorseIsleClient(OnClientExit, serverIp.Text, Convert.ToInt32(serverPort.Value));
}
private void OnClientExit()
{
this.Close();
}
}
}

View file

@ -0,0 +1,180 @@
using HISP.Game.Chat;
using HISP.Game.Horse;
using HISP.Game.Items;
using HISP.Game.Services;
using HISP.Game.SwfModules;
using HISP.Game;
using HISP.Security;
using HISP.Server;
using HTTP;
using System;
using System.Diagnostics;
using System.IO;
using static MPN00BS.MessageBox;
using System.Threading.Tasks;
namespace MPN00BS
{
public class ServerStarter
{
private static Action HorseIsleClientExitCallback;
public static string BaseDir = "";
private static ContentServer cs = null;
private static void addToList(string path)
{
string Name = path.Remove(0, Path.Combine(Directory.GetCurrentDirectory(), "client").Length);
Name = Name.Replace("\\", "/");
ContentItem ci = new ContentItem(Name, path);
cs.Contents.Add(ci);
}
public static void OnShutdown()
{
if (!Process.GetCurrentProcess().CloseMainWindow())
Process.GetCurrentProcess().Close();
}
public static void ShowCrash(bool error, string type, string text)
{
if (type == "CRASH")
MessageBox.Show(null, text, type, MessageBoxButtons.Ok);
}
private static void HorseIsleClientExited(object? sender, EventArgs e)
{
HorseIsleClientExitCallback();
}
public static void StartHorseIsleClient(Action callback, string serverIp, int serverPort)
{
HorseIsleClientExitCallback = callback;
Process clientProcess = new Process();
clientProcess.StartInfo.FileName = "flash.dll";
clientProcess.StartInfo.Arguments = "http://127.0.0.1/horseisle.swf?SERVER=" + serverIp + "&PORT=" + serverPort.ToString();
clientProcess.StartInfo.RedirectStandardOutput = true;
clientProcess.StartInfo.RedirectStandardError = true;
clientProcess.EnableRaisingEvents = true;
clientProcess.Exited += HorseIsleClientExited;
clientProcess.Start();
clientProcess.WaitForExit();
}
public static void StartHispServer(Action ProgressCallback)
{
Entry.RegisterCrashHandler();
Logger.SetCallback(ShowCrash);
ConfigReader.ConfigurationFileName = Path.Combine(BaseDir, "server.properties");
ConfigReader.OpenConfig();
ConfigReader.SqlLite = true;
ConfigReader.LogLevel = 0;
ConfigReader.CrossDomainPolicyFile = Path.Combine(BaseDir, "CrossDomainPolicy.xml");
// Compatibility patch
if (File.Exists(Path.Combine(BaseDir, "game1.db.db")))
{
File.Move(Path.Combine(BaseDir, "game1.db.db"), Path.Combine(BaseDir, "game1.db"));
}
ConfigReader.DatabaseName = Path.Combine(BaseDir, "game1");
ProgressCallback();
Database.OpenDatabase();
ProgressCallback();
if (Database.GetUsers().Length <= 0)
{
// RegisterForm rfrm = new RegisterForm();
// if (rfrm.ShowDialog() == DialogResult.Cancel)
// GameServer.ShutdownServer();
}
// Start HI1 Server
ProgressCallback();
Entry.SetShutdownCallback(OnShutdown);
ProgressCallback();
CrossDomainPolicy.GetPolicy();
ProgressCallback();
GameDataJson.ReadGamedata();
ProgressCallback();
Map.OpenMap();
ProgressCallback();
World.ReadWorldData();
ProgressCallback();
Treasure.Init();
ProgressCallback();
DroppedItems.Init();
ProgressCallback();
WildHorse.Init();
ProgressCallback();
Drawingroom.LoadAllDrawingRooms();
ProgressCallback();
Brickpoet.LoadPoetryRooms();
ProgressCallback();
Multiroom.CreateMultirooms();
ProgressCallback();
Auction.LoadAllAuctionRooms();
ProgressCallback();
Command.RegisterCommands();
ProgressCallback();
Item.DoSpecialCases();
ProgressCallback();
try
{
GameServer.StartServer();
}
catch (Exception e)
{
MessageBox.Show(null, "Horse Isle server failed to start: " + e.Message, "Error starting hi1 server", MessageBoxButtons.Ok);
return;
}
ProgressCallback();
}
public static void StartHttpServer()
{
string? hispFolder = Environment.GetEnvironmentVariable("APPDATA");
if (hispFolder == null)
return;
BaseDir = Path.Combine(hispFolder, "HISP", "N00BS");
Directory.CreateDirectory(BaseDir);
try
{
cs = new ContentServer("127.0.0.1");
string[] fileList = Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "client"), "*", SearchOption.AllDirectories);
foreach (string file in fileList)
addToList(file);
}
catch (Exception e)
{
MessageBox.Show(null, "Web server failed to start: " + e.Message, "Error starting web server", MessageBoxButtons.Ok);
return;
}
}
}
}

Binary file not shown.

View file

@ -21,7 +21,6 @@ namespace HISP.Noobs
{
public static class Program
{
public static Random rand = new Random(Guid.NewGuid().GetHashCode());
private static LoadingForm lfrm;
public static string BaseDir;
private static ContentServer cs;
@ -63,10 +62,6 @@ namespace HISP.Noobs
lfrm.StartProgress.Increment(1);
}
}
public static string GetOctlet()
{
return rand.Next(0, 255).ToString();
}
public static void ShowCrash(bool error, string type, string text)
{

View file

@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.7.99.0")]
[assembly: AssemblyFileVersion("1.7.99.0")]
[assembly: AssemblyVersion("1.7.100.0")]
[assembly: AssemblyFileVersion("1.7.100.0")]