/// <summary>
        /// Orders the server to change to the given scene.
        /// </summary>
        /// <param name="newSceneName">The name of the scene to change to.</param>
        public virtual void ServerChangeScene(string newSceneName)
        {
            if (string.IsNullOrEmpty(newSceneName))
            {
                if (TinyNetLogLevel.logError)
                {
                    TinyLogger.LogError("ServerChangeScene empty scene name");
                }
                return;
            }

            if (TinyNetLogLevel.logDebug)
            {
                TinyLogger.Log("ServerChangeScene " + newSceneName);
            }

            serverManager.SetAllClientsNotReady();
            networkSceneName = newSceneName;

            s_LoadingSceneAsync = SceneManager.LoadSceneAsync(newSceneName);

            TinyNetStringMessage msg = new TinyNetStringMessage(networkSceneName);

            msg.msgType = TinyNetMsgType.Scene;
            serverManager.SendMessageByChannelToAllConnections(msg, DeliveryMethod.ReliableOrdered);
        }
        //============ TinyNetEvents ========================//

        /// <summary>
        /// Called when a connection message is received.
        /// </summary>
        /// <param name="netMsg">The net message.</param>
        protected virtual void OnConnectMessage(TinyNetMessageReader netMsg)
        {
            if (TinyNetGameManager.instance.isClient && TinyNetClient.instance.connToHost.ConnectId == netMsg.tinyNetConn.ConnectId)
            {
                return;
            }

            if (TinyNetGameManager.networkSceneName != null && TinyNetGameManager.networkSceneName != "")
            {
                TinyNetStringMessage msg = new TinyNetStringMessage(TinyNetGameManager.networkSceneName);
                msg.msgType = TinyNetMsgType.Scene;
                netMsg.tinyNetConn.Send(msg, DeliveryMethod.ReliableOrdered);
            }
        }