Godot Version
3.6.1
Question
In my game, the multiplayer runs on WebSocketServer. When the host exits the game, I want to monitor it on the client for proper processing, but the ServerDisconnected signal does not arrive to the client.
Code
public class GameManager : Node
{
public static GameManager Instance { get; private set; }
public const int DEFAULT_PORT = 8080;
public const int MAX_PEERS = 12;
public State StateGame = State.Menu;
[Signal]
public delegate void Error(string message);
public override void _Ready()
{
Instance = this;
GetTree().Connect("network_peer_connected", this, nameof(PlayerConnected));
GetTree().Connect("network_peer_disconnected", this, nameof(PlayerDisconnected));
GetTree().Connect("connected_to_server", this, nameof(ConnectedSuccessful));
GetTree().Connect("connection_failed", this, nameof(ConnectedFail));
GetTree().Connect("server_disconnected", this, nameof(ServerDisconnected));
}
private void ServerDisconnected()
{
GD.Print("Тебя выкинуло с сервера");
GetTree().ChangeScene("res://Menu.tscn");
CallDeferred("emit_signal", nameof(Error), "Тебя выкинуло с сервера");
}
public void HostGame()
{
var server = new WebSocketServer();
server.Listen(DEFAULT_PORT, new string[] { "Game" }, true);
GetTree().NetworkPeer = server;
}
public void JoinGame(string ip)
{
var client = new WebSocketClient();
client.ConnectToUrl($"ws://{ip}:{DEFAULT_PORT}", new string[] { "Game" }, true);
GetTree().NetworkPeer = client;
}
}