/// <summary> /// Überschreiben der GetArtikelInfo-Methode. Diesse Methode kriegt einen ArtikelSuchenMitIdModell-Request und gibt gegebenenfalls den gesuchten Artikel zurück. /// </summary> /// <param name="request"></param> Der Request, welcher vom Client abgesetzt wurde. /// <param name="context"></param> Der Context des ServerCalls /// <returns></returns> public override async Task <ArtikelModell> GetArtikelInfo( ArtikelSuchenMitIdModell request, ServerCallContext context) { ArtikelModell output = new ArtikelModell(); try { if (request.Id == "1") { output.Id = "1"; output.Name = "Stuhl"; output.Anzahl = 10; output.MinBestand = 5; } else if (request.Id == "2") { output.Id = "2"; output.Name = "Tisch"; output.Anzahl = 25; output.MinBestand = 3; } else if (request.Id == "3") { output.Id = "3"; output.Name = "Schrank"; output.Anzahl = 42; output.MinBestand = 12; } else { throw new RpcException(new Status(StatusCode.InvalidArgument, "Ouch!")); } } catch (RpcException e) { Console.WriteLine($"Ein Fehler ist aufgetreten: {e.Message} \nStatusCode: {e.StatusCode}"); output.StatusCode = "404"; } return(await Task.FromResult(output)); }
static async Task Main(string[] args) { // langlebige HTTP2 Verbindung aufbauen var channel = GrpcChannel.ForAddress("https://localhost:5001"); // Client wird angelegt und diesem wird der Channel übergeben var lagerClient = new Lager.LagerClient(channel); // Die ID-Übergabe wird simuliert var artikelRequested = new ArtikelSuchenMitIdModell { Id = "4" }; // Die übergebene ID wird der Methode GetArtikelInfoAsync übergeben, welche die Artikelinfos zurückgibt. var artikel = await lagerClient.GetArtikelInfoAsync(artikelRequested); // Formatierte Ausgabe der Artikelinfos if (artikel.StatusCode != null) { Console.WriteLine($"Es ist ein Fehler aufgetreten StatusCode:{artikel.StatusCode}"); } else { Console.WriteLine($" ID : {artikel.Id} \n Name : {artikel.Name} \n Anzahl : {artikel.Anzahl} \n Ausverkauft : {artikel.IstAusverkauft}"); } Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); // Der Methode TriggerBestellung wird eine valide Anfrage übergeben, welche erfolgreich durchlaufen sollte. var bestellungResponse = await lagerClient.TriggerBestellungAsync(new Bestellung1Artikel { Anzahl = 1, Id = "1" }); if (bestellungResponse.StatusCode == "501") { Console.WriteLine("Der Artikel ist leider ausverkauft!"); } else { Console.WriteLine($"Vielen Dank für deine Bestellung der Gesamtpreis beträgt {bestellungResponse.Preis} Euro"); } Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); // Der Methode TriggerBestellung wird eine invalide Anfrage übergeben, welche zu einem Fehler führt. var bestellungResponse2 = await lagerClient.TriggerBestellungAsync(new Bestellung1Artikel { Anzahl = 1, Id = "4" }); if (bestellungResponse2.StatusCode == "501") { Console.WriteLine("Der Bestand für diesen Artikel ist leider nicht hoch genug!"); } if (bestellungResponse2.StatusCode == "201") { Console.WriteLine($"Vielen Dank für deine Bestellung der Gesamtpreis beträgt {bestellungResponse.Preis} Euro"); } Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); // Es wird eine Anfrage nach allen Artikeln übermittelt using var alleArtikel = lagerClient.GetAlleArtikel(new AlleArtikelAnfrage()); // Der ResponseStream wird mit Hilfe einer Schleife durchgegangen und der jeweilige Artikel wird auf der Konsole freigegeben await foreach (var art in alleArtikel.ResponseStream.ReadAllAsync()) { Console.WriteLine($" ID : {art.Id} \n Name : {art.Name} \n Anzahl : {art.Anzahl} \n Ausverkauft : {art.IstAusverkauft}"); } Console.WriteLine("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------"); // Der Responsestream beim Bidirektionalen Streaming wird hier durchiteriert und nacheinander ausgegeben. using (var call = lagerClient.GetAlleArtikelKollektion()) { var responseReaderTask = Task.Run(async() => { while (await call.ResponseStream.MoveNext()) { var artikelKollektion = call.ResponseStream.Current; Console.WriteLine($" ID : {artikelKollektion.Id} Name : {artikelKollektion.Name} Anzahl : {artikelKollektion.Anzahl} Ausverkauft : {artikelKollektion.IstAusverkauft} Kollektion : {artikelKollektion.Kollektion}"); } }); // Simulation eines Requeststreams in Form von Eingabeaufforderungen Console.WriteLine("Bitte geben sie ihre gewünschte Kollektion ein! Sie können auch mehrere nacheinander eingeben."); for (int i = 0; i < 2; ++i) { String kolString = Console.ReadLine(); await call.RequestStream.WriteAsync(new Kollektion { Kol = kolString }); } await call.RequestStream.CompleteAsync(); await responseReaderTask; } Console.ReadLine(); }