internal void GetPage(int currentPage)
        {
            if (!_loading)
            {
                Console.WriteLine($"Getting page {currentPage}");
                try
                {
                    _loading = true;
                    _multiplayerServerList._pageUpButton.interactable   = false;
                    _multiplayerServerList._pageDownButton.interactable = false;
                    _serverHubConnection = new TcpClient(Config.Instance.ServerHubIP, Config.Instance.ServerHubPort);
                    ClientDataPacket packet = new ClientDataPacket()
                    {
                        ConnectionType = ConnectionType.Client, Offset = _multiplayerServerList._currentPage
                    };

                    _serverHubConnection.GetStream().Write(packet.ToBytes(), 0, packet.ToBytes().Length);
                    StartCoroutine(WaitForResponse());
                    Console.WriteLine("Waiting for response...");
                }
                catch (Exception e)
                {
                    Console.WriteLine($"Exception: {e}");
                    _loading = false;
                    TextMeshProUGUI _errorText = ui.CreateText(rectTransform, "Can't connect to ServerHub!", new Vector2(0f, -48f));
                    _errorText.alignment = TextAlignmentOptions.Center;
                    Destroy(_errorText.gameObject, 4f);
                }
            }
        }
        IEnumerator WaitForResponse()
        {
            yield return(WaitForDoneProcess(5f));

            if (_serverHubConnection.Available <= 0)
            {
                try
                {
                    TextMeshProUGUI _errorText = ui.CreateText(rectTransform, "Can't connect to ServerHub!", new Vector2(0f, -48f));
                    _errorText.alignment = TextAlignmentOptions.Center;
                    Destroy(_errorText.gameObject, 4f);
                    _serverHubConnection.Close();
                    _loading = false;
                }catch (Exception e)
                {
                    Console.WriteLine($"ServerHub Exception: {e}");
                }
                yield break;
            }

            byte[]           bytes  = new byte[Packet.MAX_BYTE_LENGTH];
            ClientDataPacket packet = null;

            if (_serverHubConnection.GetStream().Read(bytes, 0, bytes.Length) != 0)
            {
                packet = Packet.ToClientDataPacket(bytes);
            }

            _serverHubConnection.Close();
            _loading = false;

            _multiplayerServerList.SetServers((packet as ClientDataPacket).Servers);
        }
Пример #3
0
        private IEnumerator RequestPage(int page)
        {
            Connect();
            yield return(new WaitForSecondsRealtime(0.05f));

            ClientDataPacket packet = new ClientDataPacket()
            {
                ConnectionType = ConnectionType.Client, Offset = page
            };

            serverHubConnection.GetStream().Write(packet.ToBytes(), 0, packet.ToBytes().Length);

            yield return(WaitForDoneProcess(15f));

            if (serverHubConnection.Available <= 0)
            {
                try
                {
                    serverHubConnection.Close();
                    ServerHubException.Invoke(this, new Exception("ServerHub is offline"));
                }
                catch (Exception e)
                {
                    Console.WriteLine($"ServerHub Exception: {e}");
                    ServerHubException.Invoke(this, e);
                }
                yield break;
            }

            byte[] bytes = new byte[Packet.MAX_BYTE_LENGTH];

            packet = null;
            if (serverHubConnection.GetStream().Read(bytes, 0, bytes.Length) != 0)
            {
                packet = Packet.ToClientDataPacket(bytes);
            }
            Disconnect();
            ReceivedOnePage.Invoke(packet.Servers, page);
        }