Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: overxfl0w13 en 16 Julio 2012, 01:48 am



Título: Chat Qt4/SFML
Publicado por: overxfl0w13 en 16 Julio 2012, 01:48 am
Buenas compañeros :D.

Xeracker y yo llevamos un par de días codeando un chat funcional y así de paso aprender un poco de interfaces en C++, el resultado creo que ha sido bastante bueno y a pesar de que aún tiene algunos bugs y falta la implementación de algunas funciones del mismo, está en condiciones de publicarse su code por si algún usuario quiere ayudar o dar opiniones y hacer críticas.

Scan:

(http://i49.tinypic.com/o8unbk.png)

De momento falta la función de mostrar los usuarios en el ListBox derecho, de imprimir los emoticonos en el campo de texto entre muchas otras que iremos añadiendo :)

A continuación os dejo el source de todos los archivos:

Headers

App.hpp
Código
  1. #include "Window.hpp"
  2. #include "Client.hpp"
  3.  
  4. class App
  5. {
  6.    Window window;
  7.    Client client;
  8.    void Thread();
  9.    sf::Thread thread;
  10. public:
  11.    App() : thread(&App::Thread, this), window("Anonimo") { thread.launch(); }
  12.  
  13. };
  14.  

Client.hpp
Código
  1. #include <SFML/Network.hpp>
  2.  
  3. class Client
  4. {
  5.    sf::IpAddress ServerAddress;
  6.    sf::TcpSocket Socket;
  7.    sf::Packet Packet;
  8.    void Receiver();
  9.    void Status();
  10.    void Sender();
  11.    bool connected;
  12.    bool updated;
  13. public:
  14.    Client();
  15.    sf::Thread R, S;
  16.    sf::Packet Receive();
  17.    void Send(sf::Packet);
  18.    bool IsConnected();
  19.    bool IsUpToDate();
  20. };
  21.  

Window.hpp:
Código
  1. #include <QObject>
  2. #include <QtGui>
  3. #include <QFile>
  4. class Window : public QObject
  5. {
  6.    Q_OBJECT
  7.  
  8. public:
  9.  
  10.    Window(QString usu);
  11.    ~Window();
  12.    void Iconos();
  13.    void Write(QString, QString);
  14.    void ModificarEstado(bool estado);
  15.    bool IsTextUpToDate() { return TextUpdated; }
  16.    bool IsNickUpToDate() { return NickUpdated; }
  17.    QString GetText(), GetNick();
  18.  
  19. private slots:
  20.  
  21.    void Send();
  22.    void logueoUsuario();
  23.    void configUser();
  24.    void escribirWink();
  25.    void escribirHappy();
  26.    void escribirHeart();
  27.    void escribirLaughter();
  28.    void escribirSad();
  29.    void escribirUuh();
  30.    void escribirWhoa();
  31.  
  32. private:
  33.  
  34.    /* Constructores De Ventana*/
  35.    QLineEdit *TextEdit;
  36.    QLineEdit *UserEdit;
  37.  
  38.    QPushButton *SendButton;
  39.    QPushButton *LogButton;
  40.    QPushButton *CLogButton;
  41.  
  42.    QTextEdit *TextBox;
  43.    QListWidget *UserBox;
  44.  
  45.    QVBoxLayout *mainLayout;
  46.    QVBoxLayout *chatLayout;
  47.    QVBoxLayout *usersLayout;
  48.  
  49.    QHBoxLayout *buttonLayout;
  50.    QHBoxLayout *usutextLayout;
  51.    QHBoxLayout *emoLayout;
  52.    QWidget *window;
  53.  
  54.    QString usuario, estado;
  55.  
  56.    QLabel *etiqueta;
  57.    QLabel *imagenChat;
  58.    QLabel *imagenConectados;
  59.  
  60.    /*Emoticonos y Capa Emoticonos*/
  61.    QPushButton *emoWink, *emoHappy, *emoHeart, *emoLaughter, *emoSad, *emoUuh, *emoWhoa;
  62.  
  63.    bool TextUpdated, NickUpdated;
  64.  
  65.  
  66. };
  67.  

Sources

App.cpp:
Código
  1. #include "App.hpp"
  2.  
  3. void App::Thread()
  4. {
  5.    while(1)
  6.    {
  7.        if(!client.IsUpToDate())
  8.        {
  9.            QString t1, t2;
  10.            sf::String s1, s2;
  11.            client.Receive() >> s1 >> s2;
  12.            t1 = s1.toAnsiString().c_str();
  13.            t2 = s2.toAnsiString().c_str();
  14.            window.Write(t1,t2);
  15.        }
  16.  
  17.        if(!window.IsTextUpToDate())
  18.        {
  19.            sf::String str=window.GetText().toStdWString();
  20.            sf::Packet Pack;
  21.            Pack << 1 << str;
  22.            client.Send(Pack);
  23.            Pack.clear();
  24.        }
  25.  
  26.        if(!window.IsNickUpToDate())
  27.        {
  28.            sf::String str=window.GetNick().toStdWString();
  29.            sf::Packet Pack;
  30.            Pack << 0 << str;
  31.            client.Send(Pack);
  32.            Pack.clear();
  33.        }
  34.        if(client.IsConnected())
  35.        {
  36.             window.ModificarEstado(true);
  37.        }
  38.  
  39.    }
  40. }
  41.  

Client.cpp:
Código
  1. #include "Client.hpp"
  2.  
  3. Client::Client() : R(&Client::Receiver, this), S(&Client::Sender, this), updated(true)
  4. {
  5.    Socket.connect("**************", 25569);
  6.    R.launch();
  7.    S.launch();
  8. }
  9.  
  10. void Client::Receiver() //Receiver Thread
  11. {
  12.    while(1)
  13.    {
  14.        sf::Packet buffer;
  15.        Socket.receive(buffer);
  16.        Packet = buffer;
  17.        buffer.clear();
  18.        updated=false;
  19.    }
  20.  
  21. }
  22.  
  23.  
  24. void Client::Sender() //Sender Thread
  25. {
  26.  
  27. }
  28.  
  29.  
  30. sf::Packet Client::Receive()
  31. {
  32.    updated=true;
  33.    return Packet;
  34. }
  35.  
  36. void Client::Send(sf::Packet Pack)
  37. {
  38.    connected = (Socket.send(Pack) == sf::Socket::Done);
  39. }
  40.  
  41. bool Client::IsUpToDate()
  42. {
  43.    return updated;
  44. }
  45.  
  46. bool Client::IsConnected()
  47. {
  48.    return connected;
  49. }
  50.  
  51.  
  52.  

Window.cpp:
Código
  1. #include "Window.hpp"
  2. void Window::ModificarEstado(bool status)
  3. {
  4.    if(status) estado = "Conectado";
  5.    else estado = "Desconectado";
  6.    window->setWindowTitle("Nick: "+usuario+" <---> Estado: "+estado);
  7. }
  8. void Window::escribirWink()
  9. {
  10.    TextEdit->insert(QString(" ;) "));
  11. }
  12.  
  13. void Window::escribirHappy()
  14. {
  15.    TextEdit->insert(QString(" :) "));
  16. }
  17.  
  18. void Window::escribirHeart()
  19. {
  20.    TextEdit->insert(QString(" (L) "));
  21. }
  22.  
  23. void Window::escribirLaughter()
  24. {
  25.    TextEdit->insert(QString(" :D "));
  26. }
  27.  
  28. void Window::escribirSad()
  29. {
  30.    TextEdit->insert(QString(" :( "));
  31. }
  32.  
  33. void Window::escribirUuh()
  34. {
  35.    TextEdit->insert(QString(" ¬¬ "));
  36. }
  37.  
  38. void Window::escribirWhoa()
  39. {
  40.    TextEdit->insert(QString(" :O "));
  41. }
  42.  
  43. void Window::Iconos()
  44. {
  45.    /* Emoticonos */
  46.  
  47.    emoWink = new QPushButton;
  48.    emoHappy = new QPushButton;
  49.    emoHeart = new QPushButton;
  50.    emoLaughter = new QPushButton;
  51.    emoSad = new QPushButton;
  52.    emoUuh = new QPushButton;
  53.    emoWhoa = new QPushButton;
  54.    QObject::connect(emoWink,SIGNAL(clicked()),this,SLOT(escribirWink()));
  55.    QObject::connect(emoHappy,SIGNAL(clicked()),this,SLOT(escribirHappy()));
  56.    QObject::connect(emoHeart,SIGNAL(clicked()),this,SLOT(escribirHeart()));
  57.    QObject::connect(emoLaughter,SIGNAL(clicked()),this,SLOT(escribirLaughter()));
  58.    QObject::connect(emoSad,SIGNAL(clicked()),this,SLOT(escribirSad()));
  59.    QObject::connect(emoUuh,SIGNAL(clicked()),this,SLOT(escribirUuh()));
  60.    QObject::connect(emoWhoa,SIGNAL(clicked()),this,SLOT(escribirWhoa()));
  61.    emoWink->setIcon(QIcon("emoticonos/guinyo.png"));
  62.    emoHappy->setIcon(QIcon("emoticonos/happy.png"));
  63.    emoHeart->setIcon(QIcon("emoticonos/heart.png"));
  64.    emoLaughter->setIcon(QIcon("emoticonos/laughter.png"));
  65.    emoSad->setIcon(QIcon("emoticonos/sad.png"));
  66.    emoUuh->setIcon(QIcon("emoticonos/uhh.png"));
  67.    emoWhoa->setIcon(QIcon("emoticonos/whoa.png"));
  68.  
  69.    /* Capa Horizontal Emoticonos */
  70.  
  71.    emoLayout = new QHBoxLayout;
  72.    emoLayout->addWidget(emoWink);
  73.    emoLayout->addWidget(emoHappy);
  74.    emoLayout->addWidget(emoHeart);
  75.    emoLayout->addWidget(emoLaughter);
  76.    emoLayout->addWidget(emoSad);
  77.    emoLayout->addWidget(emoUuh);
  78.    emoLayout->addWidget(emoWhoa);
  79.  
  80.    /* Anidacion capa horizontal en vertical */
  81.  
  82.    mainLayout->addLayout(emoLayout);
  83.  
  84. }
  85.  
  86. void Window::configUser()
  87. {
  88.    usuario = UserEdit->text();
  89.    NickUpdated=false;
  90.    delete etiqueta;
  91.    delete UserEdit;
  92.    delete CLogButton;
  93.    window->setWindowTitle("Nick: "+usuario+" <---> Estado: "+estado);
  94.    SendButton = new QPushButton("Enviar");
  95.    TextEdit = new QLineEdit;
  96.    SendButton->setIcon(QIcon("emoticonos/aceptar.png"));
  97.    QObject::connect(SendButton,SIGNAL(clicked()),this,SLOT(Send()));
  98.    mainLayout->addWidget(TextEdit);
  99.    mainLayout->addWidget(SendButton);
  100.    window->setLayout(mainLayout);
  101.    window->show();
  102. }
  103.  
  104. void Window::Write(QString user, QString msg)
  105. {
  106.    TextBox->append(user+": "+msg);
  107. }
  108.  
  109. void Window::Send()
  110. {
  111.    if(TextEdit->text()!= "")
  112.    {
  113.        TextUpdated=false;
  114.        TextEdit->clear();
  115.    }
  116. }
  117.  
  118. QString Window::GetText()
  119. {
  120.    TextUpdated=true;
  121.    return TextEdit->text();
  122. }
  123.  
  124. QString Window::GetNick()
  125. {
  126.    NickUpdated=true;
  127.    return usuario;
  128. }
  129.  
  130.  
  131. void Window::logueoUsuario()
  132. {
  133.    delete LogButton;
  134.    delete SendButton;
  135.    delete TextEdit;
  136.    CLogButton = new QPushButton("Aceptar");
  137.    CLogButton->setIcon(QIcon("emoticonos/aceptar.png"));
  138.    QObject::connect(CLogButton,SIGNAL(clicked()),this,SLOT(configUser()));
  139.    UserEdit = new QLineEdit;
  140.    etiqueta = new QLabel("Inserta nickname");
  141.    etiqueta->setAlignment(Qt::AlignCenter);
  142.    mainLayout->addWidget(etiqueta);
  143.    mainLayout->addWidget(UserEdit);
  144.    mainLayout->addWidget(CLogButton);
  145.    window->setLayout(mainLayout);
  146.    window->show();
  147.  
  148. }
  149.  
  150. Window::Window(QString user) : usuario(user), TextUpdated(true), NickUpdated(false)
  151. {
  152.    window = new QWidget;
  153.    LogButton = new QPushButton("Loguear");
  154.    LogButton->setIcon(QIcon("emoticonos/llave.png"));
  155.    QObject::connect(LogButton,SIGNAL(clicked()),this,SLOT(logueoUsuario()));
  156.    TextBox = new QTextEdit;
  157.    TextBox->setReadOnly(true);
  158.    TextBox->setMinimumSize(QSize(550,0));
  159.    UserBox = new QListWidget;
  160.    imagenChat = new QLabel("Chat");
  161.    QImage imageChat("emoticonos/chat.png");
  162.    imagenChat->setPixmap(QPixmap::fromImage(imageChat));
  163.    imagenChat->setAlignment(Qt::AlignCenter);
  164.    QLabel *etiquetaChat = new QLabel("Chat");
  165.    etiquetaChat->setAlignment(Qt::AlignCenter);
  166.    imagenConectados = new QLabel("Conectados");
  167.    QImage imageUsers("emoticonos/conectados.png");
  168.    imagenConectados->setPixmap(QPixmap::fromImage(imageUsers));
  169.    imagenConectados->setAlignment(Qt::AlignCenter);
  170.    QLabel *etiquetaConectados = new QLabel("Usuarios Conectados");
  171.    etiquetaConectados->setAlignment(Qt::AlignCenter);
  172.    usutextLayout = new QHBoxLayout;
  173.    TextEdit = new QLineEdit;
  174.    SendButton = new QPushButton("Enviar");
  175.    SendButton->setIcon(QIcon("emoticonos/aceptar.png"));
  176.    chatLayout = new QVBoxLayout;
  177.    usersLayout = new QVBoxLayout;
  178.    mainLayout = new QVBoxLayout;
  179.    buttonLayout = new QHBoxLayout;
  180.    window->setMinimumSize(700,500);
  181.    window->setMaximumSize(700,500);
  182.    QObject::connect(SendButton,SIGNAL(clicked()),this,SLOT(Send()));
  183.    chatLayout->addWidget(imagenChat);
  184.    chatLayout->addWidget(etiquetaChat);
  185.    chatLayout->addWidget(TextBox);
  186.    usersLayout->addWidget(imagenConectados);
  187.    usersLayout->addWidget(etiquetaConectados);
  188.    usersLayout->addWidget(UserBox);
  189.    usutextLayout->addLayout(chatLayout);
  190.    usutextLayout->addLayout(usersLayout);
  191.    mainLayout->addLayout(usutextLayout);
  192.    Iconos();
  193.    mainLayout->addWidget(TextEdit);
  194.    buttonLayout->addWidget(SendButton);
  195.    buttonLayout->addWidget(LogButton);
  196.    mainLayout->addLayout(buttonLayout);
  197.    window->setLayout(mainLayout);
  198.    window->show();
  199. }
  200.  
  201. Window::~Window() {}

main.cpp:
Código
  1. #include "App.hpp"
  2.  
  3. int main(int argc,char *argv[])
  4. {
  5.    QApplication Qt(argc,argv);
  6.    App *app = new App();
  7.    return Qt.exec();
  8. }
  9.  

Server.cpp:
Código
  1. #include <SFML/Network.hpp>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Client{
  6.    sf::TcpSocket s;
  7.    bool connected;
  8.    sf::String alias;
  9. } Client[256];
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.  
  14.    sf::TcpListener Server;
  15.    sf::SocketSelector Selector;
  16.    int Port = 25569;
  17.  
  18.    for(int i=0; i<256; i++) Client[i].connected=false, Client[i].alias="Unknown";
  19.  
  20.    Server.listen(Port);
  21.    cout << "Escuchando puerto " << Port << " TCP..." << endl;
  22.    Selector.add(Server);
  23.  
  24.    while (Selector.wait())
  25.    {
  26.        if (Selector.isReady(Server))
  27.        {
  28.            for(int i=0; i<256; i++)
  29.            {
  30.                if(!Client[i].connected)
  31.                {
  32.                    sf::Packet Packet;
  33.                    Server.accept(Client[i].s);
  34.                    cout << "Client connected (ID: " << i << ", IP: " << Client[i].s.getRemoteAddress() << ")" << endl;
  35.                    Selector.add(Client[i].s);
  36.                    Client[i].connected=true;
  37.                    break;
  38.                }
  39.            }
  40.        }
  41.        else
  42.        {
  43.            for(int i=0; i<256; i++)
  44.            {
  45.                if(Selector.isReady(Client[i].s))
  46.                {
  47.                    sf::Packet Packet;
  48.                    if(Client[i].s.receive(Packet) == sf::Socket::Done)
  49.                    {
  50.                        int com;
  51.                        Packet >> com;
  52.                        switch (com)
  53.                        {
  54.                            case 0:
  55.                                Client[i].alias.clear();
  56.                                Packet >> Client[i].alias;
  57.                                cout << "Client " << i << " ha cambiado su alias a \"" << Client[i].alias.toAnsiString() << "\"." << endl;
  58.                            break;
  59.                            case 1:
  60.                                sf::String Msg;
  61.                                Packet >> Msg;
  62.                                cout << Client[i].alias.toAnsiString() << ": " << Msg.toAnsiString() << endl;
  63.  
  64.                                Packet.clear();
  65.                                Packet << Client[i].alias << Msg;
  66.  
  67.                                for (int i=0; i<256; i++)
  68.                                    if(Client[i].connected)
  69.                                        Client[i].s.send(Packet);
  70.  
  71.                        }
  72.                        break;
  73.                    }
  74.                    else
  75.                    {
  76.                        cerr << Client[i].alias.toAnsiString() << " se ha desconectado (ID: " << i << ", IP: " << Client[i].s.getRemoteAddress() << ")" << endl;
  77.                        Selector.remove(Client[i].s);
  78.                        Client[i].connected=false;
  79.                        Client[i].alias="Unknown";
  80.                        break;
  81.                    }
  82.                }
  83.            }
  84.        }
  85.    }
  86. }


Con todo el code ya publicado, pongo link con un .rar que contiene lo archivos necesarios para compilar desde CodeBlocks junto con los emoticonos y las imágenes del programa.

http://www.mediafire.com/?9h7mlte60p6h2qd (http://www.mediafire.com/?9h7mlte60p6h2qd)

Aclaro que se necesita tener instaladas la librerías Qt y SFML, si tenéis algún problema con su instalación subiré el .rar con las .dll de las librerias necesarias para el correcto funcionamiento del chat.

Un saludo a todos y esperamos que os guste :)


Título: Re: Chat PyQt4/SFML
Publicado por: DickGumshoe en 16 Julio 2012, 01:53 am
¡Os está quedando genial! ¡Ánimos, que seguro que conseguís mejorarlo y ponerle muchas cosas más!

P.D.: Ojalá pudiera hacer yo algo en C++ así de bien  :xD


Título: Re: Chat PyQt4/SFML
Publicado por: X3R4CK3R en 16 Julio 2012, 05:09 am
Un detalle que se pasó overxfl0w:

El code anterior es únicamente del cliente (chat), el code del servidor lo dejo aquí, por si alguien quiere compilarlo y probar el cliente por localhost o lo que sea:

Código
  1. #include <SFML/Network.hpp>
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Client{
  6.    sf::TcpSocket s;
  7.    bool connected;
  8.    sf::String alias;
  9. } Client[256];
  10.  
  11. int main(int argc, char *argv[])
  12. {
  13.  
  14.    sf::TcpListener Server;
  15.    sf::SocketSelector Selector;
  16.    int Port = 25569;
  17.  
  18.    for(int i=0; i<256; i++) Client[i].connected=false, Client[i].alias="Unknown";
  19.  
  20.    Server.listen(Port);
  21.    cout << "Escuchando puerto " << Port << " TCP..." << endl;
  22.    Selector.add(Server);
  23.  
  24.    while (Selector.wait())
  25.    {
  26.        if (Selector.isReady(Server))
  27.        {
  28.            for(int i=0; i<256; i++)
  29.            {
  30.                if(!Client[i].connected)
  31.                {
  32.                    sf::Packet Packet;
  33.                    Server.accept(Client[i].s);
  34.                    cout << "Client connected (ID: " << i << ", IP: " << Client[i].s.getRemoteAddress() << ")" << endl;
  35.                    Selector.add(Client[i].s);
  36.                    Client[i].connected=true;
  37.                    break;
  38.                }
  39.            }
  40.        }
  41.        else
  42.        {
  43.            for(int i=0; i<256; i++)
  44.            {
  45.                if(Selector.isReady(Client[i].s))
  46.                {
  47.                    sf::Packet Packet;
  48.                    if(Client[i].s.receive(Packet) == sf::Socket::Done)
  49.                    {
  50.                        int com;
  51.                        Packet >> com;
  52.                        switch (com)
  53.                        {
  54.                            case 0:
  55.                                Client[i].alias.clear();
  56.                                Packet >> Client[i].alias;
  57.                                cout << "Client " << i << " ha cambiado su alias a \"" << Client[i].alias.toAnsiString() << "\"." << endl;
  58.                            break;
  59.                            case 1:
  60.                                sf::String Msg;
  61.                                Packet >> Msg;
  62.                                cout << Client[i].alias.toAnsiString() << ": " << Msg.toAnsiString() << endl;
  63.  
  64.                                Packet.clear();
  65.                                Packet << Client[i].alias << Msg;
  66.  
  67.                                for (int i=0; i<256; i++)
  68.                                    if(Client[i].connected)
  69.                                        Client[i].s.send(Packet);
  70.  
  71.                        }
  72.                        break;
  73.                    }
  74.                    else
  75.                    {
  76.                        cerr << Client[i].alias.toAnsiString() << " se ha desconectado (ID: " << i << ", IP: " << Client[i].s.getRemoteAddress() << ")" << endl;
  77.                        Selector.remove(Client[i].s);
  78.                        Client[i].connected=false;
  79.                        Client[i].alias="Unknown";
  80.                        break;
  81.                    }
  82.                }
  83.            }
  84.        }
  85.    }
  86. }

Saludos!


Título: Re: Chat PyQt4/SFML
Publicado por: dato000 en 16 Julio 2012, 05:12 am
¡Os está quedando genial! ¡Ánimos, que seguro que conseguís mejorarlo y ponerle muchas cosas más!

P.D.: Ojalá pudiera hacer yo algo en C++ así de bien  :xD

+1...yo ni se como implementarlo, pero de verdad que vale la pena hacerlo!!! esta del carajo!!!

oye los graficos tambien son con C++??????

9.99999999999/10 BRAVO!!!!


Título: Re: Chat PyQt4/SFML
Publicado por: X3R4CK3R en 16 Julio 2012, 06:26 am
+1...yo ni se como implementarlo, pero de verdad que vale la pena hacerlo!!! esta del carajo!!!

oye los graficos tambien son con C++??????

9.99999999999/10 BRAVO!!!!

No, los gráficos son de la librería Qt


Título: Re: Chat PyQt4/SFML
Publicado por: dato000 en 16 Julio 2012, 06:57 am
No, los gráficos son de la librería Qt

pendiente libreria qt entre las miles de cosas que tengo que mirar.  :)


Título: Re: Chat Qt4/SFML
Publicado por: Sputnik_ en 16 Julio 2012, 20:34 pm
increíble, se agradece un montón, justo estaba pensando como hacer uno, me viene genial  :)  ;-)


Título: Re: Chat Qt4/SFML
Publicado por: [Zero] en 16 Julio 2012, 20:56 pm
Podíais haber usado el modulo QtNetwork (http://qt-project.org/doc/qt-4.8/qtnetwork.html) de Qt para la conexión y no tener que usar otra librería externa, Qt sirve para mucho más que solo la GUI, y mola más.  También, en los ejemplos de Qt hay un chat multiusuario muy similar, usando QtNetwork, podéis echarle un ojo. Ah y Qt es un framework, no un lenguaje, por lo tanto sí es C++ :D .

Saludos!


Título: Re: Chat Qt4/SFML
Publicado por: anonimo12121 en 16 Julio 2012, 21:43 pm
Zero cuanto tiempo sin verte agregame al tuenti capullo y hablamos xDD


Título: Re: Chat Qt4/SFML
Publicado por: X3R4CK3R en 16 Julio 2012, 21:47 pm
@[Zero]: Tienes razón pero no tengo apenas tiempo para ponerme a aprender QTNetwork, es por eso que de momento estamos usando SFML-Network, cuando saque más tiempo libre ya pensaremos en pasarnos.

@Xafi: Existen los mensajes privados, tu mensaje no pinta nada aquí. A ver si usamos un poco la cabeza.

Saludos!


Título: Re: Chat Qt4/SFML
Publicado por: overxfl0w13 en 16 Julio 2012, 22:10 pm
Podíais haber usado el modulo QtNetwork (http://qt-project.org/doc/qt-4.8/qtnetwork.html) de Qt para la conexión y no tener que usar otra librería externa, Qt sirve para mucho más que solo la GUI, y mola más.  También, en los ejemplos de Qt hay un chat multiusuario muy similar, usando QtNetwork, podéis echarle un ojo. Ah y Qt es un framework, no un lenguaje, por lo tanto sí es C++ :D .

Saludos!

Voy a mirar el chat de ejemplo a ver que tal está y ya de paso QtNetwork porque estuve buscando QtSocket,QtTcpSocket y ninguna me sirvió, a ver si sale bueno :).

Gracias Zero por tu consejo  ;-)


Título: Re: Chat Qt4/SFML
Publicado por: anonimo12121 en 16 Julio 2012, 23:36 pm
Citar
Xeracker : @[Zero]: Tienes razón pero no tengo apenas tiempo para ponerme a aprender QTNetwork,

Pero si tienes tiempo para joder la vida a los demás. gilip.ollas de mier.da
Eres un puto retra-sado, que te creas tu mismo los malos rollos pero así lo has querido...

En vez de hablar como hombres te largas sin decir nada... me has decepcionado xeracker

PD: Over muy bueno el chat. para llevar solo 2 semanas en c++ eres el puto amo


Título: Re: Chat Qt4/SFML
Publicado por: X3R4CK3R en 16 Julio 2012, 23:41 pm
Pero si tienes tiempo para joder la vida a los demás. gilip.ollas de mier.da
Eres un puto retra-sado, que te creas tu mismo los malos rollos pero así lo has querido...

Esto es un foro de programación, no el patio de tu colegio, ten un poco de marudez y no hagas perder el tiempo a los que venimos aquí por motivos serios, todos tus mensajes que veo son chorradas offtopics que no vienen a cuento...

Si tienes algo que decirme utiliza los privados.

Saludos


Título: Re: Chat Qt4/SFML
Publicado por: anonimo12121 en 16 Julio 2012, 23:42 pm
 ;-)  ;-)

Eres tu el que tienes que pedir perdón


Título: Re: Chat Qt4/SFML
Publicado por: Puntoinfinito en 18 Julio 2012, 16:50 pm
¡Excelente trabajo Over y Xera!

Por cierto, veo que al final utilizastes Qt... jaja

Saludoos