(svn r20935) -Codechange: only let the server side use a pool of connected sockets
This commit is contained in:
@@ -17,18 +17,10 @@
|
||||
|
||||
#include "../network.h"
|
||||
#include "../network_internal.h"
|
||||
#include "../../core/pool_func.hpp"
|
||||
#include "../../debug.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
/** Make very sure the preconditions given in network_type.h are actually followed */
|
||||
assert_compile(MAX_CLIENT_SLOTS > MAX_CLIENTS);
|
||||
assert_compile(NetworkClientSocketPool::MAX_SIZE == MAX_CLIENT_SLOTS);
|
||||
|
||||
NetworkClientSocketPool _networkclientsocket_pool("NetworkClientSocket");
|
||||
INSTANTIATE_POOL_METHODS(NetworkClientSocket)
|
||||
|
||||
/**
|
||||
* Create a new socket for the game connection.
|
||||
* @param s The socket to connect with.
|
||||
@@ -75,7 +67,7 @@ NetworkRecvStatus NetworkGameSocketHandler::CloseConnection(bool error)
|
||||
* @param p the packet to handle
|
||||
* @return #NetworkRecvStatus of handling.
|
||||
*/
|
||||
NetworkRecvStatus NetworkClientSocket::HandlePacket(Packet *p)
|
||||
NetworkRecvStatus NetworkGameSocketHandler::HandlePacket(Packet *p)
|
||||
{
|
||||
PacketGameType type = (PacketGameType)p->Recv_uint8();
|
||||
|
||||
@@ -140,7 +132,7 @@ NetworkRecvStatus NetworkClientSocket::HandlePacket(Packet *p)
|
||||
* HandlePacket is returned.
|
||||
* @return #NetworkRecvStatus of the last handled packet.
|
||||
*/
|
||||
NetworkRecvStatus NetworkClientSocket::Recv_Packets()
|
||||
NetworkRecvStatus NetworkGameSocketHandler::Recv_Packets()
|
||||
{
|
||||
Packet *p;
|
||||
while ((p = this->Recv_Packet()) != NULL) {
|
||||
@@ -158,7 +150,7 @@ NetworkRecvStatus NetworkClientSocket::Recv_Packets()
|
||||
* @param type the packet type to create the stub for
|
||||
*/
|
||||
#define DEFINE_UNAVAILABLE_GAME_RECEIVE_COMMAND(type) \
|
||||
NetworkRecvStatus NetworkClientSocket::NetworkPacketReceive_## type ##_command(Packet *p) \
|
||||
NetworkRecvStatus NetworkGameSocketHandler::NetworkPacketReceive_## type ##_command(Packet *p) \
|
||||
{ \
|
||||
DEBUG(net, 0, "[tcp/game] received illegal packet type %d from client %d", \
|
||||
type, this->client_id); \
|
||||
|
@@ -108,16 +108,11 @@ enum ClientStatus {
|
||||
STATUS_END ///< Must ALWAYS be on the end of this list!! (period)
|
||||
};
|
||||
|
||||
class NetworkGameSocketHandler;
|
||||
typedef NetworkGameSocketHandler NetworkClientSocket;
|
||||
typedef Pool<NetworkClientSocket, ClientIndex, 8, MAX_CLIENT_SLOTS> NetworkClientSocketPool;
|
||||
extern NetworkClientSocketPool _networkclientsocket_pool;
|
||||
|
||||
#define DECLARE_GAME_RECEIVE_COMMAND(type) virtual NetworkRecvStatus NetworkPacketReceive_## type ##_command(Packet *p)
|
||||
#define DEF_GAME_RECEIVE_COMMAND(cls, type) NetworkRecvStatus cls ##NetworkGameSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p)
|
||||
|
||||
/** Base socket handler for all TCP sockets */
|
||||
class NetworkGameSocketHandler : public NetworkClientSocketPool::PoolItem<&_networkclientsocket_pool>, public NetworkTCPSocketHandler {
|
||||
class NetworkGameSocketHandler : public NetworkTCPSocketHandler {
|
||||
/* TODO: rewrite into a proper class */
|
||||
private:
|
||||
NetworkClientInfo *info; ///< Client info related to this socket
|
||||
@@ -191,9 +186,6 @@ public:
|
||||
void Send_Command(Packet *p, const CommandPacket *cp);
|
||||
};
|
||||
|
||||
#define FOR_ALL_CLIENT_SOCKETS_FROM(var, start) FOR_ALL_ITEMS_FROM(NetworkClientSocket, clientsocket_index, var, start)
|
||||
#define FOR_ALL_CLIENT_SOCKETS(var) FOR_ALL_CLIENT_SOCKETS_FROM(var, 0)
|
||||
|
||||
#endif /* ENABLE_NETWORK */
|
||||
|
||||
#endif /* NETWORK_CORE_TCP_GAME_H */
|
||||
|
Reference in New Issue
Block a user