- fixed server validating its own name instead of the name of a client who's logging in
- clients automatically reconnect to the server when the connection is lost and return back to server list if they fail to reconnect - showing the error msg as a GUIMessageBox and returning to main menu if starting a server fails
This commit is contained in:
@@ -163,10 +163,6 @@ namespace Barotrauma.Networking
|
|||||||
updateInterval = new TimeSpan(0, 0, 0, 0, 150);
|
updateInterval = new TimeSpan(0, 0, 0, 0, 150);
|
||||||
|
|
||||||
CoroutineManager.StartCoroutine(WaitForStartingInfo());
|
CoroutineManager.StartCoroutine(WaitForStartingInfo());
|
||||||
|
|
||||||
// Start the timer
|
|
||||||
//update.Start();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool RetryConnection(GUIButton button, object obj)
|
private bool RetryConnection(GUIButton button, object obj)
|
||||||
@@ -176,19 +172,18 @@ namespace Barotrauma.Networking
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool SelectMainMenu(GUIButton button, object obj)
|
private bool ReturnToServerList(GUIButton button, object obj)
|
||||||
{
|
{
|
||||||
Disconnect();
|
Disconnect();
|
||||||
GameMain.NetworkMember = null;
|
|
||||||
GameMain.MainMenuScreen.Select();
|
|
||||||
|
|
||||||
GameMain.MainMenuScreen.SelectTab(MainMenuScreen.Tab.LoadGame);
|
Submarine.Unload();
|
||||||
|
GameMain.NetworkMember = null;
|
||||||
|
GameMain.ServerListScreen.Select();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool connectCancelled;
|
private bool connectCancelled;
|
||||||
|
|
||||||
private bool CancelConnect(GUIButton button, object obj)
|
private bool CancelConnect(GUIButton button, object obj)
|
||||||
{
|
{
|
||||||
connectCancelled = true;
|
connectCancelled = true;
|
||||||
@@ -319,7 +314,8 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
string denyMessage = inc.ReadString();
|
string denyMessage = inc.ReadString();
|
||||||
|
|
||||||
new GUIMessageBox("Couldn't connect to server", denyMessage);
|
var cantConnectMsg = new GUIMessageBox("Couldn't connect to the server", denyMessage);
|
||||||
|
cantConnectMsg.Buttons[0].OnClicked += ReturnToServerList;
|
||||||
|
|
||||||
connectCancelled = true;
|
connectCancelled = true;
|
||||||
}
|
}
|
||||||
@@ -329,7 +325,7 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError("Error while connecting to server", e);
|
DebugConsole.ThrowError("Error while connecting to the server", e);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -360,7 +356,8 @@ namespace Barotrauma.Networking
|
|||||||
{
|
{
|
||||||
string denyMessage = inc.ReadString();
|
string denyMessage = inc.ReadString();
|
||||||
|
|
||||||
new GUIMessageBox("Couldn't connect to server", denyMessage);
|
var cantConnectMsg = new GUIMessageBox("Couldn't connect to the server", denyMessage);
|
||||||
|
cantConnectMsg.Buttons[0].OnClicked += ReturnToServerList;
|
||||||
|
|
||||||
msgBox.Close(null, null);
|
msgBox.Close(null, null);
|
||||||
connectCancelled = true;
|
connectCancelled = true;
|
||||||
@@ -415,13 +412,13 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
if (client.ConnectionStatus != NetConnectionStatus.Connected)
|
if (client.ConnectionStatus != NetConnectionStatus.Connected)
|
||||||
{
|
{
|
||||||
var reconnect = new GUIMessageBox("CONNECTION FAILED", "Failed to connect to server.", new string[] { "Retry", "Cancel" });
|
var reconnect = new GUIMessageBox("CONNECTION FAILED", "Failed to connect to the server.", new string[] { "Retry", "Cancel" });
|
||||||
|
|
||||||
DebugConsole.NewMessage("Failed to connect to server - connection status: "+client.ConnectionStatus.ToString(), Color.Orange);
|
DebugConsole.NewMessage("Failed to connect to the server - connection status: "+client.ConnectionStatus.ToString(), Color.Orange);
|
||||||
|
|
||||||
reconnect.Buttons[0].OnClicked += RetryConnection;
|
reconnect.Buttons[0].OnClicked += RetryConnection;
|
||||||
reconnect.Buttons[0].OnClicked += reconnect.Close;
|
reconnect.Buttons[0].OnClicked += reconnect.Close;
|
||||||
reconnect.Buttons[1].OnClicked += SelectMainMenu;
|
reconnect.Buttons[1].OnClicked += ReturnToServerList;
|
||||||
reconnect.Buttons[1].OnClicked += reconnect.Close;
|
reconnect.Buttons[1].OnClicked += reconnect.Close;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -542,6 +539,27 @@ namespace Barotrauma.Networking
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NetIncomingMessageType.StatusChanged:
|
||||||
|
NetConnectionStatus connectionStatus = (NetConnectionStatus)inc.ReadByte();
|
||||||
|
DebugConsole.NewMessage("Connection status changed: " + connectionStatus.ToString(), Color.Orange);
|
||||||
|
|
||||||
|
if (connectionStatus == NetConnectionStatus.Disconnected)
|
||||||
|
{
|
||||||
|
string disconnectMsg = inc.ReadString();
|
||||||
|
if (disconnectMsg == "The server has been shut down")
|
||||||
|
{
|
||||||
|
var msgBox = new GUIMessageBox("CONNECTION LOST", "The server has been shut down");
|
||||||
|
msgBox.Buttons[0].OnClicked += ReturnToServerList;
|
||||||
|
}
|
||||||
|
else if (reconnectBox == null)
|
||||||
|
{
|
||||||
|
reconnectBox = new GUIMessageBox("CONNECTION LOST", "You have been disconnected from the server. Reconnecting...", new string[0]);
|
||||||
|
connected = false;
|
||||||
|
ConnectToServer(serverIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,7 @@ namespace Barotrauma.Networking
|
|||||||
|
|
||||||
private IEnumerable<object> StartServer(bool isPublic)
|
private IEnumerable<object> StartServer(bool isPublic)
|
||||||
{
|
{
|
||||||
|
bool error = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Log("Starting the server...", Color.Cyan);
|
Log("Starting the server...", Color.Cyan);
|
||||||
@@ -146,10 +147,29 @@ namespace Barotrauma.Networking
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log("Error while starting the server ("+e.Message+")", Color.Red);
|
Log("Error while starting the server (" + e.Message + ")", Color.Red);
|
||||||
DebugConsole.ThrowError("Couldn't start the server", e);
|
|
||||||
|
System.Net.Sockets.SocketException socketException = e as System.Net.Sockets.SocketException;
|
||||||
|
|
||||||
|
if (socketException != null && socketException.SocketErrorCode == System.Net.Sockets.SocketError.AddressAlreadyInUse)
|
||||||
|
{
|
||||||
|
new GUIMessageBox("Starting the server failed", e.Message + ". Are you trying to run multiple servers on the same port?");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new GUIMessageBox("Starting the server failed", e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
if (server != null) server.Shutdown("Error while starting the server");
|
||||||
|
|
||||||
|
GameMain.NetworkMember = null;
|
||||||
|
yield return CoroutineStatus.Success;
|
||||||
|
}
|
||||||
|
|
||||||
if (config.EnableUPnP)
|
if (config.EnableUPnP)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -124,31 +124,6 @@ namespace Barotrauma.Networking
|
|||||||
string clPackageName = inc.ReadString();
|
string clPackageName = inc.ReadString();
|
||||||
string clPackageHash = inc.ReadString();
|
string clPackageHash = inc.ReadString();
|
||||||
|
|
||||||
if (clVersion != GameMain.Version.ToString())
|
|
||||||
{
|
|
||||||
inc.SenderConnection.Disconnect("Version " + GameMain.Version + " required to connect to the server (Your version: " + clVersion + ")");
|
|
||||||
unauthenticatedClients.Remove(unauthClient);
|
|
||||||
unauthClient = null;
|
|
||||||
DebugConsole.NewMessage(name + " couldn't join the server (wrong game version)", Color.Red);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (clPackageName != GameMain.SelectedPackage.Name)
|
|
||||||
{
|
|
||||||
inc.SenderConnection.Disconnect("Your content package (" + clPackageName + ") doesn't match the server's version (" + GameMain.SelectedPackage.Name + ")");
|
|
||||||
unauthenticatedClients.Remove(unauthClient);
|
|
||||||
unauthClient = null;
|
|
||||||
DebugConsole.NewMessage(name + " couldn't join the server (wrong content package name)", Color.Red);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (clPackageHash != GameMain.SelectedPackage.MD5hash.Hash)
|
|
||||||
{
|
|
||||||
unauthClient.Connection.Disconnect("Your content package (MD5: " + clPackageHash + ") doesn't match the server's version (MD5: " + GameMain.SelectedPackage.MD5hash.Hash + ")");
|
|
||||||
unauthenticatedClients.Remove(unauthClient);
|
|
||||||
unauthClient = null;
|
|
||||||
DebugConsole.NewMessage(name + " couldn't join the server (wrong content package hash)", Color.Red);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string clName = Client.SanitizeName(inc.ReadString());
|
string clName = Client.SanitizeName(inc.ReadString());
|
||||||
if (string.IsNullOrWhiteSpace(clName))
|
if (string.IsNullOrWhiteSpace(clName))
|
||||||
{
|
{
|
||||||
@@ -158,13 +133,38 @@ namespace Barotrauma.Networking
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!whitelist.IsWhiteListed(name, inc.SenderConnection.RemoteEndPoint.Address.ToString()))
|
if (clVersion != GameMain.Version.ToString())
|
||||||
{
|
{
|
||||||
inc.SenderConnection.Disconnect("You're not in this server's whitelist.");
|
inc.SenderConnection.Disconnect("Version " + GameMain.Version + " required to connect to the server (Your version: " + clVersion + ")");
|
||||||
DebugConsole.NewMessage(name + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (not in whitelist)", Color.Red);
|
unauthenticatedClients.Remove(unauthClient);
|
||||||
|
unauthClient = null;
|
||||||
|
DebugConsole.NewMessage(clName + " couldn't join the server (wrong game version)", Color.Red);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Client.IsValidName(name))
|
if (clPackageName != GameMain.SelectedPackage.Name)
|
||||||
|
{
|
||||||
|
inc.SenderConnection.Disconnect("Your content package (" + clPackageName + ") doesn't match the server's version (" + GameMain.SelectedPackage.Name + ")");
|
||||||
|
unauthenticatedClients.Remove(unauthClient);
|
||||||
|
unauthClient = null;
|
||||||
|
DebugConsole.NewMessage(clName + " couldn't join the server (wrong content package name)", Color.Red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (clPackageHash != GameMain.SelectedPackage.MD5hash.Hash)
|
||||||
|
{
|
||||||
|
unauthClient.Connection.Disconnect("Your content package (MD5: " + clPackageHash + ") doesn't match the server's version (MD5: " + GameMain.SelectedPackage.MD5hash.Hash + ")");
|
||||||
|
unauthenticatedClients.Remove(unauthClient);
|
||||||
|
unauthClient = null;
|
||||||
|
DebugConsole.NewMessage(clName + " couldn't join the server (wrong content package hash)", Color.Red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!whitelist.IsWhiteListed(clName, inc.SenderConnection.RemoteEndPoint.Address.ToString()))
|
||||||
|
{
|
||||||
|
inc.SenderConnection.Disconnect("You're not in this server's whitelist.");
|
||||||
|
DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (not in whitelist)", Color.Red);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!Client.IsValidName(clName))
|
||||||
{
|
{
|
||||||
unauthClient.Connection.Disconnect("Your name contains illegal symbols.");
|
unauthClient.Connection.Disconnect("Your name contains illegal symbols.");
|
||||||
unauthenticatedClients.Remove(unauthClient);
|
unauthenticatedClients.Remove(unauthClient);
|
||||||
|
|||||||
Reference in New Issue
Block a user