WinFuture-Forum.de: C# Commandoparser - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

C# Commandoparser Zeilenparser der Serverbefehle auseinander nimmt und prüft


#1 Mitglied ist offline   Tomarr 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 02. Januar 08
  • Reputation: 0

geschrieben 19. November 2014 - 11:06

Hallo zusammen. Ich brauche mal wieder eine Idee.

Und zwar bin ich gerade dabei ein eigenes Serverprojekt zu schreiben. Funktioniert auch toll, sämtliche Fehler werden geloggt stabil alles gut halt.

Nun besteht mein Fenster aus zwei Teilen. Einmal der Logausgabe wie beschrieben und nun wollte ich unten noch eine Textbox einbauen um Befehle oder änderungen an den Server schicken zu können.

Was weiß ich, ein einfaches Kommando währe da /Shutdown
/Shutdown alleine soll dann den Server in 2 Minuten runter fahren (um alle Clients zu warnen)
/shutdown now sofort
/shutdown 10 halt in 10 Minuten usw.

oder

/set port 10000
/set name home_server
/set wasweisich auf was der admin halt so will.

Zuerst bin ich jetzt auf die Idee gekommen die Zeilen entsprechend mit Split zu zerlegen und dann nach und nach mit switch/cases zu hinterfragen was denn dahinter steckt.

Nur mit steigender Anzahl von Befehlen und möglichen Kombinationen switche ich mich da regelrecht irgendwann zu tode. Mal abgesehen von der Fehleranfälligkeit.

Ich müsste irgendeinen weg finden bei dem ich einen Befehl mit seinen möglichen Parametern usw. einfach hinzufügen kann und das system die Prüfung so übernimmt.

Mir schwebt da schon etwas vor, eine Klasse die befehlsbezogen dupliziert werden kann und mit entsprechenden Parametermöglichkeiten und Hilfsbezogenen Texten gefüttert wird. Aber irgendwie habe ich momentan ein Blackout mit der Umsetzung.

Danke schonmal im Voraus.
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 19. November 2014 - 13:41

Ich denk da grad an eine Mischung aus beidem:

1- eine Klasse "Befehl" (virtuell) mit allen grundlegenden Eigenschaften und Methoden
2- eigene Klassen für jeden Befehl als Ableitung von "Befehl", die dann die befehlsspezifischen Eigenschaften und Methoden hinzufügen
3- ein "switch", welches jeweils nur den Befehl selber anguckt und damit dann ein Objekt aus der entsprechenden Klasse instanziiert

Bei der Instanziierung müßten dann die vom Benutzer übergebenen Parameter an den Konstruktor übergeben werden. Der müßte sich dann um die Validierung kümmern.

Fürs Parsing wären reguläre Ausdrücke sicherlich angenehmer als ein banales split(). Damit prüfst Du gleich mit. :)

Alternativ dürfte auch irgendeine Form von externem Schema wie zB XSD helfen. Dann müßtest Du einfach die Kommandozeile in XML parsen und dieses XML dann am XSD-Schema validieren.
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#3 Mitglied ist offline   Tomarr 

  • Gruppe: aktive Mitglieder
  • Beiträge: 25
  • Beigetreten: 02. Januar 08
  • Reputation: 0

geschrieben 19. November 2014 - 13:56

Mit dem regulären Ausdruck habe ich ja bereits gesplitet.

Wenn ich mit nem regulären Ausdruck aber auch gleich die richtige Syntax der Eingabe prüfe werde ich wahrscheinlich zu unflexibel. Weil einige Kommandos bestehen hat aus einem Befehl und einem bis drei optionalen Parametern, mal ist das dritte ne zahl, oder auch das zweite schon. Sicher könnte ich das alles in einem regulären Ausdruck definieren, der würde aber am Ende wahrscheinlich so gut wie jede Eingabe durch lassen. Ich glaube da werde ich mit Überladungen der Methoden eher was.

Aber ansonsten klingt deine Idee gar nicht schlecht. Mal an die Basisklasse ran gehen, mal sehen was draus wird.

Dachte so ein Commandoparser währe eine Standardproblemlösung oder zumindes ganz einfach. Aber neh, irgendwie ist es doch eine Herausforderung.
0

#4 Mitglied ist offline   Decay 

  • Gruppe: aktive Mitglieder
  • Beiträge: 884
  • Beigetreten: 09. Juni 04
  • Reputation: 7
  • Geschlecht:Männlich

geschrieben 20. November 2014 - 10:46

An sich ist RalphS's Idee nicht schlecht, wobei ich das alles defintiv über eine XML realisieren tät.
Beispiel-Thema: Master/Detail-Muster mit hierarchische XML-Daten:
http://msdn.microsof...=vs.110%29.aspx

Hier kannst du eine Liste von Befehlen in der Master-Listbox definieren und die Details spezifisch (in diesem Fall: Params) in einer untergeordneten Listbox darstellen :)

Vorteil hierbei: Ich muss nur die XML anfassen.

Dieser Beitrag wurde von Decay bearbeitet: 20. November 2014 - 18:29

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0