@@ -159,19 +159,61 @@ public EventMeshClient(string url = Constants.DefaultUrl, int port = Constants.D
159159 }
160160 }
161161
162- internal static void EnsureSuccessStatus ( Package packageRequest , Package packageResponse )
162+ public async Task < ICollection < PluginResponse > > GetAllPlugins ( CancellationToken cancellationToken = default ( CancellationToken ) )
163163 {
164- if ( packageResponse . Header . Status != HeaderStatus . SUCCESS )
164+ using ( var udpClient = new UdpClient ( ) )
165165 {
166- throw new RuntimeClientResponseException ( packageResponse . Header . Status , packageResponse . Header . Error ) ;
166+ var writeCtx = new WriteBufferContext ( ) ;
167+ var package = PackageRequestBuilder . GetAllPlugins ( ) ;
168+ package . Serialize ( writeCtx ) ;
169+ var payload = writeCtx . Buffer . ToArray ( ) ;
170+ await udpClient . SendAsync ( payload , payload . Count ( ) , new IPEndPoint ( _ipAddr , _port ) ) . WithCancellation ( cancellationToken ) ;
171+ var resultPayload = await udpClient . ReceiveAsync ( ) . WithCancellation ( cancellationToken ) ;
172+ var readCtx = new ReadBufferContext ( resultPayload . Buffer ) ;
173+ var packageResult = Package . Deserialize ( readCtx ) ;
174+ EnsureSuccessStatus ( package , packageResult ) ;
175+ return ( packageResult as GetAllPluginsResponse ) . Plugins ;
167176 }
177+ }
168178
169- if ( packageRequest . Header . Seq != packageRequest . Header . Seq )
179+ public async Task EnablePlugin ( string pluginName , CancellationToken cancellationToken = default ( CancellationToken ) )
180+ {
181+ using ( var udpClient = new UdpClient ( ) )
170182 {
171- throw new RuntimeClientResponseException ( HeaderStatus . FAIL , Errors . INVALID_SEQ , "the seq in the request doesn't match the seq in the response" ) ;
183+ var writeCtx = new WriteBufferContext ( ) ;
184+ var package = PackageRequestBuilder . EnablePlugin ( pluginName ) ;
185+ package . Serialize ( writeCtx ) ;
186+ var payload = writeCtx . Buffer . ToArray ( ) ;
187+ await udpClient . SendAsync ( payload , payload . Count ( ) , new IPEndPoint ( _ipAddr , _port ) ) . WithCancellation ( cancellationToken ) ;
188+ var resultPayload = await udpClient . ReceiveAsync ( ) . WithCancellation ( cancellationToken ) ;
189+ var readCtx = new ReadBufferContext ( resultPayload . Buffer ) ;
190+ var packageResult = Package . Deserialize ( readCtx ) ;
191+ EnsureSuccessStatus ( package , packageResult ) ;
172192 }
173193 }
174194
195+ public async Task DisablePlugin ( string pluginName , CancellationToken cancellationToken = default ( CancellationToken ) )
196+ {
197+ using ( var udpClient = new UdpClient ( ) )
198+ {
199+ var writeCtx = new WriteBufferContext ( ) ;
200+ var package = PackageRequestBuilder . DisablePlugin ( pluginName ) ;
201+ package . Serialize ( writeCtx ) ;
202+ var payload = writeCtx . Buffer . ToArray ( ) ;
203+ await udpClient . SendAsync ( payload , payload . Count ( ) , new IPEndPoint ( _ipAddr , _port ) ) . WithCancellation ( cancellationToken ) ;
204+ var resultPayload = await udpClient . ReceiveAsync ( ) . WithCancellation ( cancellationToken ) ;
205+ var readCtx = new ReadBufferContext ( resultPayload . Buffer ) ;
206+ var packageResult = Package . Deserialize ( readCtx ) ;
207+ EnsureSuccessStatus ( package , packageResult ) ;
208+ }
209+ }
210+
211+ internal static void EnsureSuccessStatus ( Package packageRequest , Package packageResponse )
212+ {
213+ if ( packageResponse . Header . Status != HeaderStatus . SUCCESS ) throw new RuntimeClientResponseException ( packageResponse . Header . Status , packageResponse . Header . Error ) ;
214+ if ( packageRequest . Header . Seq != packageRequest . Header . Seq ) throw new RuntimeClientResponseException ( HeaderStatus . FAIL , Errors . INVALID_SEQ , "the seq in the request doesn't match the seq in the response" ) ;
215+ }
216+
175217 private async Task < HelloResponse > CreateSession ( string vpn , string clientId , UserAgentPurpose purpose , TimeSpan ? expirationTime = null , bool isInfinite = false , CancellationToken cancellationToken = default ( CancellationToken ) )
176218 {
177219 var userAgent = new UserAgent { ClientId = clientId , Vpn = vpn , Purpose = purpose , Expiration = expirationTime , IsSessionInfinite = isInfinite } ;
0 commit comments