コード例 #1
0
 public virtual void OnClientSceneChanged(QNetworkConnection conn)
 {
     QClientScene.Ready(conn);
     if (autoCreatePlayer)
     {
         var flag  = QClientScene.localPlayers.Count == 0;
         var flag2 = false;
         foreach (var player in QClientScene.localPlayers)
         {
             if (player.Gameobject != null)
             {
                 flag2 = true;
                 break;
             }
         }
         if (!flag2)
         {
             flag = true;
         }
         if (flag)
         {
             QClientScene.AddPlayer(0);
         }
     }
 }
コード例 #2
0
        public QNetworkIdentity ReadNetworkIdentity()
        {
            var networkInstanceId = ReadNetworkId();
            QNetworkIdentity result;

            if (networkInstanceId.IsEmpty())
            {
                result = null;
            }
            else
            {
                var gameObject = QNetworkServer.active
                                        ? QNetworkServer.FindLocalObject(networkInstanceId)
                                        : QClientScene.FindLocalObject(networkInstanceId);
                if (gameObject == null)
                {
                    Debug.Log($"ReadNetworkIdentity netId:{networkInstanceId}go: null");
                    result = null;
                }
                else
                {
                    result = gameObject.GetComponent <QNetworkIdentity>();
                }
            }
            return(result);
        }
コード例 #3
0
 public void UseExternalClient(QNetworkClient externalClient)
 {
     if (runInBackground)
     {
         Application.runInBackground = true;
     }
     if (externalClient != null)
     {
         client          = externalClient;
         isNetworkActive = true;
         RegisterClientMessages(client);
         OnStartClient(client);
     }
     else
     {
         OnStopClient();
         QClientScene.DestroyAllClientObjects();
         QClientScene.HandleClientDisconnect(client.connection);
         client = null;
         if (!string.IsNullOrEmpty(offlineScene))
         {
             ClientChangeScene(offlineScene, false);
         }
     }
     s_Address = networkAddress;
 }
コード例 #4
0
 private QNetworkClient ConnectLocalClient()
 {
     QLog.Log($"NetworkManager StartHost port:{networkPort}");
     networkAddress = "localhost";
     client         = QClientScene.ConnectLocalServer();
     RegisterClientMessages(client);
     return(client);
 }
コード例 #5
0
 public virtual void OnClientConnect(QNetworkConnection conn)
 {
     if (!clientLoadedScene)
     {
         QClientScene.Ready(conn);
         if (autoCreatePlayer)
         {
             QClientScene.AddPlayer(0);
         }
     }
 }
コード例 #6
0
 public void StopClient()
 {
     OnStopClient();
     QLog.Log("NetworkManager StopClient");
     isNetworkActive = false;
     if (client != null)
     {
         client.Disconnect();
         client.Shutdown();
         client = null;
     }
     QClientScene.DestroyAllClientObjects();
     if (!string.IsNullOrEmpty(offlineScene))
     {
         ClientChangeScene(offlineScene, false);
     }
     CleanupNetworkIdentities();
 }
コード例 #7
0
 internal void RegisterClientMessages(QNetworkClient client)
 {
     client.RegisterHandler(QMsgType.Connect, OnClientConnectInternal);
     client.RegisterHandler(QMsgType.Disconnect, OnClientDisconnectInternal);
     client.RegisterHandler(QMsgType.NotReady, OnClientNotReadyMessageInternal);
     client.RegisterHandler(QMsgType.Error, OnClientErrorInternal);
     client.RegisterHandler(QMsgType.Scene, OnClientSceneInternal);
     if (playerPrefab != null)
     {
         QClientScene.RegisterPrefab(playerPrefab);
     }
     foreach (var gameObject in spawnPrefabs)
     {
         if (gameObject != null)
         {
             QClientScene.RegisterPrefab(gameObject);
         }
     }
 }
コード例 #8
0
        public GameObject ReadGameObject()
        {
            var        networkInstanceId = ReadNetworkId();
            GameObject result;

            if (networkInstanceId.IsEmpty())
            {
                result = null;
            }
            else
            {
                var gameObject = QNetworkServer.active
                                        ? QNetworkServer.FindLocalObject(networkInstanceId)
                                        : QClientScene.FindLocalObject(networkInstanceId);
                if (gameObject == null)
                {
                    Debug.Log($"ReadGameObject netId:{networkInstanceId}go: null");
                }
                result = gameObject;
            }
            return(result);
        }
コード例 #9
0
        public Transform ReadTransform()
        {
            var       networkInstanceId = ReadNetworkId();
            Transform result;

            if (networkInstanceId.IsEmpty())
            {
                result = null;
            }
            else
            {
                var gameObject = QClientScene.FindLocalObject(networkInstanceId);
                if (gameObject == null)
                {
                    Debug.Log($"ReadTransform netId:{networkInstanceId}");
                    result = null;
                }
                else
                {
                    result = gameObject.transform;
                }
            }
            return(result);
        }
コード例 #10
0
 internal void OnClientNotReadyMessageInternal(QNetworkMessage netMsg)
 {
     QLog.Log("NetworkManager:OnClientNotReadyMessageInternal");
     QClientScene.SetNotReady();
     OnClientNotReady(netMsg.Connection);
 }
コード例 #11
0
 private void OnGUI()
 {
     if (ShowGUI)
     {
         var xOffset = 10;
         var yOffset = 30;
         var flag    = Manager.client == null || Manager.client.connection == null || Manager.client.connection.connectionId == -1;
         if (!Manager.IsClientConnected() && !QNetworkServer.active)
         {
             if (flag)
             {
                 if (Application.platform != RuntimePlatform.WebGLPlayer)
                 {
                     if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Host"))
                     {
                         Manager.StartHost();
                     }
                     yOffset += 20;
                 }
                 if (GUI.Button(new Rect(xOffset, yOffset, 105f, 20f), "Connect"))
                 {
                     Manager.StartClient();
                 }
                 Manager.networkAddress = GUI.TextField(new Rect(xOffset + 100, yOffset, 95f, 20f), Manager.networkAddress);
                 yOffset += 20;
             }
             else
             {
                 GUI.Label(new Rect(xOffset, yOffset, 200f, 20f),
                           $"Connecting to {Manager.networkAddress}:{Manager.networkPort}..");
                 yOffset += 24;
                 if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Cancel Connection Attempt"))
                 {
                     Manager.StopClient();
                 }
             }
         }
         else
         {
             if (QNetworkServer.active)
             {
                 var text = $"Hosting on port {Manager.networkPort}";
                 if (Manager.useWebSockets)
                 {
                     text += " (using WebSockets)";
                 }
                 GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), text);
                 yOffset += 20;
             }
             if (Manager.IsClientConnected())
             {
                 GUI.Label(new Rect(xOffset, yOffset, 300f, 20f), $"Connected to {Manager.networkAddress}, port {Manager.networkPort}");
                 yOffset += 20;
             }
         }
         if (Manager.IsClientConnected() && !QClientScene.ready)
         {
             if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Client Ready"))
             {
                 QClientScene.Ready(Manager.client.connection);
                 if (QClientScene.localPlayers.Count == 0)
                 {
                     QClientScene.AddPlayer(0);
                 }
             }
             yOffset += 20;
         }
         if (QNetworkServer.active || Manager.IsClientConnected())
         {
             if (GUI.Button(new Rect(xOffset, yOffset, 200f, 20f), "Stop"))
             {
                 Manager.StopHost();
             }
             yOffset += 20;
         }
     }
 }