/// <summary> /// Connects with a given Ip address on a given port. Disables buttons until the connection times out or connects. /// </summary> /// <param name="address"> IP address of the server </param> /// <param name="port"> Port of the server </param> private async void Connect(IPAddress address, int port) { // Unfortunately a lot of code has to battle the following problem: https://github.com/DarkRiftNetworking/DarkRift/issues/81 if (_client.ConnectionState == DarkRift.ConnectionState.Connecting) { try { _client.Disconnect(); } catch (SocketException) { } } SwitchButtonsInteractable(false); _buttonText.text = "Connecting..."; var tokenSource = new CancellationTokenSource(); try { await Task.Run(() => _client.ConnectInBackground(address, port, DarkRift.IPVersion.IPv4, (Exception e) => { HandleConnectionCompleted(e); }), tokenSource.Token); } catch (ArgumentException e) { _errorText.text = "Incorrect Port Number"; tokenSource.Cancel(); HandleConnectionCompleted(null); } }
public override void Shutdown() { shutdown = true; if (drClient.ConnectionState == ConnectionState.Connected) { drClient.Disconnect(); } }
private void QuitGame() { if (_clientInfo.Status == ClientStatus.Host) { _serverManager.CloseServer(); } if (_clientInfo.Status == ClientStatus.Client) { _client.Disconnect(); } }
void Update() { Debug.Log(client.ConnectionState); if (Input.GetKeyDown("space")) { client.Connect(IPAddress.Loopback, 4296, true); } else if (Input.GetKeyDown("z")) { client.Disconnect(); } }
public void LeaveLobby() { if (_clientInfo.Status == ClientStatus.Host) { _serverManager.CloseServer(); } if (_clientInfo.Status == ClientStatus.Client) { _client.Disconnect(); } SceneManager.LoadScene("ConnectionMenu"); }
/// <summary> /// Disconnects the client from the server. /// </summary> public static void Disconnect() { if (!isClient) { return; } Main.Log($"Disconnecting client"); try { client.Disconnect(); } catch (Exception ex) { Main.Log($"[ERROR] {ex.InnerException}"); } }
/// <summary> /// Joins the local server as host without sumbiting the it's IP or port number. /// </summary> public void JoinAsHost() { IPAddress serverAddress = IPAddress.Parse("127.0.0.1"); int port = 4296; // Unfortunately a lot of code has to battle the following problem: https://github.com/DarkRiftNetworking/DarkRift/issues/81 if (_client.ConnectionState == DarkRift.ConnectionState.Connecting) { try { _client.Disconnect(); } catch (SocketException) { } } _client.Connect(serverAddress, port, DarkRift.IPVersion.IPv4); }
void DarkRift_MessageReceived(object sender, MessageReceivedEventArgs e) { using (Message message = e.GetMessage()) using (DarkRiftReader reader = message.GetReader()) { if (OverallStateManager.Instance.OverallState == OverallState.IN_GAME) { if (ClientGameManager.Instance.ClientState == GameStates.GAME_IN_PROGRESS || ClientGameManager.Instance.ClientState == GameStates.WAITING_FOR_PLAYERS) { //game is in progress if (message.Tag == NetworkTags.EntityUpdate) { ClientEntityManager entityManager = ClientEntityManager.Instance; while (reader.Position < reader.Length) { string entityId = reader.ReadString(); string entityTypeId = reader.ReadString(); Entity entity = entityManager.GetEntity(entityId); if (entity == null) { entity = entityManager.CreateEntity(entityTypeId); reader.ReadSerializableInto(ref entity); //must populate entity before registering since registration depends on entity data entityManager.RegisterEntity(entity); } else { reader.ReadSerializableInto(ref entity); } } } else if (message.Tag == NetworkTags.PlayerEventUpdate) { ClientEntityManager entityManager = ClientEntityManager.Instance; while (reader.Position < reader.Length) { string playerEventId = reader.ReadString(); string playerEventTypeId = reader.ReadString(); PlayerEvent playerEvent = entityManager.GetPlayerEvent(playerEventId); if (playerEvent == null) { playerEvent = entityManager.CreatePlayerEvent(playerEventTypeId); reader.ReadSerializableInto(ref playerEvent); //must populate event before registering since registration depends on event data entityManager.RegisterPlayerEvent(playerEvent); } else { reader.ReadSerializableInto(ref playerEvent); } } } else if (message.Tag == NetworkTags.EntityDeath) { ClientEntityManager.Instance.HandleEntityDeath(reader.ReadString()); } else if (message.Tag == NetworkTags.EntityDespawn) { ClientEntityManager.Instance.HandleEntityDespawn(reader.ReadString()); } else if (message.Tag == NetworkTags.PlayerEventEnd) { ClientEntityManager.Instance.HandlePlayerEventEnd(reader.ReadString()); } else if (message.Tag == NetworkTags.CapturePoint) { while (reader.Position < reader.Length) { CapturePoint capturePoint = ClientGameManager.Instance.CapturePoints[reader.ReadUInt16()]; reader.ReadSerializableInto(ref capturePoint); } } else if (message.Tag == NetworkTags.GameState) { ClientGameManager.Instance.UpdateGameState(reader.ReadSerializable <GameState>(), reader.ReadBoolean()); } } if (message.Tag == NetworkTags.ChatMessage) { UIManager.Instance.AddChatMessage(ClientGameManager.Instance.GameState.GetPlayer(reader.ReadString()), reader.ReadString()); } else if (message.Tag == NetworkTags.UnitList) { List <PlayerUnit> playerUnits = new List <PlayerUnit>(); while (reader.Position < reader.Length) { playerUnits.Add(reader.ReadSerializable <PlayerUnit>()); } UIManager.Instance.OnUnitListReceived(playerUnits); } else if (message.Tag == NetworkTags.PlayerJoined) { ClientGameManager.Instance.OnPlayerJoined(reader.ReadSerializable <Player>()); } else if (message.Tag == NetworkTags.PlayerLeft) { ClientGameManager.Instance.OnPlayerLeft(reader.ReadSerializable <Player>()); } } else if (OverallStateManager.Instance.OverallState != OverallState.IN_GAME) { if (waitingToJoin) { if (message.Tag == NetworkTags.GameState) { waitingToJoin = false; OverallStateManager.Instance.LoadGame(reader.ReadSerializable <GameState>(), reader.ReadBoolean()); } } else { if (message.Tag == NetworkTags.FullUnitList) { List <PlayerUnit> playerUnits = new List <PlayerUnit>(); while (reader.Position < reader.Length) { playerUnits.Add(reader.ReadSerializable <PlayerUnit>()); } MainMenuManager.Instance.OnUnitListReceived(playerUnits); } } } if (message.Tag == NetworkTags.Connection) { //Response to join request indicating if our matchmaking ticket was valid if (reader.ReadBoolean()) { IsConnectedToServer = true; //Notify anyone interested that we've completed joining a server Debug.Log("PlayFab: Ticket accepted by server, join completed."); ServerJoinSuccess?.Invoke("PlayFab: Ticket accepted by server, join completed."); } else { Debug.LogError("PlayFab: Ticket rejected by server, disconnecting."); ServerJoinFailure?.Invoke("PlayFab: Ticket rejected by server, disconnecting."); client.Disconnect(); } } } }
/// <summary> /// The client gets disconnected /// </summary> private void OnDisable() => client?.Disconnect();
public override void Shutdown() { shutdown = true; drClient.Disconnect(); }