44using System ;
55using System . Collections . Generic ;
66using System . IO ;
7+ using System . Reflection ;
78using System . Text ;
89using System . Threading ;
910using System . Threading . Tasks ;
@@ -14,8 +15,16 @@ internal readonly struct UpdatePayload
1415 {
1516 private static readonly byte Version = 1 ;
1617
17- public IReadOnlyList < UpdateDelta > Deltas { get ; init ; }
18+ public IReadOnlyList < UpdateDelta > Deltas { get ; }
1819
20+ public UpdatePayload ( IReadOnlyList < UpdateDelta > deltas )
21+ {
22+ Deltas = deltas ;
23+ }
24+
25+ /// <summary>
26+ /// Called by the dotnet-watch.
27+ /// </summary>
1928 public async ValueTask WriteAsync ( Stream stream , CancellationToken cancellationToken )
2029 {
2130 await using var binaryWriter = new BinaryWriter ( stream , Encoding . UTF8 , leaveOpen : true ) ;
@@ -54,6 +63,9 @@ static void WriteIntArray(BinaryWriter binaryWriter, int[] values)
5463 }
5564 }
5665
66+ /// <summary>
67+ /// Called by delta applier.
68+ /// </summary>
5769 public static async ValueTask < UpdatePayload > ReadAsync ( Stream stream , CancellationToken cancellationToken )
5870 {
5971 using var binaryReader = new BinaryReader ( stream , Encoding . UTF8 , leaveOpen : true ) ;
@@ -68,21 +80,15 @@ public static async ValueTask<UpdatePayload> ReadAsync(Stream stream, Cancellati
6880 var deltas = new UpdateDelta [ count ] ;
6981 for ( var i = 0 ; i < count ; i ++ )
7082 {
71- var delta = new UpdateDelta
72- {
73- ModuleId = Guid . Parse ( binaryReader . ReadString ( ) ) ,
74- MetadataDelta = await ReadBytesAsync ( binaryReader , cancellationToken ) ,
75- ILDelta = await ReadBytesAsync ( binaryReader , cancellationToken ) ,
76- UpdatedTypes = ReadIntArray ( binaryReader ) ,
77- } ;
83+ var moduleId = Guid . Parse ( binaryReader . ReadString ( ) ) ;
84+ var metadataDelta = await ReadBytesAsync ( binaryReader , cancellationToken ) ;
85+ var ilDelta = await ReadBytesAsync ( binaryReader , cancellationToken ) ;
86+ var updatedTypes = ReadIntArray ( binaryReader ) ;
7887
79- deltas [ i ] = delta ;
88+ deltas [ i ] = new UpdateDelta ( moduleId , metadataDelta : metadataDelta , ilDelta : ilDelta , updatedTypes ) ;
8089 }
8190
82- return new UpdatePayload
83- {
84- Deltas = deltas ,
85- } ;
91+ return new UpdatePayload ( deltas ) ;
8692
8793 static async ValueTask < byte [ ] > ReadBytesAsync ( BinaryReader binaryReader , CancellationToken cancellationToken )
8894 {
@@ -121,10 +127,18 @@ static int[] ReadIntArray(BinaryReader binaryReader)
121127
122128 internal readonly struct UpdateDelta
123129 {
124- public Guid ModuleId { get ; init ; }
125- public byte [ ] MetadataDelta { get ; init ; }
126- public byte [ ] ILDelta { get ; init ; }
127- public int [ ] UpdatedTypes { get ; init ; }
130+ public Guid ModuleId { get ; }
131+ public byte [ ] MetadataDelta { get ; }
132+ public byte [ ] ILDelta { get ; }
133+ public int [ ] UpdatedTypes { get ; }
134+
135+ public UpdateDelta ( Guid moduleId , byte [ ] metadataDelta , byte [ ] ilDelta , int [ ] updatedTypes )
136+ {
137+ ModuleId = moduleId ;
138+ MetadataDelta = metadataDelta ;
139+ ILDelta = ilDelta ;
140+ UpdatedTypes = updatedTypes ;
141+ }
128142 }
129143
130144 internal enum ApplyResult
@@ -137,8 +151,16 @@ internal readonly struct ClientInitializationPayload
137151 {
138152 private const byte Version = 0 ;
139153
140- public string Capabilities { get ; init ; }
154+ public string Capabilities { get ; }
155+
156+ public ClientInitializationPayload ( string capabilities )
157+ {
158+ Capabilities = capabilities ;
159+ }
141160
161+ /// <summary>
162+ /// Called by delta applier.
163+ /// </summary>
142164 public void Write ( Stream stream )
143165 {
144166 using var binaryWriter = new BinaryWriter ( stream , Encoding . UTF8 , leaveOpen : true ) ;
@@ -147,6 +169,9 @@ public void Write(Stream stream)
147169 binaryWriter . Flush ( ) ;
148170 }
149171
172+ /// <summary>
173+ /// Called by dotnet-watch.
174+ /// </summary>
150175 public static ClientInitializationPayload Read ( Stream stream )
151176 {
152177 using var binaryReader = new BinaryReader ( stream , Encoding . UTF8 , leaveOpen : true ) ;
@@ -157,7 +182,7 @@ public static ClientInitializationPayload Read(Stream stream)
157182 }
158183
159184 var capabilities = binaryReader . ReadString ( ) ;
160- return new ClientInitializationPayload { Capabilities = capabilities } ;
185+ return new ClientInitializationPayload ( capabilities ) ;
161186 }
162187 }
163188}
0 commit comments