-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
81 lines (66 loc) · 3.64 KB
/
Program.cs
File metadata and controls
81 lines (66 loc) · 3.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using ParserDll.Analyzers;
using ParserDll.Generators;
using ParserDll.Models;
internal static class Program
{
private static readonly DllConfig ClientConfig = new()
{
Path = @"C:\Users\User\.nuget\packages\citizenfx.core.client\1.0.25018\lib\net45\CitizenFX.Core.Client.dll",
OutputName = "Client",
Usings = ["System", "System.Collections.Generic", "CitizenFX.Core", "System.Threading.Tasks", "System.Drawing", "FXBridge.Client", "FXBridge.Nui", "CitizenFX.Core.Native", "CitizenFX.Core.UI"],
NamespacePrefix = "FXBridge.Client"
};
private static readonly DllConfig ServerConfig = new()
{
Path = @"C:\Users\User\.nuget\packages\citizenfx.core.server\1.0.25018\lib\net45\CitizenFX.Core.Server.dll",
OutputName = "Server",
Usings = ["System", "System.Threading.Tasks", "CitizenFX.Core", "CitizenFX.Core.Native"],
NamespacePrefix = "FXBridge.Server"
};
private static void Main()
{
Console.WriteLine("=== FXBridge Generator ===\n");
var allEvents = new List<EventInfo>();
var allDtos = new Dictionary<string, EntityDtoInfo>();
// 1. Генерируем серверную часть
Console.WriteLine("Processing: Server");
var serverAnalyzer = new TypeAnalyzer(ServerConfig.Path);
Console.WriteLine($" Развёртываемых типов: {serverAnalyzer.ExpandableTypes.Count}");
var serverGenerator = new CSharpGenerator(serverAnalyzer, ServerConfig);
serverGenerator.Generate("FXBridge.Server");
allEvents.AddRange(serverGenerator.Events);
// Объединяем DTO из сервера
// foreach (var dto in serverGenerator.GeneratedDtos)
// {
// if (!allDtos.ContainsKey(dto.Key))
// allDtos[dto.Key] = dto.Value;
// }
Console.WriteLine($" Методов: {serverGenerator.ServerMethods.Count}");
Console.WriteLine($" DTO типов: {serverGenerator.GeneratedDtos.Count}\n");
// 2. Генерируем клиентскую часть
Console.WriteLine("Processing: Client");
var clientAnalyzer = new TypeAnalyzer(ClientConfig.Path);
Console.WriteLine($" Развёртываемых типов: {clientAnalyzer.ExpandableTypes.Count}");
var clientGenerator = new CSharpGenerator(clientAnalyzer, ClientConfig);
clientGenerator.Generate("FXBridge.Client");
allEvents.AddRange(clientGenerator.Events);
// Объединяем DTO из клиента
foreach (var dto in clientGenerator.GeneratedDtos)
{
if (!allDtos.ContainsKey(dto.Key))
allDtos[dto.Key] = dto.Value;
}
Console.WriteLine($" Событий: {clientGenerator.Events.Count}");
Console.WriteLine($" DTO типов: {clientGenerator.GeneratedDtos.Count}\n");
// 3. Генерируем клиентские прокси для серверных методов
Console.WriteLine("Generating client proxies for server methods...");
clientGenerator.GenerateClientProxies("FXBridge.Client", serverGenerator.ServerMethods);
Console.WriteLine($" Прокси-классов: {serverGenerator.ServerMethods.GroupBy(m => m.ClassName).Count()}\n");
// 4. Генерируем TypeScript
Console.WriteLine("Generating TypeScript...");
Console.WriteLine($" Всего DTO типов: {allDtos.Count}");
var tsGenerator = new TypeScriptGenerator(allEvents, allDtos, "FXBridge.ts");
tsGenerator.Generate();
Console.WriteLine("\n=== Done ===");
}
}