diff --git a/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs b/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs new file mode 100644 index 00000000..2c53c0ca --- /dev/null +++ b/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs @@ -0,0 +1,67 @@ +using UnityEditor; +using UnityEngine; +using TEngine.Runtime; + +namespace TEngine.Editor +{ + [CustomEditor(typeof(TEngine.Runtime.Network))] + internal sealed class NetworkComponentInspector : TEngineInspector + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (!EditorApplication.isPlaying) + { + EditorGUILayout.HelpBox("Available during runtime only.", MessageType.Info); + return; + } + + TEngine.Runtime.Network t = (TEngine.Runtime.Network)target; + + if (IsPrefabInHierarchy(t.gameObject)) + { + EditorGUILayout.LabelField("Network Channel Count", t.NetworkChannelCount.ToString()); + + INetworkChannel[] networkChannels = t.GetAllNetworkChannels(); + foreach (INetworkChannel networkChannel in networkChannels) + { + DrawNetworkChannel(networkChannel); + } + } + + Repaint(); + } + + private void OnEnable() + { + } + + private void DrawNetworkChannel(INetworkChannel networkChannel) + { + EditorGUILayout.BeginVertical("box"); + { + EditorGUILayout.LabelField(networkChannel.Name, networkChannel.Connected ? "Connected" : "Disconnected"); + EditorGUILayout.LabelField("Service Type", networkChannel.ServiceType.ToString()); + EditorGUILayout.LabelField("Address Family", networkChannel.AddressFamily.ToString()); + EditorGUILayout.LabelField("Local Address", networkChannel.Connected ? networkChannel.Socket.LocalEndPoint.ToString() : "Unavailable"); + EditorGUILayout.LabelField("Remote Address", networkChannel.Connected ? networkChannel.Socket.RemoteEndPoint.ToString() : "Unavailable"); + EditorGUILayout.LabelField("Send Packet", Utility.Text.Format("{0} / {1}", networkChannel.SendPacketCount.ToString(), networkChannel.SentPacketCount.ToString())); + EditorGUILayout.LabelField("Receive Packet", Utility.Text.Format("{0} / {1}", networkChannel.ReceivePacketCount.ToString(), networkChannel.ReceivedPacketCount.ToString())); + EditorGUILayout.LabelField("Miss Heart Beat Count", networkChannel.MissHeartBeatCount.ToString()); + EditorGUILayout.LabelField("Heart Beat", Utility.Text.Format("{0} / {1}", networkChannel.HeartBeatElapseSeconds.ToString("F2"), networkChannel.HeartBeatInterval.ToString("F2"))); + EditorGUI.BeginDisabledGroup(!networkChannel.Connected); + { + if (GUILayout.Button("Disconnect")) + { + networkChannel.Close(); + } + } + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndVertical(); + + EditorGUILayout.Separator(); + } + } +} diff --git a/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs.meta b/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs.meta new file mode 100644 index 00000000..e8a6896d --- /dev/null +++ b/Assets/TEngine/Scripts/Editor/Inspector/NetworkInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19f8ad2cf14a6ba458cc98dd4c9ea0ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Network.cs b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Network.cs index f4b6a290..852eeee5 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/NetWork/Network.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/NetWork/Network.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using UnityEngine; namespace TEngine.Runtime @@ -11,7 +12,7 @@ namespace TEngine.Runtime public class Network : UnitySingleton { private INetworkManager m_NetworkManager = null; - private NetEvent m_NetEvent = NetEvent.Instance; + public NetworkManager NetworkManager; /// /// 获取网络频道数量。 @@ -20,14 +21,42 @@ namespace TEngine.Runtime { get { + if (m_NetworkManager == null) + { + return 0; + } return m_NetworkManager.NetworkChannelCount; } } - public override void Awake() + protected override void OnLoad() + { + base.OnLoad(); + + GameEventMgr.Instance.AddEventListener(TEngineEvent.OnStartGame,OnStartGame); + } + + private void Update() + { + if (m_NetworkManager != null) + { + NetworkManager.Update(Time.deltaTime, Time.unscaledDeltaTime);; + } + } + + protected override void OnDestroy() + { + base.OnDestroy(); + if (NetworkManager != null) + { + NetworkManager.Shutdown(); + } + } + + private void OnStartGame() { - base.Awake(); m_NetworkManager = new NetworkManager(); + NetworkManager = m_NetworkManager as NetworkManager; if (m_NetworkManager == null) { Log.Fatal("Network manager is invalid."); @@ -39,12 +68,8 @@ namespace TEngine.Runtime m_NetworkManager.NetworkMissHeartBeat += OnNetworkMissHeartBeat; m_NetworkManager.NetworkError += OnNetworkError; m_NetworkManager.NetworkCustomError += OnNetworkCustomError; - } - - protected override void OnLoad() - { - base.OnLoad(); - if (m_NetEvent == null) + + if (NetEvent.Instance == null) { Log.Fatal("Event component is invalid."); return; @@ -113,27 +138,27 @@ namespace TEngine.Runtime private void OnNetworkConnected(object sender, NetworkConnectedEventArgs e) { - m_NetEvent.Fire(this, e); + NetEvent.Instance.Fire(this, e); } private void OnNetworkClosed(object sender, NetworkClosedEventArgs e) { - m_NetEvent.Fire(this, e); + NetEvent.Instance.Fire(this, e); } private void OnNetworkMissHeartBeat(object sender, NetworkMissHeartBeatEventArgs e) { - m_NetEvent.Fire(this, e); + NetEvent.Instance.Fire(this, e); } private void OnNetworkError(object sender, NetworkErrorEventArgs e) { - m_NetEvent.Fire(this, e); + NetEvent.Instance.Fire(this, e); } private void OnNetworkCustomError(object sender, NetworkCustomErrorEventArgs e) { - m_NetEvent.Fire(this, e); + NetEvent.Instance.Fire(this, e); } } } \ No newline at end of file