Ignore:
Timestamp:
12/23/22 09:09:50 (17 months ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
hg-Phase:
(<MercurialRepository 3 'hg:/home/ivaradi/xplane/hg/xplra' '/'>, 'public')
Message:

The C++ client API can connect over TCP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/client/c/hu/varadiistvan/xplra/XPlane.cc

    r107 r110  
    3535
    3636#include <hu/varadiistvan/scpl/io/LocalClientSocket.h>
     37#include <hu/varadiistvan/scpl/io/TCPClientSocket.h>
    3738#include <hu/varadiistvan/scpl/io/DataStream.h>
    3839
     
    5253
    5354using hu::varadiistvan::scpl::io::LocalClientSocket;
    54 using hu::varadiistvan::scpl::io::LocalConnector;
     55using hu::varadiistvan::scpl::io::TCPClientSocket;
    5556using hu::varadiistvan::scpl::io::DataStream;
    5657
     
    6061using std::string;
    6162using std::min;
     63
     64//------------------------------------------------------------------------------
     65
     66const unsigned short XPlane::defaultTCPPort;
     67
     68//------------------------------------------------------------------------------
     69
     70template <class ClientSocket>
     71void XPlane::connect(std::unique_ptr<ClientSocket> clientSocket)
     72{
     73    auto& connector = clientSocket->getConnector();
     74
     75    while (!connector.connect()) {
     76        if (connector.failed()) {
     77            throw IOException(connector.getErrorCode());
     78        }
     79        waiter.wait();
     80        if (waiter.failed()) {
     81            throw IOException(waiter.getErrorCode());
     82        }
     83    }
     84
     85#ifndef _WIN32
     86    signal(SIGPIPE, SIG_IGN);
     87#endif
     88
     89    socket = clientSocket.release();
     90    stream = new DataStream(*socket);
     91
     92    for(multiBuffers_t::iterator i = multiBuffers.begin();
     93        i!=multiBuffers.end(); ++i)
     94    {
     95        MultiBuffer* buffer = *i;
     96        buffer->reregisterInXPlane();
     97    }
     98}
    6299
    63100//------------------------------------------------------------------------------
     
    150187    unique_ptr<LocalClientSocket> clientSocket(new LocalClientSocket("xplra",
    151188                                                                     &waiter));
    152     LocalConnector& connector = clientSocket->getConnector();
    153 
    154     while (!connector.connect()) {
    155         if (connector.failed()) {
    156             throw IOException(connector.getErrorCode());
    157         }
    158         waiter.wait();
    159         if (waiter.failed()) {
    160             throw IOException(waiter.getErrorCode());
    161         }
    162     }
    163 
    164 #ifndef _WIN32
    165     signal(SIGPIPE, SIG_IGN);
    166 #endif
    167 
    168     socket = clientSocket.release();
    169     stream = new DataStream(*socket);
    170 
    171     for(multiBuffers_t::iterator i = multiBuffers.begin();
    172         i!=multiBuffers.end(); ++i)
    173     {
    174         MultiBuffer* buffer = *i;
    175         buffer->reregisterInXPlane();
    176     }
     189    connect(std::move(clientSocket));
     190}
     191
     192//------------------------------------------------------------------------------
     193
     194void XPlane::connectTCP(const std::string& address, unsigned short port)
     195{
     196    if (socket!=0) return;
     197
     198    unique_ptr<TCPClientSocket> clientSocket(new TCPClientSocket(address.c_str(),
     199                                                                 port,
     200                                                                 &waiter));
     201    connect(std::move(clientSocket));
    177202}
    178203
Note: See TracChangeset for help on using the changeset viewer.