# core.h

Go to the documentation of this file.

    00001 /* $Id: core.h 9051 2007-03-07 12:11:48Z rubidium $ */
    00002
    00007 #ifndef NETWORK_CORE_H
    00008 #define NETWORK_CORE_H
    00009
    00010 #ifdef ENABLE_NETWORK
    00011
    00012 #include "os_abstraction.h"
    00013 #include "../../newgrf_config.h"
    00014
    00015 bool NetworkCoreInitialize();
    00016 void NetworkCoreShutdown();
    00017
    00019 enum NetworkRecvStatus {
    00020   NETWORK_RECV_STATUS_OKAY,
    00021   NETWORK_RECV_STATUS_DESYNC,
    00022   NETWORK_RECV_STATUS_NEWGRF_MISMATCH,
    00023   NETWORK_RECV_STATUS_SAVEGAME,
    00024   NETWORK_RECV_STATUS_CONN_LOST,
    00025   NETWORK_RECV_STATUS_MALFORMED_PACKET,
    00026   NETWORK_RECV_STATUS_SERVER_ERROR,
    00027   NETWORK_RECV_STATUS_SERVER_FULL,
    00028   NETWORK_RECV_STATUS_SERVER_BANNED,
    00029   NETWORK_RECV_STATUS_CLOSE_QUERY,
    00030 };
    00031
    00033 struct Packet;
    00034
    00038 class NetworkSocketHandler {
    00039 public:
    00040   /* TODO: make socket & has_quit protected once the TCP stuff
    00041    *is in a real class too */
    00042   bool has_quit;
    00043   SOCKET sock;
    00044 public:
    00046   NetworkSocketHandler() { this->sock = INVALID_SOCKET; this->has_quit = false; }
    00047
    00049   virtual ~NetworkSocketHandler() { this->Close(); }
    00050
    00052   virtual void Close() {}
    00053
    00059   virtual NetworkRecvStatus CloseConnection() { this->has_quit = true; return NETWORK_RECV_STATUS_OKAY; }
    00060
    00065   bool IsConnected() { return this->sock != INVALID_SOCKET; }
    00066
    00073   bool HasClientQuit() { return this->has_quit; }
    00074
    00075   void Send_GRFIdentifier(Packet *p, const GRFIdentifier *grf);
    00076   void Recv_GRFIdentifier(Packet *p, GRFIdentifier *grf);
    00077 };
    00078
    00079 #endif /* ENABLE_NETWORK */
    00080
    00081 #endif /* NETWORK_CORE_H */