private async void Connect(string host) { cancelToken = new CancellationTokenSource(); SteamNetworkingSockets.OnConnectionStatusChanged += OnConnectionStatusChanged; try { hostSteamID = UInt64.Parse(host); connectedComplete = new TaskCompletionSource <Task>(); OnConnected += SetConnectedComplete; HostConnectionManager = SteamNetworkingSockets.ConnectRelay <FizzyConnectionManager>(hostSteamID); HostConnectionManager.ForwardMessage = OnMessageReceived; Task connectedCompleteTask = connectedComplete.Task; Task timeOutTask = Task.Delay(ConnectionTimeout, cancelToken.Token); if (await Task.WhenAny(connectedCompleteTask, timeOutTask) != connectedCompleteTask) { if (cancelToken.IsCancellationRequested) { Debug.LogError($"The connection attempt was cancelled."); } else if (timeOutTask.IsCompleted) { Debug.LogError($"Connection to {host} timed out."); } OnConnected -= SetConnectedComplete; OnConnectionFailed(); } OnConnected -= SetConnectedComplete; } catch (FormatException) { Debug.LogError($"Connection string was not in the right format. Did you enter a SteamId?"); Error = true; OnConnectionFailed(); } catch (Exception ex) { Debug.LogError(ex.Message); Error = true; OnConnectionFailed(); } finally { if (Error) { Debug.LogError("Connection failed."); OnConnectionFailed(); } } }
public void Disconnect() { cancelToken?.Cancel(); SteamNetworkingSockets.OnConnectionStatusChanged -= OnConnectionStatusChanged; if (HostConnectionManager != null) { Debug.Log("Sending Disconnect message"); HostConnection.Close(false, 0, "Graceful disconnect"); HostConnectionManager = null; } }