Questo mi disturba da molto tempo. Mi sento come se stessi facendo degli errori sul design del codice relativo alla performance. Non ho mai avuto nessun insegnante per indicare i miei errori, quindi è difficile per me farlo in pratica.
Il codice riguarda un server che sto creando. Ho diviso il programma in alcune classi principali come "Receiver", "Sender", Data_Handler "," Socket "... (perché pensavo che fosse più organizzato).
Uso l'allocazione dinamica della memoria per crearli su main.cpp
(Cosa dovrebbe essere negativo per le prestazioni ...?).
Quindi passo le classi con i puntatori alle altre classi per usare le sue funzioni e le variabili che mi servono.
Dovrei farli classi statiche?
Dove devo cambiare il metodo del mio codice?
Main.cpp
#include "UserData.h"
#include "DataHandler.h"
#include "Sender.h"
#include "Socket.h"
#include "Receiver.h"
int main(int argc, char **argv)
{
bool State = true;
Socket *socket = new Socket;
UserData *userdata = new UserData(socket);
Receiver *receiver = new Receiver(socket, userdata);
DataHandler *datahandler = new DataHandler(socket, userdata, receiver);
Sender *sender = new Sender(socket, userdata, datahandler);
while (State)
{
/* - - - - - - - - -Receive Data- - - - - - - - - - - */
int Activity = SDLNet_CheckSockets(socket->Socket_Set, 0);
if (Activity > 0)
{
/* --- Accept --- */
while (SDLNet_SocketReady(socket->s_tcp))
{
--Activity;
userdata->Accept();
if (userdata->Who == Max_Users)userdata->Data_Status = 3;
datahandler->TCP_Handler();
sender->Send();
if (userdata->Data_Status == 3)userdata->disconnect();
}
/* --- UDP --- */
while (SDLNet_SocketReady(socket->s_udp))
{
--Activity;
receiver->udp();
datahandler->UDP_Handler();
sender->Send();
}
/* --- TCP --- */
unsigned int i = 0;
while (Activity)
{
if (userdata->Check_TCP(i))
{
--Activity;
//Data Flow
receiver->tcp();
datahandler->TCP_Handler();
sender->Send();
//Disconnect User
if (userdata->Data_Status){ i--; userdata->disconnect(); }
}
i++;
}
}
}
delete receiver;
delete sender;
delete datahandler;
delete userdata;
delete socket;
return EXIT_SUCCESS;
}
DataHandler.h (una classe casuale)
#pragma once
#include <vector>
#include <iostream>
#include <sstream>
#include "Socket.h"
#include "UserData.h"
#include "Receiver.h"
#include "Constants.h"
class DataHandler
{
public:
DataHandler::DataHandler(Socket *socket_p, UserData *userdata_p, Receiver *receiver_p);
void UDP_Handler();
void TCP_Handler();
DataHandler::~DataHandler();
int For;
bool How;
std::string What;
private:
Socket *socket;
UserData *userdata;
Receiver *receiver;
std::string data_part;
std::istringstream divider;
//TCP
void Accepted();
void Full();
void Disconnected();
void Login();
//UDP
void Confirm();
};