IRC kommunikáció értelmezése
2005-02-16T01:34:54+01:00
2005-02-17T12:32:57+01:00
2022-07-19T06:43:02+02:00

  • Ezek hossza egyenként nyilván kisebb mint 510 karakter, összességében viszont határ a csillagos ég


    Es? Az kit zavar... azert lettek az irc uzenetek mondatokba szervezve, es koddal ellatva, hogy egyenkent dolgozza fel oket...
    Mutasd a teljes hozzászólást!
  • folytatás:

    case 322: String[] _s = new String[3]; if(!st.hasMoreTokens()) break; st.nextToken(); if(!st.hasMoreTokens()) break; _s[0] = st.nextToken(); if(!st.hasMoreTokens()) break; _s[1] = st.nextToken(); if(!st.hasMoreTokens()) break; st.nextToken(); _s[2] = ""; while(st.hasMoreTokens()) _s[2] += st.nextToken(); //append("$3$$orange$" + _s[0] + ", " + _s[1] + ", " + _s[2]); //cout(); master.eloszoba.addRoom(_s); // while(st.hasMoreTokens()) cout("322 " + st.nextToken()); break; case 324: //mode break; case 329: //mode (time) break; case 332: //topic st.nextToken(); master.setRoomTopic(st.nextToken(),s4); break; case 333: //topic (ki írta) //append("topic 1 :" + st.nextToken()); //append("topic 2 :" + st.nextToken()); st.nextToken(); master.receiveRoomMessage(st.nextToken(),"","A szoba témáját " + st.nextToken() + " írta. " + st.nextToken(),6); //if(st.hasMoreElements()) // append("topic 3 :" + st.nextToken()); //master.setRoomTopic(st.nextToken()); break; case 352: //globáljúzerlista //:irc.n-force.hu 352 asd #n-force2 none n-force-73A1A45.adsl.pool.eol.hu irc.n-force.hu asd G :0 dIRC //who * st.nextToken(); st.nextToken(); st.nextToken(); st.nextToken(); st.nextToken(); master.globalusers.addElement(new User(st.nextToken(),"!")); break; //:irc.n-force.hu 353 Architect = #N-Force :Architect case 353: //júzerlista st.nextToken(); st.nextToken(); String _s1 = st.nextToken(); st.nextToken(); master.truncateUserList(_s1); while(st.hasMoreTokens()) { //cout(">>>>>" + _s1 + ", " + st.nextToken()); master.addUser(_s1,st.nextToken()); } master.addUser(_s1,nick()); break; case 366: //end of juzerlista break; case 372: //case 376: append(s4); break; case 378: st.nextToken(); master.append(st.nextToken() + " csatlakozik a " + s4.substring(19) + "-ról."); break; case 401: master.append("Nincs ilyen felhasználó a chaten."); break; case 421: append("$red$Ismeretlen parancs."); break; case 433: append("$red$Ez a név már használatban van. (" + nick() +")"); new ChatPopup("Belépés","Ez a név már használatban van. (" + nick() + ") Válassz másikat!",2); connected = false; break; case 451: append("$orange$Ez a név még nincs regisztrálva. (" + nick() +")"); new ChatPopup("Belépés","A neved még nincs regisztrálva, tedd meg minél hamarabb, hogy más ne tudja használni!",0); //list(); break; case 471: new ChatPopup("Belépés","Nem léphetsz be a szobába! (l)",2); break; case 474: new ChatPopup("Belépés","Nem léphetsz be a szobába, mert kitiltottak.",2); break; } return; } catch(Exception e) { if(s2.equals("PRIVMSG")) { String _s = st.nextToken(); //String _s1 = s3.substring(0,s3.indexOf('!')).toLowerCase(); if(_s.equals(nick())) { if(Settings.rejectPrivate) { for(int i = 0; i < rejectedUsers.size(); i++) { if(((String)rejectedUsers.elementAt(i)).equals(s3.substring(0,s3.indexOf('!')))) { if(Settings.rejectPrivateWarnRoom) master.receiveRoomMessage("","",s3.substring(0,s3.indexOf('!')) + " keresett privátban.",6); if(Settings.rejectPrivateWarnPrivate) master.receivePriviMessage("!pri
    Mutasd a teljes hozzászólást!
  • nem akadtam el sehol.
    én annak örülnék, ha vki leírná hogy ő hogy építette fel a kommunikáció beolvasását.

    ez most kódrészlet lesz, ha vkinek nem érthető akkor leírom mi, mit csinál... (persze nem mindent )
    ez elég ronda lett, nagyon sürgetett az idő ezért ilyen összevissza...

    public void processData(String s) { //cout("RECV| " + s); if(s.startsWith("ERROR")) { append("$red$$1$" + s); return; } if(s.startsWith(":")) { StringTokenizer st = new StringTokenizer(s.substring(1)," "); String s1 = st.nextToken(); //pl. nforce.hu... (+:) StringTokenizer st1 = new StringTokenizer(s,":"); String s3 = ""; if(st1.hasMoreTokens()) s3 = st1.nextToken(); //a : közti rész : String s4 = ""; if(s.length() > 1) { s4 = s.substring(1); // a 2 : utáni rész if(s4.indexOf(":") > -1) { s4 = s4.substring(s4.indexOf(":")); if(s4.length() > 0) s4 = s4.substring(1); } } //while(st1.hasMoreTokens()) // s4 += st1.nextToken(); //cout("s4: " +s4); //cout("s4: " +s4); //cout("==="); if(st.hasMoreTokens()) { String s2 = st.nextToken(); try { int cmd = Integer.parseInt(s2); switch(cmd) { default: //cout("CMD: " + cmd); break; case 1: if(master.getParameter("room") != null && master.getParameter("room").length() > 0) join(master.getParameter("room")); break; case 2: case 3: //case 4: case 5: case 251: case 255: case 265: case 266: case 375: append("$lightGray$$0$" + s4); break; case 376: if(master.passwd.length() > 2) send("ns IDENTIFY " + master.passwd); break; case 252: st.nextToken(); append("$lightGray$$0$" + st.nextToken() + " operator(s) online"); break; case 254: st.nextToken(); append("$lightGray$$0$" + st.nextToken() + " channels formed"); break; case 292: //help //st.nextToken(); append("$3$" + s4); break; case 301: st.nextToken(); master.append(st.nextToken() + " állapota: nem vagyok itt. (" + s4 + ")"); //cout("1"); break; case 307: st.nextToken(); master.append(st.nextToken() + " regisztrált név."); break; case 311: st.nextToken(); master.append(st.nextToken() + " hostja: " + st.nextToken() + "@" + st.nextToken() + " * " + s4); break; case 315: if(master.state != 4) master.balpanel.setUserList(master.globalusers); break; case 317: st.nextToken(); break; case 318: // end of /whois st.nextToken(); break; case 319: st.nextToken(); String _szobak = st.nextToken() + " a következő szobákban tartózkodik: $1$"; while(st.hasMoreTokens()) _szobak += st.nextToken() + " "; master.append(_szobak); break; case 321: master.eloszoba.removeAll(); break;
    Mutasd a teljes hozzászólást!
  • Nem értem mit kell hozzárakni a végéhez.
    A list kimenete kb így néz ki:

    :server.hu 322 nick #csati 12 topic [crlf]
    ujsor u.e kb.
    minden sor végén van egy crlf
    Mi tud itt eltolódni?


    Mutasd a teljes hozzászólást!
  • Van 510 karakteres korlát, de Lacasrac problémájának ehhez nincs köze. A list parancsra a válasz nem egy, hanem annyi üzenetet eredményez, amennyi csati van. Ezek hossza egyenként nyilván kisebb mint 510 karakter, összességében viszont határ a csillagos ég. Az 510 karakteres korlát sem úgy műkodik (legalábbis unrealircd alatt) hogy a szerver eldobja az ennél hosszabb üzeneteket, hanem csonkolja.
    Mutasd a teljes hozzászólást!
  • 32767, mert .NET-ben van egy Winsock socket-em így "megírva".

    Inkább nem szeretnék bogarászni benne, mert ki tudja...

    Most elméletileg arra az előre megírt SOCKET-re írtam egy IRC klienst.

    Most van ez a saját megoldás, hogy a végét hozzárakja a következő részhez, nah de az meg azért nem lesz jó, mert egy nagyonn (több) list-nél, már minden eltolódik, és így is volt olyan, hogy pl az INFOS-ba nekem (ami a konzol, a szerver adatoknak kéne jönnie)

    szal, hogy ide a list-et követően ilyen kis maradékfoszlányok jelentek meg:

    ircircirc.irc.hu

    Kb ennyi. Valszeg vmit elronthatok...
    Mutasd a teljes hozzászólást!

  • Mivel a bejövő adatoknak van egy max hossza, ez olyan 32767 asszem

    Ez melik oldalon van limitálva? Ha szerver oldalon, akkor nincs teendő


    A sorhossz limitalva van 510 karakter + CRLF-ben. Ennel hosszabb sorokat el kell dobni a rfc szerint, illetve nem is kuldi oket.

    Emiatt gyakorlatilag az is megeshet, hogy te irsz valamit a szervernek ugy, hogy az elejen nem kuldod a useredet, es ez kozel van az 510-hez, akkor elofordulhat, hogy nem fog kimenni senkinek, mert a szerver odateszi az elejere a pszeudo-emailedet (:user@host), es igy hosszabb lesz mint 510 karakter. Ezt utana pedig el kell dobni.

    Szoval az omlesztett sorok onmagaban is szabalytalanok, ha tobb mint 510 karakterre vezetnek.
    Mutasd a teljes hozzászólást!
  • A rfc1459-hez van 4 darab kiegeszites is, 2810-2813. Ezeket szinten erdemes megnezni.

    Na most hogy ettol ne erezd magad jobban, ez sem fed le mindent, a server mode flagek kornyeken teljes a homaly a rfc-ben (a bejelentkezeskor pl. az unreal ircd szerver kozol egy halom flaget... a fele specifikalatlan).

    A kapcsolat elejen (NICK utan) a mirc szinten elkovet hasonlokat, ha jol remlik, hogy a szerver-irok elete se legyen konnyebb...
    Mutasd a teljes hozzászólást!
  • A szerver ugye LIST-re ontja magából az adatokat, 322-vel asszem (listrooms).

    Mivel a bejövő adatoknak van egy max hossza, ez olyan 32767 asszem

    Ez melik oldalon van limitálva? Ha szerver oldalon, akkor nincs teendő, mert a limit elérése után a szerver bontja a kapcsolatot. (Ilenről unrealircd alatt nem tudok, de attól még lehet.)
    Ha a kliens limitálja, akkor az általad felvázolt megoldás jónak tűnik: az utolsó chr(13) vagy chr(10)-zel lezárt sort kell érvényesnek tekinteni. Más kérdés, hogy miért limitálja a kliens a beeső adatfolyamot.
    Mutasd a teljes hozzászólást!
  • Akkor lenne nekem is egy kérdésem már..

    Akkor merült fel, amikor egy bizonyos (irc.atw.hu:6667)-et teszteltem. Ott ugyebár egy csomó csatorna van, és a probléma a következő:

    A szerver ugye LIST-re ontja magából az adatokat, 322-vel asszem (listrooms).

    Mivel a bejövő adatoknak van egy max hossza, ez olyan 32767 asszem.

    Szal a hiba:

    egy csati így néz ki
    ... nick ... #csatorna: topic chr(13)

    Nah ez eddig rendben is van, de mi van akkor hogyha így vágja le:

    ... nick ... #csatorna: befejezetlen topic chr(13) nélkül.

    Itt merült fel az első probléma. Ekkor ezt orvosolni probláltam azzl, hogy megnézem, hogy az utolsó csati stringjében van e Enter. Ha létezik, akkor biztos, hogy befejezett az a sor.
    Ha nincs benne, akkor az utsót berakja egy oldS stringbe, majd később hozzárakja.

    Ez jó megoldás, vagy van normálisabb?
    Mutasd a teljes hozzászólást!
  • A teszteléshez (inkább a szerver teszteléséhez) egy 5let: Betelnetelsz a szeverre, nick, user parancsok kiadása, és megnézed mit lép az egyes parancsokra. A pong-ra figyelni kell:))
    Egyébként valóban sok irc szerver a saját ízlése irányában eltér, ill. bővítette az rfc-t, pl itt is volt szó róla egy másik topikban, a chat.hu értelmezi a privátba be- ill. kilépés üzeneteket, holott ilesmi az rfc-ben nincs. Mértékadónak én az unrealircd-t tekintem, de ez is ízlés dolga.
    Mutasd a teljes hozzászólást!
  • de igen igy teszteltem le, hogy vhol nem e marad vmi nem oda illő dolog :P
    Mutasd a teljes hozzászólást!
  • Hát jah, nem is beszélve arról, hogy van olyan szerver ami eltér az IRC-től megszokottól. Az is gáz...

    "MIRC-el egy üres szobába és a saját félkész irc klienseddel is! aztán irj privátot mircről meg főablakba is, lépj ki lépj be... és a saját kliensedbe amit kiir azt szépen átalakitod h azt kapd amit mircbe irták :D"

    Csak nem te is így tesztelted?:DDDD
    Mutasd a teljes hozzászólást!
  • Az adott RFC-vel az a gond, hogy - ha jol emlxem - a legfrissebb 2000 aprilisi, es az ircd-k reszben elternek tole. Erre jo pelda a ping, ami teljesen mas, mint ahogyan az specifikalva van.
    i386: Nezz korbe a neten, vadasszal nyitott forraskodul irc klienseket, abbol biztosan lehet otleteket meriteni.
    Mutasd a teljes hozzászólást!
  • én rfc alapján csináltam, frankón müködik. Ha nem megy rfc alapján neked akkor csináld azt h lépj fel MIRC-el egy üres szobába és a saját félkész irc klienseddel is! aztán irj privátot mircről meg főablakba is, lépj ki lépj be... és a saját kliensedbe amit kiir azt szépen átalakitod h azt kapd amit mircbe irták :D
    Mutasd a teljes hozzászólást!
  • Én is most írogatok/tam egy ilyet.
    Az RFC-t ajánlom énis a figyelmedbe, na meg a raw number-eket, ez alapján tudod értelmezni a bejövő cuccokat.
    Mutasd a teljes hozzászólást!
  • rfc1459 hol akadtál el?
    Mutasd a teljes hozzászólást!
  • Ha esetleg nem lett volna érthető eléggé a fogalmazásom, azt azzal magyaráznám, hogy álmos és fáradt vagyok. Szóval kérdezzetek, ha valami nem világos!
    Elméletre, nem konkrét kódra lennék kíváncsi.
    Jó éjt!
    Mutasd a teljes hozzászólást!
  • Üdv!

    Írtam egy IRC-klienst, de nem vagyok megelégedve a kommunikáció értelmezésének algoritmusával. Szeretnék tanácsot kérni azoktól, akik már írtak IRC-klienst vagy legalábbis van tapasztalatuk a témában. Hogy nézne ki a legszebben egy IRC-protokol értelmezése? A célom egy érthető, szép kód készítése, és ehhez elengedhetetlen, hogy értelmesen elemezzem a bejövő adatokat. Persze a küldés részével kapcsolatban is várok tanácsokat, de nem azzal van a fő gondom.
    Mutasd a teljes hozzászólást!
Címkék
abcd