1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Make Network::server_connection dynamically instantiated

This commit is contained in:
Michał Janiszewski
2017-05-05 16:54:44 +02:00
parent 03d1115425
commit a25ce1e646
2 changed files with 30 additions and 28 deletions

View File

@@ -133,6 +133,7 @@ bool Network::Init()
status = NETWORK_STATUS_READY;
server_connection = new NetworkConnection();
ServerName = std::string();
ServerDescription = std::string();
ServerGreeting = std::string();
@@ -151,8 +152,8 @@ void Network::Close()
return;
}
if (mode == NETWORK_MODE_CLIENT) {
delete server_connection.Socket;
server_connection.Socket = nullptr;
delete server_connection->Socket;
server_connection->Socket = nullptr;
} else if (mode == NETWORK_MODE_SERVER) {
delete listening_socket;
listening_socket = nullptr;
@@ -163,9 +164,10 @@ void Network::Close()
mode = NETWORK_MODE_NONE;
status = NETWORK_STATUS_NONE;
_lastConnectStatus = SOCKET_STATUS_CLOSED;
server_connection.AuthStatus = NETWORK_AUTH_NONE;
server_connection.InboundPacket.Clear();
server_connection.SetLastDisconnectReason(nullptr);
server_connection->AuthStatus = NETWORK_AUTH_NONE;
server_connection->InboundPacket.Clear();
server_connection->SetLastDisconnectReason(nullptr);
SafeDelete(server_connection);
client_connection_list.clear();
game_command_queue.clear();
@@ -190,9 +192,9 @@ bool Network::BeginClient(const char* host, uint16 port)
mode = NETWORK_MODE_CLIENT;
assert(server_connection.Socket == nullptr);
server_connection.Socket = CreateTcpSocket();
server_connection.Socket->ConnectAsync(host, port);
assert(server_connection->Socket == nullptr);
server_connection->Socket = CreateTcpSocket();
server_connection->Socket->ConnectAsync(host, port);
status = NETWORK_STATUS_CONNECTING;
_lastConnectStatus = SOCKET_STATUS_CLOSED;
@@ -337,7 +339,7 @@ sint32 Network::GetStatus()
sint32 Network::GetAuthStatus()
{
if (GetMode() == NETWORK_MODE_CLIENT) {
return server_connection.AuthStatus;
return server_connection->AuthStatus;
} else
if (GetMode() == NETWORK_MODE_SERVER) {
return NETWORK_AUTH_OK;
@@ -403,7 +405,7 @@ void Network::UpdateClient()
switch(status){
case NETWORK_STATUS_CONNECTING:
{
switch (server_connection.Socket->GetStatus()) {
switch (server_connection->Socket->GetStatus()) {
case SOCKET_STATUS_RESOLVING:
{
if (_lastConnectStatus != SOCKET_STATUS_RESOLVING)
@@ -434,7 +436,7 @@ void Network::UpdateClient()
case SOCKET_STATUS_CONNECTED:
{
status = NETWORK_STATUS_CONNECTED;
server_connection.ResetLastPacketTime();
server_connection->ResetLastPacketTime();
Client_Send_TOKEN();
char str_authenticating[256];
format_string(str_authenticating, 256, STR_MULTIPLAYER_AUTHENTICATING, NULL);
@@ -445,7 +447,7 @@ void Network::UpdateClient()
}
default:
{
const char * error = server_connection.Socket->GetError();
const char * error = server_connection->Socket->GetError();
if (error != nullptr) {
Console::Error::WriteLine(error);
}
@@ -460,15 +462,15 @@ void Network::UpdateClient()
}
case NETWORK_STATUS_CONNECTED:
{
if (!ProcessConnection(server_connection)) {
if (!ProcessConnection(*server_connection)) {
// Do not show disconnect message window when password window closed/canceled
if (server_connection.AuthStatus == NETWORK_AUTH_REQUIREPASSWORD) {
if (server_connection->AuthStatus == NETWORK_AUTH_REQUIREPASSWORD) {
window_network_status_close();
} else {
char str_disconnected[256];
if (server_connection.GetLastDisconnectReason()) {
const char * disconnect_reason = server_connection.GetLastDisconnectReason();
if (server_connection->GetLastDisconnectReason()) {
const char * disconnect_reason = server_connection->GetLastDisconnectReason();
format_string(str_disconnected, 256, STR_MULTIPLAYER_DISCONNECTED_WITH_REASON, &disconnect_reason);
} else {
format_string(str_disconnected, 256, STR_MULTIPLAYER_DISCONNECTED_NO_REASON, NULL);
@@ -609,7 +611,7 @@ void Network::SetPassword(const char* password)
void Network::ShutdownClient()
{
if (GetMode() == NETWORK_MODE_CLIENT) {
server_connection.Socket->Disconnect();
server_connection->Socket->Disconnect();
}
}
@@ -858,8 +860,8 @@ void Network::Client_Send_TOKEN()
log_verbose("requesting token");
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_TOKEN;
server_connection.AuthStatus = NETWORK_AUTH_REQUESTED;
server_connection.QueuePacket(std::move(packet));
server_connection->AuthStatus = NETWORK_AUTH_REQUESTED;
server_connection->QueuePacket(std::move(packet));
}
void Network::Client_Send_AUTH(const char* name, const char* password, const char* pubkey, const char *sig, size_t sigsize)
@@ -873,8 +875,8 @@ void Network::Client_Send_AUTH(const char* name, const char* password, const cha
assert(sigsize <= (size_t)UINT32_MAX);
*packet << (uint32)sigsize;
packet->Write((const uint8 *)sig, sigsize);
server_connection.AuthStatus = NETWORK_AUTH_REQUESTED;
server_connection.QueuePacket(std::move(packet));
server_connection->AuthStatus = NETWORK_AUTH_REQUESTED;
server_connection->QueuePacket(std::move(packet));
}
void Network::Client_Send_OBJECTS(const std::vector<std::string> &objects)
@@ -887,7 +889,7 @@ void Network::Client_Send_OBJECTS(const std::vector<std::string> &objects)
log_verbose("client requests object %s", objects[i].c_str());
packet->Write((const uint8 *)objects[i].c_str(), 8);
}
server_connection.QueuePacket(std::move(packet));
server_connection->QueuePacket(std::move(packet));
}
void Network::Server_Send_TOKEN(NetworkConnection& connection)
@@ -1015,7 +1017,7 @@ void Network::Client_Send_CHAT(const char* text)
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_CHAT;
packet->WriteString(text);
server_connection.QueuePacket(std::move(packet));
server_connection->QueuePacket(std::move(packet));
}
void Network::Server_Send_CHAT(const char* text)
@@ -1031,7 +1033,7 @@ void Network::Client_Send_GAMECMD(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)gCurrentTicks << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED)
<< ecx << edx << esi << edi << ebp << callback;
server_connection.QueuePacket(std::move(packet));
server_connection->QueuePacket(std::move(packet));
}
void Network::Server_Send_GAMECMD(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx, uint32 esi, uint32 edi, uint32 ebp, uint8 playerid, uint8 callback)
@@ -1080,7 +1082,7 @@ void Network::Client_Send_PING()
{
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_PING;
server_connection.QueuePacket(std::move(packet));
server_connection->QueuePacket(std::move(packet));
}
void Network::Server_Send_PING()
@@ -1963,7 +1965,7 @@ void Network::Client_Handle_PLAYERLIST(NetworkConnection& connection, NetworkPac
if (player) {
*player = tempplayer;
if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER) {
server_connection.Player = player;
server_connection->Player = player;
}
}
}
@@ -2081,7 +2083,7 @@ void Network::Client_Send_GAMEINFO()
log_verbose("requesting gameinfo");
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
*packet << (uint32)NETWORK_COMMAND_GAMEINFO;
server_connection.QueuePacket(std::move(packet));
server_connection->QueuePacket(std::move(packet));
}
static std::string json_stdstring_value(const json_t * string)

View File

@@ -198,7 +198,7 @@ private:
bool wsa_initialized = false;
ITcpSocket * listening_socket = nullptr;
uint16 listening_port = 0;
NetworkConnection server_connection;
NetworkConnection * server_connection = nullptr;
SOCKET_STATUS _lastConnectStatus = SOCKET_STATUS_CLOSED;
uint32 last_tick_sent_time = 0;
uint32 last_ping_sent_time = 0;