Netplay: Fixed issue that caused an instant disconnection when trying to connect to a server (among other things)

This commit is contained in:
Souryo 2017-11-13 19:10:20 -05:00
parent bf99f6a9ac
commit 72f0d961db
2 changed files with 16 additions and 14 deletions

View file

@ -31,7 +31,7 @@ bool GameConnection::ExtractMessage(void *buffer, uint32_t &messageLength)
messageLength = _readBuffer[0] | (_readBuffer[1] << 8) | (_readBuffer[2] << 16) | (_readBuffer[3] << 24);
if(messageLength > 1000000) {
std::cout << "Invalid data received, closing connection" << std::endl;
MessageManager::Log("[Netplay] Invalid data received, closing connection.");
_socket->Close();
return false;
}
@ -51,17 +51,19 @@ NetMessage* GameConnection::ReadMessage()
{
ReadSocket();
uint32_t messageLength;
if(ExtractMessage(_messageBuffer, messageLength)) {
switch((MessageType)_messageBuffer[0]) {
case MessageType::HandShake: return new HandShakeMessage(_messageBuffer, messageLength);
case MessageType::SaveState: return new SaveStateMessage(_messageBuffer, messageLength);
case MessageType::InputData: return new InputDataMessage(_messageBuffer, messageLength);
case MessageType::MovieData: return new MovieDataMessage(_messageBuffer, messageLength);
case MessageType::GameInformation: return new GameInformationMessage(_messageBuffer, messageLength);
case MessageType::PlayerList: return new PlayerListMessage(_messageBuffer, messageLength);
case MessageType::SelectController: return new SelectControllerMessage(_messageBuffer, messageLength);
case MessageType::ForceDisconnect: return new ForceDisconnectMessage(_messageBuffer, messageLength);
if(_readPosition > 4) {
uint32_t messageLength;
if(ExtractMessage(_messageBuffer, messageLength)) {
switch((MessageType)_messageBuffer[0]) {
case MessageType::HandShake: return new HandShakeMessage(_messageBuffer, messageLength);
case MessageType::SaveState: return new SaveStateMessage(_messageBuffer, messageLength);
case MessageType::InputData: return new InputDataMessage(_messageBuffer, messageLength);
case MessageType::MovieData: return new MovieDataMessage(_messageBuffer, messageLength);
case MessageType::GameInformation: return new GameInformationMessage(_messageBuffer, messageLength);
case MessageType::PlayerList: return new PlayerListMessage(_messageBuffer, messageLength);
case MessageType::SelectController: return new SelectControllerMessage(_messageBuffer, messageLength);
case MessageType::ForceDisconnect: return new ForceDisconnectMessage(_messageBuffer, messageLength);
}
}
}
return nullptr;

View file

@ -18,8 +18,8 @@ class GameConnection
protected:
shared_ptr<Socket> _socket;
shared_ptr<ClientConnectionData> _connectionData;
uint8_t _readBuffer[0x40000];
uint8_t _messageBuffer[0x40000];
uint8_t _readBuffer[0x40000] = {};
uint8_t _messageBuffer[0x40000] = {};
int _readPosition = 0;
SimpleLock _socketLock;