Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.1] Socket selector

Ostatnio zmodyfikowano 2013-09-04 17:02
Autor Wiadomość
Bimbol
Temat założony przez niniejszego użytkownika
[SFML 2.1] Socket selector
» 2013-09-04 16:46:14
Witam, napisałem taki oto przykładowy kod:
C/C++
#include <SFML/Graphics.hpp>
#include <SFML/Network.hpp>
#include <iostream>
#include <list>

using namespace std;

int main()
{
    char connection_type;
    cin >> connection_type;
   
    sf::RenderWindow Window( sf::VideoMode( 640, 480 ), "Network Test", sf::Style::Close );
   
    if( connection_type == 's' )
    {
        sf::TcpListener listener;
        listener.listen( 5000 );
       
        std::list < sf::TcpSocket *> clients;
        sf::SocketSelector selector;
        selector.add( listener );
       
        while( true )
        {
            sf::Event Event;
            while( Window.pollEvent( Event ) )
            {
                if( Event.type == sf::Event::Closed )
                     Window.close();
               
            }
            if( selector.wait() )
            if( selector.isReady( listener ) )
            {
                sf::TcpSocket * client = new sf::TcpSocket;
                if( listener.accept( * client ) == sf::Socket::Done )
                {
                    cout << "New client connected" << endl;
                    clients.push_back( client );
                    selector.add( * client );
                }
                else
                     delete client;
               
            }
            Window.clear();
            Window.display();
        }
    }
    else
    {
        sf::TcpSocket socket;
        socket.connect( "192.168.0.100", 5000 );
    }
   
    return EXIT_SUCCESS;
}

Problem polega na tym, że dopóki co kol wiek nie podłączy się do serwera, pętla zatrzymuje się na miejscu
if( selector.wait() )
.
Dopiero w momencie połączenia pętla wykonuje się i znów zatrzymuje. Próbowałem ustawić
setBlocking
 na
false
, jednak to nie pomogło.

Czy można coś zrobić by pętla się nie zatrzymywała w tym miejscu, tylko bez przerwy się wykonywała i dopiero gdy nastąpi połączenie przejdzie do wewnątrz.
Bo z tego co czytałem w dokumentacji, metoda
wait
 powinna zwracać
true
, bądź
false
.
P-91532
pekfos
» 2013-09-04 16:52:49
Podaj do wait() maksymalną długość oczekiwania, lub umieść to w oddzielnym wątku.
P-91533
Bimbol
Temat założony przez niniejszego użytkownika
» 2013-09-04 17:02:46
Dzięki, myślałem, że standardowo SFML ustawia timeout.

EDIT.

To nie wystarcza. Teraz host porusza się wolniej od reszty.

EDIT2.

Chyba się udało :)
P-91534
« 1 »
  Strona 1 z 1