Verarbeitung von IRC Servernachrichten

Martin240

Grünschnabel
Hallo.

Ich arbeite gerade an einem kleinen IRC Clienten und an und für sich ist das auch kein all zu großes Problem, nur bin ich an einer Stelle angekommen an der ich mir denke "das muss doch auch anders gehen". Und zwar geht es um die Servernachrichten, die ich von einem IRC Server geschickt bekomme. Diese haben folgendes Format:

[:<prefix>] <command> <params> <crlf>

wobei prefix entweder der Servername oder ein Nick ist, Command ein 3-stelliger Zahlencode oder ein String beliebiger Länge, Params sind beliebig viele Paramter (wobei der letzte Parameter auch Leerzeichen enthalten darf, er muss dann aber mit vorangehendem : gekennzeichnet werden) und crlf kennzeichnet das ende der Nachricht. Das Prefix ist optional und um es von einem Command unterscheiden zu können hat ein Prefix immer einen Doppelpunkt davor. Alles wird getrennt durch ein Leerzeichen.

Jetzt könnte man im einfachsten Falle natürlich hingehen und hunderte von IF-Abfragen schachteln, aber das ist absolut grässlich. Was ich mir überlegt habe wäre eine TreeMap<String, String> mit den commands als ersten Paramter und einem anderen String als zweiten Paramter, der die Ausgabe beschreibt. Nur wie kann man das am besten machen, da die Parameter ja in beliebiger Anzahl vorkommen können. Sagen wir zum Beispiel es kommt der Reply zum Join, der hat beliebig viele Parameter und sieht so aus "#channel name1 name2 name3 usw". Der Antwortstring könnte dann zum Beispiel so aussehen: "You joined channel $param\nUsers on this channel: $param". Man kann ja einfach die Parameter durchgehen und immer $param durch den Inhalt des nächsten Parameters ersetzen, nur wie mach ich das mit beliebig vielen Parametern? Evtl einen weiteren Parameter $leftover der mit den restlichen Parameter ersetzt wird, wenn noch welche übrig sein sollten?

Was haltet ihr von der Idee oder bin ich vlt komplett auf dem falschen Dampfer und es geht wesentlich einfacher?

Grüße
 
Zurück