Simpler iRC client mit wxWidgets?



  • Hallo,

    Ich versuche ein Simplen client zu erstellen der sich zu "irc.quakenet.org" verbindet, was auch funktioniert... nur komme ich nicht "online".. er sendet alles ohne probleme, aber nichts passiert..

    Grüße

    code:

    void MainDialog::OnSendData(wxCommandEvent & event)
    {
    
        wxString nicks = wxGetTextFromUser(
        _("Enter your nickname:"),
    	_("Nick:"),
        _("nevused"));
    
    	wxString users = wxGetTextFromUser(
        _("Enter your identd:"),
    	_("User:"),
        _("test"));
    
        wxString names = wxGetTextFromUser(
        _("Enter your name:"),
    	_("name:"),
        _("test"));
    
        wxString emails = wxGetTextFromUser(
        _("Enter your e-mail:"),
    	_("Mail:"),
        _("test"));
    
    	wxString send;
    	send.Printf("NICK %s\r\nUSER %s %s %s :%s\r\n", nicks, users, names, emails, names);
    
    	const wxChar *send_data = send.c_str();
    	unsigned char sendlen = (unsigned char) ((wxStrlen(send_data) +1) * sizeof(wxChar));
    
    	appSocket->SetFlags(wxSOCKET_WAITALL);
    
    	appSocket->Write(send_data, sendlen);
    	ShowLog(appSocket->Error() ? _("Nick: Failed") : _("Nick: Worked"));
    
    	ShowLog(send_data);
    
    }
    

  • Mod

    Dann schau dir mal das IRC Protokoll was genauer an.
    Sehe da keinen Fehler in deinem Code von der wx/C++ Seite her.



  • phlox81 schrieb:

    Dann schau dir mal das IRC Protokoll was genauer an.
    Sehe da keinen Fehler in deinem Code von der wx/C++ Seite her.

    Hallo, danke für deine Antwort. Hatte heute ein bisschen zeit und du hattest recht. Das sollte eig so gehen..

    "NICK nickhere"
    Dann empfängt man ein:
    "PING nummer" worauf man mit "PONG nummer" antworten muss, und dann danach "USER ident etc etc: ident"

    Funktioniert immernoch nicht, obwohl es in der selben Reiehnfolge per telnet funktioniert. Das zweite problem ist, dass er mir irgendwelche komischen chars anzeigt, hier 'n auschnitt.

    NOTICE AUTH :*** Looking up your hostname
    ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ // wtf?

    NOTICE AUTH :*** No ident response
    ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ // wtf?

    Code dafür:

    void MainDialog::OnReceiveData(wxSocketBase *sock)
    {
    	#define MAX_MSG_SIZE 256
    
        wxString display;
    	wxChar *buf = new wxChar[MAX_MSG_SIZE];
    	wxUint32 len;
    
    	len = sock->Read(buf, MAX_MSG_SIZE * sizeof(wxChar)).LastCount();
    
    	display.Printf(_("%s"), buf);
    
    	ShowLog(display);
    
    	delete[] buf;
    
    	#undef MAX_MSG_SIZE
    
    }
    

    ShowLog macht nichts besonderes.

    void MainDialog::ShowLog(const wxString & notice)
    {
        wxString log;
    
        log << notice;
    
    	logWindow->AppendText(_(notice));
    	logWindow->AppendText(_("\n"));
    
    }
    

  • Mod

    Du musst die Nachricht noch mit einem \0 terminieren afaik. wxSocket hat dafür eine Methode LastCount http://docs.wxwidgets.org/stable/wx_wxsocketbase.html#wxsocketbaselastcount



  • phlox81 schrieb:

    Du musst die Nachricht noch mit einem \n terminieren afaik. wxSocket hat dafür eine Methode LastCount http://docs.wxwidgets.org/stable/wx_wxsocketbase.html#wxsocketbaselastcount

    Hi, so klappt es.

    memset(buf, '\0', sizeof(char)*MAX_MSG_SIZE);
    

    Danke, jetzt muss ich nurnoch herausfinden wieso ich nicht komplett online komme. ^^


Anmelden zum Antworten