protected virtual async void Start()
        {
            var token = this.GetCancellationTokenOnDestroy();
            await UniTask.Run(_networkHandler.Initialize, cancellationToken : token);

            onConnectCommand.Subscribe(() =>
            {
                if (connectionStatusVariable == ConnectionStatusEnum.Disconnected)
                {
                    connectionStatusVariable.Value = ConnectionStatusEnum.Connecting;
                    _networkHandler.Connect(address).Forget();
                }
            })
            .AddTo(token);

            onDisconnectCommand.Subscribe(async() =>
            {
                await _networkHandler.Disconnect();
                connectionStatusVariable.Value = ConnectionStatusEnum.Disconnected;
            })
            .AddTo(token);

            if (stringMessageSender != null)
            {
                stringMessageSender
                .Where(_ => connectionStatusVariable == ConnectionStatusEnum.Connected)
                .Subscribe(_networkHandler.SendString)
                .AddTo(token);
            }

            if (byteMessageSender != null)
            {
                byteMessageSender
                .Where(_ => connectionStatusVariable == ConnectionStatusEnum.Connected)
                .Subscribe(_networkHandler.SendBytes)
                .AddTo(token);
            }
        }
        /// <summary>
        /// Disconnects from the Minecraft server.
        /// </summary>
        public void Disconnect()
        {
            _networkHandler.Disconnect();

            Dispose();
        }