Files
@ r25105:6cf6187bf733
Branch filter:
Location: cpp/openttd-patchpack/source/src/network/core/tcp.h - annotation
r25105:6cf6187bf733
3.1 KiB
text/x-c
Add: Hotkey to focus the build object class name filter editbox.
r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r6121:a8ff6abe7fb2 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r5475:3f5cd13d1b63 r10828:d8d68d002525 r5527:e9d8b06d490d r5527:e9d8b06d490d r24271:c20a6e3dcfe0 r24271:c20a6e3dcfe0 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r17318:87556706b761 r5624:8f8d1f8d3a74 r10746:38677d5ad005 r5902:68b31dbadeb5 r5902:68b31dbadeb5 r5902:68b31dbadeb5 r5624:8f8d1f8d3a74 r11593:8dd431018ab1 r5864:7aec8f5a81f1 r5624:8f8d1f8d3a74 r11593:8dd431018ab1 r11593:8dd431018ab1 r11593:8dd431018ab1 r11593:8dd431018ab1 r11593:8dd431018ab1 r11593:8dd431018ab1 r23506:bba4d0c6d70d r16658:c5444a43aa65 r17318:87556706b761 r5902:68b31dbadeb5 r16622:867378c72700 r10464:bb7ec66b104a r16222:694bed5fd015 r16222:694bed5fd015 r19694:004c1f10f9da r19694:004c1f10f9da r19944:25a78576fb5e r19694:004c1f10f9da r23607:36c15679007d r19694:004c1f10f9da r10746:38677d5ad005 r10746:38677d5ad005 r5902:68b31dbadeb5 r5475:3f5cd13d1b63 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r24271:c20a6e3dcfe0 r24271:c20a6e3dcfe0 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r23587:821735a25dec r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r10828:d8d68d002525 r5475:3f5cd13d1b63 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file tcp.h Basic functions to receive and send TCP packets.
*/
#ifndef NETWORK_CORE_TCP_H
#define NETWORK_CORE_TCP_H
#include "address.h"
#include "packet.h"
#include <atomic>
/** The states of sending the packets. */
enum SendPacketsState {
SPS_CLOSED, ///< The connection got closed.
SPS_NONE_SENT, ///< The buffer is still full, so no (parts of) packets could be sent.
SPS_PARTLY_SENT, ///< The packets are partly sent; there are more packets to be sent in the queue.
SPS_ALL_SENT, ///< All packets in the queue are sent.
};
/** Base socket handler for all TCP sockets */
class NetworkTCPSocketHandler : public NetworkSocketHandler {
private:
Packet *packet_queue; ///< Packets that are awaiting delivery
Packet *packet_recv; ///< Partially received packet
public:
SOCKET sock; ///< The socket currently connected to
bool writable; ///< Can we write to this socket?
/**
* Whether this socket is currently bound to a socket.
* @return true when the socket is bound, false otherwise
*/
bool IsConnected() const { return this->sock != INVALID_SOCKET; }
NetworkRecvStatus CloseConnection(bool error = true) override;
virtual void SendPacket(Packet *packet);
SendPacketsState SendPackets(bool closing_down = false);
virtual Packet *ReceivePacket();
bool CanSendReceive();
/**
* Whether there is something pending in the send queue.
* @return true when something is pending in the send queue.
*/
bool HasSendQueue() { return this->packet_queue != nullptr; }
NetworkTCPSocketHandler(SOCKET s = INVALID_SOCKET);
~NetworkTCPSocketHandler();
};
/**
* "Helper" class for creating TCP connections in a non-blocking manner
*/
class TCPConnecter {
private:
std::atomic<bool> connected;///< Whether we succeeded in making the connection
std::atomic<bool> aborted; ///< Whether we bailed out (i.e. connection making failed)
bool killed; ///< Whether we got killed
SOCKET sock; ///< The socket we're connecting with
void Connect();
static void ThreadEntry(TCPConnecter *param);
protected:
/** Address we're connecting to */
NetworkAddress address;
public:
TCPConnecter(const NetworkAddress &address);
/** Silence the warnings */
virtual ~TCPConnecter() {}
/**
* Callback when the connection succeeded.
* @param s the socket that we opened
*/
virtual void OnConnect(SOCKET s) {}
/**
* Callback for when the connection attempt failed.
*/
virtual void OnFailure() {}
static void CheckCallbacks();
static void KillAll();
};
#endif /* NETWORK_CORE_TCP_H */
|